Tuesday, July 3, 2018

X++ Code to Upload Budget In Dynamics 365

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;
    }

}

No comments:

Post a Comment