![]() |
#2 |
Banned
|
Не уверен, есть ли в AX2012 метод типа LedgerDimensionFacade::replace...()
Вот код, который написал вчера на сходную темy X++: DimensionDefault affiliateDimensionDefault;
LedgerDimensionBase ledgerDimensionAffiliate;
// Add or replace the Affiliate dim segment with the origin IC company ID
affiliateDimensionDefault = EGCDimensionAffiliateHelper::getDefaultDimensionForCompany(_parameters.parmOriginatingCompany());
ledgerDimensionAffiliate = LedgerDimensionFacade::serviceCreateLedgerDimForDefaultDim(affiliateDimensionDefault, interCompanyTrans.LedgerDimension);
interCompanyTrans.LedgerDimension = LedgerDimensionFacade::serviceMergeLedgerDimensions(interCompanyTrans.LedgerDimension, ledgerDimensionAffiliate); Ну и класс-хелпер впридачу: X++: /// <summary> /// Eugen Glasow: /// Part of the 20929 "Add 'Affiliate' dimension to intercompany GL vouchers" user story /// Identify the Affiliate dim, find an attribute value by str etc. /// </summary> public class EGCDimensionAffiliateHelper { private const GlobalObjectCacheScope sgocScope = classStr(EGCDimensionAffiliateHelper); private const int sgocKey = 1; /// <summary> /// Affiliate is the only dimension backed by the Legal entity, and will ever be /// </summary> /// <returns>The RecId of the dimension Affiliate</returns> public static DimensionAttributeRecId getAffiliateAttributeRecId() { SysGlobalObjectCache sgoc = classFactory.globalObjectCache(); DimensionAttributeRecId ret; [ret] = sgoc.find(sgocScope, [sgocKey]); if (! ret) { ret = (select firstonly RecId from DimensionAttribute where DimensionAttribute.BackingEntityType == tableNum(DimAttributeCompanyInfo)).RecId; sgoc.insert(sgocScope, [sgocKey], [ret]); } return ret; } /// <summary> /// Affiliate is the only dimension backed by the Legal entity, and will ever be /// </summary> /// <returns>The record of the dimension Affiliate</returns> public static DimensionAttribute getAffiliateAttribute() { return DimensionAttribute::find(EGCDimensionAffiliateHelper::getAffiliateAttributeRecId()); } /// <summary> /// DimAttributeCompanyInfo is the same as CompanyInfo but just 3 major fields, join the dimValues with CompanyInfo /// </summary> /// <param name = "_dataAreaId">Company ID</param> /// <returns>Affiliate attribute value backed by the given company</returns> public static DimensionAttributeValue getAffiliateAttributeValueByDataAreaId(DataAreaId _dataAreaId = curExt()) { DimAttributeCompanyInfo dimAttributeCompanyInfo; DimensionAttributeValue affiliateAttributeValue; // As fast as it can be, little overhead select firstonly affiliateAttributeValue where affiliateAttributeValue.DimensionAttribute == EGCDimensionAffiliateHelper::getAffiliateAttributeRecId() exists join dimAttributeCompanyInfo where dimAttributeCompanyInfo.Key == affiliateAttributeValue.EntityInstance && dimAttributeCompanyInfo.Value == _dataAreaId; if (! affiliateAttributeValue) { // A mirror dimensionAttributeValue record shall actively be created for the company if not exists affiliateAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue( EGCDimensionAffiliateHelper::getAffiliateAttribute(), _dataAreaId, false, true); // Create if needed } return affiliateAttributeValue; } /// <summary> /// Make or fetch a DimensionDefault set with one Affiliate segment for the given companyId, /// Use it in a Merge with a ledger main account or other dimensions or both /// </summary> /// <param name = "_dataAreaId">Company ID</param> /// <returns>Dimension set with one Affiliate</returns> public static DimensionDefault getDefaultDimensionForCompany(DataAreaId _dataAreaId) { DimensionAttributeValueSetStorage valueSetStorage = new DimensionAttributeValueSetStorage(); valueSetStorage.addItem(EGCDimensionAffiliateHelper::getAffiliateAttributeValueByDataAreaId(_dataAreaId)); DimensionDefault dimensionDefault = valueSetStorage.save(); return dimensionDefault; } } |
|
|
За это сообщение автора поблагодарили: Ace of Database (10). |
|
|