如何在D365 FO项目中引用JS文件并从X++调用带参JS方法
Dynamics 365 Finance and Operations 中JavaScript文件的接入与调用方案
1. 将JavaScript文件以类DLL引用方式接入D365 FO项目
D365 FO中没有和.NET DLL完全一致的引用机制,但可以通过AOT资源系统实现类似的复用与引用效果,步骤如下:
- 上传JavaScript文件为AOT资源
- 打开D365 FO开发环境的AOT > Resources节点,右键选择
New > File,选中目标JavaScript文件完成上传。 - 给资源设置唯一名称(比如示例中的
JavaScriptResource),将Type属性设为Text,Persist属性设为Yes,确保资源被持久化存储。
- 打开D365 FO开发环境的AOT > Resources节点,右键选择
- 在代码中引用资源
通过SysResource类的方法获取资源节点及内容,扩展示例代码如下:
获取到的internal final class JavaScriptTestJob { public static void main(Args _args) { ResourceNode textFileResourceNode = SysResource::getResourceNode(resourceStr(JavaScriptResource)); // 获取JS文件的文本内容,用于后续注入到前端场景 str jsContent = textFileResourceNode.AOTGetSource(); } }jsContent可注入到表单HTML控件、自定义Web页面等场景中复用。
2. 从X++代码调用带参数的JavaScript方法
根据使用场景不同,实现方式分为两种:
场景一:表单内HTML/Web控件调用JS方法
如果JS代码已加载到表单的HtmlControl中,可通过控件的executeScript方法直接调用:
- 先将JS资源注入到HTML控件(可在表单
init方法中执行):
public void init() { super(); ResourceNode jsResourceNode = SysResource::getResourceNode(resourceStr(JavaScriptResource)); str jsContent = jsResourceNode.AOTGetSource(); // 假设表单上有一个名为HtmlControl_JS的Html控件 HtmlControl_JS.setContent("<script>" + jsContent + "</script>"); }
- 调用带参数的JS方法(比如按钮点击事件中执行):
public void clicked() { super(); // 定义要传递的参数 str userName = curUserId(); int recordCount = 10; // 构造JS调用语句,注意字符串参数需加引号包裹 str jsCall = strFmt("processData('%1', %2)", userName, recordCount); // 执行JS脚本 HtmlControl_JS.executeScript(jsCall); }
场景二:触发前端页面全局JS方法
如果要在后台逻辑中触发前端页面的全局JS方法,可通过FormRun的executeScript方法:
public void run() { super(); str param = "来自X++的触发参数"; str jsCommand = strFmt("globalJSMethod('%1')", param); // 获取当前表单运行实例并执行JS element.executeScript(jsCommand); }
注意事项
- 参数传递时需注意类型格式:字符串必须用单/双引号包裹,数值、布尔值直接传递即可。
- 确保目标JS方法在前端上下文已加载完成,避免出现
undefined错误。 - 如果是自定义Web资源页面,也可以通过X++生成带参数的URL,页面加载时读取URL参数自动调用JS方法。
内容的提问来源于stack exchange,提问作者arif hussain
相关产品推荐
相关产品推荐

