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学习笔记相关推荐

  1. ODE(Open Dynamics Engine)学习笔记

    https://tech.hqew.com/fangan_788777 此外,在ODE仿真环境中,可通过两种方式来模拟弹簧-阻尼系统: (1)通过设置ERP(Error Reduction Param ...

  2. 【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics)

    这节的内容主要讲述机器人动力学的内容.相对于本书其他部分运动学内容相比,把动力学一下子合成了一章.看完以后有三个感受: 1.本章难度相对其他章节较大,因此需要反复去看,以求对重要内容的眼熟,不求全部记 ...

  3. 全是精髓!也许是最完美的“Nginx学习笔记”了,阿里云高工“365”天手写!

    前言 "Nginx",一个高性能的HTTP和反向代理web服务器,Nginx因为内存少.并发能力强的特性,深受虚拟机主机提供商的欢迎,可以支持高达50000个并发连接数的响应.Ng ...

  4. Windows批处理程序编程学习笔记

    Windows批处理学习笔记(基础篇) 第一章 从零开始认识批处理(what why how) 1.1 什么是Windows批处理? 批处理程序全名为 Batch file programming 是 ...

  5. python pow和**_Python学习笔记 | 实例3:天天向上的力量

    本文为中国大学MOOC<Python语言程序设计>课程学习笔记,课程主讲:嵩天老师,练习平台:Python123,参考教材:<Python语言程序设计基础> 天天向上的力量 加 ...

  6. oracle查询当前归档scn_【学习笔记】Oracle数据库 查看归档日志存放的位置

    [学习笔记]Oracle数据库 查看归档日志存放的位置 时间:2016-10-21 19:19   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 分享一篇关于查看Oracle ...

  7. Dynamic CRM 2013学习笔记(一)插件输入实体参数解析

    1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") & ...

  8. CS231n 学习笔记(1)——神经网络 part1 :图像分类与数据驱动方法

    *此系列为斯坦福李飞飞团队的系列公开课"cs231n convolutional neural network for visual recognition "的学习笔记.本文主要 ...

  9. js/jquery学习笔记

    javascript简介 JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言. 不同于服务器端脚本语言,例如PHP与ASP,JavaScript是客户端脚本语言,也就是说Ja ...

最新文章

  1. 【python】一个简单的贪婪爬虫
  2. 北大核刊最新版2020_爱尔兰地图(2020版)
  3. APP设计灵感|仪表盘这样设计,所有信息一目了然!
  4. 无监督学习才不是“不要你管”
  5. java中的interface
  6. IOS打开pdf文件
  7. cnpm 安装文件找不到_技术员修复 win7系统word2013找不到标尺工具的处理办法 -win7系统使用教程...
  8. 基于SPSS的交叉表分析
  9. 可靠性测试设备技术含量_可靠性测试中心
  10. 指数族分布(2):矩母函数、累积量生成函数
  11. 计算机图形学最新发展的技术,浅析计算机图形学应用及技术发展趋势.doc
  12. [总结]IOS开发工程师之路
  13. c++语言解一元二次方程,初学C++新手跪求:用C++编 解一元二次方程 并 结果用复数表示。。...
  14. 第六天 01-hydra工具windows远程桌面的密码爆破
  15. iOSApp是如何启动的
  16. CentOS 7 安装极点五笔输入法
  17. 接口测试系列之 —— 前端交互测试和后端逻辑测试
  18. 环境配置 | ubuntun16.04下卸载matlab
  19. #汇编语言字符串的输出(dosbox运行时输出乱码问题解决)
  20. java中ceil_Java ceil()方法

热门文章

  1. git flow 概念
  2. php微信访问,PHP开发之判断微信浏览器访问
  3. JAVA留言板系统(java留言板系统)java留言管理系统
  4. 中X集团企业数字档案室建设方案- 档案馆数字化建设实施方案
  5. 竞价排名还会受到“魏则西“的挑战吗?
  6. char *s=“\ta\017bc“所占字节数
  7. 解决创建Maven Project出现的项目报错问题
  8. 武大计算机博士毕业生工资,北航、交大、武大…中国重点大学毕业生工资公布,你达标了吗?...
  9. 【JAVA】MyEclipse使用 - 相关技术和快捷键(转自:CSDN - lgx06)
  10. max_transition 违例 及解决办法