主控件中的parentFormContext属性是否受官方支持?
关于formContext.parentFormContext的官方支持性说明
formContext.parentFormContext并非微软官方支持的公开API,在Dynamics 365/ Power Apps的官方文档中没有该属性的正式定义,属于未公开的内部实现细节。使用这类未公开属性存在明显风险:后续平台版本更新时,该属性可能被移除、重命名或修改行为,导致你的自定义代码突然失效,且无法获得官方技术支持。
官方推荐的实现方案
要实现“点击快速视图表单子网格的自定义新建按钮,自动填充快速创建表单的父记录查找字段”,应使用微软公开的标准API,通过参数传递的方式完成,具体步骤如下:
1. 自定义按钮的命令逻辑
在子网格的自定义按钮中,通过PrimaryControl获取子网格上下文,进而获取父实体引用,再通过Xrm.Navigation.openForm传递给快速创建表单:
function openChildQuickCreate(primaryControl) { const subgrid = primaryControl; // 获取快速视图所在父表单的实体引用(官方公开方式) const parentEntityRef = subgrid.formContext.data.entity.getEntityReference(); // 配置快速创建表单参数 const formOptions = { entityName: "child_entity_logical_name", // 替换为你的子实体逻辑名称 createFromEntity: parentEntityRef, // 传递父实体引用 windowPosition: 1 // 表单窗口位置,可按需调整 }; // 打开快速创建表单 Xrm.Navigation.openForm(formOptions).then( (result) => { if (result?.savedEntityReference) { // 表单保存后刷新子网格 subgrid.refresh(); } }, (error) => { console.error("打开快速创建表单失败:", error.message); } ); }
2. 快速创建表单的自动填充逻辑
当通过createFromEntity参数打开快速创建表单时,平台会自动匹配关联的查找字段并填充值,无需额外编写加载事件代码。如果你的场景需要手动处理(比如自定义字段匹配),可在快速创建表单的加载事件中获取传递的参数:
function onQuickCreateFormLoad(formContext) { const createFromEntity = formContext.data.attributes.get("createFromEntity")?.getValue(); if (createFromEntity) { // 手动设置目标查找字段的值 formContext.getAttribute("parent_lookup_field_logical_name").setValue([createFromEntity]); } }
关键说明
使用Xrm.Navigation.openForm并传递createFromEntity参数是微软官方推荐的标准做法,该API在所有受支持的Dynamics 365/Power Apps版本中都能稳定工作,且后续版本更新时会保持兼容性。
内容的提问来源于stack exchange,提问作者Innocent
相关产品推荐
相关产品推荐

