Wednesday, 3 February 2021

AX365 Deploy a package locally

 1-Create a temp folder

2-Extract the package inside the temp folder

3-open the command prompt as administrator and navigate into the temp folder and run the below scripts as below

AXUpdateInstaller.exe generate -runbookid="Safarirunbook" -topologyfile="DefaultTopologyData.xml" -servicemodelfile="DefaultServiceModelData.xml" -runbookfile="Safarirunbook-runbook.xml"


AXUpdateInstaller.exe import -runbookfile="Safarirunbook-runbook.xml"


AXUpdateInstaller.exe execute -runbookid="Safarirunbook"

in case you want to rerun a step call the below

AXUpdateInstaller.exe execute -runbookid=Safarirunbook -rerunstep=7

Tuesday, 2 February 2021

AX365/2012 X++ SQL select statement inside AX

 

  Connection      connection;

        Statement       statement;

        str             query;

        Resultset       resultSet;

        container conComm;

        ;


        // create connection object

        connection = new Connection();


        // create statement

        statement = connection.createStatement();


        // Set the SQL statement

        query = "select ACQUISITIONPRICE,BookID,BookType,Status from AssetBookMerge where AssetID = '" + strAssetId + "'";


        // assert SQL statement execute permission

        new SqlStatementExecutePermission(query).assert();


        // when the query returns result,

        // loop all results for processing

        //BP Deviation documented

        resultSet = statement.executeQuery(query);


        while(resultSet.next())

        {

            // do something with the result

            conComm =[resultSet.getString(1),resultSet.getString(2),resultSet.getString(3),resultSet.getString(4)] ;

        }


        // limit the scope of the assert call

        CodeAccessPermission::revertAssert();

        return conComm;

Wednesday, 13 January 2021

AX X++ get value from Financial dimension

   public str getDimValue(RecId _DefaultDim, str dimName)

  {

      DimensionAttributeValueSetStorage    dimStorage;       


      Counter                                               i;

      str ret="";          


      dimStorage = DimensionAttributeValueSetStorage::find(_DefaultDim);

      for (i=1 ; i<= dimStorage.elements() ; i++)

      {               

          if(DimensionAttribute::find(dimStorage.getAttributeByIndex(i)).Name == dimName)

          {

              ret =dimStorage.getDisplayValueByIndex(i));

          }       

      }

      return ret;

  }


Reference

Monday, 11 January 2021

