Job Runnerを使うと、レコードを取り扱うのと同じ要領で、テーブル行を取り扱う事ができます。
この記事では具体的な例として、「日報」アプリのテーブルに記録された対応履歴を、「顧客別対応履歴」アプリのレコードと同期するカスタマイズについてお伝えします。
今回のカスタマイズで用いるアプリ
注:この記事で用いるアプリは、カスタマインの歩き方 カスタマイズお試し用ファイルダウンロード の Job Runner 編にアプリテンプレート、サンプルデータがありますので、そちらをご利用頂く事もできます。
はじめから自分でアプリを作成したい場合は、次のようにアプリを作成してください。
※本カスタマイズに影響のあるフィールドのみ記載しています
日報アプリ
※フィールド名とフィールドコードは同じものを指定します
アプリのデータ例は次のようなものです。
顧客別対応履歴アプリ
※フィールド名とフィールドコードは同じものを指定します
アプリの初期データは不要です(このアプリに追記・更新する処理のため)。
顧客マスタアプリ
※フィールド名とフィールドコードは同じものを指定します
アプリのデータ例は次のようなものです。
アプリのAPIトークン設定
今回のカスタマイズを実行するためには、kintoneアプリにAPIトークンを作成し、アクセス権を設定する必要があります。
日報アプリ
※「レコード閲覧」権限を設定
顧客別対応履歴アプリ
※「レコード閲覧」、「レコード追加」、「レコード編集」権限を設定
顧客マスタアプリ
※「レコード閲覧」、「レコード編集」権限を設定
カスタマイズの全体像
カスタマイズの全体像は次のようになります。
また、今回のカスタマイズの要件は次のようになります。
『日報』アプリのテーブルに記録された顧客ごとの対応履歴を、『顧客別対応履歴』アプリにレコードとして登録し、同期する
『日報』アプリのテーブルには、顧客別の対応履歴以外の明細も存在するが、『顧客別対応履歴』アプリと同期するのは『顧客コード』フィールドに値が入っている行のみ
『顧客別対応履歴』アプリの『顧客コード』フィールドは、ルックアップフィールドを使用している
『日報』アプリのテーブルに『明細番号』フィールドを作成し、報告日と報告者のログイン名と連番を結合した「20220927customine01」のような値を設定しています。この値は、『日報』アプリ内で一意になるように設定しており、『顧客別対応履歴』のレコードと同期をとる際のキー(お互いを結び付け、識別するための値)として使用します。
『顧客別対応履歴』は下記のような結果となります。『日報』アプリの明細番号が「20220927customine01」の行は、顧客コードフィールドが空欄のため『顧客別対応履歴』アプリには同期されません。
それではカスタマイズを見ていきます。
接続設定を行う
まずは、やること「kintone 接続設定を行う」で『日報』『顧客別対応履歴』、そして『顧客マスタ』アプリに接続します。
ここでなぜ『顧客マスタ』アプリの接続が必要かについては、本記事の下部のコラム『ルックアップフィールドに値をセットするときは』をご確認ください。
また、やること「kintone 接続設定を行う」ではkintoneアプリのAPIトークンがそれぞれ必要となります。これは上の「アプリのAPIトークン設定」で記載したトークンをそれぞれ設定して下さい。
コピー元アプリの全レコードを取得する
次に、『日報』アプリから全レコードを取得します。
やること「全レコードを取得する」を用います。
日報アプリのレコードは下記のようになっていますので、アクション3ではレコード番号2、3の全レコードが取得されます。
レコード1行毎のテーブル行を取得する
次のアクションでは、やること「テーブル行をレコードとして取得する」を条件「レコード1行が準備できた時」で実行します。
パラメーター「レコード取得アクション」には「3」を指定し、アクション3で取得した『日報』アプリの全レコードから1レコードずつ取り出して処理を行う事ができます。
テーブル行1行毎に同期処理を行う
次に、レコードとして取得したテーブル行ごとの処理を行っていきます。
やること「レコードをもとに別のレコードを更新または追加する」を条件「レコード1行が準備できた時」で使用して、テーブル行を1行ずつ『顧客別対応履歴』アプリのレコードと同期をとります。
なお、やること「レコードをもとに別のレコードを更新または追加する」は、パラメーター「追加または更新先アプリ」に指定したアプリに、パラメーター「キーとなる更新先のフィールド」の値が一致するレコードがあればレコード更新、なければレコード追加を行う「やること」です。
今回は、『日報』アプリの『明細番号』フィールドと、『顧客別対応履歴』アプリの『日報明細番号』フィールドの値をキーに同期を行うよう設定しています。
アクション5の設定でポイントとなるのは、条件「フィールド値が空でないならば」です。アクション5では、条件「レコード1行が準備できた時」を指定しているため、アクション4で取得したテーブル行を1行ずつ扱う事ができます。そのため、アクション5の条件の意味は、アクション4で取得したテーブル行の『顧客コード』フィールドの値が空でない場合のみ、アクションを実行する、となります。
今回の例では、「20220927customine01」の上司面談の行は顧客コードが空ですので、この行についてはアクション5は実行されません。
全体の各アクションの流れと、アクションで扱うレコード(テーブル行)は下記の通りです。
以上が、テーブル行と別のアプリのレコードの情報を同期するカスタマイズです。今回は定期実行タスクのカスタマイズで作成したため、たとえば夜のうちに活動履歴を作成し、翌朝には最新化されている、といった運用が想定されます。
Job Runnerの処理では、テーブル行は基本的にやること「テーブル行をレコードとして取得する」でレコードとして取得し、続くアクションではレコードとほぼ同じように扱う事ができます。
また、Job Runnerではテーブルに関するやることがkintoneアプリの画面のカスタマイズと比較して少ないのですが、これはやること「テーブル行をレコードとして取得する」でレコードとして取得すれば、その後の処理はレコード用のやることで対応可能であるためです。
コラム:ルックアップフィールドに値をセットするときは
Job Runnerの処理でルックアップフィールドに対して値をセットする際は、ルックアップ
フィールドの「関連付けるアプリ」に指定したアプリについても、やること「kintone 接続設定を行う」で接続を行う必要があります。kintoneはルックアップフィールドに値がセットされると「関連付けるアプリ」に指定したアプリからフィールドの値の取得を行うため、その際に使用するための接続設定が必要となります。
カスタマイズでは下記のように指定します。
kintone 接続設定を行った上で、やること「レコードをもとに別のレコードを更新または追加する」などのレコードを追加・更新するやることのパラメーター「追加または更新先アプリのAPIトークン」に、レコードの更新・追加先アプリのkintone 接続設定に加え、ルックアップの「関連付けるアプリ」に対するkintone 接続設定も共に指定します。
下記のように、パラメーター「追加または更新先アプリの API トークン」の選択で複数のやること「kintone 接続設定を行う」のアクションを指定できます。
この点は、指定した日時にルックアップフィールドとテーブルを含むレコードを追加する にも詳しく書いてありますので、併せてご覧ください。
おわりに
この記事では、テーブル行と別のアプリのレコードの情報を同期するカスタマイズについてお伝えしました。
Job Runnerではテーブル行もレコードと同様の操作で操作していただける事を、ご確認いただけたかと思います。
レコードの更新は簡単にできる分、思いもよらない大量のレコードを、意図しない内容で更新したりすることもできてしまうものです。
実際にカスタマイズを作成される際には、Job Runnerテスト実行 を使ってテストするか、テストアプリとテストデータでよくテストを行った上で、実際のアプリ・運用に適用していくことをおすすめします。
ご不明な点がございましたら、チャットでお問い合わせください。
Customineドキュメントやサポートページも、ぜひご活用ください。