mandag den 14. november 2016

Dynamics AX 2009 Ressources graphics

Here's how to get graphics stored in AOT as a ressource onto a report in Dynamics AX 2009.

Do a display method with:

display Bitmap  companyLogo()
    return SysResource::getResourceNodeData(SysResource::getResourceNode(identifierstr('zabel_JPG')));

where zabel_jpg is the graphics file stored in ressources in the AOT.

Drag the method onto the design.

torsdag den 6. oktober 2016

Toggling visibility of fields in a Grid in then preview Pane of a ListPage form using code

Tasked with hiding a specific field on the salesLine table in the sales order forms depending on the value of a field on SalesTable I searched for methods and came across:

I agree with the method of finding the field on the datasource of the formpart
however a better method of making the field invisible is to reference


instead of actually having to reference the form control.

This will make the field visible/invisble anywhere in the form that the field of the datasource is used.

In my case it was done like this:

private void toggleintraCodeReturn()
    PartList    pl;
    int pCount,partdsCount;
    FormRun part;
    boolean shown;
    FormDataSource pfds;

    FormDataSource  fds,partfds;
    shown = this.currentSalesTable().CustMaterial == NoYes::Yes;
    if (this.currentSalesTable().isFormDataSource())
        fds = this.currentSalesTable().dataSource();
        pl = new PartList(fds.formRun());
        if (pl)
            // Getting parts for form
                part = pl.getPartById(pCount);
                if ( == identifierStr('SalesTableListPagePreviewPane'))
                    // Getting datasources for part form
                        fds = part.dataSource(partdsCount);
                        // Here we got hold of sales lines data source
                        if (fds.table() == tableNum(SalesLine))

fredag den 16. september 2016

Dynamics AX and project quotations in in .docx format

Just finished an assignment making a tool for Dynamics AX 2012R2 for creating project quotations in word, using AX data.
The customer is an ETO company manufacturing production lines for slaugtherhouses.

The tool should create a quotation file word document (.docx) using a word template (.dotx) prepared in a certain language. This would allow the customer to design the layout of the document in a easy and familiar way.

The spec required the quotation to include

Budgets with detailed information for each sub project of a main project.
Budgets summarized for each sub project of a main project.
Scope of supply, which contains short technical descriptions of the included units on the production lines (sub projects)
Technical descriptions - a section of the document containing listing (only once for each unit/sub project) complete descriptions with pictures of each included unit

The algorithm in short is this:

Now the challenge was that for most itemids in the item forecast of the projects, there exists a word document (product sheet) containing detailed product facts. Each product sheet contains four sections

a title
a short description
a middle long description (containing a picture of the unit)
a long description (containing a picture of the unit)

Depending on the user input in the dialog when running the tool, the tool should extract one or more of the sections of the product sheet (mentioned above), and include the extracted sections in the quotation word document.

I have used a 3rd party component called Aspose. This component allows you to work with several document formats, reading, editing and creating documents, without having to have the software normally used to work with the document format installed. That is, Dynamics AX can actually work with the documents SERVER SIDE without having to have Office installed on the AOS.

So I made a .dll in c# that the x++ code uses for the work to be done with the word files, and the x++ code is made so that we can replace the query with other queries if necessary.

The template setup contains features for

searching the word file for bookmarks for insertion of values
searching the word file for fields for insertion of values

The values that AX can insert are categorized as so:

Ordinary table.field values
Ordinary table.method values
A table of values (that can be Axtable fields og Axtable table methods)
A word document section (an extracted section of a separate word document)
A fixed text

The template can be setup by the user combining the bookmarks/fields to search for in the word document and the type of value to be inserted when found.

When a new template is created, the tool can examine the word template, and extract all bookmarks/fields (discover) so that the user has a basic setup he can use to map the ax fields/methods etc up against which bookmarks/fields should be substituted.
Again Aspose is used to do this.

We have used Aspose in other Dynamics AX projects:

Axapta version 3.0 - where we used Aspose to ensure that print out of .pdf-files was always the same page orientation (potrait) in connection with a AX report output )

Dynamics AX 2012 R3  creating .pdf-files for customer visits with user editable forms to send out to sales personnel - ensuring they can open the file and gather input regardless of hardware platform and being online or not.

Aspose is a good tool when you have to make applications that create or edit .pdf-.files, excel-files, word-files. It can even do imaging and OCR, though I haven't worked with those areas.