You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xrm.Navigation.openForm未按指定formId打开表单问题咨询

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:12:13