Monday, 7 May 2018

Asset Import in Ax 2012

static void Na_AssetImporting(Args _args)
{
    Dialog                      dialog;
    Dialogfield                 dialogfield;

    SysExcelApplication         application;
    SysExcelWorkbooks           workBooks;
    SysExcelWorkbook            workBook;
    SysExcelWorksheets          workSheets;
    SysExcelWorksheet           workSheet;
    SysExcelCells               cells;

    AssetTable                  assetTable1;
    AssetBook                   assetBook1;
    AssetGroup                  assetGroup1;
    AssetBookTable              assetBookTable1;
    AssetLocation               assetLocation1;
    AssetLedger                 assetLedger1;


    AssetLocationId             location;
    AssetGroupId                assetGrp;
    AssetBookId                 assetBkId;
    AssetId                     assetId;
    Name                        name;
    AssetAcquisitionDate        assetAcqDate;
    AssetAcquisitionPrice       assetAcqPrice;
    AssetDepreciate             assetDepreciate;
    AssetServiceLife            assetServiceLife;
    AssetPostingProfile         assetPostingProfile;
    AssetStatus                 assetStatus;

    Filename                    fileName;
    COMVariantType              type;
    int                         row = 1  ;
    int                         recordcnt;
    str COMVariant2Str(COMVariant _cv, int _decimals = 0,int _characters = 0,int _separator1 = 0,int _separator2 = 0)
       {
            switch(_cv.variantType())
            {
                case (COMVariantType::VT_BSTR):
                    return _cv.bStr();
                case (COMVariantType::VT_R4):
                    return num2str(_cv.float(),_characters,_decimals, _separator1,_separator2);
                case (COMVariantType::VT_R8):
                    return num2str(_cv.double(),_characters,_decimals,_separator1,_separator2);
                case (COMVariantType::VT_DECIMAL):
                    return num2str(_cv.decimal(),_characters,_decimals, _separator1, _separator2);
                case (COMVariantType::VT_DATE):
                    return date2str(_cv.date(),123,2,1,2, 1,4);
                case (COMVariantType::VT_EMPTY):
                    return "";
                default:
                    throw error(strfmt("@SYS26908",_cv.variantType()));
            }
            return "";
        }

    application =   SysExcelApplication::construct();
    workBooks   =   application.workbooks();
    dialog      = new Dialog("FileOpen");
    dialogfield = dialog.addField(extendedTypeStr(Filenameopen), "File Name");
    dialog.run();

    if (dialog.run())
    {
        filename = (dialogfield.value());
    }
    try
    {
        workBooks.open(fileName);
    }
    catch (Exception::Error)
    {
        throw error("File Cannot be opened");
    }
    workBook    =   workBooks.item(1);
    workSheets  =   workBook.worksheets();
    workSheet   =   workSheets.itemFromNum(1);
    cells       =   workSheet.cells();
    do
    {

        row++;
        assetGrp            = cells.item(row, 1).value().bStr();
        assetId             = cells.item(row, 2).value().bStr();
        assetBkId           = cells.item(row, 3).value().bStr();
        name                = cells.item(row, 4).value().bStr();
        assetAcqPrice       = cells.item(row, 5).value().double();
        assetAcqDate        = cells.item(row, 6).value().date();
        assetPostingProfile = cells.item(row, 7).value().bstr();
        assetServiceLife    = cells.item(row, 8).value().double();
        assetStatus         = str2enum(assetStatus,cells.item(row, 9).value().bstr());
        assetDepreciate     = str2enum(assetDepreciate,cells.item(row, 10).value().bStr());
        location            = cells.item(row, 11).value().bStr();


            select assetLocation1 where assetLocation1.Location == location;
            if(assetLocation1)
            {
                select forUpdate assetLocation1 where assetLocation1.Location == location;
                ttsBegin;
                        assetLocation1.Location = location;
                        assetLocation1.update();
                ttsCommit;
            }
            else
            {
                 assetLocation1.clear();
                 assetLocation1.Location = location;
                 assetLocation1.insert();
            }
           select assetGroup1 where assetGroup1.GroupId == assetGrp;
           if(assetGroup1)
            {
                 select forUpdate assetGroup1 where assetGroup1.GroupId == assetGrp;
                ttsBegin;
                        assetGroup1.GroupId = assetGrp;
                        assetGroup1.update();
                ttsCommit;
            }
           else
            {
                     assetGroup1.clear();
                     assetGroup1.GroupId = assetGrp;
                     assetGroup1.insert();
            }
            select assetTable1 where assetTable1.AssetId == assetId;
            if(assetTable1)
            {
            ttsBegin;
            select forUpdate assetTable1  where assetTable1.AssetId    == assetId;
                //join assetGroup1 where assetGroup1.GroupId   == assetTable1.AssetGroup
                                                            // && assetTable1.AssetId    == assetId
                                                             //&& assetTable1.AssetGroup == assetGrp;
                    assetTable1.Location   = location;
                    assetTable1.AssetGroup = assetGrp;
                    assetTable1.AssetId    = assetId;
                    assetTable1.Name       = name;
                    assetTable1.selectForUpdate(true);
                    assetTable1.update();
            ttsCommit;
            }
            else
            {
                        assetTable1.clear();
                        assetTable1.Location   = location;
                        assetTable1.AssetGroup = assetGrp;
                        assetTable1.AssetId    = assetId;
                        assetTable1.Name       = name;
                        assetTable1.insert();
            }
        select assetBookTable1 where assetBookTable1.BookId == assetBkId;
        if(assetBookTable1)
        {

            select forUpdate assetBookTable1 where assetBookTable1.BookId == assetBkId;
            ttsBegin;
             assetBookTable1.BookId = assetBkId;
             assetBookTable1.update();
            ttsCommit;
        }
        else
        {    assetBookTable1.clear();
             assetBookTable1.BookId = assetBkId;
             assetBookTable1.insert();
        }
        select assetLedger1 where assetLedger1.PostingProfile == assetPostingProfile;
        if(assetLedger1)
        {
            ttsBegin;
            select forUpdate assetLedger1 where  assetLedger1.PostingProfile == assetPostingProfile;
              assetLedger1.PostingProfile = assetPostingProfile;
              assetLedger1.update();
            ttsCommit;
        }
        else
        {
            assetLedger1.clear();
            assetLedger1.PostingProfile = assetPostingProfile;
            assetLedger1.insert();
        }
       select assetBook1 where assetBook1.BookId == assetBkId;
        if(assetBook1)
        {
            ttsBegin;
                select forUpdate assetBook1  ;//join assetBookTable1 where assetBookTable1.BookId == assetBook1.BookId
                                                                        // &&  assetBook1.BookId == assetBkId
                                                //join assetTable1  where assetTable1.AssetId == assetBook1.AssetId
                                                                      //&& assetBook1.AssetId == assetId;


                assetBook1.BookId            = assetBkId;
                assetBook1.AssetId           = assetId;
                assetBook1.PostingProfile    = assetPostingProfile;
                assetBook1.Depreciation      = assetDepreciate;
                assetBook1.ServiceLife       = assetServiceLife;
                assetBook1.AcquisitionPrice  = assetAcqPrice;
                assetBook1.AcquisitionDate   = assetAcqDate;
                assetBook1.update();
            ttsCommit;
        }
        else
        {
                assetBook1.clear();
                assetBook1.BookId            = assetBkId;
                assetBook1.AssetId           = assetTable1.AssetId;
                assetBook1.PostingProfile    = assetPostingProfile;
                assetBook1.Depreciation      = assetDepreciate;
                assetBook1.ServiceLife       = assetServiceLife;
                assetBook1.AcquisitionPrice  = assetAcqPrice;
                assetBook1.AcquisitionDate   = assetAcqDate;
                assetBook1.insert();
        }
        type = cells.item(row+1, 1).value().variantType();
    }
    while (type != COMVariantType::VT_EMPTY);

    workbooks.close();
    application.quit();
    info("Done");
}

