Dynamics 365 F&O Finansal Boyut İşlemleri (Default Dimension)

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;
    }
}
Yazıyı Paylaş

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir