ルックアップの関連付けるアプリ(下記の「商品マスタ」アプリ)で、他のフィールドのコピーに指定されているフィールド(下記の「商品名」フィールド)の値が変わったとき、自動的にルックアップを再取得したい、といったルックアップの更新を行いたいことはよくあると思います。
こういった場合、Customine では「他アプリのルックアップを取得しなおす」というやることで、ルックアップの再取得を行う事が可能です。
このやることの使い方は、 ルックアップコピー先の自動更新をするkintoneのカスタマイズ のページをご覧ください。
ただ、「他アプリのルックアップを取得しなおす」は、テーブル内のルックアップフィールドには使用できません。
そのため、下記のようなアプリでルックアップの再取得を行いたい場合、このやることでは実現できないのです。
この記事では、ルックアップの関連付けるアプリが更新されたら、そのアプリと関連付けられたテーブル内のルックアップを gusuku Customine Job Runner の「kintone アプリの Webhook のカスタマイズ」を使って再取得するカスタマイズをご紹介します。
なお、このカスタマイズを実行する場合、テーブル内のすべての行のルックアップが再取得されますので、ご注意ください。
たとえば、上記のテーブルの ”酢昆布” が ”超酢昆布” にマスタ側で変更された場合に、”超酢昆布”の行だけでなく、”干し梅”の行も一緒に再取得されます。
kintone アプリの設定
フィールド名とフィールドコードは同じに設定しました。
カスタマイズの概要
今回のカスタマイズは、下記の流れで処理を行います。
「商品マスタ」アプリで、レコードの編集が行われたタイミングで、kintone の Webhook の通知を発生させる
kintone アプリの Webhook のカスタマイズで 1 のレコードを受け取り、テーブル内のルックアップを更新する
⇒テーブル内のルックアップフィールドを同じ値で上書きすることでルックアップの再取得を行う
1 は、kintone アプリの設定で、レコードの編集が行われた時に Webhook の通知を発生させる設定を行います。
2 は カスタマインによるカスタマイズで、 kintone アプリの Webhook のカスタマイズで作成します。
なお、kintone アプリの Webhook のカスタマイズが初めての方は、下記のページもご覧ください。
はじめてのWebhookカスタマイズ : 関連レコードの集計
カスタマインのカスタマイズ
まずは、 kintone アプリの Webhook のカスタマイズ を作成します。
各アクションについて説明します。
まずは、テーブルを持つアプリ「商品マスタ」アプリの kintone アプリの Webhook のカスタマイズを作成します。
kintone アプリの Webhook のカスタマイズを作成する際は、処理のきっかけとなるアプリを対象にしてカスタマイズを作成してください。
今回は、商品マスタアプリでレコードが更新された時に、更新されたレコードをもとに別のアプリを更新したいので、商品マスタのレコード更新が処理のきっかけです。従って、「商品マスタ」アプリのカスタマイズを作成します。
「テーブル内にルックアップ」アプリと、「商品マスタ」アプリに「kintone 接続設定を行う」で接続します。
条件は「Webhook を開始した時」です。
kintone アプリの API トークンに必要な権限は下記です。
接続設定の後は、「Webhook から渡されたレコードを取得する」でレコードを受け取ります。
ここで受け取るレコードは、後述の kintone アプリのカスタマイズ で指定します。
Webhook から渡されたレコードには、商品マスタで変更されたレコードが入っています。
レコード内の商品コードを条件に、「テーブル内にルックアップ」アプリからレコードを取得します。
ここで条件に指定するフィールドは、ルックアップフィールドの設定で「コピー元のフィールド」に指定したフィールドです。
やることは「条件を組み立ててレコードを取得する」、条件は「レコード1行が準備できた時」です。
「条件を組み立ててレコードを取得する」の検索条件には、下記のように指定しました。
このアクションで、「テーブル内にルックアップ」アプリのレコードのうち、
テーブル内の「商品コード」に商品マスタで更新されたレコードの「商品コード」と一致する値を持つレコードが取得されます。
下記の例では、「商品マスタ」アプリで商品コード「A003」のレコードが更新されると、「テーブル内にルックアップ」アプリの商品コードが「A003」のテーブル行をもつレコードが取得され、ルックアップの再取得の対象となります。
レコードが取得できたら、そのレコード内のテーブルをレコードとして取得します。
やることは「テーブル行をレコードとして取得する」、条件は「レコード1行が準備できた時」です。
最後に、レコードとして取得したテーブル行内のルックアップフィールド「商品コード」を、同じ値で上書きします。
kintone の仕様で、ルックアップフィールドの値が同じ値でも上書きされれば、ルックアップは再取得されますので、この動きを利用します。
やることは「フィールドに値をセットする」で、セット先レコードには「テーブル行をレコードとして取得する」のアクション5、セット先となる「フィールド」と「値」には、どちらも商品コードフィールドを指定します。
条件は「レコード1行が準備できた時」です。
以上で、kintone アプリの Webhook のカスタマイズは完成です。
「ジョブ生成・設定」ボタンをクリックし、生成されたURLを確認します。
「URLをコピー」ボタンを押し、URLをコピーしてください。
この URL を kintone アプリに登録することで、”kintoneアプリでレコードが編集されたとき、この URL に Webhook の通知を送る”という設定ができます。
商品マスタアプリの アプリの設定>Webhook>Webhookの追加 を開き、kintone アプリの Webhook の設定を追加します。
下記のように設定し、「アプリを更新」してください。
以上で、カスタマイズとkintoneアプリの設定は全て完了です。
商品マスタアプリのレコードを保存してみてください。
少しタイムラグがある場合がありますので、一呼吸おいてテーブルのルックアップが再取得されているか確認してみてください。
なお、kintone の Webhook のカスタマイズが動いていないと思われる場合は、下記の2つの画面を確認してみてください。
kintoneアプリでWebhookの通知が発生したかどうか確認する
この場合、kintone アプリの設定画面で確認できます。
設定画面の「Webhook」から、確認したいWebhookの設定の「ログを確認」をクリックしてください。
ここにログが記録されていなければ、Webhookは通知されていません。
Webhookの設定や、kintone での操作を確認してください。
通知がされていれば、下記の画像のように履歴が表示されますので確認してみてください。
なお、今回のカスタマイズは、このkintone側のWebhookの通知が送られなければ絶対に実行されません。
ですのでまずは、ここに通知の履歴が記録されている事を確認してください。
カスタマインのカスタマイズがエラーなく動作したか確認する
こちらは、カスタマインの「ジョブ生成・設定」ボタンを押し、ジョブ設定画面の「実行履歴」タブで確認できます。
エラーがあれば、「エラー」にエラーメッセージが表示されます。
エラーの内容を確認し、必要であればカスタマイズや設定の確認を行ってください。
下記のように、エラーに何も表示されず、「終了」に処理の終了日時が表示されていれば、処理は問題なく完了しています。
以上です。
質問がありましたら、チャットでお待ちしています!