Get all User Roles(UserId,Role,Duty,privilege) in ax 2012

 DI_UserSecurity             userSecurity;
    SecurityTask                tsecurityTask,task;
    SecuritySubTask             securitySubTask,sub;
    SecurityRole                tsecurityRole;
    SecurityTaskEntryPoint      SecurityTaskEntryPoint;
    SecurableObject             SecurableObject;
    SecurityUserRole            securityUserRole;

    SecurityRole                role;
    SecurityRoleTaskGrant       taskGrant;
    SecuritySubTask             subTask;

    SysUserLog                  sysUserLog;
    UserInfo                    userinfo;
   
    CreatedDateTime             todaydatetime;
    int                         i;
    str 50                      value;
    str 100                     dutyName;
    int64                       myId;
    container                   con;

    super();
    todaydatetime =DateTimeUtil::newDateTime(today(), 0, DateTimeUtil::getCompanyTimeZone());
    delete_from userSecurity;
   
    while select * from  sysUserLog   group by UserId
                    join * from userinfo  where sysUserLog.UserId == userinfo.id
                                      && sysUserLog.TerminatedOk == NoYes::Yes
                                    && sysUserLog.createdDateTime == todaydatetime
                                   //&& sysUserLog.createdDateTime <= ToDate1.dateTimeValue()
                                  // && sysUserLog.createdDateTime >= FromDate1.dateTimeValue()
    {
        while select * from tsecurityRole join user from securityUserRole where securityUserRole.User == sysUserLog.UserId
                                                                         && securityUserRole.SecurityRole == tsecurityRole.RecId
            {
                    select * from SecurityTaskEntryPoint
                                    join RecId from SecurableObject
                                       where SecurableObject.RecId == SecurityTaskEntryPoint.EntryPoint
                                           join SecuritySubTask from subTask
                                               where subTask.SecuritySubTask == SecurityTaskEntryPoint.SecurityTask
                                                   join SecurityTask from taskGrant
                                                      where taskGrant.SecurityTask == subTask.SecurityTask
                                                          join RecId, AotName, name from role
                                                             where role.RecId == taskGrant.SecurityRole
                                                                &&  role.Name like tsecurityRole.Name;
                    if((tsecurityTask.Type == SecurityTaskType::Duty) || (tsecurityTask.Type == SecurityTaskType::Privilege))
                    {
                        select * from tsecurityTask
                                    where tsecurityTask.RecId == taskGrant.SecurityTask
                                    && SecurityTaskType::Duty == tsecurityTask.Type;

                        dutyName = tsecurityTask.AotName;
                        myId     = tsecurityTask.RecId;
                        while select * from tsecurityTask
                                    join securitySubTask where tsecurityTask.RecId == securitySubTask.SecurityTask
                                                            && tsecurityTask.RecId == myId
                        {

                            select * from task
                                join * from sub where task.RecId == sub.SecuritySubTask
                                && task.RecId == securitySubTask.SecuritySubTask;
                            userSecurity.DI_UserId      = sysUserLog.UserId;
                            userSecurity.DI_Role        = tsecurityRole.Name;
                            userSecurity.DI_Duty        = dutyName;
                            userSecurity.DI_Privilege   = task.AotName;
                            userSecurity.insert();
                        }
                    }
                    userSecurity.DI_UserId      = sysUserLog.UserId;
                    userSecurity.DI_Role        = tsecurityRole.Name;
                    userSecurity.DI_Duty        = dutyName;
                    userSecurity.DI_Privilege   = task.AotName;
                    userSecurity.insert();
                    DI_UserSecurity_ds.research();
            }
     }
}

