Dynamics AX Blog - Posts from 2015 - Page 2

These posts are machine-translated.
Currently, only posts from »2015« are displayed

List all modified objects from current layer, which are not added to versioncontrol

Using the SysModel* tables, you can browse the AOT to certain objects or their properties in Dynamics AX. I've posted an example already here.

The following job is an extension of the above posting and lists all objects that have been changed in the current layer and still were not added to version control.


 
 

SysOperation: Open form with specific record after processing

Imagine the following scenario: You have to create or update a record using a clas, which extends Sysoperation-Framework. After this database operation you have to open a particular form, which allows the user to modify the just created/modified record.

For such tasks i like to use the aferoperation()-method from the Controller-Class. By using the operationReturnvalue of the Service-Class within this method it is possible to process the record.


 
 

Import data from csv-file to Dynamics AX

Using the CommaTextIo class you can import CSV files into Dynamics AX. The job shows a simple example of using this class.

static void importCSVFile(Args _args)
{
    Filename fileName = @"c:	empcsvimport.csv";
    CommaTextIo commaTextIo = new CommaTextIo(fileName, "r");
    container lineCon;

    commaTextIo.inFieldDelimiter(';');
    commaTextIo.inRecordDelimiter(' ');
    while (commaTextIo.status() == IO_Status::OK)
    {
        lineCon = commaTextIo.read();

        info(strFmt("%1 %2 %3", conPeek(lineCon, 1), conPeek(lineCon, 2), conPeek(lineCon, 3)));
    }
}

In principle, this would also work with the TextIo class (or AsciiIo), but it must be noted that these classes can provide unexpected results when, for eample the inFieldDelimiter - in my example a semicolon - occurs within a text.

 

The following sample file would otherwise be processed, as expected from the developer. The third column in the third row would be interpreted as two columns by the read()-method.

100;450,00;Customername1
101;1200,00;Customername2
102;50,28;"Customername 3; Second customername"

 
 

Get label from MenuItem

static void getLabelFromMenuItem(Args _args)
{
    MenuItemBuild menuItemBuild = new menuItemBuild(menuitemDisplayStr(ProdTableDelayedListPage), MenuItemType::Display);
    
    info(menuItemBuild.menuFunction().label());
}

 
 

Create purchase order line through code

A simple example of how to create a purchase order line through code using AX<Table>-Class.

static void createPurchLine(Args _args)
{
    axPurchLine axPurchLine;
    purchLine purchLine;
   
    axPurchLine = AxPurchLine::newPurchLine(purchLine);
    axPurchLine.validateInput(true);
    axPurchLine.continueOnError(false);
   
    axpurchLine.parmPurchId("P00001");
    axpurchLine.parmItemId("1000");
    axPurchLine.parmPurchQty(10);
    axPurchLine.parmPurchPrice(24.50);
    axPurchLine.save();
}

 
 

How to create a AX<Table>-Class II

If you need a so called AX-class can use the class AxGenerateAxBCClass.

 

Simply call this class in the AOT by right clicking and follow the wizard or use following job:


static void generateAXTableClass(Args _args)
{
    AxGenerateAxBCClass axGenerateAxBCClass;
    
    axGenerateAxBCClass = new AxGenerateAxBCClass();
    axGenerateAxBCClass.parmTableId(tableNum(MyNewTable));
    axGenerateAxBCClass.run();
}


A that way generated class must be modified sometimes, but using the wizard is much faster than creating the class manually.

If the table changes, for example when adding new fields, you simply call that AxGenerateAxBCClass again and the AX

-class will be extended accordingly.

 

How to use such AX

-classes, i've described here.

 


 
 

Add contact information for entity

Here is an example of how you can add contact information data to an existing entry in the global address book.

static void createPartyContactInfo(Args _args)
{
    DirPartyTable dirPartyTable = DirPartyTable::findByNum(??"100000");
    DirParty dirParty;
    DirPartyContactInfoView dirPartyContactInfoView;

    // Edit Global address book
    dirParty = DirParty::constructFromCommon(dirPartyTable, DirUtility::getCurrentDateTime(), DirPartyType::Organization);

    // Create contact info
    dirPartyContactInfoView.LocationName    ='Office';
    dirPartyContactInfoView.Locator         ='+43 1 4654646';
    dirPartyContactInfoView.Type            = LogisticsElectronicAddressMethodType::Phone;
    dirPartyContactInfoView.IsPrimary       = NoYes::Yes;

    dirParty.createOrUpdateContactInfo(dirPartyContactInfoView);
}

Such a created entry will look like this:

Screenshot


 
 
Pages « 1 2 3 4 » 

 

 
 
 
Posts of the actual month
April 2015
MoTuWeThFrSaSu
 12345
6789101112
13141516171819
20212223242526
27282930 
 
© 2006-2025 Heinz Schweda | Imprint | Contact | German version | Mobile version
In order to provide you with better service, this site uses cookies. By continuing to browse the site, you are agreeing to our use of cookies.