メモ
コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。
この記事では、ディメンション エントリ コントロールと関連する Controller クラスについて説明します。
一般的なアプローチ
設計の目的は、コントロールの実装をカプセル化することです。ページがコントロールをサポートするクラスと対話する必要はありません。 この設計に合わせて、すべてのページは Dimension Entry コントロール インスタンス API とのみ対話し、LedgerDimensionEntryController、LedgerDefaultDimensionEntryController などのコントローラー クラスとは直接対話しないようにする必要があります。操作されたプロパティ、またはコントローラーで呼び出されたメソッドは、コントロールで呼び出す必要があります。
メモ :
- アップグレード スクリプトは、constructInGroupWithValues() メソッドおよび constructInTabWithValues() メソッドを使用して作成された分析コード エントリ コントロールのみを処理します。 他のコントロールは手動でアップグレードする必要があります。
- アップグレード スクリプトは、ヘルパー メソッドのパラメーターとして送信された分析コード エントリ コントロールを処理しません。 このコードは手動でアップグレードする必要があります。
- Dynamics AX 2012 では、既定のディメンション コントロールのコンテナーが、 必要なアクセス許可 = Manual を設定してセキュリティ保護可能なコントロールとして定義されている可能性があります。 コントロールへのアクセスは、セキュリティ モデルで付与されているため、アクセスを正しく表示および管理することができました。 既定の分析コードのコントロールは、デザイン時のエクスペリエンスになりました。 そのため、フォームでは、セキュリティ保護可能なコントロールとしてコントロールのコンテナーを定義する必要がなくなりました。 ほとんどの場合、手動の設定を削除するためにメタデータを制御するフォームを更新して、セキュリティ モデルのコントロールへの参照を削除する必要があります。 この設定は、ディメンションエントリコントロールに対するきめ細かいセキュリティ制御を維持するために使用される場合は 、手動 として残すことができます。
- Dynamics AX 2012 では、parmAttributeSetDataSource および parmAttributeValueSetDataSource がデータ ソースと既定の分析コード コントロールに関連付けられたデータ ソースのフィールドを設定するために使用されていました。 通常、これらは、DimensionDefaultingController インスタンスを構築した直後に、フォームの init メソッドで設定されました。 すべての呼び出し parmAttributeSetDataSource および parmAttributeValueSetDataSource はアップグレード後に削除されます。 これらの呼び出しの値を使用して、アップグレードされたコントロールのメタデータを設定します。 アップグレード後、これらの呼び出しをすべて削除した後、フォームが正常に機能していることを確認するために、フォームをチェックする必要があります。
- ディメンション入力コントロールはフォーム デザインでモデル化されるようになりました。 分析コードの入力管理を検索するには、デザイン要素を展開するか、フォーム デザインで "DimensionEntry" を検索します。 新しいコントロールは次のようになります。
プロパティ
分析コード エントリ コントロールのカスタム プロパティは、コントローラー グループの下にあります。
プロパティの詳細
| プロパティ | 有効な値 | 用途 |
|---|---|---|
| キャプション テキスト | すべてのラベル | コントロールのキャプション。 |
| コントローラー クラス | 8 つのコントローラー クラスのうちの 1 つ。 たとえば、LedgerDefaultDimensionEntryController | 分析コード エントリ コントロールの動作を決定します。 このプロパティの詳細については以下で説明します。 |
| データ ソース | フォーム データ ソース一覧のデータ ソース | ここで指定するデータソースは、値データフィールドプロパティおよび/または列挙データフィールドプロパティで指定したフィールドを保持するテーブルをポイントする必要があります。 |
| Enum Data フィールド | データ ソース プロパティに指定されたデータ ソースによって参照されるテーブルのフィールドです。 | これは、列挙型に格納されているフィールドです。 コントロールが列挙を使用していない場合は、このプロパティを指定しないでください。 |
| 列挙 | 任意の列挙。 たとえば、NoYes | コントロールで使用する列挙型です。 列挙型は、分析コード値の代わりにコントロールによって使用されます。 |
| 値 データ フィールド | データ ソース プロパティに指定されたデータ ソースによって参照されるテーブルのフィールドです。 | これは、分析コード エントリ コントロールがバインドされているフィールドです。 |
コントローラー クラス プロパティ
各コントローラーの詳細は、以下のテーブルを参照してください。
| コントローラー | 細目 |
|---|---|
| BudgetDefaultDimensionValueSet | このコントローラーは、分析コード エントリ コントロールの既定値のデータ入力を、予算ベースでサポートしています。 予算の既定分析コードでは、主勘定分析コードが必要です。 |
| PurchReqDefaultDimensionValueSet | このコントローラーは、分析コード エントリ コントロールの既定値のデータ入力を、PurchReq ベースでサポートしています。 PurchReq の既定分析コードでは、主勘定分析コードが必要です。 |
| LedgerDefaultDimensionValueSet | このコントローラーは、分析コード エントリ コントロールの既定値のデータ入力を、元帳ベースでサポートしています。 既定の分析コードでは、値が指定されていない行の名前列に「既定値なし」という語句が表示されている必要があります。 このコントローラーは、通常、設定、マスター データ、およびヘッダー レコードで使用します。 |
| LedgerDimensionValueSet | このコントローラーは、分析コード エントリ コントロールのデータ入力の元帳に基づくサポートを提供します。 このコントローラーは通常、明細行品目またはトランザクション データに使用されます。 |
| InventSiteLockedDimensionValueSet | このコントローラーは、InventSite フォーム専用の分析コード エントリ コントロールのデータ入力をサポートします。 |
| InventSiteLinkedDimensionValueSet | このコントローラーは、在庫ディメンション リンク設定によって要求される動作の分析コード エントリ コントロールのデータ入力をサポートします。 このコントローラーでは、会社が変更されたときに、特別な方法で、コントロールを更新します。 |
| InventSiteSMAItemDimensionValueSet | このコントローラーは、在庫ディメンション リンク設定によって要求される動作の分析コード エントリ コントロールのデータ入力をサポートします。 |
| InventSiteTmpLedgerBaseLinkedDimensionValueSet | このコントローラーは、在庫ディメンション リンク設定によって要求される動作の分析コード エントリ コントロールのデータ入力をサポートします。 このコントローラーは、特に TmpLedgerBase テーブルの DefaultDimension フィールドで動作します。 |
いくつかの分析コード入力コントロールには、コントローラー プロパティが設定されていない可能性があります。 この場合、コントローラーはコントロールの値データ フィールドの EDT から推測されます。 一連の分析コード エントリ コントロールの特定のプロパティを以下に示します。 これらのプロパティは、上記の一般的なアプローチのセクション (DimensionEntryControlHeader) で選択した、分析コード入力コントロールの PurchTable フォームのプロパティです。 この分析コード エントリ コントロールは、PurchTableのTable テーブルの DefaultDimension フィールドを使用しています。 PurchTable の DefaultDimension フィールドの拡張データ型プロパティは、LedgerDefaultDimensionValueSet (以下を参照) に設定されます。 実行時に、この EDT は LedgerDefaultDimensionEntryController にマップされます。 DimensionEntryControlHeader コントロールは、この場合、LedgerDefaultDimensionEntryController を使用します。 次の例は、EDT と、それらがマップされているコントローラーを示しています。
拡張データ型およびマップされるコントローラー
| 拡張データ型 | コントローラー |
|---|---|
| BudgetDefaultDimensionValueSet | BudgetDefaultDimensionEntryController |
| PurchReqDefaultDimensionValueSet | PurchReqDefaultDimensionEntryController |
| LedgerDefaultDimensionValueSet | LedgerDefaultDimensionEntryController |
| LedgerDimensionValueSet | LedgerDimensionEntryController |
| InventSiteLockedDimensionValueSet | InventSiteLockedDimensionEntryController |
| InventSiteLinkedDimensionValueSet | InventSiteLinkedDimensionEntryController |
| InventSiteSMAItemDimensionValueSet | InventSiteSMAItemDimensionEntryController |
| InventSiteTmpLedgerBaseLinkedDimensionValueSet | InventSiteTmpLedgerBaseLinked- DimensionEntryController |
スクリプト TODO のアップグレード
Dynamics AX 2012
/* TODO: (Code Upgrade) [Dimension entry control]
Replace this based on the migration guidance. */
DimensionEntryControl.reactivate();
財務と運用
reactivate メソッドは、分析コード エントリ コントロールを現在の設定でリフレッシュします。 このメソッドは、会社または表示された分析コード リストが変更された場合にのみ、コントロールを更新します。 この呼び出しは、これらのどちらも以前に変更されていない場合に削除できます。 それ以外の場合は、呼び出しはそのままにしておきます。 parmCompany() が reactivate() の直前に呼び出され、それが reactivate() の前に呼び出される唯一の DEC API であり、それが存在するメソッドがデータソースの active() の間に呼び出される場合は、パフォーマンスを向上させ、コードの取り込みを減らすために最適化を手動で行うことができます。
データ ソースのアクティブ プロセス中に、parmCompany() および reactivate() 呼び出しを削除します。
最初のユーザーとフォームとのやりとりの前に呼び出されるフォーム init()、run()、datasource init()、または同様のメソッドでは、次のコード行を追加します。
DimensionEntryControl.parmCompanyReference( fieldStr([myTable], [myCompanyContextField]);この変更により、DEC は、アクティブなレコードが変更されたときに更新される会社フィールド参照を自動的に検索し、それに応じてディメンションの一覧を更新できます。
メモ
これを parmDisplayedDimensionSet() の使用と組み合わせることはできません。そうしないと、ディメンションのリストが予期したものではありません。 会社の選択フィールドの変更されたメソッドなど、他のすべての場所では、データ ソースがその時点で読み取られる過程に含まれていないので、会社の変更を直ちに反映するために parmCompany() を呼び出す必要があります。
Dynamics AX 2012
/* TODO: (Code Upgrade) [Dimension entry control]
Replace this based on the migration guidance. */
DimensionEntryControl.setEditability(true, 0);
財務と運用
特定の編集可能なディメンション セットが必要な場合は、この呼び出しを次のように置き換えます。
DimensionEntryControl.parmEditableDimensionSet(
editableDimensionSet);
メモ
editableDimensionSet パラメーターのタイプは、 DimensionEnumeration です。
Dynamics AX 2012
/* TODO: (Code Upgrade) [Dimension entry control]
This method can be removed if there is
no custom implementation */
// dimensionDefaultingController.pageActivated();
財務と運用
このコールを、分析コード エントリ コントロールの親コントロールの pageActivated メソッドまたは Form Init メソッド内で実行する場合、削除することができます。 上記の場所以外のメソッド呼び出しの意図は明確ではありません。 呼び出しを削除して、コントロールをテストします。
Dynamics AX 2012
/* TODO: (Code Upgrade) [Dimension entry control]
Replace this based on the migration guidance. */
DimensionEntryControl.deleted();
財務と運用
TODO は、データ ソースの削除メソッドの外で delete() が呼び出される場合に残されています。 これらの呼び出しは、データ ソースの削除メソッドにのみ含まれると想定されており、置き換えはありません。 呼び出しを削除して、コントロールをテストしてみてください。
Dynamics AX 2012
/* TODO: (Code Upgrade) [Dimension entry control]
Replace this based on the migration guidance. */
// dimensionDefaultingController.writing();
財務と運用
ディメンション エントリ コントロール フレームワークは値を保存します。 呼び出しを削除して、コントロールをテストします。
Dynamics AX 2012
/* TODO: (Code Upgrade) [Dimension entry control]
Replace this based on the migration guidance. */
dimensionDefaultingController::findBackingEntityInstance();
財務と運用
エンティティを検索するには、getEntityInstance メソッドを DimensionAttributeValue から呼び出す必要があります。 この呼び出しを次のようなものに置き換えます。
DimensionAttributeValue dimAttrValue =
DimensionAttributeValue::
findByDimensionAttributeAndValueNoError(
dimensionAttributeTable, dimensionValue);
if (dimAttrValue) {
common = dimAttrValue.getEntityInstance();
}
Dynamics AX 2012
/* TODO: (Code Upgrade) [Dimension entry control]
Replace this based on the migration guidance. */
DimensionEntryControlHeader.updateValues(NoYesUnchanged::Yes);
財務と運用
ここに 1 つのパラメーターがある場合のみ updateValues() メソッドが呼び出されるため、呼び出しは allowEdit() の呼び出しに置き換えることができます。
DimensionEntryControlHeader.allowEdit(
NoYesUnchanged::Yes);
Dynamics AX 2012
/* TODO: (Code Upgrade) [Dimension entry control]
Replace this based on the migration guidance. */
DimensionEntryControlHeader.updateValues(
NoYesUnchanged::No, true);
財務と運用
この場合、updateValues() の呼び出しには 2 つのパラメーターがあるので、コントロールの編集機能を変更するには allowEdit() の呼び出しと置き換え、コントロールの値をクリアするには loadAttributeValueSet() の呼び出しと置き換える必要があります。
DimensionEntryControlHeader.allowEdit(
NoYesUnchanged::No);
DimensionEntryControlHeader.loadAttributeValueSet(0);
メモ
updateValues メソッド呼び出しの最初のパラメーターが NoYesUnchanged::Unchanged の場合、allowEdit の新しい呼び出しは必要ありません。 同様に、updateValues メソッド呼び出しの 2 番目のパラメーターが false の場合、loadAttributeValueSet の呼び出しは必要ありません。
削除する可能性のあるメソッド
カスタム ロジックがない場合は、ディメンション エントリ コントロールを保持するデータソースまたはタブページ/グループの残っているメソッドを削除できます。 次の表は、削除する必要があるカスタマイズのないメソッドの例を示しています。
Dynamics AX 2012
public int active(){int ret;ret = super();return ret;}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public void delete(){super();}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public void deleted(){super();}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public void deleting(){super();}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public boolean validateDelete(){boolean ret;ret = super();return ret;}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public void write(){super();}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public void writing(){super();}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public void written(){super();}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public boolean validateWrite(){boolean ret;ret = super();return ret;}
財務と運用
このメソッドはデータ ソース上にあります。 カスタム ロジックがない場合は削除できます。
Dynamics AX 2012
public void pageActivated()
{
super();
/* TODO: (Code Upgrade) [Dimension entry control] This method can be removed if
there is no custom implementation */
// dimensionDefaultingController.pageActivated();
}
財務と運用
このメソッドは、[ディメンションエントリ] コントロールを保持するタブページまたはグループ上にあります。 カスタム ロジックがない場合は、メソッドを削除できます。
コンパイル エラー
このセクションでは、残される可能性がある一般的なコンパイル エラーに対処する方法について説明します。
Dynamics AX 2012
フォームで (PurchTable)。
purchTableForm.parmDimensionDefaultingControllerHeader(
dimensionDefaultingControllerHeader);
クラス内 (PurchTableForm):
public DimensionDefaultingController
parmDimensionDefaultingControllerHeader(
DimensionDefaultingController
_dimensionDefaultingControllerHeader =
dimensionDefaultingControllerHeader)
{
dimensionDefaultingControllerHeader =
_dimensionDefaultingControllerHeader;
return dimensionDefaultingControllerHeader;
}
財務と運用
フォームで (PurchTable)。
purchTableForm.parmDimensionEntryControlHeader(
DimensionEntryControlHeader);
クラス内 (PurchTableForm):
public DimensionEntryControl
parmDimensionEntryControlHeader(
DimensionEntryControl
_dimensionEntryControlHeader =
dimensionEntryControlHeader)
{
dimensionEntryControlHeader =
_dimensionEntryControlHeader;
return dimensionEntryControlHeader;
}