前回の記事「CDSのエンティティのフィールドに計算式を設定」では明細テーブルを作成し、単価×数量=金額という計算ができるように項目を設定しました。今回はこの明細テーブルにヘッダーテーブルを紐づけて伝票形式で入力するフォームを作成します。
1. ヘッダーテーブルを作る
まずはヘッダーのテーブルを定義。サイドメニューから「データ」>「エンティティ」を選択し、「+エンティティの新規作成」を選択。
前回同様にエンティティ名とプライマリーフィールドを定義。ここでは細かい定義はできないので、そのまま完了。
作成されたプライマリーフィールドをクリック。
表示名をわかりやすく修正し、プライマリフィールドを自動採番にする。データ型をオートナンバーにし、任意項目にする。オートナンバーは保存時に採番されるが、必須チェックは保存前にチェックされるので「必須」にすると保存できなくなる。地味に最初はハマるポイント。プレフィックスはお好みで設定。設定したら「完了」。
この辺で一旦保存しておく。
保存された。
2. ヘッダーと明細のエンティティを紐づける
続いて作成したヘッダーエンティティと明細エンティティを紐づける。明細のエンティティを選択。
紐づけの前に明細のエンティティの名前を修正しておく。必須ではないが、「明細行演算テスト」のままだとわかりにくいので。。エンティティの定義画面から「…」ボタンを押して「設定」を選択。
エンティティの表示名を修正する。なお、技術名(crccr_Z_LineAmountCalcTest)は変更できない。(名づけに失敗したとちょっと後悔。。)
名称を変更したら「完了」。
エンティティの名称が変更されたことを確認したら、いよいよ紐づけの設定を行う。明細のエンティティにヘッダーエンティティと紐づけるための項目を作成する。「+フィールドの追加」を選択。
紐づける追加項目を作成。名称は特に決まりはない。データ型に「参照」を指定する。すると参照するエンティティを指定する項目が現れるためヘッダーのエンティティを指定する。
※ヘッダーのエンティティを指定するだけで項目を指定しないのは正直気持ち悪い。本当はここで明示的に指定したいところ。裏側では明示的に紐づけ先項目が記述されている。それは別の画面から見ることができる。
ヘッダーエンティティと紐づけるための項目が作成された。
見た目をわかりやすくするため、ラインのIDの名称を併せて変更しておく。「LineID」をクリック。
表示名をわかりやすく変更して「完了」。
名称が変更された。ここでエンティティを保存。
3. 明細のフォームを修正
明細エンティティにヘッダーIDを追加したのでフォームにも追加しておく。明細エンティティのフォームから「フォームの種類」が「Main」の行を選択し、「編集フォーム」をクリック。
左側のヘッダーIDをドラッグ&ドロップしてLineIDの上に追加する。
追加された。
ラインIDの名称を変更しておく。(必須ではないが見やすくするため。)
LineIDのパーツを選択し、右側のプロパティでフィールドラベルを修正する。
修正が反映されたことを確認し、保存。
保存したら公開。
公開したら戻る。
4. 明細行のビューを修正する
伝票形式の入力画面では明細行は表形式で表示したい。表形式の画面はビューで定義する。明細行エンティティの「ビュー」タブを選択。
ビューの種類が「共有ビュー」になっている「アクティブな~」のビューを選択し、「編集ビュー」をクリック。(余談だが、ボタン名は「ビューの編集」が適切だと思う。)
デフォルトで作成されているビューなのでプライマリフィールドと作成日しか存在しない。ここに単価や数量、金額などを配置する。フォームの編集と同様に左側の枠に一覧表示されている項目を中央の枠に配置していく。
ヘッダーID、単価、数量、金額などを適宜配置。配置したら保存。
保存したら公開。
公開したら戻る。
5. 伝票フォームを作成する
いよいよ伝票形式のフォームを作成する。
ヘッダーエンティティに移動し、フォームタブを選択。フォームの種類が「Main」の行をクリック。
初期状態ではプライマリフィールドと所有者のみが表示されている。伝票形式のフォームを作るうえでは特に問題ないが、少し画面が寂しいのでいくつか追加してみる。ステータスと作成日を追加する。(ドラッグ&ドロップのやり方は明細行のフォームと同じなので割愛)
作成日とステータスが追加された。
ここからがいよいよ本題。この画面に明細の一覧画面を追加する。左側の「コンポーネント」を選択すると、、
コンポーネント編集用の枠が左側に表示された。まずはセクションを追加する。1列のセクションをドラッグ&ドロップで「全般」セクションのしたあたりに配置する。
新しいセクションが追加された。このセクションに明細行の一覧を配置する。そのためにはコンポーネント枠の下のほうにある関連ビューの下の「サブグリッド」を使用する。
サブグリッドを新しいセクションにドラッグ&ドロップする。
追加するサブグリッドはどのエンティティのどのビューなのか指定するよう要求される。このままだと全部のエンティティから選ぶことになるので、、
関連レコードの表示にチェックを入れる。すると、ヘッダーエンティティとの紐づけが存在するエンティティのみが表示され、指定しやすくなる。エンティティには明細エンティティを指定、ビューには「アクティブな~」を指定する。
新しいセクションに明細のビューが追加され、一覧ぽく表示されている。
画面を拡大するとこのようになる。明細の項目として単価や数量、金額などが表示されていることがわかる。
「新しいセクション」という名称を「明細行」に変更する。必須ではないがこのほうが見やすいので。セクションを選択して右側のプロパティから変更できる。なお、セクションの選択とサブグリッドの選択が微妙で、セクションを選択したつもりがサブグリッドを選択してたりするので注意が必要。
ここで保存して公開して戻る。
伝票形式のフォームの作成はこれで一旦完了。(アラはあるけど、後で直すことにする。)
6. 伝票形式のフォームでデータ入力
いよいよデータを登録する。ヘッダーエンティティのデータタブから「レコードの追加」を選択。
すると以下のフォームが起動する。明細行が明細行っぽくないが、、気にせず進める。
ヘッダーIDがブランクになっている。ここは自動採番にしたはず。何も入力せずに上書き保存を押してみると、、
自動採番されたIDがヘッダーIDにセットされた!ついでに作成日もセットされた!
(本音を言うと、D365BC屋的にはEnter押したり項目をロストフォーカスしたタイミングで採番してほしかったりする。)
そして明細行が明細行っぽくなった。「明細行の新規作成」を押してみる。
明細行の入力フォーム画面が起動する。ラインIDはブランク。ここも自動採番にしたはず。何もせずに上書き保存してみる。
ラインIDが自動採番された。
単価、数量を入力して「最新の情報に更新」をクリック。
金額が自動計算されたことを確認して保存して閉じる。
明細行が登録された。伝票っぽくなってきた。
同じ要領で明細行をもう1行作ってみる。より伝票っぽくなってきた。
7. まとめ
- 明細エンティティにヘッダーエンティティと紐づける項目を作成し、「参照」タイプでヘッダーエンティティを紐づける。(システム的にはヘッダーID、業務的には伝票番号)
- ヘッダーエンティティのフォームにサブグリッドを追加し、サブグリッドに明細エンティティのビューを追加する。
明細行を入力しようとするといちいちフォームが開くのは面倒ですね。。ここは表形式で直接入力したいところ。次回は表形式で直接入力できるようにします。
1件のコメント