How To Override An Existing Lookup Method: Chain Of Command & Event Handler

How To Override An Existing Lookup Method: Chain Of Command & Event Handler

In this article you will learn how to override an existing lookup method that exists on a form that is in a different model than your own. In a previous article we looked at

. However, there are some extra steps needed to learn how to override an existing lookup method in D365.

Two Ways To Override An Existing Lookup Method

There are actually two ways to override an existing lookup method.

I will explain both methods. Ultimately, I do not know that one way is preferred over the other. I am more partial to using Chain Of Command, because I find the attribute syntax easier to write. And I tend to put all of my other extension code in a Chain Of Command class. But please use whatever you are most comfortable with.



COC BASE Source Code of Lookup:


[ExtensionOf(formStr(HCMPosition))]

final class SLD_HCMPosition_Form_Extension

{

???public void init()

???{

???????next init();

?

?????// ?FormStringControl DepartmentGroupControl = this.design().controlName(formControlStr(HCMPosition, HcmPositionDetail_Department));

???????HcmPositionDetail_Department.registerOverrideMethod(methodStr(FormDataObject, lookup), formMethodStr(HCMPosition, overridenDepartmentLookup));

???}

?

???public void overridenDepartmentLookup(FormStringControl _formControl)

???{

???????Query query = new Query();

???????QueryBuildDataSource qbds;

???????QueryBuildRange qbr;

?

???????SysTableLookup sysTableLookup;

?

???????sysTableLookup = SysTableLookup::newParameters(tableNum(OMOperatingUnit), _formControl);

???????sysTableLookup.addLookupfield(fieldNum(OMOperatingUnit, Name));

?

???????qbds = query.addDataSource(tableNum(OMOperatingUnit));

???????qbds.addRange(fieldNum(OMOperatingUnit, Division)).value("Department");

?

???????sysTableLookup.parmQuery(query);

???????sysTableLookup.performFormLookup();

?

???}

?

}




Event Handler of Lookup


/// <summary>

???///

???/// </summary>

???/// <param name="sender"></param>

???/// <param name="e"></param>

???[FormControlEventHandler(formControlStr(HcmPosition, HcmPositionDetail_DepartmentName), FormControlEventType::Lookup)]

???public static void HcmPositionDetail_DepartmentName_OnLookup(FormControl sender, FormControlEventArgs e)

???{

??????

?

???????Query query = new Query();

???????QueryBuildDataSource qbds;

???????QueryBuildRange qbr;

?

???????SysTableLookup sysTableLookup;

?

???????sysTableLookup = SysTableLookup::newParameters(tableNum(OMOperatingUnit), sender);

???????sysTableLookup.addLookupfield(fieldNum(OMOperatingUnit, Name));

?

???????qbds = query.addDataSource(tableNum(OMOperatingUnit));

???????qbds.addRange(fieldNum(OMOperatingUnit, Division)).value("Department");

?

???????sysTableLookup.parmQuery(query);

???????sysTableLookup.performFormLookup();

?

???????//cancel the call to super() to prevent the system from trying to show

???????//the lookup form twice and cause an error.

???????FormControlCancelableSuperEventArgs cancelableSuperEventArgs = e as FormControlCancelableSuperEventArgs;

???????cancelableSuperEventArgs.CancelSuperCall();

?

?

???}



Happy Learning!!

Usama Mehmood

要查看或添加评论,请登录

Usama Mehmood的更多文章

社区洞察

其他会员也浏览了