Let’s discuss today, how
to get the table buffers, form control values, class parameters and method arguments
etc., while writing our own event-handlers in D365. I’ll elaborate this using
example code snippets in this post. There are already very useful posts on this
topic you can look into. Here I required these event handlers while doing
customization in Item master.
Form data source event handler
[FormDataSourceEventHandler(formDataSourceStr(EcoResProductDetailsExtended,
InventTable), FormDataSourceEventType::Written)]
public static void
InventTable_OnWritten(FormDataSource sender, FormDataSourceEventArgs e){
FormRun
form = sender.formRun();
FormDataSource
InventTable_ds = form.dataSource(formDataSourceStr(EcoResProductDetailsExtended,InventTable)) as
FormDataSource;
InventTable
inventTable =
InventTable_ds.cursor();
}
Form event handler
Table Buffer on form closing event
[FormEventHandler(formStr(EcoResAttributeValue),
FormEventType::Closing)]
public static void
EcoResAttributeValue_OnClosing(xFormRun sender, FormEventArgs e)
{
FormDataSource ecoResProduct_ds = sender.dataSource(formDataSourceStr(EcoResAttributeValue,
EcoResProductAttributeValue));
EcoResProductAttributeValue ecoResAttributeValue =
ecoResProduct_ds.cursor();
}
Control value and form event level for which auto declaration must be set true
[FormControlEventHandler(formControlStr(EcoResProductCreate,
OKButton), FormControlEventType::Clicked)]
public static void OKButton_OnClicked(FormControl
sender, FormControlEventArgs e)
{
FormRun element = sender.formRun();
//form control
FormControl modelGroupRef
= element.design(0).controlName("ModelGroupId");
Info(strfmt(“Model Group %1”, modelGroupRef.valueStr()));
//form
parameter
ItemId itemId = element.parmItemId();
}
Post handler for class method
[PostHandlerFor(classStr(EcoResProductReleaseManager),
methodStr(EcoResProductReleaseManager, release))]
public static void
EcoResProductReleaseManager_Post_release(XppPrePostArgs args){
EcoResProductReleaseManager releaseMgr;
//Getting the class object
releaseMgr =
args.getThis();
//Getting the class parameter
ItemId itemId =
releaseMgr.parmItemId();
//Getting the method argument
boolean itemCreation =
args.getArg("_isCreation");
}
Post handler for overriding table methods modified field and validate Write
[PostHandlerFor(tableStr(InventTable),
tableMethodStr(InventTable, validateWrite))]
public static void
InventTable_Post_validateWrite(XppPrePostArgs args)
{
InventTable
inventTable = args.getThis() as InventTable
boolean
ret = true;
//
Override the validations here and set the return value accordingly.
Args.setReturnValue(ret);
}
[PostHandlerFor(tableStr(InventTable), tableMethodStr(InventTable,
modifiedField))]
public static void InventTable_Post_modifiedField(XppPrePostArgs
args)
{
//Getting the table buffer
InventTable
inventTable = args.getThis() as InventTable
//Getting
the field id method argument.
FieldId
fieldModified = args.getArg("_fieldId");
switch
(fieldModified)
{
//Here
you can write your logic on modified field method
break;
}
}
Hope this post will help to give you quick start in customization and writing your code in event handlers and post handlers. More information can be found over here
is it necessary to write a post event handler for every event handler that is written
ReplyDeleteNo but it is all as per need
DeleteAX has also introduced COC (Chain of Command) for that purpose.
DeleteIts really nice article,
ReplyDeleteThanks for the wonderful information.
Keep sharing
Appreciate the good efforts
D365 Finance and Operations Online Training