kintoneでループ(繰り返し)処理を行うには?ver2|krewDataと計算式プラグインを組み合わせて疑似的にループ処理を再現

こんにちは。ペパコミ鍋島です。

以前、krewDataによる疑似ループの記事を書きましたが、こちらはその続編です。前回の記事のやり方はkrewData単独での完結を目指したものですが、本記事にて紹介するのは計算式プラグインを併用しての別の方法となります。

以前の記事を参考にしている話を定期的に聞くのですが、個人的には納得していない部分がいくつかあり、現在の私は専らこの記事で紹介する方法をメインにしています。

ループ処理が何なのかとか、何に便利なのかとか知りたい方は、前回の記事の方が細かく書いてあるのでそちらを読んでください。

プラグインアイコンkintoneお役立ち資料
2冊を無料配布中!

最新kintoneプラグインリストの画像

プラグイン一括掲載!

毎週更新

最新kintoneプラグインリスト

失敗をしないための8つのポイント集の画像

導入を成功に導く!

全90ページの実践ガイド

失敗しないための8つのポイント

\ kintoneを効率良く、コスパ良く活用する /

今なら
無料

LINE登録でまとめて入手!矢印

■疑似ループの処理は何に使うのか

kintoneを使って、月々の売上や利益を可視化したい要望が多々あります。

図1 kintoneで作る売上グラフの例

図1 kintoneで作る売上グラフの例

ここで士業等における顧問料の売上、不動産業界等の賃料、保険会社等の保険料、OA機器等のリース料金など、1契約から数か月~数年単位で複数回の売上が生じる場合に売上や利益を可視化するグラフを作りたい場合、1つの契約のレコードから2026年12月分、2027年1月分、2027年2月分……といった複数の売上レコードを作成しなければなりません。

図2 契約レコードから売上レコードの生成イメージ図

krewDataを用いた疑似ループ処理を行えば、kintone導入よりも過去の売上レコードを作成したり未来の売上レコードを作ることができ、中長期的な目線での経営戦略を立てる場合に役立つと考えられます。

■以前書いた疑似ループの記事は何が良くないのか

1契約レコード→指定した数のレコードを生成→不要なレコードをフィルタという流れでしたので、基本的な考え方が固定回数のループの延長にあります。60回払いのリースなど、回数が固定されている場合には特段不便はないのですが、レコードを5つ作りたい、100個作りたい、500個作りたいなどの柔軟な対応ができない点が問題です。

制御アプリに自分がループ生成する可能性のある最大数分のレコードを事前に作っておかなければならないので、ループの最大数が変わる場合……例えば、最大5年リースにしか対応していなかった会社が10年リースまで対応するように変わる場合、制御アプリに追加のレコードを作らなければなりません。kintoneの担い手の継承、世代交代があった場合にこの引継ぎが漏れて意図しない結果を引き起こす可能性が考えられます。

■krewDataによる疑似ループ実現アプローチ

任意の自然数nを入力して、[0,1,2,……,n-2,n-1]または[1,2,3,……,n-1,n]いずれかの文字列を出力することができれば、 krewDataのレコード分割コマンドと組み合わせることで疑似ループが作れます。便宜上、文字列と書いていますが、配列または数列として捉える方がより適切な理解になると思います。

任意の自然数nの入力に対し、[0,1,2,……,n-2,n-1]または[1,2,3,……,n-1,n]いずれかの文字列を出力すること自体はプログラムを書けば簡単に実現できることですが……krewDataのデータ編集コマンドで利用可能な関数の範囲でこれを実現することはなかなか大変ですので(Geminiは不可能だと回答しました。私が思いついていないだけかもしれないので不可能と断言はしません)、krewData以外の手段でこの文字列を作ってしまうことにします。

ちなみに、[0,1,2,……,999,1000]のような文字列を事前に作っておき、そこからLEFT関数で必要な文字数を切り出す方向のアプローチについては、最大ループ数の管理が難を抱えるので、LEFT関数による切り出しは考えないこととしました。

具体的な手順

■ループ用文字列(数列)の作成

契約レコードの中に、一つループ用文字列(文字列一行フィールド)を設けます。

設けた文字列一行フィールドにrex0220様の計算式プラグインを使って下記の数式を設定します。

ARRAY_FOR(フィールドコード,idx,idx)

フィールドコードの部分には数値または計算フィールドのフィールドコードを入力してください。

例ではループ数をフィールドコードに入力しています。ループ数の値は1000以下にしてください。1001以上であれば強制的に1000として処理されます。

ちなみに、ループ数(=必要な繰り返しの回数)を算出する目的でも、計算式プラグインは利用できます。2つの日付間の月数の差をとるなど。また、計算式プラグインならばkintoneの既存のレコードを対象に一括で計算式を走らせることも可能です。

図3 計算式プラグインの数式と結果

■krewData入力アプリの設定

使用するフィールドに、ループ用文字列を指定します。

ループ数は不要ですがプレビューのわかりやすさを重視して一応含めています。

図4 krewData入力アプリの設定

■レコード分割コマンドの設定

ループ用文字列をカンマで分割するように指定することで、任意の数のレコードを得ることができます

図5 krewDataレコード分割コマンドの設定

■フィールドタイプ設定コマンドの設定

レコード分割を行った段階では、ループ用文字列フィールドは文字列型として扱われています。フィールドタイプ設定で数値フィールドに変更しておくと、使い勝手が良くなります。

今回はこのタイミングでフィールド名も変更しました。

図6 krewDataフィールドタイプ設定コマンドの設定

■応用例:ループカウント分の月数を加算した日付を作る

実践的に使う場合の一例を載せます。例えばこのように今月の月初を取得します。

図7 フィールド編集コマンドによる月初の取得

その後、データ編集コマンドの「月を加算」でループカウント分を加算すると、任意の月数分後の日付を作ることができます。

日付の処理は月初基準で処理しておくと後々表やグラフを作る際に便利です。データ編集コマンドの日付編集コマンドが充実してきているので、以前より数式を書く機会が減りました。

ちなみに過去の日付を作りたい場合、ループカウントに対して-1を乗じる処理を挟むと良いです。今月月初に対して-nか月を加算、とすれば過去の日付を作ることができます。

図8 月を加算コマンドによる処理

まとめ

計算式プラグインのARRAY_FOR関数を使うことで、krewDataの疑似ループ処理は簡単に実現できました。

参考にしていただけますと幸いです。

機能から探す

機能から探す

kintone構築・内製化支援は
お気軽にお問い合わせください

サイボウズ認定マーク

サイボウズ認定マーク

このマークは、サイボウズ株式会社が動作やセキュリティなどを審査し、基準を満たしていることを示す「安心・安全なプラグイン」の証です。

トップへ戻るアイコン トップへ戻るアイコン
top


kintone
プラグイン