公開日:
こんにちはっ。システム開発グループの わだっち です。
1週間ぶりです。そして来週はもうクリスマスです。時が過ぎるのは早いなぁと感じる時期ですよね。
もう何年も、健康診断で芳しくない結果が出続けていることもあって、
来年こそは、生活習慣を改善しようと心に決めています(ホントか?)。
今回のお題についてですが、そんなにネタを多く持っている訳でも無いので、
かなりニッチだよなぁと思いつつも、とある案件で使った際一緒に関わってた社内の人が
「こういうやり方があるんですね」的に発言されてたこともあり、
ひょっとしたら記事にすることで役に立つこともあるかも?と思って書いてみます。
複数のレコードに対して一括入力/更新する時
自アプリ/他アプリ の複数レコードに対して、一括で入力/反映したい
っていう事はよくあると思います。
その際、カスタマインでカスタマイズをする前提ですが、皆さんはどの「やること」を組み立てて実装されていますか?
ボタンをメニュー位置に配置する × 画面を表示した時
↓
入力ダイアログを表示する × ボタンを押した時
↓
条件を組み立ててレコードを取得する × 確認・入力ダイアログで「OK」を押した時
※反映対象となるレコードを取得
↓
レコードを書き出す
といった流れが一例になるのかなと思います。
更新(書き出す)対象のフィールドが「文字列」なら、特に制限も気にする必要が無いので
このような一連の設定でも問題ないのですが、「数値」フィールドなど
「ダイアログで入力した値」によっては、kintoneがそれをそのまま受け付けてくれない場合があり厄介です。
↓ 「数値」フィールドが対象なのに、「入力ダイアログ」で「数値」以外を入力するとエラーになる

ではどうするのか、という事を考える際に、「やり方」は色々とあって
- 「入力ダイアログ」で入力された値が、更新対象のフィールドの型とマッチしていなければエラー表示して処理を止める
- 正規表現を用いてフィールドの値を置換する を使うなどして、頑張ってマッチするようにする
- ラベル表示や、メッセージ表示などを工夫して、そうならないように誘導する
- 運用やマニュアルでカバーする
といった感じになるのかなと思いますが、面倒or根本的な解決になっていない とも思ってしまいます。
複数レコードの全てに対して、同じ値を反映する という場合に限っての話にはなりますが、
上記のような流れの設定のまま頑張らなくても、もっと適していると思える「やること」が実は存在するんです。
この場合に適してそうな「やること」
概要
指定されたレコードのフィールド値を入力するためのダイアログを表示し、ユーザーが入力した値で指定のレコードを更新します。
詳細な仕様については、ドキュメントページをよく確認いただくとして、
この「やること」は、事前に更新対象となるレコードを取得しておいて
「レコード」にその取得したアクションを、「入力するフィールド」に更新対象となるフィールドを
それぞれ設定する事で、そのフィールドに合った「入力ダイアログ」が表示され、
入力して「OK」をクリックすれば更新処理を実行するような形なので、
別途で「入力された値」によるチェック的なアクションや、入力後の更新用アクションが必要なくなります。

更新後のリロード処理とかは省略していますが、こちらが設定の例です。
前述したように、更新対象のレコード(アクション3)を、
「レコードのフィールド値入力ダイアログを表示して一括更新する」の「やること(アクション4)」に渡して
入力するフィールドを設定するだけで、更新処理までやってくれます。

動作させると、こんな感じでダイアログが表示されて、
入力→OKボタンクリックで入力値を元にレコード一括更新処理が実行されます。
さらにこのUIの良い所は、↑の例では「数値」を設定しているのですが、
入力欄に「数値」以外の例えば文字列を入力しようとしても、入力自体ができないですし(クリアするような動きになります)
全角数値を入力した場合は、勝手に半角数値(フィールドの値として正しい値)に変換してくれます。
※こういう細かい配慮、ホント凄いなぁと思います

「3」と入力し、OKボタンクリックで、レコードに反映されました。
「入力するフィールド」に設定できるのフィールドとしては制限がありますが、複数設定する事だってできます。

実際に案件で使った利用例
↑では、一覧画面にボタンとチェックボックス列を表示して、
「自アプリのレコードを選択する形での一括更新」を例としましたが、
私が実際に案件で使ったのは、詳細画面から「関連レコード」で表示している別アプリ(親子関係)のレコードを元に
更新対象を選択させて一括更新する というようなものでした。
「案件」を管理するアプリと、それに紐づくアプリとがあって、
「案件」では紐づく別アプリのレコードを「関連レコード」で表示しているので、
その別アプリのレコードのなかから、特定のレコードを「案件」アプリで直接編集(一括更新)して、
画面遷移をすることなく「案件」の中身をスピーディーに更新しちゃおうという感じです。
詳細画面を起点に
関連レコード一覧の条件でレコードを取得する
↓
レコードの一覧をポップアップで表示する
↓
レコードのフィールド値入力ダイアログを表示して一括更新する
と繋げていくだけかなぁと最初は思っていたのですが、
レコードのフィールド値入力ダイアログを表示して一括更新する に 「ポップアップで選択したレコード」を
「そのまま」渡しても上手く動作してくれずに 工夫 が必要でした。


アクション8の部分が「工夫」の中身で、
「ポップアップで選択されたレコード」を「条件を組み立ててレコードを取得する」を上手く使って
取得したものを「レコードのフィールド値入力ダイアログを表示して一括更新する」に
「レコード」として指定してやる必要があります。
こうすることで、無事に親である「案件」アプリのレコード詳細画面で、
紐づく子アプリのレコード群をちゃちゃっと一括更新→リロード→案件の状態変化 とする事が実現できて
都度画面更新して1レコード単位で編集→保存し、案件に戻ってその変更を確認して
といった「ひと手間」を省略するような運用が叶いました。
今回は、かなりピンポイントな内容でしたが、
同じような「使い方」を検討されていたり、ダイアログ入力→レコード一括更新の際に
値によるエラーになって困った経験のある方など、参考にしていただければ幸いです。
それでは~
投稿者プロフィール
-
"kintone「かかりつけ医」「伴走者」「よろず屋」 kintoneに関する提案、構築、相談など幅広く色々やっています。
元ユーザという事もあり、お客様に近い距離でのやり取りを主な生業としています。"
最新の投稿
gusuku2025年12月17日レコードの値を一括更新する際の、ある「やること」について
gusuku2025年12月10日「関連レコード」の「あと少し…」を解決しよう
gusuku2025年10月9日「やること」の使い道は「使う人」次第!??
gusuku2025年6月18日kintoneと、カスタマインと、デプロイット