Sunday, 6 May 2018

Add Image in ax 2012

static void AddImage(Args _args)
{
 
    DocuActionArchive               docuActionArchive;
    EcoResProductImageManagement    productImageManagement;
    EcoResProductImageThumbnail     ecoResProductImageThumbnail;
    DocuRef                         docuRef;
    DocuValue                       docuValue;
    EcoResProductImage              ecoResProductImage;
    InventTable                     inventTable;
// Specify the display product number

    InventTable = InventTable::find("25231");
    ttsBegin;
    docuRef.TypeId     = "File";
    docuRef.RefTableId = inventTable.TableId;
    docuRef.RefRecId   = InventTable.RecId;
    docuRef.RefCompanyId = inventTable.dataAreaId;
    docuRef.ActualCompanyId = curext();
    docuRef.insert();
    docuActionArchive = DocuAction::newDocuRef(docuRef);
    docuActionArchive.add(docuRef,"C:\\Users\\Naresh.Tumu\\Desktop\\image.jpg");

    ecoResProductImage.RefRecId         = docuRef.RecId;
    ecoResProductImage.RefRecord        = docuRef.RefRecId;
    ecoResProductImage.FileName         = "image.jpg";
    ecoResProductImage.Usage            = EcoResProductImageUsage::External;
    ecoResProductImageThumbnail         = new EcoResProductImageThumbnail(false);
    ecoResProductImage.MediumSize       = ecoResProductImageThumbnail.generateThumbnail(204,204,docuRef);
    ecoResProductImage.ThumbnailSize    = ecoResProductImageThumbnail.generateThumbnail(48,48,docuRef);

    if (ecoResProductImage.MediumSize == connull())
    {
        info("@SYS301935");
    }
    if (ecoResProductImage.ThumbnailSize == connull())
    {
        info("@SYS301936");
    }
    ecoResProductImage.insert();
    ttsCommit;
}

