受注アプリで商品を入力してレコードを保存すると、商品マスタアプリから在庫数を減らす・・・といった、いわゆる在庫引当のカスタマイズにおいて、入力済みの商品が変更される、または数量が変更になるといった場合の対応についてご紹介します。
今回ご紹介するのは、下記のパターンです。
受注アプリで既に登録済みの受注データについて、商品購入数を変更する
⇒商品マスタアプリのくずきりの在庫数から「10」減らす受注アプリで既に登録済みの受注データについて、商品を変更する
⇒商品マスタアプリのくずきりの在庫数を「10」増やし、かつおはぎの在庫数を「10」減らす
このような場合、既存のレコードに入力された情報と、編集画面で入力された情報が同じかどうかを識別する必要があります。
今回の例では、条件「レコードを保存する直前(削除時は除く)」のタイミングで、下記の二つを比較することで商品コードまたは購入数量のフィールドが、”受注時(つまり新規レコード追加の時)に入力された値から変更されたか(つまり、編集画面で値が変わっているか)”を識別します。
ポイントは、同じレコードの値でも、下記は異なる値を持てるという点です。
レコードに保存されたフィールドの値(編集前の値)
⇒レコード番号をキーにレコード取得のアクションでレコードを取得し、$レコード取得のアクション番号.フィールド名 で指定可能編集画面で編集中のフィールドの値(まだレコードに保存されていない、画面で入力された値)
⇒単に フィールド名 で指定可能
なお、新規レコード追加とレコードを削除した時の在庫引当の方法については「2つのkintoneアプリを連携して在庫引当を行うカスタマイズ 」で詳しく説明していますので、こちらもご覧ください。
kintoneアプリの設定
商品マスタアプリ:
商品コード、商品名は文字列(1行)フィールド、在庫数は数値フィールドです。
フィールド名とフィールドコードは同じに設定しました。
受注アプリ:
商品コードはルックアップフィールドです。商品マスタアプリからフィールドをコピーするよう設定してあります
商品名は文字列(1行)フィールド、購入数量は数値フィールドです。
こちらもフィールド名とフィールドコードは同じに設定しました。
Customineでのカスタマイズ
受注アプリにカスタマイズを作成します。
受注時(新規レコード追加)時の処理
やること
「レコードを更新する(キーの値をフィールドで指定)」を選択します。
「更新先アプリ」には商品マスタアプリを指定します。
商品マスタアプリと受注アプリは「商品コード」という共通の値で商品を扱います。
そのため、「キーとなる更新先のフィールド」「キーの値となるこのアプリのフィールド」はいずれも商品コードを指定します。
受注アプリで購入された商品の商品コードを指定し、レコードを保存すると商品マスタから在庫数が購入数量分減るようにしたいので、マッピングには下記のように指定しました。
= @out.在庫数 - 購入数量
「@out」は、「更新先アプリ」で指定したアプリのフィールドを指定するための特殊な記載方法です。
このように記載すると、更新先アプリ(つまり商品マスタアプリ)の在庫数フィールドの値マイナス受注アプリの購入数量の計算結果で、商品マスタアプリの在庫数を更新する、といった指定ができます。
詳細は「フィールドマッピングの記述方法」をご覧ください。
条件
レコードが保存される前のタイミングかつ新規レコード追加の時に処理を行いたいので、「レコードを保存する直前(削除時は除く)」と「現在の画面が追加画面ならば」を指定しました。
以上で、新規レコード追加の時の処理作成は完了です。
受注変更時(レコード編集時)の処理
レコード編集時の処理は、下記の2パターン作成します。
受注アプリで既に登録済みの受注データについて、商品購入数を変更する
受注アプリで既に登録済みの受注データについて、商品を変更する
ただ、2パターンのアクションを作成する前に、準備のためのアクションを作成します。
なお、このアクションは2つのパターン両方で共通で使用します。
※下記のアクショングラフのアクション番号6が準備のためのアクションです。
編集しているレコードの保存済みの状態を取得する
つまり、下記を取得します。
レコードに保存されたフィールドの値
⇒編集前の値
やること
「キーを指定してレコードを取得する」でレコード番号をキーに、今編集しているレコードの”保存済み”つまり”編集前”の状態を取得します。
条件
レコードが保存される前のタイミングかつ編集画面の場合のみ処理を行いたいので「レコードを保存する直前(削除時は除く)」と「現在の画面が編集画面ならば」を指定します。
以上で準備は完了です。
では、2つのパターンのアクションを作成していきます。
商品購入数が変更された時の処理
やること
「レコードを更新する(キーの値をフィールドで指定)」を指定します。
キーは商品コードを指定し、受注アプリと商品マスタアプリで商品コードが同じであれば更新します。
ポイントはマッピングです。
= @out.在庫数 + $6.購入数量 - 購入数量
@out.在庫数は前述の通り商品マスタアプリの在庫数フィールドの値、という意味です。
続く「$6.購入数量」は、アクション番号6で取得した、「今編集しているレコードの変更前の値」です。
つまり、
= 商品マスタの在庫数 + 受注マスタの変更前の購入数量 - 受注マスタで変更された購入数量
となり、変更された個数が商品マスタの在庫数に反映されます。
条件
条件としては、”商品コードは変更なし、購入数量が変更されている時”です。
まずは、アクション番号6のレコード取得を待ちたいので「他のアクションの実行が完了した時」でアクションは「6」と指定します。
更に、編集画面で入力された商品コードとアクション番号6で取得した、編集前の商品コードが同じ時だけ処理をしたいので「フィールド値が特定の値ならば」でフィールドに「商品コード」と指定し、条件は「等しい」、比較値に「= $6.商品コード 」と指定します。
もう一つ「フィールド値が特定の値ならば」を指定し、購入数量が変更されている時だけ処理をしたいので、フィールドに「購入数量」、条件に「等しくない」、比較値に「= $6.購入数量 」を指定します。
このように、アクション番号6で取得した「保存済み」つまり「変更前」のフィールドの値と、編集画面で入力されたフィールドの値を比較することで”値が変更されたかどうか?”を識別できます。
以上で、数量が変更されたときのカスタマイズは完了です。
商品が変更された時の処理
商品が変更された時は、2つのレコードの更新を行わなければなりません。
一つ目は、もともと入力されていた商品の在庫数を”戻す”。
そして二つ目は、新しく入力された商品の在庫数を”減らす”。
まずは、もともと入力されていた商品の在庫数を”戻す”処理を作成します。
やること
「レコードを更新する(キーの値をフィールドで指定)」を指定します。
キーとなるフィールドは、商品マスタの「商品コード」です。
キーの値がポイントで、ここで指定する値は「= $6.商品コード 」です。つまり、もともと変更前に入力されていた商品コードをキーにしたいので、アクション番号6で取得したレコード内の、変更前の商品コードを指定しています。
マッピングは下記です。
= @out.在庫数 + $6.購入数量
商品マスタの在庫数にアクション番号6で取得した変更前の購入数量を加算し、在庫を戻します。
条件
まずは、アクション番号6のレコード取得を待ちたいので「他のアクションの実行が完了した時」でアクションは「6」と指定します。
次に、商品コードが変わった時だけ処理を行いたいので「フィールド値が特定の値ならば」で商品コードがアクション番号6で取得した変更前の商品コードと等しくない場合、と指定します。
続いて、新しく入力された商品の在庫数を”減らす”処理を作成します。
やること
「レコードを更新する(キーの値をフィールドで指定)」を指定します。
キーとなるフィールドは、商品マスタの「商品コード」です。
キーの値については、編集画面で入力された新しい商品コードを指定したいので「商品コード」と指定します。
マッピングは下記です。
= @out.在庫数 - 購入数量
商品マスタの在庫数から、画面で入力された購入数量を減らします。
条件
アクション番号7のレコード取得を待ちたいので「他のアクションの実行が完了した時」でアクションは「7」と指定します。
以上で、全てのカスタマイズは完了です。
「kintoneアプリへ登録」し、実行を確認してみてください。
変更前、商品マスタは下記の状態です。
受注アプリでくずきりが10個だったレコードを変更し…
20個にして保存します。
商品マスタでくずきりが80個になりました。
次に、くずきりをおはぎに、個数を15個にして保存します。
商品マスタでくずきりが100個、おはぎが135個になりました。
まとめ
在庫引き当てでの商品の変更や個数変更の場合のカスタマイズ、いかがでしたでしょうか?
このようなアプリ以外でも、”フィールドの値が変更されているか?”を識別するために、編集画面の値とレコードに保存済みの値を比較する方法が役立つことはあるかと思います。
色々試してみてくださいね。
ご不明点等ございましたら、チャットにてご質問ください。
Customineドキュメントやサポートページもぜひご活用ください。