Dynamics 365 FO学习笔记
?
D365FO官方Wiki:
https://docs.microsoft.com/en-us/dynamics365/unified-operations/fin-and-ops/
?
1. 窗體控件不再支持Active X 控件和ManagedHost控件,取而代之的是一種可擴展的控件架構(gòu)。
2. 獲得窗體的DataSource
[FormEventHandler(formStr(HcmPosition), FormEventType::Initialized)]public static void HcmPosition_OnInitialized(xFormRun sender, FormEventArgs e){FormDataSource hcmosition_ds = sender.dataSource(formDataSourceStr(HcmPosition, HcmPosition));Or
FormDataSource hcmosition_ds = sender.dataSource('HcmPosition');}
?
3. FormDataSource的EventHandler獲得FormRun
?
[FormDataSourceEventHandler(formDataSourceStr(HcmPosition, HcmPosition), FormDataSourceEventType::Created)]public static void HcmPosition_OnCreated(FormDataSource sender, FormDataSourceEventArgs e){FormRun formRun = sender.formRun() as FormRun;}
?
4. 通過FormControl的EventHandler獲得FormRun
?
[FormControlEventHandler(formControlStr(HcmPosition, HcmPosition_PositionId1), FormControlEventType::Modified)]public static void HcmPosition_PositionId1_OnModified(FormControl sender, FormControlEventArgs e){FormRun formRun = sender.formRun() as FormRun;}
?
5. 獲得窗體上的FormControl
?
?
[FormEventHandler(formStr(HcmPosition), FormEventType::Initialized)]public static void HcmPosition_OnInitialized(xFormRun sender, FormEventArgs e){sender.design().controlName(formControlStr(HcmPosition, HcmPositionNewPosition)).AllowEdit(false);// to get form open ModeOpenMode openMode = sender.args().openMode();}
?
6. 獲得Current Record
?
?
[FormControlEventHandler(formControlStr(HcmPosition, HcmPositionNewPosition), FormControlEventType::Clicked)] public static void HcmPositionNewPosition_OnClicked(FormControl sender, FormControlEventArgs e) { HcmPosition hcmposition = sender.formRun().dataSource(1).cursor();
????????????HcmPosition hcmposition = sender.args().record(); }
?
7. 使用DataEventArgs發(fā)送驗證結(jié)果
[DataEventHandler(tableStr(CategoryTable), DataEventType::ValidatingDelete)]public static void CategoryTable_onValidatingDelete(Common _sender, DataEventArgs _e){CategoryTable categoryTable = _sender as CategoryTable;ValidateEventArgs validateEventArgs = _e as ValidateEventArgs;boolean ret = true;if (categoryTable.UseInProject){ProjCategory projCategory = ProjCategory::find(categoryTable.CategoryId);ret = projCategory.validateDelete();}if (ret && categoryTable.UseInExpense){TrvCostType trvCostType = TrvCostType::find(categoryTable.CategoryId);ret = trvCostType.validateDelete();}if (!ret){validateEventArgs.parmValidateResult(false);}}
?
8. 用 ValidateFieldValueEventArgs 發(fā)送驗證結(jié)果給Validate Field method
?
[DataEventHandler(tableStr(LedgerParameters), DataEventType::ValidatingFieldValue)]public static void LedgerParameters_onValidatingFieldValue(Common sender, DataEventArgs e){ValidateFieldValueEventArgs ve = e;boolean isValid = true;LedgerParameters ledgerParameters = sender as LedgerParameters;#isoCountryRegionCodesif (ve.parmFieldName() == fieldStr(LedgerParameters, ChineseVoucher_CN) && SysCountryRegionCode::isLegalEntityInCountryRegion([#isoCN])){if ((select firstonly RecId from LedgerJournalTranswhere LedgerJournalTrans.LedgerVoucherType_CN != 0|| LedgerJournalTrans.Voucher_CN != '').RecId != 0){// The general journal needs to be empty in order to modify the setup for the Chinese voucher system.isValid = checkFailed("@GLS54497");}ve.parmValidateResult(isValid);}}
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;
??????? }
}
窗體內(nèi)的方法
[ExtensionOf(formStr(PurchTable))]
final class RIC_PurchTable_Extension
{/// <summary>////// </summary>/// <param name="args"></param>[PostHandlerFor(formStr(PurchTable), formMethodStr(PurchTable, updateControlsForFrenchConfirmedPO))]public static void PurchTable_Post_updateControlsForFrenchConfirmedPO(XppPrePostArgs args){FormRun sender = args.getThis();FormDataSource purchTable_DS;PurchTable purchTable;boolean canEnable;if (PublicSectorUtils::isFrenchRegulatoryEnabled()){purchTable_DS = sender.dataSource(formDataSourceStr(PurchTable, PurchTable));purchTable = purchTable_DS.cursor();canEnable = purchTable.canModifyPurchaseOrder();purchLine_PurchPriceGrid.allowEdit(canEnable);}}}
Override Form DataSource method using Extensions in D3fO
[FormDataSourceEventHandler(formDataSourceStr(SalesTable, SalesLine), FormDataSourceEventType::Activated)] public static void SalesLine_OnActivated(FormDataSource sender, FormDataSourceEventArgs e) {????? ??????? FormDataSource????? fds = sender.formRun().dataSource("SalesLine"); ??????? SalesLine?????????? salesline = fds.cursor(); ??????? FormRun???????????? fr = sender.formRun(); ??????? FormControl???????? fc = fr.design(0).controlName("CreateServiceOrder");??????? ??????? if(salesLine.ProjID) ??????? { ??????????? fc.enabled(true); ??????? } ??????? else ??????? { ??????????? fc.enabled(false); ??????? } ??? }
總結(jié)
以上是生活随笔為你收集整理的Dynamics 365 FO学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang 获取公网ip 内网ip 检
- 下一篇: 牛客题霸 [ 旋转数组的最小数字] C+