Monday, September 16, 2013

Changing Dynamics AX's forms' caption / text

Dynamics AX's forms' caption is composed of two parts: The name of the form / table being edited, and the primary key or at least two key fields that tell the user what record he has selected.

But do you know how to change these texts? I'll show you some ways of doing it in this post.

The first part of the caption, the name of the form, can be set on the Caption property, on the Design node of the form:

And that change can be seen on the left side of the form's caption:

Additionally, you can change the left part of the form through coding. Just add the following line on the init method or on whatever other key method you want it to be:'Foo');

The second part, which is some information about the record, can be changed in two ways: through property settings, or through X++. I'll show both of them.

The table has two properties that you can use for this, the TitleField1 and TitleField2, under the Appearance node:

After setting them, you'll have to set another property on the form's Design node, the TitleDatasource, which should be the datasource related to your table:

And that's it, the value on the two fields you set on the TitleField1 and TitleField2 properties will be included on the form's caption:

And the last way to do it, through X++, is by overriding the caption method on the table. Of course that since we're changing something directly on the table, our change will reflect throughout the whole system. This means that if you change the caption of a table by overriding the caption method, you'll change the caption of all of the forms where that table was used as the form's caption.

We can do something simple, like this:

public str caption()
    str ret;

    ret = super();
    if (this.RecId)
        ret = strFmt('Item number: %1, Total sold amount: %2', this.ItemId, this.getTotalSoldAmount());

    return ret;

private real getTotalSoldAmount()
    return this.UnitPrice * this.SoldQuantity;

With the methods above defined on our example table, our form should look like this:

We only change the behavior if the record already exists on the database, by checking if it has a RecId set. We do that because we don't want to change the default text that appears on the form when the user is inserting a new record: