読者です 読者をやめる 読者になる 読者になる

CRUD Lab. Tech Blog

ギークス株式会社の沖縄開発拠点CRUDLab. (クラッドラボ)のIT技術(テック)ブログ。kintoneやAngularJSによる開発を行っています。

【kintone】物品購入申請アプリでプロセスステータスをリストアする方法

kintone

1. 概要

ギークス株式会社CRUD Lab.まとめ役の、ATSUSHIです。

先日、アプリデータのリストア作業をしていてどハマりしてしまい、サイボウズの担当者の方にご指摘いただきなんとか切り抜けました。

kintoneアプリはcsv形式のファイルでレコードの書き出し/読み込みができます。 ただ、フィールドコードの形式やアプリの設定によっては気をつけるべき点がいくつかあります。 その中で今回はプロセスステータスのリストア方法についてお話します。

- 参考資料


2. プロセスステータスのリストア方法

kintoneのcsv出力機能では、アプリの各レコードで管理している全ての情報を書き出すことができますが、逆に読み込みできない情報があります。 その内の一つが、プロセス管理機能で実装されているレコードのステータス(処理状況)になります。

f:id:crud_lab_editor:20160226092955p:plain ※ 本稿では上記の図のように用語を定義します。

プロセス管理機能を使うことで、各レコードに対してワークフローを設定することができます。 ワークフローには[状態]に応じて[作業者]が割り当てられ、この仕組みで業務を進行するためのバトンリレーが行うことができます。

1つのレコードに対して「いつ、誰が、何をしたか」という行動を記録しているのがプロセス管理機能なので、csvで管理するのは難しそうですが、restful apiを組み合わせることで対処が可能になります。

「レコードのステータスの更新」 https://cybozudev.zendesk.com/hc/ja/articles/204791550

現状、私が行っているリストア方法は以下の手順になります。

  • csvをアプリに読み込み
  • プロセスステータスをrestful apiで更新

※ プロセスステータスの更新においては注意が必要です。
以下で具体的に説明していきます。


3. 実践

今回はシンプルなワークフロー機能を実装した物品購入申請アプリを利用して上記の手順を説明していきます。

アプリの設定

まずはアプリをセットアップしていきます。 購入希望者が品目を登録 / 申請し、管理者が承認 / 物品購入を行うシンプルな仕組みとなっています。

- フォーム
フィールド名 フィールドコード 初期値 その他
商品名 item_name -- --
金額(税抜き) price -- --
金額(税込) price_with_tax -- 計算式:fc_num*1.08
備考 memo -- --
- リストアをする

上記の設定で2件ほどテストデータを登録しました。 「MacBook Air」「ディスプレイモニター」の購入申請があげられ、
それぞれのプロセスステータス(状態)は「完了」「処理中」となっています。

  • MacBook Air :【完了】→ 購入が完了している状態
  • ディスプレイモニター :【処理中】→ 申請中で管理者が対応を行っている状態

このデータをcsv形式でダウンロードしてスプレッドシートで開いた状態が以下になります。
プロセスステータスが文字列の情報として記録されていることが分かります。

f:id:crud_lab_editor:20160225181027p:plain

このcsvファイルを読み込んだ後にrestful apiでプロセスステータスの反映を行っていきます。

プロセスステータス更新のapiは以下の形式をとります。

URL
https://(サブドメイン名).cybozu.com/k/v1/record/status.json
{
  "app": [アプリID],
  "id": [レコード番号],
  "action": [アクション名],
  "assignee": [作業者], // option
  "revision": [リビジョン] // option
}

私達のチームでは、restful apiをphp経由で実行しています。 この処理で気をつけるべき点は、上記のjsonにある"action"の項目です。 プロセスステータスの情報を指定するのではなく、アクションを指定してapiを実行します。

今回の例では、レコードの状態を「処理中」にしたい場合は、
処理中にするためのアクションである「申請する」を指定します。

{
  "app": [アプリID],
  "id": 1,
  "action": "申請する" // 「処理中」は指定しない
}

f:id:crud_lab_editor:20160225180852p:plain

ドキュメントをしっかりと噛み砕けばわかることのなのですが、
私はこの「プロセスステータスではなくアクション名を指定する」仕組みに気づくのに相当時間を費やしてしまいました。。。


4. まとめ

今回はプロセスステータスの反映方法について説明しました。 kintoneは気軽に誰でも構築できる反面、少々込み入った対応をする場合には工夫が必要になります。 また、こういった仕組みを誰でも使えるように多くのデベロッパーが活躍しているのでkintone開発においては日々の情報収集が欠かせません。