Extension of a form control method - Chain of command- D365 F&O - X++ Code

Rumman Ansari   Software Engineer   2023-09-04   2311 Share
☰ Table of Contents

Table of Content:


Extension of a form control method - Chain of command- D365 F&O - X++ Code

Chain of command is an option that helps you enhance the functionality of a form control method. This option is applicable for standard methods and custom methods of the form.

You can use the following code pattern if you need to extend the clicked() method of the form button control:


[ExtensionOf(formControlStr(CustTable, DirPartyEntityAssociationUpdate))]
final class CustTableFormControlDirPartyEntityAssociationUpdate_Extension
{
    public void clicked()
    {
        //code
        next clicked();
        //Code
    }
}

In X++, the ExtensionOf keyword is used to create a class extension that extends the functionality of an existing class. In this case, the CustTableFormControlDirPartyEntityAssociationUpdate_Extension class extends the DirPartyEntityAssociationUpdate form control class for the CustTable form, as specified by the formControlStr(CustTable, DirPartyEntityAssociationUpdate) function call.

The clicked() method is a built-in X++ method that is called when the button or menu item that corresponds to the form control is clicked. The next clicked() statement in the clicked() method is used to call the clicked() method of the parent class, which in this case is the DirPartyEntityAssociationUpdate form control class.

By using next clicked() to call the parent class's clicked() method, any functionality in the parent class is executed before the functionality in the CustTableFormControlDirPartyEntityAssociationUpdate_Extension class. This ensures that any necessary tasks are completed before the extension's code is executed.

Here's an example of how you might use ExtensionOf and next clicked() to extend the functionality of the DirPartyEntityAssociationUpdate form control on the CustTable form:


[ExtensionOf(formControlStr(CustTable, DirPartyEntityAssociationUpdate))]
final class CustTableFormControlDirPartyEntityAssociationUpdate_Extension
{
    public void clicked()
    {
        // Call the parent class's clicked() method first
        next clicked();

        // Add custom clicked code here
        info("DirPartyEntityAssociationUpdate button has been clicked.");
    }
}

In this example, we define the CustTableFormControlDirPartyEntityAssociationUpdate_Extension class as an extension of the DirPartyEntityAssociationUpdate form control class for the CustTable form. In the clicked() method, we call the parent class's clicked() method using next clicked(), and then we add our own custom clicked code, which simply displays an information message.

By using class extensions and the next clicked() statement, we can easily extend the functionality of existing X++ classes, while still ensuring that any necessary tasks are completed correctly.

COC for Form Control:


[ExtensionOf(formcontrolstr(SalesTableListPage,buttonUpdateInvoice))]

final class TM_SalesTableListPage_Control_Extension

{     public void clicked()

{

FormButtonControl _ FormButtonControl= any2Object(this) as FormButtonControl;

FormDataSource salestable_DS = FormButtonControl.FormRun().Datasouce(tableStr(SalesTable));

SalesTable _salestable = salestable_DS.cursor();

UserGroupList UserGroupList;

UserId userId = curUserId();

select * from UserGroupList where UserGroupList.groupId == "Post" && UserGroupList.userId == userId;

if(!UserGroupList)

{

throw Error("User not allowed to generate Invoice");        }

}

next clicked();

}

}