はじめに
kintoneで月別グラフを表示したいという場合は、日付フィールドや月をドロップダウンにするなどのフィールド構成にすることが多いと思います。
この場合によく言われるのが、
「一覧画面で金額を横に並べて表示させたいんだよね」
というケースです。
↑こういう並びで入力したとしても、表示するのは下のような並び↓
この場合、アプリを2つ用意して片方のアプリに入力するともう片方を自動更新という動きであれば可能と思います。
双方向の更新だと複雑になるので、今回は月別アプリ(明細アプリ)に入力すると年別アプリ(部門年別アプリ)に転記するようなカスタマイズを作成します。
今回のカスタマイズで出来ること
明細アプリのレコードを保存すると、部門年別アプリの該当フィールドに転記します
明細レコードは、年、月、部門、項目、と金額で構成されています
部門年別アプリは、年と部門と項目別の組み合わせ別に1レコードになります
アプリ構成
2つのアプリにはそれぞれ以下のように作成しました。
明細アプリ
フィールド
部門年別アプリ
フィールド
金額01月〜金額12月までは、月が変わるだけなので省略します。
Customineの設定
今回のカスタマイズは「明細アプリ」の「kintoneアプリのWebhook」で作成します。
全体の設定はこのようになります。
それでは、動き別に説明していきます。
接続とレコード取得部分
「Webhook を開始した時」に「kintone 接続設定を行う」を2つ作成し、明細アプリと部門年別アプリの接続設定を行います。
次に「Webhook から渡されたレコードを取得する」で明細アプリで保存されたレコードを取得します。
部門年別アプリへ追加及び更新をするための部分
「レコード1行が準備できた時」に「キーの値をもとにレコードを更新または追加する」で値が変わらないフィールドだけセットしておきます。
これで、後続のアクションではレコードが存在する前提で処理を作成することができます。
金額を指定月のフィールドにセットする部分
「他のアクションの実行が完了した時」に「キーを指定してレコードを取得する」で先ほど追加or更新したレコードを取得します。
この時のキーとなるフィールドはレコード番号ではなく何かのフィールドを指定してください。また、フィールドは基本的に重複禁止にしておき更新対象が1レコードになるようにしてください。
その後、「レコード1行が準備できた時」に「フィールド値をまとめてセットする」のマッピングで指定の月にだけ明細レコードの金額をセットできるような式を入力します。
例えば、金額01月は次のようになります。
= if $6[0].月 = "01", $6[0].金額, 金額01月)
これを1月から12月まで月の数値を変えてセットしてください。
式の内容を説明すると、明細アプリのレコードは6番で取得しているので月フィールドの値が同じ場合だけ金額をセットし、そうでなければ元の値をセットします。
こうすると変更がある月のフィールドにだけ値がセットできます。(同値の場合はCutomine側でチェックして更新対象になりません)
以上で、Customineの設定は終わりです。
Customineの設定が終わったら、明細アプリのWebhookに以下のように、
・レコードの追加
・レコードの編集
にチェックを入れて有効にしてください。
以上で、設定は完了です。
明細アプリのレコードを保存してお試しください。
上級者向けの補足
今回のカスタマイズは、以下のように3番のアクションまでで作成することも可能です。
しかし、数値フィールドを必須にしていると、明細アプリで入力していない月のフィールドに値が入らないのでレコード追加時にエラーになります。
>'message': '入力内容が正しくありません。', 'errors': {'record.金額09月.value': {'messages': ['必須です。']}
そこで、エラーにならないようにマッピングの式を修正するとこうなります。
= if($6[0].月 = "01", $6[0].金額, if(@out.金額01月= "", 0, @out.金額01月))
式の1つ1つ(if関数や、@out. の指定)は難しくないとは思いますが、組み合わさった結果長くなっているので入力間違いしやすいかもしれません。
ただ、こうするとAPIリクエストが減る(4番と5番のリクエストが不要になる)ので処理時間も早くなります。
(動作環境にもよりますが、手元の実験では 1.2秒→0.8秒 程度の変化がありました)
まとめ
「kintoneアプリのWebhook」を使うと、レコード保存時に連携したデータコピーが可能です。また、マッピングの式を工夫すると簡単な条件分岐も可能ですので、色々とお試しください。