AX 365 Create general journal from code x++

   LedgerJournalTable _ledgerJournalTable;

        JournalTableData _journalTableData;

        LedgerjournalTrans _ledgerjournalTrans;

       

        MCRLedgerJournal        journalTable;

        LedgerJournalTableData LedgerJournalTableData;

        NumberSeq _numberSeq;

        LedgerJournalACType _ledgerJournalACType;

        

        RecId _RecId;

        NumberSequenceTable _NumberSequenceTable;      

           


 _LedgerJournalTable.JournalName = 'Journal Name';//HpSetup::getSetup().HpCheque;

             

            _LedgerJournalTable.initFromLedgerJournalName();

            _ledgerJournalTable.Name=strJournalDesc;

            _LedgerJournalTable.insert();

            if (_ledgerJournalTable.RecId)

            {


                //_numberSeq = NumberSeq::newGetVoucherFromCode("Alloc_01");

                _RecId =  LedgerJournalName::find(HpSetup::getSetup().HpCheque).NumberSequenceTable;


                select firstonly  _NumberSequenceTable

                    where _NumberSequenceTable.RecId == _RecId;


                _numberSeq = NumberSeq::newGetVoucherFromCode(_NumberSequenceTable.NumberSequence);


                _ledgerjournalTrans.clear();

                _ledgerjournalTrans.initvalue();

                _LedgerJournalTrans.voucher = _numberSeq.voucher();

                _ledgerjournalTrans.JournalNum = _ledgerJournalTable.JournalNum;

                //_ledgerjournalTrans.Company = curext();

                _ledgerjournalTrans.TransDate = HpCheque.TransDate;

                _ledgerjournalTrans.CurrencyCode = CompanyInfoHelper::standardCurrency();

                _ledgerjournalTrans.Txt = "Transafer to cash";

                _ledgerjournalTrans.AccountType = LedgerJournalACType::Cust;

                _ledgerjournalTrans.LedgerDimension = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(HpCheque.CustAccount,LedgerJournalACType::Cust);

                _ledgerjournalTrans.OffsetAccountType = LedgerJournalACType::Bank;

                _ledgerjournalTrans.OffsetLedgerDimension = LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(dialogField.value(),LedgerJournalACType::Bank) ;

                _ledgerjournalTrans.AmountCurCredit = HpCheque.TrxAmount;

                    

                _ledgerjournalTrans.insert();

AX 365 x++ upload from Excel sheet

 using System.IO;

using OfficeOpenXml;

using OfficeOpenXml.ExcelPackage;

using OfficeOpenXml.ExcelRange;



 System.IO.Stream                     stream;

            ExcelSpreadsheetName            sheeet;

            FileUploadBuild                       fileUpload;

            DialogGroup                             dlgUploadGroup;

            FileUploadBuild                       fileUploadBuild;

            FormBuildControl                    formBuildControl;  

HpCheque  _HpCheque;

            COMVariantType                     type;

            Dialog                      dialog =    new Dialog('Import Cheques'); 


            dlgUploadGroup          = dialog.addGroup('@SYS54759');

            formBuildControl        = dialog.formBuildDesign().control(dlgUploadGroup.name());

            fileUploadBuild           = formBuildControl.addControlEx(classstr(FileUpload), 'Upload');

            fileUploadBuild.style(FileUploadStyle::MinimalWithFilename);

            fileUploadBuild.fileTypesAccepted('.xlsx'); 

            str COMVariant2Str(COMVariant _cv)

            {

                switch (_cv.variantType())

                {

                    case COMVariantType::VT_BSTR:

                        return _cv.bStr();

                    case COMVariantType::VT_EMPTY:

                        return'';

                   default:

                        throw error(strfmt('@SYS26908', _cv.variantType()));

                }

            }

            if (dialog.run() && dialog.closedOk())

            {


                FileUpload fileUploadControl     = dialog.formRun().control(dialog.formRun().controlId('Upload'));

                FileUploadTemporaryStorageResult fileUploadResult = fileUploadControl.getFileUploadResult(); 

                if (fileUploadResult != null && fileUploadResult.getUploadStatus())

                {

                    stream = fileUploadResult.openResult();

                    using (ExcelPackage Package = new ExcelPackage(stream))

                    {


                        int                         rowCount, i,columncount,j;

                        Package.Load(stream);

                        ExcelWorksheet   worksheet   = package.get_Workbook().get_Worksheets().get_Item(1);

                        OfficeOpenXml.ExcelRange    range       = worksheet.Cells;

                        rowCount           = (worksheet.Dimension.End.Row) - (worksheet.Dimension.Start.Row)  + 1;

                        columncount      = (worksheet.Dimension.End.Column);


                        for (i = 2; i<= rowCount; i++)

                        {

                            //info(range.get_Item(i, 1).value);

                            ttsbegin;

                            _HpCheque.initValue();

                            _HpCheque.clear();

                            _HpCheque.ChequeNumber =range.get_Item(i, 1).value;

                            _HpCheque.TransDate = str2DateDMY(range.get_Item(i, 2).value);

                            _HpCheque.CustAccount =range.get_Item(i, 3).value;

                            _HpCheque.DueDate = str2DateDMY(range.get_Item(i, 4).value);

                            _HpCheque.CurrencyCode = range.get_Item(i, 5).value;

                            _HpCheque.UnitID = range.get_Item(i, 6).value;

                            _HpCheque.insert();

                            ttscommit;                         

}

                    }

                }

                else

                {

                    error('Error here');

                } 

            }

Wednesday, 30 December 2020

SQL Server T-SQL check the query execution status

 SELECT percent_complete, start_time, status, command, estimated_completion_time, cpu_time, total_elapsed_time

FROM sys.dm_exec_requests

Tuesday, 29 December 2020

Ax365 / 2012 create an edit value with a drop down for Financial dimension

 

//Set the dimesnion 

public static RecId setDimension(RecId _recID,str _DimName,str _DimValue)

    {

        DimensionAttributeValue         dimAttrValue;

        DimensionAttribute              dimAttr;

        DimensionAttributeValueSetStorage davss;

        RecId                defaultDimension;

        davss = DimensionAttributeValueSetStorage::find(_recID);

        dimAttr = DimensionAttribute::findByName(_DimName);

        dimAttrValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttr, _DimValue, false, true);

        if(dimAttrValue)

        {

            davss.addItem(dimAttrValue);

            defaultDimension = davss.save();

        }

        return defaultDimension;

    }


