テーブルのある行のフィールドを編集したときに、連動して同じ行の別のフィールドを変更したいことってありますよね!
実は、条件「フィールドの値を編集して値が変わった時」の対象となるフィールドと、「やること」の対象となるフィールドが同じテーブルのフィールドの場合、「やること」は変更された行にのみ適用されます(一部例外はあります)。
例:テーブル内のチェックボックスを押すと同じ行の文字列フィールドを編集不可にする。
今回はこれを使って、行によって計算の仕方を変えるカスタマイズをご紹介します!
Customineの基本的な事柄は、こちらの「はじめてのカスタマイズ」をご参照ください。
アプリのフォーム
以下の5フィールドを作成し、一つのテーブルにします。
フィールドタイプ | フィールド名 | フィールドコード | 備考 |
日付 | 日付 | 日付 | |
数値 | 単価 | 単価 | |
数値 | 個数 | 個数 | |
ラジオボタン | 単位 | 単位 | 選択肢
|
数値 | 合計 | 合計 |
やりたいこと
「単価」と「個数」を入力すると自動で合計金額を計算する。
なお、「個」と「ケース」の選択によって、合計金額を計算するときに個別での販売と12個入りのパッケージの2通りで計算する。
Customineの設定
個別販売の場合の計算
まずは「単位」が「個」の場合の設定をします。
条件
「フィールドの値を編集して値が変わった時」を使用します。
フィールド:テーブル内の計算に関わるすべてのフィールドを選択します。今回は「単価」「個数」「単位」を選択します。
一覧画面の鉛筆を押した時:一覧画面ではサブテーブルを編集出来ないので、どちらでも構いません。
さらに、今回は対象の行の「単位」が「個」の場合のみに限定したいので、「フィールド値が特定の値ならば」を追加します。
「フィールド値が特定の値ならば」も、変更された行のフィールドについてのみ判定します。(「フィールドの値を編集して値が変わった時」と「フィールド値が特定の値ならば」が同じテーブルのフィールドを対象とするとき)
また、「単価」か「個数」が空だと計算できず、エラーが表示されてしまうので、両方とも空でないときだけ計算するように「複数フィールドの全てが空でないならば」を追加しましょう。これは「複数フィールドのうちどれか1つ以上が空ならば」を反転して設定します。
やること
「フィールドに値をセットする」を選択します。
フィールド:セット先のフィールドです。今回は「合計」です。変更された行の「合計」にのみ入力されます。
値:「= 単価 * 個数」と入力します。この場合の「単価」と「個数」も、変更された行の「単価」と「個数」に置き換わります。
ケース販売の場合の計算
同様に、「単位」が「ケース」の場合の設定をします。1ケース12個入りという設定なので、入る金額は12倍です。
これで合計が自動で計算されるようになりました。ですが、いろいろな状況を考えると、もう少しアクションを足しておく必要があります。
「単価」「個数」が空になった場合の対応
今のままでは一度「合計」を計算した後に「単価」・「個数」を空にしても、「合計」はそのままです。
これでは「単価」・「個数」と「合計」の整合性がとれませんね?
そこで、「単価」・「個数」のどちらかが空になったら「合計」も空にしてしまいましょう。
「複数フィールドのうちどれか1つ以上が空ならば」を使うと、指定した複数フィールドの中に空のフィールドが1つもあれば条件に該当します。
やること
「フィールド値をクリアする」を使用します。これも同様に、テーブルの変更された行のみクリアします。
もし「合計」を空にしたくない場合は、代わりに「フィールドに値をセットする」で「0」を入力しましょう。
自動入力されるフィールドの編集不可
自動入力されるフィールドお決まりの編集不可ですが、今回はテーブル内のフィールドなので、少し勝手が違います。
これはいつもの「追加画面・編集画面を表示した時」に「フィールドを無効化する」アクションですが、テーブル内のフィールドの場合、これだけでは画面を表示したときに既にある行には適用されますが、新しく追加した行には適用されません。
そこで、条件「テーブルに行を追加した時」を使って、行が追加されるたびに編集不可にし直すアクションを設定する必要があります。
注意点
今回は1アクションで作成しているので問題ないのですが、「他のアクションの実行が完了した時」で繋いだ場合はテーブル全行に対して値のセットやクリアになります。
これはアクションを繋いだ時に変更した行の位置情報がなくなることが原因です。
意外と見落としがちなので注意してください。
テスト
全てのアクションの設定が完了したら、「kintoneアプリへ登録」し、動作チェックしてみましょう。
チェックポイント
「単位」が「個」か「ケース」かによって計算方法が変わる。
「単価」か「個数」を空にすると「合計」も空になる。
「合計」が常に編集不可である。
終わりに
サブテーブルの操作はクセがあり、JavaScriptでのカスタマイズはより複雑になってしまいます。Customineでサブテーブルを操作するのも少しコツが要りますが、慣れると行ごとに別々の処理をさせることが可能です!
組み合わせをいろいろ試して目指す動きにたどり着いてください!
Customineヘルプやサポートをご活用ください。