Upload Budget Transaction in AX 7
//Am here written in Button Clicked in form Extension
[ExtensionOf(formStr(BudgetTransaction))]
final class Fcc_BudgetUpload_Extension
{
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormControlEventHandler(formControlStr(BudgetTransaction, BudgetLineUpload), FormControlEventType::Clicked)]
public void BudgetLineUpload_OnClicked(FormControl sender, FormControlEventArgs e)
{
AsciiStreamIo file;
Array fileLines;
FileUploadTemporaryStorageResult fileUpload;
BudgetTransactionHeader budgetTransactionHeader;
BudgetTransactionLine transLine;
Fcc_BudgetLineUpload StagingTmp;
TransDate transDate;
Name AccountStructure;
BudgetType budgetTypeupd;
RefRecId headerRecid;
Name MainAccount,Depart,businessUnit,Costcenter;
LineNumber lineNumber;
CurrencyCode currency;
Amount transAmount;
Name budgetTypestr;
boolean first = true;
str tds;
container record;
FormDataSource BudgetTransactionLine_Ds;
int linenum =1;
BudgetTransactionLine_Ds = sender.formRun().dataSource(formDataSourceStr(BudgetTransaction,BudgetTransactionLine));
budgetTransactionHeader = sender.formRun().dataSource(formDataSourceStr(BudgetTransaction,BudgetTransactionHeader)).cursor();
StagingTmp.skipDataMethods(true);
fileUpload = File::GetFileFromUser() as FileUploadTemporaryStorageResult;
file = AsciiStreamIo::constructForRead(fileUpload.openResult());
if (file)
{
if (file.status())
{
throw error("@SYS52680");
}
file.inFieldDelimiter(',');
file.inRecordDelimiter('\r\n');
}
ttsbegin;
while (!file.status())
{
record = file.read();
if (conLen(record))
{
if(first)
{
first = false;
}
else
{
tds = strReplace(conPeek(record,1),"/","-");
transDate = str2Date(tds,123);//conPeek(record,9);
MainAccount = conPeek(record,2);
businessUnit = conPeek(record,3);
Costcenter = conPeek(record,4);
Depart = conPeek(record,5);
currency = conPeek(record,6);
budgetTypestr = conPeek(record,7);
transAmount = conPeek(record,8);
StagingTmp.clear();
StagingTmp.HeaderRecId= budgetTransactionHeader.RecId;
StagingTmp.TransDate = transDate;
StagingTmp.LedgerDimension = this.generateLedgerDimension(MainAccount,[Depart,businessUnit,Costcenter]);
StagingTmp.CurrencyCode = currency;
StagingTmp.TranscationAmount = transAmount;
StagingTmp.BudgetType = str2enum(budgetTypeupd,budgetTypestr);
StagingTmp.LineNumber = linenum;
StagingTmp.insert();
linenum++;
}
}
}
ttsCommit;
if(StagingTmp)
{
while select StagingTmp
{
transLine.BudgetTransactionHeader = StagingTmp.HeaderRecId;
transLine.Date = StagingTmp.TransDate;
transLine.LineNumber = StagingTmp.LineNumber;
transLine.BudgetType =StagingTmp.BudgetType;
transLine.LedgerDimension = StagingTmp.LedgerDimension;
transLine.TransactionCurrency = StagingTmp.CurrencyCode;
transLine.editBudgetType(true,transLine.BudgetType);
transLine.editTransactionCurrencyAmount(true,StagingTmp.TranscationAmount);
transLine.insert();
}
}
BudgetTransactionLine_Ds.reread();
BudgetTransactionLine_Ds.research();
BudgetTransactionLine_Ds.refresh();
}
//New Method to return Ledger Dimension
public DimensionDynamicAccount generateLedgerDimension(MainAccountNum _MainAccountNum, container _conData)
{
int hierarchyCount;
int hierarchyIdx;
RecId dimAttId_MainAccount;
LedgerRecId ledgerRecId;
RefRecId recordvalue;
DimensionAttribute dimensionAttribute;
DimensionAttributeValue dimensionAttributeValue;
DimensionSetSegmentName DimensionSet;
DimensionStorage dimStorage;
MainAccount mainAccount;
LedgerAccountContract LedgerAccountContract = new LedgerAccountContract();
DimensionAttributeValueContract ValueContract;
List valueContracts = new List(Types::Class);
dimensionAttributeValueCombination dimensionAttributeValueCombination;
container _conD =["Department","BusinessUnit","Costcenter"];
mainAccount = MainAccount::findByMainAccountId(_MainAccountNum);
recordvalue = DimensionHierarchy::getAccountStructure(mainAccount.RecId,Ledger::current());
hierarchyCount = DimensionHierarchy::getLevelCount(recordvalue);
DimensionSet = DimensionHierarchyLevel::getDimensionHierarchyLevelNames(recordvalue);
for(hierarchyIdx = 1;hierarchyIdx<=hierarchyCount;hierarchyIdx++)
{
if(hierarchyIdx == 1)
continue;
dimensionAttribute = DimensionAttribute::findByLocalizedName(DimensionSet[hierarchyIdx],false,"en-us");
if(dimensionAttribute)
{
dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,conPeek(_conData,hierarchyIdx));
if(dimensionAttributeValue)
{
ValueContract = new DimensionAttributeValueContract();
ValueContract.parmName(dimensionAttribute.Name) ;
ValueContract.parmValue(dimensionAttributeValue.CachedDisplayValue);
valueContracts.addEnd(ValueContract);
}
}
}
LedgerAccountContract.parmMainAccount(_MainAccountNum);
LedgerAccountContract.parmValues(valueContracts);
dimStorage = DimensionServiceProvider::buildDimensionStorageForLedgerAccount(LedgerAccountContract);
dimensionAttributeValueCombination = DimensionAttributeValueCombination::find(dimStorage.save());
ledgerRecId = dimensionAttributeValueCombination.RecId;
return ledgerRecId;
}
}
//Am here written in Button Clicked in form Extension
[ExtensionOf(formStr(BudgetTransaction))]
final class Fcc_BudgetUpload_Extension
{
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormControlEventHandler(formControlStr(BudgetTransaction, BudgetLineUpload), FormControlEventType::Clicked)]
public void BudgetLineUpload_OnClicked(FormControl sender, FormControlEventArgs e)
{
AsciiStreamIo file;
Array fileLines;
FileUploadTemporaryStorageResult fileUpload;
BudgetTransactionHeader budgetTransactionHeader;
BudgetTransactionLine transLine;
Fcc_BudgetLineUpload StagingTmp;
TransDate transDate;
Name AccountStructure;
BudgetType budgetTypeupd;
RefRecId headerRecid;
Name MainAccount,Depart,businessUnit,Costcenter;
LineNumber lineNumber;
CurrencyCode currency;
Amount transAmount;
Name budgetTypestr;
boolean first = true;
str tds;
container record;
FormDataSource BudgetTransactionLine_Ds;
int linenum =1;
BudgetTransactionLine_Ds = sender.formRun().dataSource(formDataSourceStr(BudgetTransaction,BudgetTransactionLine));
budgetTransactionHeader = sender.formRun().dataSource(formDataSourceStr(BudgetTransaction,BudgetTransactionHeader)).cursor();
StagingTmp.skipDataMethods(true);
fileUpload = File::GetFileFromUser() as FileUploadTemporaryStorageResult;
file = AsciiStreamIo::constructForRead(fileUpload.openResult());
if (file)
{
if (file.status())
{
throw error("@SYS52680");
}
file.inFieldDelimiter(',');
file.inRecordDelimiter('\r\n');
}
ttsbegin;
while (!file.status())
{
record = file.read();
if (conLen(record))
{
if(first)
{
first = false;
}
else
{
tds = strReplace(conPeek(record,1),"/","-");
transDate = str2Date(tds,123);//conPeek(record,9);
MainAccount = conPeek(record,2);
businessUnit = conPeek(record,3);
Costcenter = conPeek(record,4);
Depart = conPeek(record,5);
currency = conPeek(record,6);
budgetTypestr = conPeek(record,7);
transAmount = conPeek(record,8);
StagingTmp.clear();
StagingTmp.HeaderRecId= budgetTransactionHeader.RecId;
StagingTmp.TransDate = transDate;
StagingTmp.LedgerDimension = this.generateLedgerDimension(MainAccount,[Depart,businessUnit,Costcenter]);
StagingTmp.CurrencyCode = currency;
StagingTmp.TranscationAmount = transAmount;
StagingTmp.BudgetType = str2enum(budgetTypeupd,budgetTypestr);
StagingTmp.LineNumber = linenum;
StagingTmp.insert();
linenum++;
}
}
}
ttsCommit;
if(StagingTmp)
{
while select StagingTmp
{
transLine.BudgetTransactionHeader = StagingTmp.HeaderRecId;
transLine.Date = StagingTmp.TransDate;
transLine.LineNumber = StagingTmp.LineNumber;
transLine.BudgetType =StagingTmp.BudgetType;
transLine.LedgerDimension = StagingTmp.LedgerDimension;
transLine.TransactionCurrency = StagingTmp.CurrencyCode;
transLine.editBudgetType(true,transLine.BudgetType);
transLine.editTransactionCurrencyAmount(true,StagingTmp.TranscationAmount);
transLine.insert();
}
}
BudgetTransactionLine_Ds.reread();
BudgetTransactionLine_Ds.research();
BudgetTransactionLine_Ds.refresh();
}
//New Method to return Ledger Dimension
public DimensionDynamicAccount generateLedgerDimension(MainAccountNum _MainAccountNum, container _conData)
{
int hierarchyCount;
int hierarchyIdx;
RecId dimAttId_MainAccount;
LedgerRecId ledgerRecId;
RefRecId recordvalue;
DimensionAttribute dimensionAttribute;
DimensionAttributeValue dimensionAttributeValue;
DimensionSetSegmentName DimensionSet;
DimensionStorage dimStorage;
MainAccount mainAccount;
LedgerAccountContract LedgerAccountContract = new LedgerAccountContract();
DimensionAttributeValueContract ValueContract;
List valueContracts = new List(Types::Class);
dimensionAttributeValueCombination dimensionAttributeValueCombination;
container _conD =["Department","BusinessUnit","Costcenter"];
mainAccount = MainAccount::findByMainAccountId(_MainAccountNum);
recordvalue = DimensionHierarchy::getAccountStructure(mainAccount.RecId,Ledger::current());
hierarchyCount = DimensionHierarchy::getLevelCount(recordvalue);
DimensionSet = DimensionHierarchyLevel::getDimensionHierarchyLevelNames(recordvalue);
for(hierarchyIdx = 1;hierarchyIdx<=hierarchyCount;hierarchyIdx++)
{
if(hierarchyIdx == 1)
continue;
dimensionAttribute = DimensionAttribute::findByLocalizedName(DimensionSet[hierarchyIdx],false,"en-us");
if(dimensionAttribute)
{
dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,conPeek(_conData,hierarchyIdx));
if(dimensionAttributeValue)
{
ValueContract = new DimensionAttributeValueContract();
ValueContract.parmName(dimensionAttribute.Name) ;
ValueContract.parmValue(dimensionAttributeValue.CachedDisplayValue);
valueContracts.addEnd(ValueContract);
}
}
}
LedgerAccountContract.parmMainAccount(_MainAccountNum);
LedgerAccountContract.parmValues(valueContracts);
dimStorage = DimensionServiceProvider::buildDimensionStorageForLedgerAccount(LedgerAccountContract);
dimensionAttributeValueCombination = DimensionAttributeValueCombination::find(dimStorage.save());
ledgerRecId = dimensionAttributeValueCombination.RecId;
return ledgerRecId;
}
}
No comments:
Post a Comment