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 ...
最新文章
- 【python】一个简单的贪婪爬虫
- 北大核刊最新版2020_爱尔兰地图(2020版)
- APP设计灵感|仪表盘这样设计,所有信息一目了然!
- 无监督学习才不是“不要你管”
- java中的interface
- IOS打开pdf文件
- cnpm 安装文件找不到_技术员修复 win7系统word2013找不到标尺工具的处理办法 -win7系统使用教程...
- 基于SPSS的交叉表分析
- 可靠性测试设备技术含量_可靠性测试中心
- 指数族分布(2):矩母函数、累积量生成函数
- 计算机图形学最新发展的技术,浅析计算机图形学应用及技术发展趋势.doc
- [总结]IOS开发工程师之路
- c++语言解一元二次方程,初学C++新手跪求:用C++编 解一元二次方程 并 结果用复数表示。。...
- 第六天 01-hydra工具windows远程桌面的密码爆破
- iOSApp是如何启动的
- CentOS 7 安装极点五笔输入法
- 接口测试系列之 —— 前端交互测试和后端逻辑测试
- 环境配置 | ubuntun16.04下卸载matlab
- #汇编语言字符串的输出(dosbox运行时输出乱码问题解决)
- java中ceil_Java ceil()方法
热门文章
- git flow 概念
- php微信访问,PHP开发之判断微信浏览器访问
- JAVA留言板系统(java留言板系统)java留言管理系统
- 中X集团企业数字档案室建设方案- 档案馆数字化建设实施方案
- 竞价排名还会受到“魏则西“的挑战吗?
- char *s=“\ta\017bc“所占字节数
- 解决创建Maven Project出现的项目报错问题
- 武大计算机博士毕业生工资,北航、交大、武大…中国重点大学毕业生工资公布,你达标了吗?...
- 【JAVA】MyEclipse使用 - 相关技术和快捷键(转自:CSDN - lgx06)
- max_transition 违例 及解决办法