To add new method to VendTable to
get address of Vendors.
public static class VendTable_Extension
{
public static Notes getVendAddress(VendTable vendTable)
{
DirPartyTable
dirPartyTable;
LogisticsLocation
logisticsLocation;
select dirPartyTable where dirPartyTable.RecId
== vendTable.Party
join logisticsLocation
where dirPartyTable.PrimaryAddressLocation
== logisticsLocation.RecId;
return logisticsLocation.postalAddress();
}
}
Once we will build our
project, this method will be usable as if it is method of VendTable.
I have tested the same
using job(Runable Job)
class VendTable_Demo
{
public
static void main(Args _args)
{
VendTable vendTable;
vendTable = VendTable::find("1001");
info(strFmt("Vendor Address -
%1",vendTable.getVendAddress()));
}
}
To get a form control
formRun.design().controlName(“ControlName”)
or
formRun.design().controlName(formControlStr(FormName, ControlName));
Ex:
[FormControlEventHandler(formControlStr(EcoResProductCreate,
CategoryReferenceGroup), FormControlEventType::Modified)]
public static void CategoryReferenceGroup_OnModified(FormControl sender, FormControlEventArgs e)
{
FormStringControl
identification_ProductNumber; //Product number
FormStringControl
itemIdentification_ItemId; //Item number
identification_ProductNumber = formRun.design().controlName("identification_ProductNumber");
identification_ProductNumber.text(itemid);
//To call form level method in the extension class
formrun.productData().identification().parmProductNumber(itemid);
}
SysTableLookup in D365
1.Create Extension for form
2.Create New field and copy event handler(OnLookup)
3. Paste event handler in new class and write below logic
1.Create Extension for form
2.Create New field and copy event handler(OnLookup)
3. Paste event handler in new class and write below logic
[ExtensionOf(formStr(PurchCreateOrder))]
final class PurchTable_Extension
{
///
<summary>
/// Added by
Rajendra on 01-03-2018
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>
[FormControlEventHandler(formControlStr(PurchCreateOrder, NEC_RelatedPO), FormControlEventType::Lookup)]
public static void NEC_RelatedPO_OnLookup(FormControl sender, FormControlEventArgs e)
{
SysTableLookup sysTableLookup;
Query query;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
FormRun formRun;
FormStringControl vendAccount;
formRun = sender.formRun();
vendAccount = formRun.design().controlName(formControlStr(PurchCreateOrder,
PurchTable_OrderAccount));
sysTableLookup = SysTableLookup::newParameters(tableNum(PurchTable), sender);
//sysTableLookup.addLookupfield(fieldNum(PurchTable,
OrderAccount), true);
sysTableLookup.addLookupfield(fieldNum(PurchTable, PurchId), true);
query
= new Query();
qbds
= query.addDataSource(tableNum(PurchTable));
qbds.addRange(fieldNum(PurchTable, OrderAccount)).value(vendAccount.valueStr());
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
ce.CancelSuperCall();
FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
ce.CancelSuperCall();
}
Please note that execution of original lookup should be cancelled by FormControlCancelableSuperEventArgs.CancelSuperCall() otherwise AX will throw an error “More than one form was opened at once for the lookup control.”
Please note that execution of original lookup should be cancelled by FormControlCancelableSuperEventArgs.CancelSuperCall() otherwise AX will throw an error “More than one form was opened at once for the lookup control.”
}