Sunday, May 28, 2017

Mapping two dataset fields in to one tablix in SSRS

//Mapping two dataset fields in to one tablix in SSRS

//Dataset - dataset1(Value1,Value2,Value3)
Dataset - dataset2(Value1,Value4)

SSRS design
Tablix (parent dataset- Dataset1)

//Requirement - In same tablix need to map dataset2 fields.

//Below Expression
=lookup(Field!Value1.Value,Fields!Value1.value,Fields!Value4.value,"Dataset2")

Vendor and Customer Invoice Settlement Number Marked Transaction

static void SettelementInvoiceNum(Args _args)
{
    LedgerJournalTrans  ledgerJournalTrans;
    CustVendFindSettlements custVendFindSettlements;
    TmpCustVendTrans            tmpCustVendTrans;
        str invoice;
    ;
    ledgerJournalTrans = LedgerJournalTrans::findRecId(5637161826,false);
    custVendFindSettlements = new CustVendFindSettlements(ModuleCustVend::Vend, ledgerJournalTrans);
    if (ledgerJournalTrans.ledgerJournalTable().JournalType == LedgerJournalType::VendPromissoryNoteRedraw ||
        ledgerJournalTrans.ledgerJournalTable().JournalType == LedgerJournalType::BankChequeReversal)
    {
        custVendFindSettlements.findSettledSettlements();
    }
    else
    {
        custVendFindSettlements.findSettlements();
    }
    tmpCustVendTrans.setTmpData(custVendFindSettlements.tmpCustVendTrans());
    while select tmpCustVendTrans
    {
        invoice += strFmt("%1,", tmpCustVendTrans.Invoice);
    }
    info(invoice);
}

VendSettlement      vendSettlement;
    VendTrans           vendTrans;
    VendTransOpen       vendTransOpen;
    CustVendOpenTransManager    manager;
    LedgerJournalTrans  ledgerJournalTrans;
    ;
    //If it is posted
    info("PMT00002749");
    while select vendSettlement
        where vendSettlement.AccountNum      == "V00566"
            && vendSettlement.OffsetTransVoucher == "PMT00002749"
    {
        select vendTrans
        where vendTrans.dataAreaId  == vendSettlement.TransCompany
        && vendTrans.RecId          == vendSettlement.TransRecId
        && vendTrans.AccountNum     == vendSettlement.AccountNum;
        info(vendTrans.Invoice);
    }
   
    //if it is open
    vendTrans.clear();
    info("PMT00002750");
    while select vendTransOpen
        where vendTransOpen.AccountNum      == "V00530"
    {
        if(SpecTrans::findByRef(vendTransOpen.dataAreaId,vendTransOpen.TableId,vendTransOpen.RecId))
        {
             select * from ledgerJournalTrans where ledgerJournalTrans.Voucher == "PMT00002750";
            manager = CustVendOpenTransManager::construct(ledgerJournalTrans);
            select vendTrans
                where vendTrans.AccountNum == vendTransOpen.AccountNum
                    && vendTrans.RecId  == vendTransOpen.RefRecId;
            manager.getTransMarked(vendtransopen);
            if(manager.getTransMarked(vendtransopen) == true)
            {
                info(vendTrans.Invoice);
            }
        }
    }

Get Caller Form name and caller name in AX Table,AX Class method ax 2012

//Get Caller Form name and caller name in AX Table method ax 2012
FormDataSource fds;
FormName fn;
FormRun     caller;
if (this.isFormDataSource())
{
    fds = this.dataSource() as FormDataSource;
    if (fds)
    {
        fn = fds.formRun().name();
 caller = fds.formRun().args().caller();
            if(caller.args().name() == formStr(<Form Name>))
            {
                //logic
            }
    }
}

Set configuration key run time based on user login

//Set configuration key run time based on user login

ConfigurationKeySet configurationKeySet;
if (!isConfigurationkeyEnabled(configurationKeyNum("")))
{
configurationKeySet = new ConfigurationKeySet();
configurationKeySet.loadSystemSetup();
configurationKeySet.enabled(configurationKeyNum(""), true);
SysDictConfigurationKey::save(configurationKeySet.pack());
SysSecurity::reload(true, true, false, true);
}

New fields Addeing in to AxBC class in ax 2012

// New fields in ax 2012

static void CreateAxBCParmMethod(Args _args)
{
    axGenerateAxBCClass axGenerateAxBCClass;
    axGenerateAxBCClass = AxGenerateAxBCClass::newTableId(tablenum(InventTable));
    axGenerateAxBCClass.run();
}

Send Email using default AX outgoing mail table ax 2012

