Merhaba. Daha önce yazdığım bu yazıda AX 2012 için çeşitli boyut işlemlerinin nasıl yapıldığından bahsetmiştim. Dynamics 365 F&O ile birlikte boyut güncelleme işlemleri için eskiden kullandığımız bazı sınıflar (AxdDimensionUtil) artık yok.
Bende kolları sıvadım ve Dynamics 365 ile yeni gelen boyut sınıflarını tespit ettim. DefaultDimension’ları tek satırda kolayca okuyup güncellemeye yardımcı olacak, çeşitli kontrolleri otomatik yapacak yardımcı bir sınıf hazırladım.
Kaynak kodlarına yazının sonundan erişebilirsiniz.
Kullanım
DefaultDimension içindeki bir boyutu okuma
GvnDimensionHelper::getDimensionValue(defDim, #CostCenter);
DefaultDimension’ı sıfırdan yaratmak
GvnDimensionHelper::updateDefaultDimension(0, #CostCenter, "015");
Mevcut bir DefaultDimension içindeki boyut değerini güncelleme
GvnDimensionHelper::updateDefaultDimension(defDim, #CostCenter, "015");
Parametreler
targetDimValueMustEmpty: Bu parametre true ise güncellenmek istenen boyut değerinin boş olup olmadığı kontrol edilir. Boş ise güncelleme yapılır, değil ise yapılmaz. Mevcutta değeri dolu olan bir boyutu yanlışlıkla ezmemek gereken durumlarda kullanabilirsiniz.
GvnDimensionHelper::updateDefaultDimension(defDim, #CostCenter, "015", true);
isCustomDimVal: DefaultDimension içinde custom yani tamamiyle kullanıcı tarafından oluşturulan değerlere sahip boyutları güncellemek için kullanılır. True verildiğinde boyut için girilen değer DimensionFinancialTag tablosunda aratılır, yok ise oluşturularak güncelleme işlemine devam edilir.
GvnDimensionHelper::updateDefaultDimension(defDim, #IthalatDosyaNo, "A10051", false, true);
Kaynak Kodları
/// <summary>
/// created by: Güven Şahin - guvensahin.com
/// default dimension'ı tek satır kod ile kolayca güncellemeye yarar.
/// </summary>
public class GvnDimensionHelper
{
public static str getDimensionValue(RecId defaultDimension, Name dimName)
{
DimensionAttributeValueSetStorage dimStorage;
DimensionAttribute dimAttribute;
;
dimStorage = DimensionAttributeValueSetStorage::find(defaultDimension);
dimAttribute = DimensionAttribute::findByName(dimName);
return dimStorage.getDisplayValueByDimensionAttribute(dimAttribute.RecId);
}
private static void createCustomDimensionValue(str _dimName, str _customDimVal)
{
DimensionAttribute DimensionAttribute;
DimensionFinancialTag DimensionFinancialTag;
RecId financialTagCategory;
;
if (_dimName && _customDimVal)
{
DimensionAttribute = DimensionAttribute::findByName(_dimName);
if (DimensionAttribute)
{
financialTagCategory = DimensionAttribute.financialTagCategory();
// değer zaten tanımlıysa tekrar oluşturmaya gerek kalmaz.
if (!DimensionFinancialTag::findByFinancialTagCategoryAndValue(financialTagCategory, _customDimVal))
{
DimensionFinancialTag.clear();
DimensionFinancialTag.FinancialTagCategory = financialTagCategory;
DimensionFinancialTag.Value = _customDimVal;
DimensionFinancialTag.Description = _customDimVal;
DimensionFinancialTag.insert();
}
}
}
}
public static DimensionDefault updateDefaultDimension(
DimensionDefault _defaultDimension,
str _dimName,
str _dimValue,
boolean _targetDimValueMustEmpty = false,
boolean _isCustomDimVal = false)
{
DimensionDefault ret = _defaultDimension;
;
if (!_dimName)
{
throw error("@GvnUtil:DimNameNotFound");
}
try
{
ttsBegin;
// değer custom ise önce yaratılır
if (_isCustomDimVal)
{
GvnDimensionHelper::createCustomDimensionValue(_dimName, _dimValue);
}
// boyut var ise güncelleştirilir.
if (_defaultDimension)
{
// _targetValueMustEmpty parametresi true ise güncellenecek boyut değeri boş olmalı. halihazırda değer var ise güncelleme yapılmaz.
if (!_targetDimValueMustEmpty
|| !GvnDimensionHelper::getDimensionValue(_defaultDimension, _dimName))
{
DimensionAttributeValueSetStorage dimStorage = DimensionAttributeValueSetStorage::find(_defaultDimension);
DimensionAttribute dimAttribute = DimensionAttribute::findByName(_dimName);
if (_dimValue)
{
DimensionAttributeValue dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttribute, _dimValue, true, true);
dimStorage.addItem(dimAttributeValue);
}
else
{
dimStorage.removeDimensionAttribute(dimAttribute.RecId);
}
ret = dimStorage.save();
}
}
// boyut yok ise yaratılır.
// dimVal mutlaka dolu olmalı
else if (_dimValue)
{
DimensionAttributeValueContract contract = DimensionAttributeValueContract::construct(_dimName, _dimValue);
List listDimension = new List(Types::Class);
listDimension.addEnd(contract);
DimensionNameValueListContract listContract = new DimensionNameValueListContract();
listContract.parmValues(listDimension);
DimensionStorageResult result = DimensionNameValueListServiceProvider::newForDimensionNameValueListContract(listContract).resolve();
ret = result.parmSavedRecId();
}
ttsCommit;
}
catch
{
error("@GvnUtil:DimUpdateFailed");
}
return ret;
}
}