Dynamics AX Blog - Dynamics AX 2012 - Page 20

These posts are machine-translated.
Currently, only posts are displayed, which are relevant for Dynamics AX version »Dynamics AX 2012« Filter entfernen

RSS-Feed of this version

Create word document by code

Microsoft WordBelow you will find a simple job, that creates a Word document containing a table. The example also sets the frame and the color of the table.
The example requires a locally installed Microsoft Word.

static void CreateWordFileWithTable(Args _args)
{
    COM wordApplication;
    COM wordTables;
    COM wordTable;
    COM wordSelection;
    COM wordTableRows;
    COM wordRange;
    COM wordTableCell;
    COM wordTableCellRange;
    COM wordDocuments;
    COM wordDocument;
    COM wordTableBorders;
    ;
 
    // Initialize Word object and document
    wordApplication = new COM("Word.Application");
    wordDocuments = wordApplication.documents();
    wordDocuments.add();
    wordDocument = wordDocuments.item(1);
 
    wordSelection = wordApplication.selection();
    wordRange = wordSelection.range();
 
    // Get table collection
    wordTables = wordSelection.tables();
 
    // Create table with 3 rows and 5 columns
    wordTable = wordTables.add(wordRange, 3, 5);
 
    // Fill cell: First line, second column
    wordTableCell = wordTable.Cell(1, 2);
    wordTableCellRange = wordTableCell.range();
    wordTableCellRange.text("Hello");

    // Fill cell: Second line, third column
    wordTableCell = wordTable.Cell(2, 3);
    wordTableCellRange = wordTableCell.range();
    wordTableCellRange.text("World");
 
    // Enable table borders
    wordTableBorders = wordTable.borders();
    wordTableBorders.enable(true);

    // Add colored borders
    wordTableBorders.InsideLineStyle(3);
    wordTableBorders.OutsideLineStyle(5);
    wordTableBorders.OutsideColorIndex(2);
 
    // Get table row collection and add a new row
    wordTableRows = wordTable.rows();
    wordTableRows.add();
 
    // Open word
    wordApplication.visible(true);
    wordApplication.finalize();
}

The created word document looks like this:

Screenshot


 
 

AX 2012: Using computed colums to create subselects

Using computed columns of view creates you the ability, to write subselects/subqueries.

Find below a method, which is inspired by inventTable.productName() and can be used to display the name of an item.

private static server str compColItemName()
{
    #define.ViewName("ItemNameView")

    #define.DataSourceName("InventTable")
    #define.FieldItemId("itemId")
    #define.FieldProduct("Product")
    str sProduct;
    DictView dictView;
    str translationSQLStr;
    str productSQLStr;

    dictView = new DictView(tableNum(#ViewName));

    sProduct = dictView.computedColumnString
        (#DataSourceName,
        #FieldProduct,
        FieldNameGenerationMode::FieldList,
        true);

    translationSQLStr = strFmt("SELECT Name FROM EcoResProductTranslation WHERE EcoResProductTranslation.Product = %1 AND LanguageId = '%2'", sProduct, CompanyInfo::find().LanguageId);
    productSQLStr = strFmt("SELECT DisplayProductNumber FROM EcoResProduct WHERE EcoResProduct.RecId = %1", sProduct);

    return strFmt("isNUll((%1), (%2))", translationSQLStr, productSQLStr);
}

 
 

How to create a AX<Table>-Class

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

Simply call this class in the AOT by right clicking and follow the wizard.

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<Table>-class will be extended accordingly.

How to use such AX<Table>-classes, i've described here.


 
 

AX 2012: Create a visual studio shortcut

ScreenshotTo ensure to start visual studio using the correct layer you can use the follwing description to create a visual studio-shortcut:

  • Create an AXC-File using the Dynamics AX configuration utility erstellen
  • Crete a shortcut for visual studio and extends the path with the following:

    /AxConfig "Pfad zur AXC-Datei

The final shortcut should sim:

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe" /AxConfig "C:\Users\Michael\Desktop\AX 2012.axc"

After starting visual studio you can approve the used layer in the top of the application explorer.

Screenshot
 


 
 

Example of a date filter in a form DataSource

The following code is an example of how to build a query range based on a Form Data Source, which displays only "daily" records.

In the example the form-dataSource is named DataSourceName and it contains two date fields called FromDate and ToDate. Depending on a check box only records should be displayed, which that are valid for todays date.

public void applyFilter()
{
    queryBuildRange qbr;

    qbr = sysQuery::findOrCreateRange(DataSourceName_ds.queryBuildDataSource(), fieldNum(DataSourceName, recId));

    if( !ShowExpiredCheckBox.checked())
    {
        qbr.value(strfmt('('+
                         '((%5.%2 <= %1) && (%5.%3 >= %1)) || ' +
                         '((%5.%2 == %4) && (%5.%3 == %4)) || ' +
                         '((%5.%2 <= %1) && (%5.%3 == %4)) || ' +
                         '((%5.%3 >= %1) && (%5.%2 == %4)) ' +
                         ')',
                                Date2StrXpp(systemDateGet()),
                                fieldstr(DataSourceName, FromDate),
                                fieldstr(DataSourceName, ToDate),
                                Date2StrXpp(dateNull()),
                                tableId2name(tableNum(DataSourceName))));
    }
    else
    {
        qbr.value(SysQuery::valueUnlimited());
    }
}

The above method can be called for example in the executeQuery() of the DataSource.


 
 

AX 2012: Using the titlefields-method in forms

In a lot of forms of type Detailspage you see an area, which looks like in following screenshot .

Screenshot

This area is mostly build using the - as far as i know undocumented - method titleFields(). This method returns a string of 60 characters.

Screenshot 


 
 

Print text-document using X++

Below you'll find a example, how to print a Text-document using X++.

static void printTextFileFromAX(Args _args)
{
    WinAPI::shellExecute("c:\windows\system32\NOTEPAD.EXE",  @'/pt "c:	emp	est.txt" "An OneNote 2010 senden"');
}

Note: "An OneNote 2010 senden" is the name of the printer.


 
 
Pages « 1 ... 17 18 19 20 21 22 » 

 

 
 
 
Posts of the actual month
April 2025
MoTuWeThFrSaSu
 123456
78910111213
14151617181920
21222324252627
282930 
 
© 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.