指定した期間のレコードをまとめて作成したい場合、やること「日付の範囲からレコードを追加する」で1日につき1レコードを作成することができます。
ただ、1ヶ月につき1レコードを作成するやることはない(2021年12月16日現在)ため、カスタマイズで実現してみます。
kintoneアプリの構成
今回は、下記の2つのアプリを使用します。
レコード作成範囲の日付アプリ
レコードを作成したい月の範囲を指定するための、「開始日付」「終了日付」というフィールドをもつアプリです。
フィールドに値を入力する際は、日は常に「1日」を指定するようにしておきます。
kintone アプリのカスタマイズで、やること「年月選択フィールドを作成する」を使用すると常に日は1日になるため、このカスタマイズと組み合わせて使用すると日を意識せずに入力できます。
レコード作成範囲アプリ
ひと月ごとのレコードを作成するアプリです。
今回はシンプルに、日付フィールドを一つだけ配置しています。
カスタマイズ
Job Runner の定期実行タスクのカスタマイズを作成します。
Job Runnerのカスタマイズが初めての方は、下記のページもご覧ください。
Job Runnerを利用するとき、初めにすること : ジョブへのスロット割り当てについて
はじめての gusuku Customine Job Runner : 年齢計算のカスタマイズ
まずは、二つのアプリに対する接続設定を やること「kintone 接続設定を行う」で行います。
kintone アプリのAPIトークンのアクセス権の設定は、レコード作成範囲の日付アプリはレコード閲覧のみ、レコード作成範囲アプリはレコード閲覧とレコード追加の権限を指定しておきます。
カスタマイズの起点となるアクションの条件は「実行予定時刻になった時」、続くアクションの条件は「他のアクションの実行が完了した時」を指定して繋げておきます。
次に、レコード作成範囲の日付アプリから、開始日時と終了日時の値が入ったレコードを取得します。
今回はやること「キーを指定してレコードを取得する」でレコード番号をキーにレコードを取得していますが、適宜適切なやることやキーに読み替えてください。
ここでポイントになるのが条件です。
「いずれかのアクションの実行が完了した時」で、アクション番号14、12、16を指定しています。
14についてはキントーンへの接続のアクションですが、12、16については後で出てくる後続のアクションです。
後続のアクションが完了したとき、ふたたびこのアクションに戻る、という設定を行う事で、”条件が満たされる間処理を繰り返す”ことができます。
カスタマイズ最後に表示しているアクショングラフも確認してみてください。
なお、このような繰り返し処理は条件を誤ると処理が適切に終了せず、
Job Runnerの実行時間上限15分に到達するまで処理を繰り返す状態になってしまいます。
条件は慎重に設定ください。
次に、レコード作成威範囲アプリ(実際にレコードを追加するアプリ)から、日付フィールドの値が開始日付から終了日付内の値をもつ既存のレコードを取得します。
やることは「クエリで条件を指定してレコードを取得する」、条件は「レコード1行が準備できた時」です。
開始日付と終了日付の範囲でレコードを取得した結果、レコードが0件だった場合はまだレコードが1件も作成されていない状態なので、開始日付をセットしたレコードを追加します。
やることは「レコードを追加する」です。
ここでポイントになるのが「即時反映するかどうか」というパラメーターです。
「即時反映するかどうか」は、特に理由がなければ「即時反映しない」で使用いただく方がある程度まとめてレコード追加がされるため、kintone への APIリクエスト数が少なく済み、処理速度も向上するためお勧めです。
ですが、今回はkintone上にレコードがある・ないで処理を行うかどうかを決めるため、
アクションが実行された時点でレコードをkintoneに即時追加してほしいので「即時反映する」を選択しています。
条件は、「他のアクションの実行が完了した時」と「レコード件数が0件ならば」です。
通常Job Runnerのカスタマイズでは、レコードを取得するアクションの次のアクションで、前のアクションで取得したレコードの情報を使用する場合、条件「レコード1行が準備できた時」や「レコード全行が準備できた時」を使用します。
ですが、これらの条件はレコードが取得されなかった時は発生しないため、
レコードが取得されなかった時を条件にしたい場合は、今回のような条件を指定してください。
ここまでで、レコードがまだ1件もなかった時の処理は終了です。
ここまで進むと、次のアクションは前のアクション番号10に戻ります。
ここからは、開始日付と終了日付を条件にレコードを取得した結果、レコードが1件以上取得された場合の処理です。
今回レコードは、日付が古い順(2021年1月→2021年2月・・・のように)で作成していきますので、
条件に合致したレコードのうち、最も新しい日付を取得することで、どこまでレコードが作成されているかを識別します。
そのため、やることは「レコード中のフィールド最大値を計算する」で、最も新しい(大きい)日付を取得します。
条件は最大値を計算するには全レコードが揃っていないと正しく取得できないので、「レコード全行が準備できた時」を使用します。
次に、取得した最も新しい日付が終了日付より小さい場合に、次の月のレコードを追加します。
取得した最も新しい日付が終了日以上であれば、もうレコードを追加する必要はないのでアクションは実行されず、ここで処理は終わります。
次の月の日付を取得するため、やること「日付を計算する」で1か月後の日付を取得します。
条件は「他のアクションの実行が完了した時」と「アクションの結果が特定の値ならば」で終了日付とアクション番号13で取得した、最も新しい日付を比較しています。
最後に、レコードを追加します。
こちらも、「即時反映する」を必ず指定しておきます。
以上でカスタマイズは完了です。
下記は、このカスタマイズのアクショングラフです。
アクション番号12、16から10に処理が戻っているのがわかります。
カスタマイズが作成できたら、「ジョブ生成・設定」ボタンを押し、ジョブを作成してください。
即時実行する場合は、「直ちに実行」で実行します。
ただし、前述しましたがこのようなアクションを繰り返すようなカスタマイズは、条件を誤ると意図せず長時間処理が実行され続けてしまう危険性があります。
実行前に条件はしっかり確認してください。
ご不明な点がございましたら、チャットでご質問ください。