Dynamics 365 FO学习笔记
D365FO官方Wiki:
https://docs.microsoft.com/en-us/dynamics365/unified-operations/fin-and-ops/
1. 窗体控件不再支持Active X 控件和ManagedHost控件,取而代之的是一种可扩展的控件架构。
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发送验证结果
[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 发送验证结果给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;
}
}
窗体内的方法
[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); } }
Dynamics 365 FO学习笔记相关推荐
- ODE(Open Dynamics Engine)学习笔记
https://tech.hqew.com/fangan_788777 此外,在ODE仿真环境中,可通过两种方式来模拟弹簧-阻尼系统: (1)通过设置ERP(Error Reduction Param ...
- 【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics)
这节的内容主要讲述机器人动力学的内容.相对于本书其他部分运动学内容相比,把动力学一下子合成了一章.看完以后有三个感受: 1.本章难度相对其他章节较大,因此需要反复去看,以求对重要内容的眼熟,不求全部记 ...
- 全是精髓!也许是最完美的“Nginx学习笔记”了,阿里云高工“365”天手写!
前言 "Nginx",一个高性能的HTTP和反向代理web服务器,Nginx因为内存少.并发能力强的特性,深受虚拟机主机提供商的欢迎,可以支持高达50000个并发连接数的响应.Ng ...
- Windows批处理程序编程学习笔记
Windows批处理学习笔记(基础篇) 第一章 从零开始认识批处理(what why how) 1.1 什么是Windows批处理? 批处理程序全名为 Batch file programming 是 ...
- python pow和**_Python学习笔记 | 实例3:天天向上的力量
本文为中国大学MOOC<Python语言程序设计>课程学习笔记,课程主讲:嵩天老师,练习平台:Python123,参考教材:<Python语言程序设计基础> 天天向上的力量 加 ...
- oracle查询当前归档scn_【学习笔记】Oracle数据库 查看归档日志存放的位置
[学习笔记]Oracle数据库 查看归档日志存放的位置 时间:2016-10-21 19:19 来源:Oracle研究中心 作者:HTZ 点击: 次 天萃荷净 分享一篇关于查看Oracle ...
- Dynamic CRM 2013学习笔记(一)插件输入实体参数解析
1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") & ...
- CS231n 学习笔记(1)——神经网络 part1 :图像分类与数据驱动方法
*此系列为斯坦福李飞飞团队的系列公开课"cs231n convolutional neural network for visual recognition "的学习笔记.本文主要 ...
- js/jquery学习笔记
javascript简介 JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言. 不同于服务器端脚本语言,例如PHP与ASP,JavaScript是客户端脚本语言,也就是说Ja ...
最新文章
- iOS9 HTTPS
- 计算机系统的主存主要是由()构成的。【最全!最详细分析!】
- Linux如何指向mysql_linux的基本操作(mysql 的基本操作)
- 如何选择开源许可证?(Z)
- (02)Verilog HDL模块
- mysql的十进位,MySQL十进制字段的正确默认值是什么?
- 【POJ】2454.Jersey Politics
- Inpaint for Mac(图片去水印软件)
- MATLAB五子棋游戏(双人对战,可悔棋)
- 微信公众号发送客服消息-中文乱码
- 工业物联网·工业数据采集网关-光伏物联网解决方案
- android wp模拟器,玩家必看,WP8 ROM模拟器游戏图文教程
- 服务器紧急维修,Hypixel服务器紧急维护
- 高德地图2----输入提示、关键字查询
- 公链扩展路线之争:道阻且长的过程中Ardor 3.0能为我们带来什么?
- java中float和double为什么会转为科学记数法?
- 07.显示系统:第005课_Vsync机制:第004节_surface使用vsync过程代码分析
- 基于jsp(java)网络教学平台系统的设计和开发(含源文件)
- 如何获得高质量的外链
- CSS3+HTML5+JavaScript:个人相册网站实现