
物品購入申請のためのワークフローアプリなどには、お金に関する自動計算機能を付けたくなりますね。小計・合計の計算はもちろん、条件によって計算式を変えたいというケースもアプリによっては出てくるでしょう。
今回は、購入物品リストから合計金額を計算することに加え、「合計金額が 10 万円以上の場合、10 万円を超えた分について 5 割引」という、ワークフロー図上での処理の分岐を含む割引計算の実装方法も紹介します。アプリ設計の要は、テーブル型データ項目とデータ更新オブジェクトです。
テーブル型データ項目を用いた合計金額の計算
まずはテーブル型データ項目を用いて購入物品リストの入力を受け付け、合計金額を自動計算するアプリを作成しましょう。
ワークフロー図
新規アプリを作成し、まずは次のワークフロー図を作成してください。

データ項目
用意するデータ項目は次の通りです。
データ項目名 | データ型 | フィールド名 | 備考 |
件名 | 文字型・単一行 | ||
購入品目 | テーブル型 | q_purchase_list | 品名(文字)・単価(数値)・数量(数値)・小計(数値)の 4 項目 |
合計 | 数値型 | q_total | 集計が自動的に入る: 購入品目–小計 |
「購入品目」設定
テーブル型データ項目である「購入品目」は次のように設定してください。テーブル項目を追加する必要があります。「品名」「単価」「数量」「小計」の 4 項目を追加してください。

「小計」にはテーブル各行の小計を計算して保存します。「テーブルの下に集計が表示される」にもチェックを入れてください。また、集計を表示する設定がされた列ではフィールド名の設定が必須となります。忘れずに設定してください。(このフィールド名では “q_” で始まる必要はありません)

そして、データ項目「合計」の設定ダイアログを用いて、テーブル型の集計値を「合計」に保存します。式は自動でテキストボックスに挿入されます。

データ編集許可設定
次のように設定してください。
入力 | 確認 | |
件名 | 編集可 | 表示のみ |
購入品目 | 編集可 | 表示のみ |
合計 | 表示なし | 表示のみ |
これで、テーブル型データ項目を用いて購入品目リストから合計金額を計算するアプリが完成しました。一旦ここまでで編集の終了・リリースして、挙動を確認してみましょう。

「購入品目」に品物の単価と数量を入力してタスクを完了すると、「合計」に合計金額が保存されます。
データ更新を用いた割引計算
では続いて、「合計金額が 10 万円以上の場合、10 万円を超えた分について 5 割引」という処理を実装していきましょう。
ワークフロー図
先ほど作成したアプリをまた編集します。ワークフロー図を次のように変更してください。

「合計金額が 10 万円以上の場合」と「10 万円未満の場合」で処理を分岐させて、その先にそれぞれの場合の割引処理を設定した「データ更新」を設置します。これにより、「合計金額が 10 万円以上の場合、10 万円を超えた分について 5 割引」という処理を実現します。
「排他 (XOR) ゲートウェイ」設定
排他 (XOR) ゲートウェイを用いて、「合計」が 10 万円以上かどうかで処理を分岐させます。

「10 万円以上」の場合を表す分岐を作成し、遷移先を「割引処理」に設定してください。デフォルトフローの遷移先は「割引しない」に設定してください。
「合計」が 10 万円以上という条件なので、条件式設定は以下のようになります。

これで、「合計」が 10 万円以上のときは「割引処理」タスクに、10 万円未満のときは「割引しない」タスクにトークンが進むようになりました。
データ項目設定
割引処理後の金額を保存するため、「割引処理後合計」を追加してください。
データ項目名 | データ型 | フィールド名 | 備考 |
割引処理後合計 | 数値型 | q_discounted_total |
入力 | 確認 | |
割引処理後合計 | 表示なし | 表示のみ |
「データ更新」設定
「割引しない」と「割引処理」、2 つのデータ更新を設定しましょう。
割引しない
「合計」が 10 万円未満の場合の計算式を設定します。10 万円未満では割引を適用しないので、そのまま「合計」を「割引処理後合計」に保存しましょう。

割引処理
「合計」が 10 万円以上の場合の計算式を設定します。10 万円を超えた分について 5 割引するので、次のように設定しましょう。
100000 + (#q_total - 100000) * 0.5

数値型の場合、データ項目設定で定めた「小数点以下の桁数」以下の位については切り捨て処理が行われます。例えば「小数点以下の桁数」が 0 の場合、3 * 0.5 の計算結果は 1.5 の小数第一位を切り捨てて 1 になります。また、テーブル項目の数値型についても同様です。
アプリの設定は以上です。編集の終了・リリースして動作を確認しましょう。特に、「合計」による分岐処理がはたらいているかどうか、10 万円を超える分についての割引処理が間違いなく行われているかどうかを見てみてください。


数値型データ項目の設定ダイアログの演算式の利用
今回は処理の分岐に対応するため、割引計算は「データ更新」を用いて行いました。しかし、数値演算には数値型データ項目の設定ダイアログの演算式を用いることもできます。例えば以下のように設定すれば、「割引処理」タスクと同じ計算式で 5割引処理ができます。ただし、設定ダイアログの演算式では「10 万円以上の場合は 5 割引」というような条件分岐を設定できません。

数値型データ項目の設定ダイアログでは条件による計算式の変更などができませんが、処理分岐が必要ないアプリでは、この設定で十分でしょう。実装内容によって使い分けてください。
このように、テーブル型データ項目と「データ更新」を用いることで、様々な計算に対応できるようになります。条件によって計算式が変わってくるような面倒なお金の計算も、Questetra BPM Suite を用いて業務担当者の手を煩わせることなく、迅速に処理していきましょう!