gusuku Customineを使ったkintoneアプリのカスタマイズは、アプリ間の連携を簡単に扱えることが魅力の1つです。今回は簡易的な在庫引当を例に、アプリ間の連携例をご紹介します。
Customineの基本的な事柄は、こちらの「はじめてのカスタマイズ」をご参照ください。
利用想定シーン
在庫を持つアプリ(ここでは製品マスタ)と、その製品をルックアップしているアプリ(ここでは案件管理)の2つが存在する状態で、案件管理アプリに個数を入力したら在庫を持つアプリ側の在庫を減らす、というシーンを想定しています。
(アプリの構成はこちらのカスタマイズの記事と同様ですので、そちらの記事も参考になるかもしれません。)
在庫管理アプリ側で製品をルックアップし、個数を入力して保存すると製品マスタ側の在庫が減る、と言う仕組みを作りたいと思います。
前提となるアプリと、想定する動き
●案件管理アプリ
※フィールドコードとフィールド名は全て同一です
製品コード:ルックアップ
製品名:文字列(1行)
単価:数値
ユーザー・個数:数値 ※必須入力設定あり
小計:計算 ※計算式は「単価 * ユーザー・個数」
●製品マスタアプリ
※フィールドコードとフィールド名は全て同一です
製品名:文字列(1行)
単価:数値
在庫:数値
製品コード:文字列(1行) ※必須入力設定あり
●想定する動き
案件管理アプリで個数を入力したら、その個数分だけ製品マスタアプリの在庫を減らしたい。
Customineの設定
このような状態のアプリに対して、カスタマイズを作成します。
ドライブ画面から「新規のカスタマイズを作成」で「kintoneアプリのカスタマイズ」を選択、「案件管理マスタ」のアプリを「登録アプリを追加」で追加し、選択してから、カスタマイズの作成を始めます。
また、今回ご紹介する「在庫を減らす = 他のアプリのレコードを更新する」カスタマイズは、1アクションで実現することができます!
それではやってみましょう。
アクションの概要としては、対応する製品マスタのレコードの在庫を、現在入力された個数分減らして、レコードを更新するようにします。
カスタマイズは次のようになります。
続けて、それぞれの設定内容について説明します。
やること「レコードを更新する(キーの値をフィールドで指定)」
「更新先アプリ」パラメータは在庫を持っているアプリである「製品マスタ」を選択します。
「キーとなる更新先のフィールド」と「キーの値となるこのアプリのフィールド」には両方「製品コード」を選択することで、同じ製品コードをもつ製品マスタのレコードが対象となります。
「マッピング」については後述の「フィールドマッピングについて」でご説明します。
「更新の競合をチェックする」は「チェックする」にしておくと、他のユーザーと同時更新が発生した場合にエラーとなります。
レコードを保存する直前にレコードを更新するようにします。
フィールドマッピングについて
フィールドマッピングの設定は次のように行ってください。
まずは現在の在庫の値を取得します。在庫列の「挿入」をクリックし、「フィールド」を選択します。
すると、次のようなダイアログ表示になりますので、「マッピング先アプリ」の「在庫」をクリックし、「選択決定」をクリックします。
なお、「マッピング先アプリ」をクリックすると上部の「フィールド選択」のカッコの中の表示が「製品マスタ」に変わります。表示も確認しておきましょう。
この操作を行うと、セットする値に「= @out.在庫 」と入力されます。
今回はさらにここから在庫を減らす式を書くため、マイナスを挿入して「= @out.在庫 - 」とし、さらに在庫列の「挿入」をクリックし、「フィールド」を選択します。
今度は値を引くべきフィールドである「マッピング元アプリ」の「ユーザー・個数」フィールドを選択します。
上記の操作を行うと、次のような画面となっているはずです。
最終的には「在庫」のところに「= @out.在庫 - ユーザー・個数」となっているはずです。一度お確かめください。
なお、これは「在庫」フィールドに対し、「更新するレコードの在庫フィールド ー 今入力した個数」の値で上書きするという内容の設定値になります。
設定が正しく完了したら、「kintoneアプリへ登録」して動きを確認してみてください。
レコードを保存すると、ルックアップした製品の在庫が、個数分減っていることを確認できるかと思います。
もう少し改良してみましょう
原始的な形の在庫管理はこれで動きましたが、このままでは保存するたびにどんどん在庫が減っていってしまい、この動きだと実務では使い物になりません。
もう少し改良してみましょう。
改良には色々な方法が考えられると思いますが、ここではまず新規作成時だけ在庫引当が動作するようにしてみましょう。これはどのように実現すればよいでしょうか?
簡単な例だと、在庫レコードを追加時だけ更新することで実現できそうです。
このため先ほど設定した1番アクションに、更に条件「現在の画面が追加画面ならば」を追加します。
また、一旦入力した個数は変更できないようにしておくのもおすすめです。
具体的には以下のような設定を追加してみてください。
さらに、kintoneのフィールド設定から、「ユーザー・個数」フィールドを必須入力にしておくことも必要となります。
さらに、レコード削除時の考慮も加えましょう
一度レコードを作成した後に、注文が取り消しになってレコードを削除したいときってありますよね?
でも上のカスタマイズを設定していた場合、既に在庫が引かれてしまっているので、このままレコードを削除しただけだと、在庫の数が合わなくなってしまいます。
そこで、更にレコードを削除した時に在庫に戻す処理を加えてみましょう。
1番アクションの処理と似ていますが、こちらは「レコードを削除する直前」のタイミングで在庫に個数を足しています。
また、注文がキャンセルになった場合でもレコード削除はしたくない場合は、ステータスをkintone標準機能のプロセス管理を使って管理し、ステータスが「注文キャンセル」に変わったら在庫を戻すカスタマイズをする、というような方法もあります。
このような場合は、条件「プロセス管理のアクションを実行した時」を使うといいでしょう。
他にもいろいろな解決方法が考えられます。
ここでは例示しませんが、少し設定するごとに実際にkintone上で動かしてみて、必要と思われるカスタマイズをどんどん追加していってみてください。
まとめ
簡単な在庫引当のカスタマイズは以上になります。このカスタマイズでも、少しずつ「確実に動くカスタマイズ」を作ってそれを改良し、少しずつやりたいカスタマイズに近づけていくCustomineのコツを掴んで頂ければ幸いです。
どういうタイミングで他のアプリのレコードを更新するか?(ここでは製品マスタアプリのレコードを更新する = 在庫引当するタイミング)は、要件によって色々あるかと思います。
例えば、ボタンをクリックしたタイミングや、入力した値が特定の条件に合致した場合など、様々なケースが考えられます。
そして、更新したら2度目は更新できないようにする、と言った条件を設定することも当然あるかと思いますので、「やること」や「条件」を色々組み合わせて、使いやすい業務にあったカスタマイズを作成して頂ければと思います。
ご不明な点がございましたら、チャットサポートまでお気軽にお問い合わせください。