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