vendor Account based vendor Transaction merge in ax 2012

static void vendorsMerge(Args _args)
{

    VendTable                                                           vendTable;
    VendTable                                                           vendTableDelete;
    PurchJournalAutoSummary                                journalSummary;
    RetailVendTable                                                  retailVendTable;

    DimensionAttributeValue                                    dimensionAttributeValue;
    DimensionAttributeLevelValue                           dimensionAttributeLevelValue;
    DimensionAttributeValueGroup                         dimensionAttributeValueGroup;
    DimensionAttributeValueCombination               dimensionAttributeValueCombination;
    DimensionAttributeValueGroupCombination     dimensionAttributeValueGroupCombination;

    #define.vend('1003')
    #define.vendDelete('US_TX_003')

    ttsbegin;
    delete_from journalSummary
        where journalSummary.VendAccount ==  #vendDelete;
    delete_from retailVendTable
        where retailVendTable.AccountNum == #vend;

    select firstonly forupdate vendTableDelete
        where vendTableDelete.AccountNum == #vendDelete;

    select firstonly forupdate vendTable
        where vendTable.AccountNum == #vend;

    select firstonly forupdate dimensionAttributeValueGroup
        join dimensionAttributeLevelValue
            where dimensionAttributeValueGroup.RecId == dimensionAttributeLevelValue.DimensionAttributeValueGroup
               && dimensionAttributeLevelValue.DisplayValue == #vendDelete;
    dimensionAttributeValueGroup.delete();

    select firstonly forupdate dimensionAttributeValue
        join dimensionAttributeLevelValue
            where dimensionAttributeValue.RecId == dimensionAttributeLevelValue.dimensionAttributeValue
               && dimensionAttributeLevelValue.DisplayValue == #vendDelete;
    dimensionAttributeValue.delete();

    select firstonly forupdate dimensionAttributeLevelValue
        where dimensionAttributeLevelValue.DisplayValue == #vendDelete;
    dimensionAttributeLevelValue.delete();

    select firstonly forupdate dimensionAttributeValueGroupCombination
        join dimensionAttributeValueCombination
            where dimensionAttributeValueCombination.RecId == dimensionAttributeValueGroupCombination.DimensionAttributeValueCombination
               && dimensionAttributeValueCombination.DisplayValue == #vendDelete;
    dimensionAttributeValueGroupCombination.delete();

    select firstonly forupdate dimensionAttributeValueCombination
        where dimensionAttributeValueCombination.DisplayValue == #vendDelete;
    dimensionAttributeValueCombination.delete();

    vendTableDelete.merge(vendTable);
    vendTable.doUpdate();
    vendTableDelete.doDelete();
    ttscommit;
    info("Vendor merging successfull");
}

GeneralLedger Mainaccount merging in Ax 2012

