Wednesday, 11 March 2020

D365FO - Extension method data accessor examples

Referenc: https://axcalated.blogspot.com/2018/08/d365fo-extension-method-data-accessor.html
Name: 

SourceEventParmExample
ClassPre/Post eventXppPrePostArgsGet args and parmameter values from a method that is being extended. Parm 1 = Object Parm 2 = Common
PurchCreateFromSalesOrder callingClass = args.getThis() as PurchCreateFromSalesOrder;      
Object callerObject = args.getArgNum(1) as Object;
Common callerRecord = args.getArgNum(2) as Common;
ClassPre/Post eventXppPrePostArgsClass example: SalesLineType salesLineType = args.getThis() as SalesLineType; 
ClassmainargsGetting the caller record that is sent to a class via args. This is the same as 2012 however args.record().datasource() is now deprecated
//check the caller
if(_args.callerName() == formStr(SalesTable))
{
        //check to see which dataset type was passed
        if(_args.dataset() == tableNum(SalesLine))
        {
                //get the forms datasource record (FormDataUtil::getFormDataSource() replaced _args.record().datasource())
               FormDataSource salesLineDS = FormDataUtil::getFormDataSource(_args.record());
        }
}
FormInitializedxFormRunFormDataSource purchLine = sender.dataSource(formDataSourceStr([formname],[table]));
FormDataSourceFormDataSourceFormDataSource formDS = sender.formRun().dataSource(formDataSourceStr(EcoResProductDetailsExtended, MHSmartATPItemSettings));
MHSmartATPItemSettings smartATPItemSettings = formDS.cursor();
FormDataSource FieldFormDataObjectFormDataSource formDS = sender.datasource();
PurchLine purchLine = formDS.cursor();
FormForm ControlFormControlFormRun formRun;
FormControl formControl;
formRun = sender.formRun();
formControl = FormRun.design().controlName(formControlStr(<form name>, <control name>));
someVariable = formControl.valueStr();
FormonClickedFormControl FormRun formRun = sender.formRun();
 FormDataSource formDSSalesTable = formRun.dataSource(formDataSourceStr(SalesTable, SalesTable));
 FormDataSource formDSSalesLine = formRun.dataSource(formDataSourceStr(SalesTable, SalesLine));
      
 SalesTable salesTable = formDSSalesTable.cursor();
 SalesLine salesLine = formDSSalesLine.cursor();
FormPre/Post eventXppPrePostArgsFormRun formRun = args.getThis();
FormDataSource formDSLogisticsPostalAddress = formRun.dataSource(formDataSourceStr(LogisticsPostalAddress, LogisticsPostalAddress));
LogisticsPostalAddress logisticsPostalAddress = formDSLogisticsPostalAddress.cursor();
TableonDeleteCommonPurchLine purchLine = sender as PurchLine;
TableModified Field ValueCommonTableName itemSettings = sender as TableName;
ModifyFieldValueEventArgs fieldEvent = e as ModifyFieldValueEventArgs;

  //check to see which field was modified
  switch(fieldEvent.parmFieldName())
        {
            case fieldStr([tablename], [fieldname]):
            ...do stuff
            break;
        }
TableValidateFieldValueCommon/DataEventArgsValidateFieldValueEventArgs fieldEvent = e;
boolean isValid;
PurchLine purchLine = sender as PurchLine;
      
//declare the checkFailed     
isValid = checkFailed("some error event");
//save the result
fieldEvent.parmValidateResult(isValid);
TablePre/Post eventXppPrePostArgsPurchLine purchLine = args.getThis() as PurchLine;
FormGetting different datasource from calling objectFormDataObjectGet different datasource from formdataobject. Such as modified InventDim.InventLocationId -> PurchLine
 FormDataSource formDS = sender.datasource();
InventDim inventDim = formDS.cursor();
FormRun formRun = sender.datasource().formRun();
FormDataSource formPurchLineDS = formRun.datasource(formDataSourceStr(PurchTable, PurchLine));
PurchLine purchLine = formPurchLineDS.cursor();

No comments:

Post a Comment

POSTMAN D365

  Postman is useful to test the behavior of different OData class from/to D365FO. In this post we will see the steps to setup Postman with D...