//edit method

    [SysClientCacheDataMethodAttribute(true)]

    static edit DimensionValue  DepartmentMethod(InventJournalTrans _InventJournalTrans,boolean _set,DimensionValue _DimensionValue)

    {

        DimensionAttribute              dimensionAttribute;

        DimensionAttributeValueSetItem  valueSetItem;

        DimensionAttributeValue         dimAttrValue;

        DimensionAttribute              dimAttr;


        DimensionFinancialTag _DimensionFinancialTag;

        DimensionAttributeDirCategory dimAttributeDirCategory;

        DimensionEntryControl _DimensionEntryControl;



        dimensionAttribute = DimensionAttribute::findByName("Department");


        if(_set)

        {

            _InventJournalTrans.DefaultDimension = InventJournalMovement_Extension::setDimension(_InventJournalTrans.DefaultDimension,"Department",_DimensionValue);

          

        }




        select * from valueSetItem

            where valueSetItem.DimensionAttributeValueSet == _InventJournalTrans.DefaultDimension

            join DimensionAttribute, EntityInstance, RecId, HashKey, IsSuspended, ActiveFrom, ActiveTo from dimAttrValue

                where dimAttrValue.RecId == valueSetItem.DimensionAttributeValue &&

                    dimAttrValue.IsDeleted == false

      && dimAttrValue.DimensionAttribute==dimensionAttribute.RecId

            join * from dimAttr

                where dimAttr.RecId == dimAttrValue.DimensionAttribute

   ;



        return valueSetItem.DisplayValue;

    }


//Lookup

    [FormControlEventHandler(formControlStr(InventJournalCount, DepartmentMethod), FormControlEventType::Lookup)]

    public static void DepartmentMethod_OnLookup(FormControl sender, FormControlEventArgs e)

    {

        DimensionAttribute                  dimensionAttribute;

        DimensionAttributeDirCategory       dimAttributeDirCategory;

        Query                               query = new Query();

        SysTableLookup                      sysTableLookup;


        dimensionAttribute = DimensionAttribute::findByName("Department");//Department//Purpose



        if (dimensionAttribute.Type == DimensionAttributeType::CustomList)


        {


            select firstonly DirCategory from dimAttributeDirCategory where dimAttributeDirCategory.DimensionAttribute == dimensionAttribute.RecId;

            sysTableLookup = SysTableLookup::newParameters(tableNum(DimensionFinancialTag), sender);

            // Add name field to be shown in the lookup form.


            sysTableLookup.addLookupfield(fieldNum(DimensionFinancialTag, Value));

            sysTableLookup.addLookupfield(fieldNum(DimensionFinancialTag, Description));

            //sysTableLookup.addLookupfield(fieldNum(DimensionFinancialTag, RecId));


            query = new Query();


            query.addDataSource(tableNum(DimensionFinancialTag)).addRange(fieldNum(DimensionFinancialTag, FinancialTagCategory)).value(queryValue(dimAttributeDirCategory.DirCategory));


            sysTableLookup.parmQuery(query);

            sysTableLookup.performFormLookup();

        }

    }