AX 2012: crossCompany delete_from

Although we cannot use crossCompany keyword with delete_from command, we can still achieve the same functionality with some performance overhead as follows:

static void JobCCDel( Args _args )
{
    Table21 tab21a, tab21b;

    ttsBegin;
    while select crossCompany minof(ratingNum), dataAreaId from tab21a
        group by dataAreaId
    {
        changeCompany(tab21a.dataAreaId)
        {
            tab21b = null;
            delete_from tab21b
                where tab21b.ratingNum == tab21a.ratingNum;
        }
    }
    ttsCommit;
}
Advertisements

AX 2012: crossCompany update_recordset

Although we cannot use crossCompany keyword with update_recordset command, we can still acheive the same functionality with some performance overhead as follows:

static void JobCCForUpdMethod(Args _args)
{
    Table21 tab21;

    ttsBegin;
    while select forUpdate crossCompany countOfReviews from tab21
    {
        changeCompany(tab21.dataAreaId)
        {
            tab21.countOfReviews = tab21.countOfReviews + 2;
            tab21.update();
        }
    }
    ttsCommit;
}

AX 2012: crossCompany insert_recordset

Although we cannot use crossCompany keyword with insert_recordset command, we can still achieve the same functionality with some performance overhead as follows:

static void JobCCIns(Args _args)
{
    Table21 tab21;
    Table22 tab22;

    ttsBegin;
    while select crossCompany actionDate, name, dataAreaId from tab21
        where tab21.actionDate > str2Date('1998-01-22', 321)
    {
        changeCompany(tab21.dataAreaId)
        {
            tab22 = null;
            tab22.actionDate = tab21.actionDate;
            tab22.name = tab21.name;
            tab22.insert();
        }
    }
    ttsCommit;
}

AX 2012: Display methods – Different datasources – Same control

AX developers always come across a requirement of showing data from different datasources on the same control though these datasources should be related to each other. The solution to this requirement is to define display methods on the table which you choose to be the control datasource. Display methods are very handy for showing data from related tables.

Consider for example the following tables:

1. CustTable
2. DirPartyTable
3. BankGroup

If we need to show CustTable.AccountNum, DirPartyTable.Name and BankGroup.Name fields on the same control let’s say a grid control then we need to define the following display methods on CustTable if we have chosen CustTable as the grid’s datasource.

To retrieve DirPartyTable.Name

Untitled

To retrieve BankGroup.Name

Untitled

Now on the grid control, add  two StringEdit controls to bind them with the display methods just defined above. Make sure to specify CustTable as the grid’s datasource. Also you must be setting DataMethod property of the StringEdit controls to the name of the respective display methods.

Untitled

The result is awesome. You have one grid control showing data from different datasources!

Untitled

AX 2012: Generate next number sequence in X++

Often we do not need to generate the next number sequence manually in X++ since creating records by using forms the system automatically handles number sequence generation by invoking Number Sequence Framework.

However, sometimes we need to generate number sequences manually in X++. The following code helps you to do that:

static void numberSequence(Args _args)
{
    NumberSeq             numberSeq;
    SMAServiceObjectTable serviceObjectTable;

    numberSeq = NumberSeq::newGetNum(SMAParameters::numRefSMAServiceObjectId());

    serviceObjectTable.clear();
    serviceObjectTable.ServiceObjectId = numberSeq.num();
    serviceObjectTable.insert();

    numberSeq.used();
}

NumberSeq is the class in action here. Its static method newGetNum() takes NumberSequenceReference as an input parameter. All you need to do is to find the relevant number sequence reference in your case. Usually there are parm methods defined on Tables which give you the number sequence references.

AX 2012: Change Application Object Layer

Developers often need to change the current application object layer. For example, customizations in AX 2012 always take place in the USR layer. To change it:

1. Go to Microsoft Dynamics AX 2012 Configuration

Image

 

2. Click Manage then click Create configuration

Image

 

3. Give it a suitable name and then click OK

4. Switch to Developer tab and choose your desired layer from the drop down menu of Application object layer.

Image

 

5. Click OK