はじめに
こちらの記事は 指定した期間のレコードを月ごとに作成する方法 の応用編となり、カスタマイズの難易度がかなり高いものとなっております。
この記事ではJob Runnerを用いたカスタマイズとしては一般的でないループ処理をJob Runner上で実現し、これを使って処理を実現しているためループに関する設定に誤りがあると、容易に無限ループが発生し、Job Runnerの処理制限時間の15分間動き続けたり、大量にレコードが追加されたりする恐れがあります。
ですので、この記事で説明しているカスタマイズをアレンジして用いたい場合は、記事をよく読み、記事通りにカスタマイズを作成してその通りに動く事を確認し、内容をよくご理解いただいた後に、具体的なカスタマイズ作成に移るようにしてください。
また、 チャットサポートで出来ること にも記載がありますが、お客様の要件に合わせたカスタマイズの検討や、お客様のカスタマイズ設定のレビューはチャットサポートの対象外となる事がございます。
あくまでご自身や貴社内でコントロールできる範囲で、本記事はご活用いただければと思います。
なお、アレンジされたカスタマイズが想定通りに動作しなかった場合、チャットサポートが十分に受けられないことがあります。
チャットサポートで出来ることの「弊社がお手伝いできないこと」にも記載がありますが、 お客様の要件に合わせたカスタマイズの検討や、お客様の設定をレビューすることはチャットサポートではお手伝いができません。ご自身でデバッグが可能な範囲でご活用いただければと思います。
指定した期間のレコードをまとめて作成したい場合、やること「日付の範囲からレコードを追加する」で1日につき1レコードを作成することができます。
ただ、1ヶ月につき1レコードを作成する「やること」はない(2024年7月3日現在)ため、カスタマイズで実現してみます。
本記事は、応用編として、期間を指定しているレコードが複数ある場合にも、期間内の月ごとの月末日レコードを”一括で”作成する方法をご紹介します。
アプリ構成
次のアプリを作成します。なおアプリには、次のフィールドを設定してください。
※フィールド名とフィールドコードは同じものを指定します
期間指定アプリ
作成結果アプリ
※備考フィールドは、ループ結果がわかりやすいように設けています。
実行結果イメージ
期間指定アプリ
作成結果アプリ
カスタマイズ例
Job Runner の定期実行タスクのカスタマイズを作成します。
kintone接続設定
期間指定アプリと、作成結果アプリのkintone接続設定を行います。
kintoneアプリのAPIトークンはそれぞれ以下のものが必要になります。
期間指定アプリ:レコード閲覧
作成結果アプリ:レコード閲覧、レコード追加
期間指定アプリからレコード取得
まずは期間指定アプリからレコードを取得します。ここでは「全レコードを取得する」を利用していますが、利用用途に合わせて適宜「条件を組み立ててレコードを取得する」などもご活用ください。
このカスタマイズは期間指定アプリのレコード1行に対して、その期間のレコードを作る処理となるため、「なにもしない」のアクションを作成します。これは、以降のループ処理をアクション3番の「レコード1行が準備できた時」のあとから始めたいためです。
このため、ここから先の処理はアクション3番で取得したレコード1件ずつの単位で処理されます。
作成結果アプリからレコード取得(作成レコードを検索)
このアクションが、今回の最大のポイントとなります。
「いずれかのアクションの実行が完了した時」で、アクション番号4、7、11を指定しています。
7番と11番は後続のアクションです。この後続のアクションが完了したとき、ふたたびこのアクションに戻る、という設定を行う事で、”条件が満たされる間処理を繰り返す”ことができます。
アクショングラフも併せて確認してみてください。
通常のJob Runnerではこのような作り方は行わないのですが、今回は指定された期間の間、繰り返しレコード作成を行いたいために設定しています。
なお、このような繰り返し処理は条件を誤ると処理が適切に終了せず、
Job Runnerの実行時間上限15分に到達するまで処理を繰り返す状態になってしまいます。APIリクエスト数の消費が大幅に増加してしまう事もあり得る為、条件は慎重に設定ください。
また、氏名も条件に加えている点もご注意ください。
期間内のレコードが1件もなかったとき
期間指定アプリの開始日付〜終了日付の範囲のレコードが1件もなかったということは「レコード件数が0件ならば」で判断しています。
このときに、「基準日から特定の日付を取得する」で開始日付を基準とした当月末日を取得します。たとえば、開始日付が「2024-03-01」であれば、「2024-03-31」を取得することになります。
月末日を取得したら、その日付を使って「レコードを追加する」でレコードを追加します。アクション5番で「氏名」も条件としていますので、ここでマッピングを忘れずに行います。
「備考」は1回目の追加だとわかりやすくするためにマッピングしています。
また、「即時反映するかどうか」パラメーターは必ず「即時反映する」に設定してください。この設定を行わなかった場合、アクション5番に戻った際にレコード追加ができていない状況となることがあり、無駄なループの原因となります。
ここまでで、1回目のレコード追加までのアクションが終わり、アクション5番に戻ります。
期間内のレコードが1件以上あったとき
期間指定アプリの開始日付〜終了日付の範囲の「レコード全行が準備できた時」に、レコード中の日付の最大値を求めます。たとえば、期間指定アプリの開始日付が「2024-03-01」だとすると、1回目のレコード追加で「2024-03-31」の日付のレコードができているはずなので、「2024-03-31」が日付の最大値となります。
アクション9番で、この日付に+1日した日付を計算します。月末日に+1日しているので、このアクションの結果は翌月月初日「2024-04-01」になります。
さらに、アクション10番で、月末日を取得します。すると「2024-04-30」が取得できます。
この日付を使って、アクション11番でレコード追加を行います。
ここでも、「即時反映するかどうか」パラメーターを「即時反映する」にすることを忘れないようにしてください。
ここまでで2回目以降のレコード追加までのアクションが終わり、アクション5番に戻る流れとなります。
アクション11番の追加条件「アクションの結果が特定の値ならば」で、アクション10番で取得した月末日と、期間指定アプリの終了日付を比較しています。
取得した月末日が、終了日付以前だった場合にレコード追加をします。取得した月末日が、終了日より後だった場合は、レコード追加は行われず、アクション5番にも戻らない動きとなります。
アクショングラフと全体のカスタマイズ
Customineドキュメントやサポートページもぜひご活用ください。
また、ご不明点等ございましたら、チャットにてご質問ください!