📄API取得のデータ構造

普段見慣れたレポートの形ではなくJSON形式で取得されます。 JSON形式は { key: value }の形で表現されたデータ構造です。

レポートのJSON構造

キー説明
idString20文字で構成されるランダムな文字列です。ユニークです(厳密には異なるが考慮の必要はない)
noNumberまたはNullレポートに採番された番号です。連番はレポート作成後に非同期で振られるためタイミングによってはNull
bodyObjectレポート文書本体
createTsNumber13桁の数値(ミリ秒含むUnixタイムスタンプ)。レポートがサーバに初回保存された時刻
updateTsNumber13桁の数値(ミリ秒含むUnixタイムスタンプ)。レポートが最後に更新された時刻
userTsNumber13桁の数値(ミリ秒含むUnixタイムスタンプ)。レポート作成者が指定した表示上の日時
distIdString今現在そのレポートを承認・棄却出来る権限のスタッフID
distsString配列レポートの提出先スタッフIDの配列です。配列の序列順に承認を行います。承認や棄却ができるのは上記のdistIdに一致したスタッフのみ
observerString配列そのレポートを読むことができるスタッフのID郡です。承認や棄却の権限はありません。
readedString配列そのレポートを読んだフラグを立てたスタッフIDの配列です。承認や棄却をしたスタッフもreadedに含まれます
tagsString配列レポートに付けられたタグのID配列
signコレクション承認や棄却日時を記録したコレクションです。コードで書くと sign:{ uid: string, ts: number, agree: boolean}[]です。承認した日時や承認者IDを確認可能
stateString承認・棄却・修正・新規・進行 いづれかの文字
ownerStringレポートを作成したスタッフのID。共用を使うときに作成者IDとしてセットされる。共用を使わない場合は後述する「account」と常に同じ値が入る
accountStringレポートを作成したFirebase上のユーザID
templateIdStringそのレポートを作成するために使用されたテンプレートのID
taskIdStringレポートと予定を紐付けられたとき、予定のIDがセットされる

以下は実際にAPIを使ってロードしたレポートのデータのサンプルです。

{
  "readed": ["mMSejOQa21d9OtXo1BtjFzrEt6J3"],
  "id": "V9MGSesp0LUgXUPo0Skv",
  "taskId": "none",
  "no": 3,
  "tags": [],
  "owner": "mMSejOQa21d9OtXo1BtjFzrEt6J3",
  "updateTs": 1659400505426,
  "account": "mMSejOQa21d9OtXo1BtjFzrEt6J3",
  "templateId": "uDE74jrGtn90vZZqsaci",
  "distId": "mMSejOQa21d9OtXo1BtjFzrEt6J3",
  "userTs": 1659400505425,
  "sign": [],
  "createTs": 1659400505426,
  "body": {
    "B2x": "あお",
    "SAl": ["いちご","ごはん","餃子","干瓢"],
    "1ST": ["餃子","うどん","焼きそば","牛乳","ごはん"],
    "N70": ["いちご","干瓢","メロン"],
    "iif": "あか"
  },
  "observer": ["mMSejOQa21d9OtXo1BtjFzrEt6J3"],
  "dists": ["mMSejOQa21d9OtXo1BtjFzrEt6J3"],
  "state": "新規"
};

テンプレートのJSON構造

キー説明
tsNumberテンプレートが作成された日(ミリ秒含むUnixタイムスタンプ)
prefixString文書番号の前に付される記号。初期値は"No."
activeBooleanテンプレートが有効な場合はTrue。無効にするとFalse
memoStringテンプレート自体に付されたメモ。初期値は"テンプレートメモ"
nameStringテンプレートの大見出し
norumaNumber?1日あたりの提出枚数目安。初期値は0
idStringテンプレートのID
tagsString[]テンプレートに付与したタグのID
bodyCollectionテンプレートの本体とも言える項目。詳細は次章

テンプレート内のBody構造

Bodyはテンプレートの入力フォームを束ねたオブジェクトでCollection(オブジェクトの配列)の構造をしています

キー説明
labelSizeString見出しの文字サイズ。label_sのような値が入る
labelString見出しの文字列
keyString入力のデータとテンプレートを紐付けるための鍵。この値がレポート本体データ上のKeyとして使用される
labelColor見出しの色
reqBoolean入力必須ならTrue
typeString文字入力や数値入力など、データの構造に応じた値が入る
wNumberテンプレートで専有する幅 1〜12
anyanyその他、入力フォームに応じて必要なパラメータが追加されます…

テンプレートとレポート本文の対応

例えば次のようなテンプレートがあったとします。説明のためBodyのみで、かつ内容も大幅に簡略化しています。

"body": [
  {
      "label": "今日の夜食",
      "key": "N70",
      "type": "text",
      "w": 4
  },
  {
      "label": "担当職員名",
      "key": "1ST",
      "type": "text",
      "w": 4
  },
  {
    "label": "スコア",
    "key": "A4x",
    "type": "number",
    "w": 4
  }
]

このテンプレートを使って作成されたレポートのBodyは次のようになります

"body": {
  "N70": "やきうどん",
  "1ST": "長谷川研究員",
  "A4x": 100
}

テンプレート上の keyが、レポート本文のキーとして使われています。