Microsoft D365 Finance and operations supports very powerful feature called COC or method wrapping. We can extend the logic of public and protected methods without having to use event handlers. COC allows to use the method local and global variables.
This article will help you to use form Extensions in different levels.
1. Form level
2. Form Datasource level
3. Form DataField level
4. Form Control level
Getting buffers of Form Datasources, Form Controls using any of the above level will be similar.
[Note : Adding '_Extension' for any COC extension Class is Mandatory]
FormDataSource dataSource_ds = formRun.datasource(FormDatasourceStr(FormName,DatasourceName));
TableName tableName = dataSource_ds.Cursor();
FormControl formControl = formRun.design().ControlName(FormControlStr(FormName,ControlName));
final class KSSalesTableFrm_Extension
{
public int active()
{
FormRun formRun = this as FormRun;
//get any datasource from the base form
FormDataSource salesLine_ds = formRun.datasource(FormDatasourceStr(SalesTable,SalesLine));
SalesLine salesLine = salesLine_ds.Cursor();
//get any formcontrol from the base form
FormControl itemName= formRun.design().ControlName(FormControlStr(SalesTable, itemName));
//business Logic
return next active();
}
}
{
public void executeQuery()
{
next executeQuery();
FormDataSource formDS = this;
//get any other datasource from the base form
//get any formcontrol from the base form
1. Form level CoC:
When extending a form, use formStr(<FormName>)Get Buffers:
FormRun formRun = this as FormRun;FormDataSource dataSource_ds = formRun.datasource(FormDatasourceStr(FormName,DatasourceName));
TableName tableName = dataSource_ds.Cursor();
FormControl formControl = formRun.design().ControlName(FormControlStr(FormName,ControlName));
Example:
[ExtensionOf(formStr(SalesTable))]final class KSSalesTableFrm_Extension
{
public int active()
{
FormRun formRun = this as FormRun;
//get any datasource from the base form
FormDataSource salesLine_ds = formRun.datasource(FormDatasourceStr(SalesTable,SalesLine));
SalesLine salesLine = salesLine_ds.Cursor();
//get any formcontrol from the base form
FormControl itemName= formRun.design().ControlName(FormControlStr(SalesTable, itemName));
//business Logic
return next active();
}
}
2. Form Datasource level CoC:
When extending a form Datasource, use formDataSourceStr(<FormName>, <DataSourceName>)Example:
[ExtensionOf(formDatasourceStr(SalesTable, SalesLine))]
final class KSSalesTableFrm_SalesLineDS_Extension{
public void executeQuery()
{
next executeQuery();
FormDataSource formDS = this;
FormComboBoxControl comboBoxControl;
//get form datasource
SalesLine salesLineLocal = this.cursor();
SalesLine salesLineLocal = this.cursor();
//get any other datasource from the base form
FormDataSource inventDim_ds = formDS.formRun().dataSource(formDataSourceStr(SalesTable, InventDim));
InventDim inventDim = inventDim_ds.cursor();
//get any formcontrol from the base form
comboBoxControl = formDS.formRun().design().controlName(formControlStr(SalesTable, SalesTable_SalesTypeGrid));
//business logic
}
}
3. Form Datafield level CoC:
When extending a form Datasource Field, use formDataFieldStr(<FormName>, <DataSourceName>, <DataFieldName>)
Example:
[ExtensionOf(formDataFieldStr(SalesTable, SalesLine, BarCode))]
final class KSSalesTableFrm_SalesLineDS_BarCodeDF_Extension
{
public void modified()
{
next modified();
FormDataObject barCode_do = any2Object(this) as FormDataObject;
FormComboBoxControl comboBoxControl;
//get form datasource
FormDataSource salesLine_ds = barCode_do.datasource();
SalesLine salesLine = salesLine_ds.cursor();
SalesLine salesLine = salesLine_ds.cursor();
//get any other datasource from the base form
InventDim inventDim = salesLine_ds.formRun().dataSource(formDataSourceStr(SalesTable, InventDim)).cursor();
//get any formcontrol from the base form
comboBoxControl = salesLine_ds.formRun().design().controlName(formControlStr(SalesTable, SalesTable_SalesTypeGrid));
//business logic
}
}
4. Form DataControl level CoC:
When extending a form DataControl Field, use formDataControlStr(<FormName>, <ControlName>)
Example:
[ExtensionOf(formControlStr(SalesTable, PrintMgmt))]
final class KSSalesTableFrm_PrintMgmtCtl_Extension
{
public void clicked()
{
FormControl buttonControl = any2Object(this) as FormControl;
FormRun formRun = buttonControl.formRun();
InventDim inventDim
FormComboBoxControl formComboBoxControl;
//get any datasource from the base form
inventDim = formRun.dataSource(formDataSourceStr(SalesTable, InventDim)).cursor();
//get any formcontrol from the base form
formComboBoxControl = formRun.design().controlName(formControlStr(SalesTable, SalesTable_SalesTypeGrid));
next clicked();
//business logic
}
}
Let others know if this helps 😀
0 Comments
Post a Comment