//Send Email using default AX outgoing mail table ax 2012
static void MailCheck4(Args _args)
{
    SysOutgoingEmailTable               outgoingEmailTable;
    SysOutgoingEmailData                outgoingEmailData;
    SysEmailItemId                      nextEmailItemId;
    Map                                 map;
    BinData                             binData = new BinData();
    container                           data;
    container                           embeddedBinaryData;
    Filename                            filePath;
    Filename                            filename;
    str                                 _filename = @"filepath and name.xlsx";
    Filename                            fileExtension;
    CLRObject                           ex;
    ;   
    try
    {
        ttsBegin;
        nextEmailItemId                                 = EventInbox::nextEventId();
        outgoingEmailTable.EmailItemId                  = nextEmailItemId;
        outgoingEmailTable.IsSystemEmail                = NoYes::No;
        outgoingEmailTable.Sender                       = "";
        outgoingEmailTable.SenderName                   = "";
        outgoingEmailTable.Recipient                    = "";
        outgoingEmailTable.Subject                      = SysEmailMessage::stringExpand("Test Mail", map);
        outgoingEmailTable.Priority                     = eMailPriority::High ;
        outgoingEmailTable.WithRetries                  = false;
        outgoingEmailTable.RetryNum                     = 2;
        outgoingEmailTable.UserId                       = curUserId();
        outgoingEmailTable.Status                       = SysEmailStatus::Unsent;
        outgoingEmailTable.Message                      = "Test mail don't reply";
        outgoingEmailTable.LatestStatusChangeDateTime   = DateTimeUtil::getSystemDateTime();
        outgoingEmailTable.insert();
   
        outgoingEmailData.clear();
        outgoingEmailData.EmailItemId                   = nextEmailItemId;
        outgoingEmailData.DataId                        = 1;
        outgoingEmailData.EmailDataType                 = SysEmailDataType::Attachment;
        binData.loadFile(_filename);
        embeddedBinaryData                              = binData.getData();
        outgoingEmailData.Data                          = embeddedBinaryData;
        [filePath, filename, fileExtension]             = Global::fileNameSplit(_filename);
        outgoingEmailData.FileName                      = filename;
        outgoingEmailData.FileExtension                 = fileExtension;   
        outgoingEmailData.insert();
        info("Mail added in to queue");
        ttsCommit;
    }
    catch
    {
        ex = CLRInterop::getLastException();
        while(ex != null)
        {
            error(ex.ToString());
            ex = ex.get_InnerException();
        }
    }
}

Adding new fields in On Hand Inventory form ax 2012 R2/R3

// Adding new fields in On Hand Inventory form ax 2012 R2/R3
//Create one View to link with inventTable
//Example - Inventory unit, purchase unit, Product name
Invent Table
 -> Inner Join (EcoResProduct)
  -> Inner Join (EcoResProductTransalation)
 -> Inner Join(InventTableModule as Invent)
 -> Inner Join(InventTableModule as Purchase)
Drag fields which want to display in on hand form and then item id field.
//Form
//InventOnHandItem
//DataSources - InventSum
//Method - ExecuteQuery
Code
//element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS);//Commented by Sangeeth
    //Added by sangeeth
    element.inventDimSetupObject().modifyQuery(inventSum_DS,inventDim_DS
                        ,InventDetailView_DS);
    //End Code
