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. iOS9 HTTPS
  2. 计算机系统的主存主要是由()构成的。【最全!最详细分析!】
  3. Linux如何指向mysql_linux的基本操作(mysql 的基本操作)
  4. 如何选择开源许可证?(Z)
  5. (02)Verilog HDL模块
  6. mysql的十进位,MySQL十进制字段的正确默认值是什么?
  7. 【POJ】2454.Jersey Politics
  8. Inpaint for Mac(图片去水印软件)
  9. MATLAB五子棋游戏(双人对战,可悔棋)
  10. 微信公众号发送客服消息-中文乱码
  11. 工业物联网·工业数据采集网关-光伏物联网解决方案
  12. android wp模拟器,玩家必看,WP8 ROM模拟器游戏图文教程
  13. 服务器紧急维修,Hypixel服务器紧急维护
  14. 高德地图2----输入提示、关键字查询
  15. 公链扩展路线之争:道阻且长的过程中Ardor 3.0能为我们带来什么?
  16. java中float和double为什么会转为科学记数法?
  17. 07.显示系统:第005课_Vsync机制:第004节_surface使用vsync过程代码分析
  18. 基于jsp(java)网络教学平台系统的设计和开发(含源文件)
  19. 如何获得高质量的外链
  20. CSS3+HTML5+JavaScript:个人相册网站实现

热门文章

  1. 编程式事务和声明式事务浅析
  2. JS 地址截取 省市区 (含自治区,直辖市,县,自治县)
  3. 读书点亮生活-教育成本
  4. 综合布线实训装置-网络综合布线模拟墙-综合布线实训平台
  5. system/bt目录内容解析
  6. 人源肿瘤细胞异种移植(CDX)小鼠模型 CDX模型的优势简介
  7. 雄霸迈阿密java_罪恶都市3之雄霸迈阿密
  8. 数字电子技术(四)组合逻辑电路
  9. 小i机器人要求苹果公司停售iPhone产品
  10. 在idea中使用mysql(超详细)