gusuku Customineを使ったkintoneアプリのカスタマイズは、アプリ間の連携を簡単に扱えることが魅力の1つです。今回は簡易的な在庫引当を例に、アプリ間の連携例をご紹介してみようと思います。


Customineの基本的な事柄は、こちらの「はじめてのカスタマイズ」をご参照ください。


利用想定シーン

在庫を持つアプリ(ここでは製品マスタ)と、その製品をルックアップしているアプリ(ここでは案件管理)の2つが存在する状態で、案件管理アプリに個数を入力したら在庫を持つアプリ側の在庫を減らす、というシーンを想定しています。

(アプリの構成こちらのカスタマイズの記事と同様です。フィールドの設定などはそちらよりご確認ください。)



在庫管理アプリ側で製品をルックアップし、個数を入力して保存すると製品マスタ側の在庫が減る、と言う仕組みを作りたいと思います。

↑案件管理アプリで個数を入力したら、↓別のアプリである製品マスタの在庫を減らす。


Customineの設定

このような状態のアプリに対して、カスタマイズを作成します。「+」ボタンをクリックして「案件管理マスタ」のアプリを選択してから、カスタマイズの作成を始めます。


在庫を減らす = 他のアプリのレコードを更新するカスタマイズは、大まかに言うと以下の2ステップになります。

  • 更新したいレコードを取得する
  • 取得した値を使って計算し、レコードを更新する

それではやってみましょう。


まず在庫レコードを取得する

初めに更新したいレコードを取得します。手順は以下のとおりです。

  • 「やること」にカテゴリー:レコードの中から、「条件を指定してレコードを取得する」を選択します
  • 「取得先アプリ」には「製品マスタ」を選択します。これが在庫を持つアプリになります
  • 「検索条件」には「="製品コード = \"" & 製品コード &"\""」と入力します

この検索条件パラメーターの記法についてはcubozu developer networkのAPIドキュメントをご参照ください。

※検索条件として製品マスタアプリの製品コードに(「"製品コード = \"」までの部分)、案件管理の製品コードフィールドの値をセットしています(「" & 製品コード &"\""」までの部分)。文字列でパラメータを記述する必要があるのでエスケープが必要なので、若干書きづらい形となっていますのでご注意ください。

この検索条件エディタは将来のバージョンで改善される予定です。


やることの設定は以上です。条件部分にはデフォルトでセットされている条件からは変更して、「レコードを保存する直前」を選択しておきましょう。

在庫レコードを取得する設定は以下のようになります。


在庫レコードを更新する

今度はこの取得したレコードの在庫を、現在入力された個数分減らして、在庫レコードを更新します。手順は以下のとおりです。

  • 「やること」にカテゴリー:レコードの中から、「レコードを更新する」を選択します
  • 「更新先アプリ」には「製品マスタ」を選択します。繰り返しになりますが、これが在庫を持っているアプリになります
  • 「キーとなるフィールド」には「製品コード」を選択します。値の重複を禁止している、ルックアップしているフィールドですね
  • 「マッピング」が在庫を減らす一番肝心の部分ですね。以下で説明します
  • 「更新の競合をチェックする」は「チェックする」を選択しておいてください。他のユーザーと同時更新が発生した場合、エラーが出てやり直すことが出来るようになります


フィールドマッピングは以下のとおりです。


取得した現在のレコードはアクション番号1に入っていますので、まず在庫列のアクション選択をクリックします。

アクション番号1を選択し、在庫フィールドを選択します。

セットする値に「=$1[0].在庫」と入ったと思います。

ここから在庫を減らす式を書きますのでマイナスを入れて「=$1[0].在庫 - 」としたあと、フィールド選択をクリックします。

引くべきフィールドの「ユーザー/個数」フィールドを選択します。


最終的に「アクション番号1番で取得した在庫フィールド 引く 今入力した個数」を在庫フィールドに入れる、と言う表現になります。

セットする値としては「=$1[0].在庫 -  ユーザー_個数」となります。

最終的な設定はこのようになります。「kintoneアプリへ登録」して動きを確認してみてください。

ルックアップした製品の在庫が、個数分減っていることを確認できるかと思います。


もう少し改良してみましょう

さて、原始的な形の在庫管理はこれで動きました。ただこのままでは、保存するたびにどんどん在庫が減っていってしまうので、このままでは実務には使い物になりません。少し改良してみましょう。


色々な方法が考えられると思いますが、ここではまず新規作成時だけ在庫引当が動作するようにしてみましょう。どのように実現すればよいでしょうか?


これは単純に、在庫レコードを追加時だけ取得すれば良さそうです。条件に「現在の画面が追加画面ならば」を追加します。


また、一旦入力した個数は変更できないような状態にしておくのも良いと思います。

以下のような設定を追加してみてください。

更に、個数フィールドを必須入力にしておくことも必要かと思います。ここでは例を示しませんが、少し設定しては実際にkintone上で動かしてみて、必要と思われるカスタマイズをどんどん追加していってみてください。


まとめ

簡単な在庫引当のカスタマイズは以上になります。このカスタマイズでも、少しずつ「確実に動くカスタマイズ」を作ってそれを改良し、少しずつやりたいカスタマイズに近づけていくCustomineのコツを掴んで頂ければ幸いです。


どういうタイミングで他のアプリのレコードを更新するか?(ここでは製品マスタアプリのレコードを更新する = 在庫引当するタイミング)は、要件によって色々あるかと思います。

例えば、ボタンをクリックしたタイミングや、入力した値が特定の条件に合致した場合など、様々なケースが考えられます。


そして、更新したら2度目は更新できないようにする、と言った条件を設定することも当然あるかと思いますので、「やること」や「条件」を色々組み合わせて、使いやすい業務にあったカスタマイズを作成して頂ければと思います。


もし分からないことがありましたら、フォーラムの方でご質問ください。