Super();
//Class
Class->InventDimCtrl_Frm_OnHand
Method-> modifyQuery
Create new optional argument in ModifyQuery method
Code
public void modifyQuery(
    FormDataSource _inventSum_DS,
    FormDataSource _inventDim_DS,
    //Added by Sangeeth
    FormDataSource  _InventDetail_DS = null
    //End Code
    )
{
QueryBuildDataSource    qbsInventDetailLookup;//Added by Sangeeth
code logic:
in ModifyQuery Method at last write below code
//Added by Sangeeth
    if(_InventDetail_DS != null)
    {
        qbsInventDetailLookup = query.dataSourceName(_InventDetail_DS.name());
        qbr = SysQuery::findOrCreateRange(qbsInventDetailLookup, fieldnum(InventDetailView, LanguageId));
        qbr.value(queryValue(CompanyInfo::languageId()));
        qbsInventDetailLookup.addGroupByField(fieldNum(InventDetailView, Name));
        qbsInventDetailLookup.addGroupByField(fieldNum(InventDetailView,InventUnit));
        qbsInventDetailLookup.addGroupByField(fieldNum(InventDetailView,PurchUnit));
        qbsSum = _InventDetail_DS.query().datasourceTable(tablenum(InventTable));
        qbsSum.addGroupByField(fieldNum(InventTable,ItemId));
        qbsSum.addGroupByField(fieldNum(InventTable,Product));
    }
    //End Code

Get Sales Agreement Price Without standard method in AX

Public Price GetSalesAgreementPrice(ItemId          itemRelation,
                                    CustAccount     accountRelation,
                                    InventdimId     dimId = "",
                                    PriceType       relation =  PriceType::PriceSales
                                    )
{
    PriceDiscTable      priceDiscTable;
    ;
    if(!dimId)
    {
        priceDiscTable.clear();
        select * from  priceDiscTable
                    where priceDiscTable.Relation  == relation               
                            && priceDiscTable.ItemCode == TableGroupAll::Table
                                && priceDiscTable.ItemRelation       == itemRelation
                                    && priceDiscTable.AccountCode ==  TableGroupAll::All;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation          == relation
                    && priceDiscTable.AccountCode        == TableGroupAll::Table 
                        && priceDiscTable.AccountRelation    == accountRelation
                            &&  priceDiscTable.ItemCode           == TableGroupAll::Table
                                && priceDiscTable.ItemRelation       == itemRelation;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation           == relation
                    && priceDiscTable.ItemCode           == TableGroupAll::All
                        && priceDiscTable.AccountCode ==  TableGroupAll::Table
                            && priceDiscTable.AccountRelation    == accountRelation ;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation           == relation
                    && priceDiscTable.ItemCode           == TableGroupAll::Table
                        && priceDiscTable.AccountRelation    == CustTable::find(accountRelation).CustGroup
                            && priceDiscTable.AccountCode ==  TableGroupAll::GroupId
                                && priceDiscTable.ItemRelation       == itemRelation;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation           == relation
                    && priceDiscTable.ItemCode           == TableGroupAll::All
                        && priceDiscTable.AccountRelation    == CustTable::find(accountRelation).CustGroup
                            && priceDiscTable.AccountCode ==  TableGroupAll::GroupId ;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation           == relation
                    && priceDiscTable.ItemCode           == TableGroupAll::GroupId
                        && priceDiscTable.AccountRelation    == CustTable::find(accountRelation).CustGroup
                            && priceDiscTable.AccountCode ==  TableGroupAll::GroupId
                                && priceDiscTable.ItemRelation       == InventTable::find(itemRelation).itemGroupId();
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }

    }
    else
    {
        priceDiscTable.clear();
        select * from  priceDiscTable
                    where priceDiscTable.Relation  == relation               
                            && priceDiscTable.ItemCode == TableGroupAll::Table
                                && priceDiscTable.ItemRelation       == itemRelation
                                    && priceDiscTable.AccountCode ==  TableGroupAll::All
                                        && priceDiscTable.InventDimId == dimId;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation          == relation
                    && priceDiscTable.AccountCode        == TableGroupAll::Table 
                        && priceDiscTable.AccountRelation    == accountRelation
                            &&  priceDiscTable.ItemCode           == TableGroupAll::Table
                                && priceDiscTable.ItemRelation       == itemRelation
                                    && priceDiscTable.InventDimId == dimId;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation           == relation
                    && priceDiscTable.ItemCode           == TableGroupAll::All
                        && priceDiscTable.AccountCode ==  TableGroupAll::Table
                            && priceDiscTable.AccountRelation    == accountRelation
                                && priceDiscTable.InventDimId == dimId;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation           == relation
                    && priceDiscTable.ItemCode           == TableGroupAll::Table
                        && priceDiscTable.AccountRelation    == CustTable::find(accountRelation).CustGroup
                            && priceDiscTable.AccountCode ==  TableGroupAll::GroupId
                                && priceDiscTable.ItemRelation       == itemRelation
                                    && priceDiscTable.InventDimId == dimId;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation           == relation
                    && priceDiscTable.ItemCode           == TableGroupAll::All
                        && priceDiscTable.AccountRelation    == CustTable::find(accountRelation).CustGroup
                            && priceDiscTable.AccountCode ==  TableGroupAll::GroupId
                                && priceDiscTable.InventDimId == dimId;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
        priceDiscTable.clear();
        select * from  priceDiscTable
                where priceDiscTable.Relation           == relation
                    && priceDiscTable.ItemCode           == TableGroupAll::GroupId
                        && priceDiscTable.AccountRelation    == CustTable::find(accountRelation).CustGroup
                            && priceDiscTable.AccountCode ==  TableGroupAll::GroupId
                                && priceDiscTable.ItemRelation       == InventTable::find(itemRelation).itemGroupId()
                                    && priceDiscTable.InventDimId == dimId;
        if (priceDiscTable)
        {
            return priceDiscTable.Amount;
        }
    }
    return 0;
}

