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