Blog

(Turkish) DimensionAttributeLevelValue Kaydı Bulup Silme

(Turkish) DimensionAttributeLevelValue Kaydı Bulup Silme

Problem

Son kullanıcı yeni bir ana hesap / tedarikçi / müşteri / banka gibi bir ana veri yarattı. Sonrasında bu ana veriyi kullanarak finansal günlük(ler) yarattı ama deftere nakletmedi. Sonunda da başta yarattığı ana veriyi silmeye karar verdi ve silerken şöyle bir hata aldı:

An error occur: “A financial dimension value is based on the 1100 record and has been used on a transaction. You cannot delete the 1100 record”

Kullanıcının oluşturuduğu deftere nakledilmeyen tüm günlükleri sildiniz ama hata devam etmekte.

Çözüm

Günlüklerde ya da sistemin farklı yerlerinde ana hesap(Main Account), tedarikçi(vendor), müşteri(customer) gibi ana verileri kullandığınız zaman Dynamics AX Boyut Özelliklerini “Dimension attributes” tutmak için birçok tabloya kayıt atar. Örneğin herhangi bir ana hesabı silmek istediğinizde DimensionAttributeLevelValue tablosunda ilgili kayıt var mı diye kontrol edilecektir.

Tüm anaverileri için ortak kontrol DimensionValidation sınıfının canDeleteEntityValue metodunda yapılmaktadır. Eğer gerçekten ilgili ana verinin hareketleri bulunamaz ise DimensionAttribute ile başlayan tablolarda karşılık gelen kayıtlar silinir.

Aşağıdaki kod, master data silmeye çalışırken “DimensionAttributeLevelValue“ hatası verdiğinde kullanılabilir.

Job

Aşağıdaki job içeri alınır.

static void PRG_0000_CheckNotDeletedDimRecord_AYX(Args _args)

{

DimensionAttribute dimAttribute;

DimensionAttributeValue dimAttributeValue;

DimensionAttributeLevelValue dimAttributeLevelValue;

DimensionAttributeValueGroup dimAttributeValueGroup;

DimensionHierarchy dimHierarchy;

int i;

container concreteCompanies;

int concreteCompanyCount;

CompanyId currentConcreteCompany;

boolean canDelete;

SysDictTable tableToCheck;

TableId entityId;

RecId entityInstance;

DataAreaId dataAreaId;

RecId financialTagCategoryId;

// Convert the supplied table into the fields needed to check delete ability

[entityId, entityInstance, dataAreaId, financialTagCategoryId] = DimensionEnabledType::getFieldsForDeleteOrRename(CustTable::find(“M000001”, 0));

// Validate input parameters

if (!entityId || !entityInstance || !dataAreaId)

{

throw error(Error::wrongUseOfFunction(funcName()));

}

// Prevent deletion if the entity instance existsas a non-deleted DAV on any combination except for focuses

// This query is not cached as deleting backing entities will not be a common operation

select firstonly RecId from dimAttributeLevelValue

exists join dimAttributeValue where

dimAttributeValue.RecId == dimAttributeLevelValue.DimensionAttributeValue &&

dimAttributeValue.EntityInstance == entityInstance &&

dimAttributeValue.IsDeleted == false

exists join dimAttribute where

dimAttribute.RecId == dimAttributeValue.DimensionAttribute &&

dimAttribute.BackingEntityType == entityId

exists join dimAttributeValueGroup where

dimAttributeValueGroup.RecId == dimAttributeLevelValue.DimensionAttributeValueGroup

notExists join dimHierarchy where

dimHierarchy.RecId == dimAttributeValueGroup.DimensionHierarchy &&

dimHierarchy.StructureType == DimensionHierarchyType::Focus;

info(strFmt(“DimensionAttributeLevelValue.RecId : %1”, dimAttributeLevelValue.RecId));

}

Posted on
Posted in Blog