kintoneのステータス履歴を使いやすく

こんにちは。金田です。
普段はBacklog助っ人としてこちらのブログでBacklogのカスタマイズなどを記事にしています。(最近業務に押されてちょっと更新が停滞気味ですが・・・)
今回はkintoneでステータス履歴をもっと使いやすくカスタマイズする方法をご紹介してみようと思います。
そもそもステータス履歴とは?という方に向けて念のため少し説明しておくと、kintoneには「プロセス管理」 (いわゆるワークフロー機能) を有効にすると、下図のようにステータス履歴が記録されます。これによって、いつ・だれが承認したかの記録が残るというものです。

ステータス履歴

ところが、例えばこれをAPIを通して取得したり、「ファイルに書き出す」機能で出力したりすることができません。
従って、「あるアプリで○月○日から×月×日までにステータスが『作成中』に更新されたレコードを抽出する」といったことができないのです。

これだとちょっと不便ですよね。

そこで、私の担当する案件では「ステータス変更の履歴を集約するアプリ」を作成し、各アプリでのステータス操作を全て記録することにしました。

※. 今回の記事はエンジニアの方向けの記事となります。もし「内容は気になるけどカスタマイズはちょっと・・・」とお考えの方は、是非左の「お問い合わせ」メニューをクリックしてお問合せください。

用意するもの

用意するものは下記2点だけです。

  1. ステータスを集約するためのアプリ (以下、ステータス履歴アプリ)
  2. 各アプリに配置するJavaScript

1. ステータス履歴アプリ

まずはステータスを集約するためのステータス履歴アプリを作成しましょう。

構造は単純です。下図のようなフォーム (一例です) を作成します。

ステータス履歴アプリの配置例
  • アプリID:文字列(1行)
  • レコードID:文字列(1行)
  • 変更日時:日時
  • 変更前ステータス:文字列(1行)
  • 変更者:文字列(1行)
  • 対象レコード:文字列(1行)

ここでのポイントは、このステータス履歴アプリ側からどのアプリのどのレコードで操作が行われたか容易に確認できるように、「対象レコード」フィールドを配置している点です。
少し細かく解説していきましょう。

「対象」フィールドには下記の計算式を設定しています。

「対象フィールド」の設定

"https://{サブドメイン}.cybozu.com/k/" & アプリID & "/show#record=" & レコードID

こうしておくことで、ステータス操作のあったレコードへの導線をURLとして記録することができます。(アプリIDとレコードIDについては後述のJavaScriptから記録します。)

2. JavaScript

続いて、プロセス管理を行うアプリに配置するJavaScriptを作成します。JavaScript内では下記のような処理を行います。

  • eventオブジェクトより、レコードID・変更前と変更後のステータス・更新日時および更新者を取得
  • ステータス履歴アプリに対して上記から作成したrecordデータをPOST

エンジニアの方であれば「なんだ、その程度か・・・」という内容かと思います。
下記に実装例を掲載しておくので参考にしていただければ幸いです。
※. 下記はあくまで実装例です。動作を保証するものではありません。

    kintone.events.on([
        'app.record.detail.process.proceed'
    ], (event) => {
        const data = {
            アプリID: { value: kintone.app.getId() },
            レコードID: { value: event.record.$id.value },
            変更日時: { value: event.record.更新日時.value },
            変更前ステータス: { value: event.status.value },
            変更後ステータス: { value: event.nextStatus.value },
            変更者: { value: event.record.更新者.value.code }
        }

        const params = {
            app: 73, // ステータス履歴のアプリID
            record: data
        };

        return kintone.api(kintone.api.url('/k/v1/record.json', true), 'POST', params)
        .then((resp) => {
            return event;
        }, (e) => {
            console.log(`error: ${e}`);
            return event;
        });
    });

実際にJavaScriptを介して記録されたレコードが下図です。「対象レコード」がきちんとリンクになっていることが確認いただけるかと思います。

記録されたレコードの様子

まとめ

いかがでしたでしょうか。こうした仕組みを作っておくことで、ステータス履歴アプリからアプリIDや変更者などでステータスの変遷を検索することもできますし、CSVに出力すれば加工も容易になります。
プロセス管理を行うアプリ側に関連レコードとしてこのステータス履歴アプリを指定しておけば、ステータスの変遷を常に可視化しておくことも可能です。
是非お試しください。

助っ人サービス for kintoneのお問い合わせはこちら backlog助っ人サービス おっと発見OTTO