CDSのカスタムエンティティを使って伝票データを登録する方法について、必要な要素技術の解説をします。今回は項目式の計算について。受注伝票などでよくある「単価×数量=金額」を例に説明します。
1.エンティティの作成
まずは検証用のカスタムエンティティを作成。サイドメニューのデータ>エンティティから「+エンティティの新規作成」を選択。
エンティティの表示名と技術名を指定。併せてプライマリーフィールドを指定。適当に「LineID」などと指定。後ほど自動採番する予定。エンティティとプライマリーフィールドを指定したら「完了」をクリック。
続いて計算用のフィールドを指定していく。「+フィールドの追加」を選択して、
単価項目を作成。データ型は通貨を指定。
続けて数量項目を作成。データ型は10進数。
プライマリーフィールドの属性を変更する。プライマリーフィールドの表示名をクリック。
データ型をテキストからオートナンバーに変更する。オートナンバーの採番ルールを指定。自動採番されれば何でも良い。以下はプレフィックスをつけた例。プレフィックスと連番の桁数、連番の開始値を指定できる。プレビューで採番例を確認できる。
フィールドの定義ができたら一旦ここでエンティティを保存。
ここからが本題。計算させるフィールドを定義する。「+フィールドの追加」を選択。
単価×数量の結果を格納させる項目として「金額」を作成。通貨型を指定。「計算またはロールアップ」の「追加」の右のvボタンを押して「+計算」を指定。この指定は項目の新規作成時のこの画面でしかできない模様。(項目追加後に計算項目にしようとしても表示されない)
先に保存するよう促されるので保存する。
別ウィンドウで計算式の設定画面が表示される。条件を指定し、満たす場合に計算式を定義できる仕様。条件の追加を選んでみる。
初期値はこのようになっている。
各項目を変更すると設定できる項目が変わる。例えば演算子を「値が設定済」にすると演算子以降の項目は当然出てこない。以下の例では自動採番の項目に値が設定済であることを条件にしており必ずtrueになるようにした。(条件式の例示のためにこのようにしたが、常にtrueにするくらいならそもそも条件式を指定せずに計算式のみ定義するのが正しい。)
条件を保存すると以下のようになる。続いて「アクションの追加」を選択し、計算式を定義する。
計算式定義のエリアが開く。指定可能な関数が列挙されている。下のほうにスクロールすると、、
項目を指定できる。まずは単価項目をプルダウンから指定。
このように表示される。
演算子(例えば ”*” )を入力すると、次の選択肢がプルダウン表示されるので数量を選択。
単価×数量が記述された。右下のチェックマークを選択。
式が保存された。上の「保存して閉じる」を選択。
項目の計算式が保存され、以下の画面に戻る。「完了」を選択。
エンティティの項目への計算式の定義が完了。
2.データ入力用のフォームを作成
続けてデータを入力…と行きたいが、まずはデータを入力するためのフォームの修正が必要。「フォーム」タブをクリック。
デフォルトでは3つのフォームが表示されているはず。「Main」のフォームを選択する。
デフォルトではプライマリーキーのフィールドと所有者しか存在しないので項目を追加していく。
まずは単価項目を追加。左側の枠に表示されている項目を中央の枠にドラッグ&ドロップする。
同様に数量、金額も追加して保存。
保存後に公開。
公開されたら左上の「←戻る」を選択。
3.データ入力&計算の検証
いよいよデータを入力していく。「データ」タブから「+レコードの追加」を選択。
このような画面が開く。先ほどフォーム画面を修正した通りのレイアウトになっている。
単価と数量のみを入力して「上書き保存」を選択。
プライマリーフィールド(LineID)が自動採番され、金額が自動計算された。金額は先に設定した通り単価×数量の計算結果が格納されている。
計算はいつ行われるか?
画面上の数量を変更して別項目に移動した時点では再計算されない。ここで「最新の情報に更新」を押してみる。
すると再計算された。
データタブで「データの更新」ボタンを押して結果を確認すると反映されていることがわかる。つまり、フォーム画面の「最新情報に更新」ボタンは再計算&保存の効果がある。(保存時に再計算されるので単に保存の効果がある、が正確かもしれない。)
ちなみに、数量を変更してロストフォーカスした時点で、、
データタブでデータ更新しても反映はされていない。
あらためてフォーム画面で最新の情報に更新ボタンを押すと、、
再計算され、、
データタブにも反映される。つまり フォーム画面で保存または最新の情報に更新ボタンを押さないと保存されないようだ。
項目間の演算はいくつかの方法がありますが、単価×数量=金額のように必ず成り立つ数式はエンティティの項目レベルで定義するのが確実だと思います。
1件のコメント