あるkintoneアプリにレコードを登録した時、他のアプリにも自動的にレコードを追加したい、レコードが既にあれば更新したい!と思われた事、ありませんか?
また、追加や更新を行う際に、「追加していいですか?」「更新していいですか?」のようなダイアログを表示すれば、追加・更新を行うかどうかを利用者に選択させることができ、アプリがもっと使いやすくなります。
今回は、登録と更新に確認ダイアログを追加したパターンをご紹介いたします!
アプリのフォーム
kintone側で、受発注アプリと顧客マスタアプリを準備します。
なお、アプリは登録と更新を一つのアクションで行うTipsで使用したものと同じです。
受発注アプリ
顧客名、住所と受注明細を配置します。2つとも文字列 (1行)フィールドを使用しています。
顧客名、住所のフィールドコードはフィールド名と同じものを設定します。
※受注明細以下のフィールドは今回のカスタマイズでは使用しないので、お試しの際はフィールド追加を省いていただいても問題ありません。
顧客マスタ
企業名、住所を配置します。2つとも文字列 (1行)フィールドを使用しています。
フィールドコードはフィールド名と同じものを設定します。
やりたいこと
受発注アプリでレコードを新規追加・編集したとき、顧客マスタに顧客名と企業名が同じレコードがあれば顧客マスタの住所を更新し、なければ新しいレコードを追加する。
追加・更新の前に、ダイアログを表示してユーザーに確認を求める。
追加の時:
「顧客マスタに該当する顧客が登録されていないため、新規追加します。よろしいですか?」
⇒OKが押されたら顧客マスタアプリにレコードを追加する。
更新の時:
「〇〇の顧客マスタのレコードに、受発注アプリで入力した値を同期しますか?」
※〇〇は顧客名
⇒OKが押されたら顧客マスタの既存レコードを更新する。
Customineの設定
Customineに受発注アプリのカスタマイズを追加します。
顧客マスタに同じ名前の顧客が既に存在するか確認するため顧客マスタからレコードを取得する
やること
「受発注」アプリの「企業名」フィールドに入力された値をキーに、「顧客マスタ」アプリからレコードを取得したいので「キーを指定してレコードを取得する」を指定します。
取得先アプリは「顧客マスタ」、キーとなるフィールドは「企業名」、キーの値は「顧客名」フィールドの値を指定しました。
条件
「受発注」アプリのレコードが保存された時に確認したいので「レコードを保存する直前(削除時は除く)」を指定します。
【新規追加】確認ダイアログの表示:顧客マスタアプリに既存顧客がないとき
やること
OKとキャンセルを選択させるダイアログを表示したいので「確認ダイアログを表示する」を指定します。
メッセージは「顧客マスタに該当する顧客が登録されていないため、新規追加します。よろしいですか?」を指定しました。
OKボタンとキャンセルボタンの名前は既定のまま変更していません。
条件
「顧客マスタ」アプリから取得したレコードの取得が完了してから処理を行いたいので「他のアクションの実行が完了した時」を指定します。
アクションにはレコードを取得するアクション「3」を指定しました。
また、新規追加は「顧客マスタ」アプリからレコードをが取得されなかった場合に行いたいので「レコード件数が0件ならば」を追加します。
レコードは、レコードを取得するアクション「3」を指定しました。
【新規追加】確認ダイアログでOKが押されたら顧客マスタアプリに新しいレコードを追加する
やること
「レコードを追加する」を指定します。
追加先アプリは、「顧客マスタ」を指定しました。
マッピングは、下記のように設定しています。
受発注アプリの「顧客名」フィールドを、顧客マスタアプリの「企業名」フィールドにセット
受発注アプリの「住所」フィールドの値を、顧客マスタアプリの「住所」フィールドにセット
条件
「確認・入力ダイアログで「OK」を押した時」を指定します。
確認・入力ダイアログアクションは、追加の確認ダイアログを表示したアクション「8」を指定しました。
【更新】確認ダイアログの表示:顧客マスタアプリに既存顧客があるとき
やること
既存の顧客が登録済みの場合、受発注アプリに入力された内容で顧客マスタアプリを更新していいかユーザーに確認したいので「確認ダイアログを表示する」を指定します。
ダイアログに表示するメッセージには顧客名を表示したいので、下記のように指定しました。
「${顧客名}の顧客マスタのレコードに、受発注アプリで入力した値を同期しますか?」
「${顧客名}」の部分は、アプリで実行される際は顧客名フィールドの値に置き換わります。
OKボタンとキャンセルボタンの名前は変更していません。
条件
「顧客マスタ」アプリから取得したレコードの取得が完了してから処理を行いたいので「他のアクションの実行が完了した時」を指定します。
アクションにはレコードを取得するアクション「3」を指定しました。
また、値の同期は「顧客マスタ」アプリからレコードが取得された時行いたいので「レコード件数が1件以上ならば」を追加します。
レコードは、レコードを取得するアクション「3」を指定しました。
【更新】顧客マスタアプリの既存レコードを更新する
やること
顧客マスタの既存レコードを更新したいので「レコードを更新する(キーの値をフィールドで指定)」を指定します。
各項目は下記のように設定しました。
更新先アプリ:顧客マスタ
キーとなる更新先のフィールド:企業名
キーの値となるこのアプリのフィールド:顧客名
マッピング:住所=住所
更新の競合をチェックする:チェックする
条件
ユーザーに更新するか否かを確認してもらうダイアログで「OK」が押された時だけ処理を行いたいので「確認・入力ダイアログで「OK」を押した時」を指定します。
確認・入力ダイアログアクションは、更新確認のダイアログを表示したアクション「9」を指定しました。
以上で、Customineでのカスタマイズは完了です。
kintoneアプリへ登録し、実行を確認してみてください。
顧客マスタアプリにレコードが存在しないとき、存在するときで表示されるダイアログは変わりましたでしょうか?
また、新規追加、更新は想定通り行われましたでしょうか?
まとめ
UPSERTのダイアログ追加版カスタマイズ、いかがでしたか?
今回のように色々なアプリから利用されているマスタを更新する場合など、ダイアログで処理を行うかどうかを確認した方が良い場面は多いと思います。
こちらのTipsでは、2種類のダイアログを出し分けていますが、それぞれの条件を指定する際のポイントは、同時に条件が成立することがないように指定することです。
同時に成立するような条件をそれぞれのアクションに指定してしまうと、うまくダイアログが表示されません。
もし、カスタマイズがうまく動かないときは、条件が同時に成立するものになっていないか、確認してみてくださいね。