Xrm.Navigation.openForm未按指定formId打开表单问题咨询
我之前在Dynamics 365开发时也碰到过一模一样的问题,给你几个实用的排查和解决方向,你可以逐一验证:
确认formId的格式与正确性
必须使用字符串格式的纯GUID,不能带花括号(虽然部分场景兼容,但官方标准是无括号的字符串),也不能是GUID对象。比如正确写法是:entityFormOptions.formId = "5b778d2a-1234-5678-90ab-cdef01234567";你可以直接从表单的URL里复制这个GUID,确保没有多余的空格或符号。
检查表单的可用性与权限
目标表单必须是启用状态,并且当前登录用户的安全角色已经被分配了该表单的访问权限。你可以进入实体的「表单」管理页面,找到对应表单查看状态,同时在「表单安全角色」里确认权限配置。严格核对属性名拼写
CRM的API对属性名大小写非常敏感!必须是小写的formId,别写成FormId或者formID,这个小错误很容易被忽略。添加表单类型指定(如果需要)
如果你要打开的是快速创建表单,除了formId,还需要额外指定formType属性:entityFormOptions.formType = 2; // 2代表快速创建表单,1是主表单不指定的话,默认会按主表单处理,导致快速创建表单的ID不生效。
排除脚本冲突
如果页面上有其他自定义脚本篡改了Xrm.Navigation.openForm的默认行为,也可能导致参数失效。建议在一个干净的测试环境(比如新建的空白Web资源)单独运行你的代码,验证是否能正常生效。
最后给你一个完整的正确代码示例参考:
// 定义表单选项 var entityFormOptions = { entityName: "your_entity_logical_name", // 替换成你的实体逻辑名 formId: "5b778d2a-1234-5678-90ab-cdef01234567", // 替换成目标表单的GUID cmdbar: true // 可选,控制是否显示命令栏 }; // 可选:预填充字段 var formParameters = { "name": "预填充的记录名称", "accountid": "/accounts/12345678-1234-1234-1234-1234567890ab" }; // 打开表单 Xrm.Navigation.openForm(entityFormOptions, formParameters) .then(function(success) { console.log("表单打开成功,记录ID:", success.savedEntityReference[0].id); }) .catch(function(error) { console.error("表单打开失败:", error.message); });
内容的提问来源于stack exchange,提问作者jasonscript
相关产品推荐
相关产品推荐

