Источник:
http://sumitsaxfactor.wordpress.com/...ion-2-ax-2012/
==============
Friends, I had posted one article on replacing financial dimensions within a ledger dimension sometime back. The job there was big and endless. I did some more research and was able to condense it a bit.
Here is the modified job:
staticvoid replaceLedgerDimensions1(Args _args)
{
#LedgerSHA1Hash
DimensionSHA1Hash hash; //To store the calculated hash for DimensionAttributeValueSet
HashKey valueKeyHashArray[]; //To store the has key of dimension in question
Map dimAttrIdx, dimAttrRecId; //to store the dimension index and backing entity type
DimensionAttributeSetItem dimAttrSetItem; // Contains the number of dimensions active for a account structure ledger
DimensionAttribute dimAttr; // Contains the financial dimensions records
DimAttributeHcmWorker dimAttrWorker; //Backing entity view for Employee type dimension
DimensionAttributeValue dimAttrValue; // Contains used financial dimension values
DimensionAttributeValueSet dimAttrValueSet; //Contains default dimension records
DimensionAttributeValueSetItem dimAttrValueSetItem; //Contains individual records for default dimensions
LedgerDimensionAccount sourceDimension = 5637145829, targetDimension; //Record Id DimensionAttributeValueCombination table in which attribute value is to be replaced
DimensionDefault sourceDefDimension, targetDefDimension; //To hold the default dimension combination from a Ledger dimension
LedgerDimensionDefaultAccount defaultLedgerAccount;
DimensionEnumeration dimensionSetId; //Record id for table that contains active dimensions for current ledger
int dimAttrCount, i;
int emplBackEntityType; //Stores the backing entity type for Employee type dimension
;
//The employee backing entity will be the view DimAttributeHcmWorker
emplBackEntityType = tableNum(DimAttributeHcmWorker);
//Initialize the map to store the backing entity types
dimAttrIdx = new Map(Types::Integer, Types::Integer);
dimAttrRecId = new Map(Types::Integer, Types::Int64);
//Get the record Id (dimension set id) for current ledger to find active dimensions
dimensionSetId = DimensionCache::getDimensionAttributeSetForLedger();
//Find all the active dimensions for current ledger except main account and store there
//backing entity type in the map
whileselect * from dimAttr
orderby Name
where dimAttr.Type != DimensionAttributeType::MainAccount
join RecId from dimAttrSetItem
where dimAttrSetItem.DimensionAttribute == dimAttr.RecId &&
dimAttrSetItem.DimensionAttributeSet == dimensionSetId
{
dimAttrCount++;
dimAttrIdx.insert(dimAttr.BackingEntityType, dimAttrCount);
}
//initialize hash key array to null
<span><font face="Consolas"><font size="2">
for (i = 1<font color="#000000">; i