Monday, 17 June 2013

Import ledger alias with a job [AX 2012]

I wrote a job to import the ledger alias in 2012. It is fairly straight forward if you have the DMF installed.

Create a csv file with the following:

LedgerAlias2013-06-17_1440

End result will be:

Ledger2013-06-17_1445

Code:
//Name,Type,company,Account alias definition,initial focus
//test,Shared,CEED,401100-CR_GEN1-OU_3566-Training,MainAccount
static void importLedgerAccountAlias(Args _args)
{
//dialog
AsciiIO asciiIO;
Filename filename;
NoYesId skipFirstLine;
Container line;
Dialog dialog;
DialogField dialogFileName, dialogSkipFirstLine, dialogCountryRegionId;

//tables
DimensionAlias dimensionAlias;
Ledger ledger;

//fields to import
DimensionAliasName aliasName;
DimensionAliasType aliasType;
LedgerName ledgerName;
DimensionDisplayValue accountDefinition;
str initialFocus;

int numProcessedRecords;
;

dialog = new Dialog("Import Ledger Account Alias");
dialogFileName = dialog.addField(extendedTypeStr(Filenameopen), "File name");
dialogSkipFirstLine = dialog.addField(extendedTypeStr(NoYesId), "Skip first line");

dialog.run();

if (dialog.run())
{
filename = dialogFileName.value();
skipFirstLine = dialogSkipFirstLine.value();

}

asciiIO = new AsciiIO(filename, 'R');

if (!asciiIO || asciiIO.status() != IO_Status::Ok )
{
throw error (strfmt("@SYS19312",filename));
}


asciiIO.inRecordDelimiter('\r\n');
asciiIO.inFieldDelimiter(',');

if (skipFirstLine)
line = asciiIO.read();


ttsBegin;
while (asciiIO.status() == IO_status::Ok)
{
line = asciiIO.read();

if (line)
{
aliasName = conpeek(line,1);
aliasType = conpeek(line,2);
ledgerName = conpeek(line,3);
accountDefinition = conpeek(line,4);
initialFocus = conpeek(line,5);

select ledger
where ledger.Name == ledgerName;

select firstonly dimensionAlias where dimensionAlias.Name == aliasName;

if (!dimensionAlias)
{
dimensionAlias.Name = aliasName;
dimensionAlias.AliasType = aliasType;
dimensionAlias.DimensionAttributeValueCombination = DMFDimensionHelper::generateDynamicDimension(accountDefinition);
dimensionAlias.LegalEntity = ledger.PrimaryForLegalEntity;
dimensionAlias.DimensionAttribute = DimensionAttribute::findByName(initialFocus).RecId; //find RecId for initial focus
dimensionAlias.insert();

numProcessedRecords++;
}
}
}
ttscommit;

info(strFmt("Imported: %1", numProcessedRecords));
}




This requires that you have the DMF installed on your environment.


If you are running R2. Make sure to have this fix as I am using the DMF dimension helper class.


http://domhk.blogspot.com.au/2013/06/data-import-export-framework-financial.html


Keep an eye on the next post. I will do the same with Data Import/Export Framework.

No comments: