Dynamics 365 の X++ コードから財務分析コード値を更新する
出版された: 2025年2月16日 12:01:17 UTC
この記事では、コード例を含め、Dynamics 365 の X++ コードから財務分析コード値を更新する方法について説明します。
このページは、できるだけ多くの人がアクセスできるように、英語から機械翻訳されたものです。残念ながら、機械翻訳はまだ完全な技術ではないため、エラーが発生する可能性があります。もしよろしければ、こちらでオリジナルの英語版をご覧ください:
Update Financial Dimension Value from X++ Code in Dynamics 365
Update Financial Dimension Value from X++ Code in Dynamics 365
この投稿の情報は Dynamics 365 に基づいています。Dynamics AX 2012 でも動作するはずですが、明示的にテストしていません。
最近、何らかのフォーム ロジックに基づいて単一の財務ディメンションの値を更新するというタスクが与えられました。
ご存知のとおり、Dynamics AX 2012 の財務分析コードは個別のテーブルに保存され、通常は DefaultDimension フィールドの RecId を通じて参照されます。
ディメンションを処理するためのフレームワーク全体はやや複雑で、私がそれほど頻繁に扱うものではないためか、ドキュメントを再度読み直す必要があることがよくあります。
とにかく、既存のディメンション セット内のフィールドを更新することは頻繁に発生するので、私のお気に入りのレシピを書いてみようと思いました ;-)
静的ユーティリティ メソッドは次のようになります。
public static DimensionDefault updateDimension( DimensionDefault _defaultDimension,
Name _dimensionName,
DimensionValue _dimensionValue)
{
DimensionAttribute dimAttribute;
DimensionAttributeValue dimAttributeValue;
DimensionAttributeValueSetStorage dimStorage;
DimensionDefault ret;
;
ret = _defaultDimension;
ttsbegin;
dimStorage = DimensionAttributeValueSetStorage::find(_defaultDimension);
dimAttribute = DimensionAttribute::findByName(_dimensionName);
if (_dimensionValue)
{
dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue( dimAttribute,
_dimensionValue,
true,
true);
dimStorage.addItem(dimAttributeValue);
}
else
{
dimStorage.removeDimensionAttribute(dimAttribute.RecId);
}
ret = dimStorage.save();
ttscommit;
return ret;
}
Name _dimensionName,
DimensionValue _dimensionValue)
{
DimensionAttribute dimAttribute;
DimensionAttributeValue dimAttributeValue;
DimensionAttributeValueSetStorage dimStorage;
DimensionDefault ret;
;
ret = _defaultDimension;
ttsbegin;
dimStorage = DimensionAttributeValueSetStorage::find(_defaultDimension);
dimAttribute = DimensionAttribute::findByName(_dimensionName);
if (_dimensionValue)
{
dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue( dimAttribute,
_dimensionValue,
true,
true);
dimStorage.addItem(dimAttributeValue);
}
else
{
dimStorage.removeDimensionAttribute(dimAttribute.RecId);
}
ret = dimStorage.save();
ttscommit;
return ret;
}
このメソッドは新しい (または同じ) DimensionDefault RecId を返すため、レコードのディメンション値を更新する場合 (おそらく最も一般的なシナリオ)、そのレコードのディメンション フィールドを新しい値で更新する必要があります。