Override An Existing Lookup Method: Chain Of Command
Here in this example, we will see, how we can override the form control lookup method using a chain of commands.
Let's take an example of the Purch order form and we will try to override the punchline item ID control lookup.
1. Step one create new Classes as shown below.
[ExtensionOf(FormStr(PurchTable))]
final class PurchTableItemIdLookup_Extension
{
}
2. Step two, create a new method with customized logic to override the standard lookup. I call this function "OverrideItemIdLookup" as shown below.
public void overrideItemIdLookup(FormStringControl _formControl)
{
Query qr = new Query();
QueryBuildDataSource qbdsInventTableExpanded;
QueryBuildDataSource qbdEcoResLS;
SysTableLookup systablelookup = SysTableLookup::newParameters(tableNum(InventTable),_formControl);
qbdsInventTableExpanded = qr.addDataSource(tableNum(InventTable));
qbdEcoResLS = qr.dataSourceTable(tableNum(InventTable)).addDataSource(tableNum( EcoResProductLifecycleState)) ;
qbdEcoResLS.addLink(fieldNum(InventTable, ProductLifeCycleStateId), fieldNum(EcoResProductLifecycleState, StateId));
qbdEcoResLS.addRange(fieldNum(EcoResProductLifecycleState, ItemsHideDropDownPurch)).value(queryValue(NoYes::No));
systablelookup.parmQuery(qr);
systablelookup.addLookupfield(fieldNum(InventTable,ItemId));
systablelookup.addLookupfield(fieldNum(InventTable,NameAlias));
systablelookup.performFormLookup();
}
3. step three, this is the Main point, as we have created a new method, the same is to be registered. for doing this, we need to override the Init method as shown below.
public void init()
{
next init();
//<<controlname. -->PurchLine_ItemId
PurchLine_ItemId.registerOverrideMethod(methodStr(FormDataObject,lookup), FormMethodStr(PurchTable, overrideItemIdLookup));
}
Now build and run..
No comments:
Post a Comment