static void LedgerAccountMerge(Args _args)
{
    MainAccount                                 mainAccountDelete;
    MainAccount                                 mainAccount;
   
    DimensionAttributeValue                     dimensionAttributeValue;
    DimensionAttributeLevelValue                dimensionAttributeLevelValue;
    DimensionAttributeValueGroup                dimensionAttributeValueGroup;
    DimensionAttributeValueCombination          dimensionAttributeValueCombination;
    DimensionAttributeValueGroupCombination     dimensionAttributeValueGroupCombination;

    #define.MainAccount('100109')
    #define.MainAccountDelete('110112')

 ttsBegin;
   
 select firstOnly forUpdate mainAccountDelete
    where mainAccountDelete.MainAccountId == #MainAccountDelete;
 select firstOnly forUpdate mainAccount
 where mainAccount.MainAccountId == #MainAccount;

    select firstonly forupdate dimensionAttributeValueGroup
        join dimensionAttributeLevelValue
            where dimensionAttributeValueGroup.RecId == dimensionAttributeLevelValue.DimensionAttributeValueGroup
               && dimensionAttributeLevelValue.DisplayValue == #MainAccountDelete;
    dimensionAttributeValueGroup.delete();

    select firstonly forupdate dimensionAttributeValue
        join dimensionAttributeLevelValue
            where dimensionAttributeValue.RecId == dimensionAttributeLevelValue.dimensionAttributeValue
               && dimensionAttributeLevelValue.DisplayValue == #MainAccountDelete;
    dimensionAttributeValue.delete();

    select firstonly forupdate dimensionAttributeLevelValue
        where dimensionAttributeLevelValue.DisplayValue ==#MainAccountDelete;
    dimensionAttributeLevelValue.delete();

    select firstonly forupdate dimensionAttributeValueGroupCombination
        join dimensionAttributeValueCombination
            where dimensionAttributeValueCombination.RecId == dimensionAttributeValueGroupCombination.DimensionAttributeValueCombination
               && dimensionAttributeValueCombination.DisplayValue == #MainAccountDelete;
    dimensionAttributeValueGroupCombination.delete();

    select firstonly forupdate dimensionAttributeValueCombination
        where dimensionAttributeValueCombination.DisplayValue == #MainAccountDelete;
    dimensionAttributeValueCombination.delete();
   
     mainAccountDelete.merge(mainAccount);
     mainAccount.doUpdate();
     mainAccountDelete.doDelete();

    ttscommit;
    info("MainAccount merging successfull");
}

Tuesday, 1 May 2018

OnValidated Event Handler in Ax7

class NEC_InventJournalLossProfitFormEventHandler
{
   
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormDataFieldEventHandler(formDataFieldStr(InventJournalLossProfit, InventJournalTrans, Qty), FormDataFieldEventType::Validated)]
    public static void Qty_OnValidated(FormDataObject sender, FormDataFieldEventArgs e)
    {
        FormDataSource      inventJournalTrans_ds = sender.datasource();
        InventJournalTrans  inventJournalTrans = inventJournalTrans_ds.cursor();

        if(InventJournalName::find(inventJournalTrans.inventJournalTable().JournalNameId).NEC_NegativeQtyOnly == NoYes::Yes && inventJournalTrans.Qty > 0)
        {
            FormDataFieldCancelEventArgs ce = e as FormDataFieldCancelEventArgs;
            ce.cancel(!checkFailed("Quantity cannot be positive"));
        }
    }

}

Onvalidate Event Handler in Ax7

class NEC_InventJournalLossProfitFormEventHandler
{
   
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormDataFieldEventHandler(formDataFieldStr(InventJournalLossProfit, InventJournalTrans, Qty), FormDataFieldEventType::Validated)]
    public static void Qty_OnValidated(FormDataObject sender, FormDataFieldEventArgs e)
    {
        FormDataSource      inventJournalTrans_ds = sender.datasource();
        InventJournalTrans  inventJournalTrans = inventJournalTrans_ds.cursor();

        if(InventJournalName::find(inventJournalTrans.inventJournalTable().JournalNameId).NEC_NegativeQtyOnly == NoYes::Yes && inventJournalTrans.Qty > 0)
        {
            FormDataFieldCancelEventArgs ce = e as FormDataFieldCancelEventArgs;
            ce.cancel(!checkFailed("Quantity cannot be positive"));
        }
    }

}