AX partial Purchase Order Product receipt

static void AXpartialPurchaseOrder(Args _args)
{
    PurchFormLetter             purchFormLetter;
    PurchFormletterParmData     purchFormLetterParmData;
    PurchParmUpdate             purchParmUpdate;
    PurchParmTable              purchParmTable;
    PurchParmLine               purchParmLine;
    PurchTable                  purchTable;
    PurchLine                   purchLine;
    ;
    ttsBegin;
    while select purchTable where purchTable.PurchId == "00000258"
    {
        purchFormLetterParmData = PurchFormletterParmData::newData(
             DocumentStatus::PackingSlip,
            VersioningUpdateType::Initial);
        purchFormLetterParmData.parmOnlyCreateParmUpdate(true);
        purchFormLetterParmData.createData(false);
        purchParmUpdate = purchFormLetterParmData.parmParmUpdate();
        purchParmTable.clear();
        purchParmTable.TransDate                = SystemDateGet();
        purchParmTable.Ordering                 = DocumentStatus::PackingSlip;
        purchParmTable.ParmJobStatus            = ParmJobStatus::Waiting;
        purchParmTable.Num                      = "TestP1";
        purchParmTable.PurchId                  = purchTable.PurchId;
        purchParmTable.PurchName                = purchTable.PurchName;
        purchParmTable.DeliveryName             = purchTable.DeliveryName;
        purchParmTable.DeliveryPostalAddress    = purchTable.DeliveryPostalAddress;
        purchParmTable.OrderAccount             = purchTable.OrderAccount;
        purchParmTable.CurrencyCode             = purchTable.CurrencyCode;
        purchParmTable.InvoiceAccount           = purchTable.InvoiceAccount;
        purchParmTable.ParmId                   = purchParmUpdate.ParmId;
        purchParmTable.insert();
        while select purchLine
            where purchLine.PurchId == purchTable.PurchId
        {
            purchParmLine.clear();
            purchParmLine.InitFromPurchLine(purchLine);
            purchParmLine.ReceiveNow    = purchLine.PurchQty;
            purchParmLine.ParmId        = purchParmTable.ParmId;
            purchParmLine.TableRefId    = purchParmTable.TableRefId;
            purchParmLine.setQty(DocumentStatus::PackingSlip, false, true);
            purchParmLine.setLineAmount();
            purchParmLine.insert();
        }
        purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
        purchFormLetter.transDate(systemDateGet());
        purchFormLetter.proforma(false);
        purchFormLetter.specQty(PurchUpdate::All);
        purchFormLetter.purchTable(purchTable);
        purchFormLetter.parmParmTableNum(purchParmTable.ParmId);
        purchFormLetter.parmId(purchParmTable.ParmId);
        purchFormLetter.purchParmUpdate(purchFormLetterParmData.parmParmUpdate());
        purchFormLetter.run();
    }
    ttsCommit;
}

Update customer based on Selection fields in AX

static void updateCustomerStd(Args _args)
{
    CustTable   custTable,getcustTable;
   
    //Function to set customer record
    CustTable createCustTable(CustTable   _custTable)
    {
        AxCustTable     axCustTable;
        SysDictTable    sysDictTable = new SysDictTable(tableNum(CustTable));
        int             i;
        int             fieldCnt;
        FieldId         fieldId;
        ;
        ttsbegin;
        axCustTable = AxCustTable::constructValidateInput(_custTable);
        fieldCnt = sysDictTable.fieldCntWithoutSys();
        for (i=1;i <= fieldCnt;i++)
        {
            fieldId = sysDictTable.fieldCnt2Id(i);
            if (fieldNum(CustTable, AccountNum) != fieldId)
                axCustTable.setFieldAsTouched(fieldId);
        }
        axCustTable.save();
        ttscommit;
        return axCustTable.custTable();
    }
    ;
    ttsBegin;
    select forupdate custTable;
    info(custTable.AccountNum + " " + custTable.CustGroup + " " + custTable.InvoiceAccount);
    custTable.CustGroup = "Corporate";
    custTable.InvoiceAccount = "CH0000239";
    getcustTable = createCustTable(custTable);
    info(getcustTable.AccountNum + " " + getcustTable.CustGroup + " " + getcustTable.InvoiceAccount);
    ttsCommit;
}

Export label custom content

 GRID => Properties "Export Label" => "SalesReportMexico" To get download file with custom naming.