D365模型驱动应用表单状态栏疑问:云端能否复现On-Prem效果?
Dynamics 365 On-Prem 迁移至云端后状态栏问题解答
状态栏是否被弃用或移除?
Dynamics 365云端版本并未弃用或移除状态栏功能,只是展示逻辑和位置与On-Prem版本不同:
- On-Prem版本默认在表单底部固定显示全局状态栏;
- 云端版本将状态栏整合到了表单顶部命令栏区域,仅在触发操作(如保存、提交审批)时动态显示状态提示,而非固定在底部。
能否实现与On-Prem一致的底部状态栏?
完全可以实现和On-Prem版本一致的底部固定状态栏,以下是两种可行方案:
方案1:JavaScript自定义渲染
编写Web资源脚本,在表单加载时动态创建底部状态栏并绑定状态变更逻辑:
// 表单加载时初始化自定义状态栏 function formOnLoad(executionContext) { const formContext = executionContext.getFormContext(); // 创建状态栏容器元素 const statusBar = document.createElement("div"); statusBar.id = "custom-bottom-status-bar"; statusBar.style.position = "fixed"; statusBar.style.bottom = "0"; statusBar.style.width = "calc(100% - 300px)"; statusBar.style.height = "32px"; statusBar.style.backgroundColor = "#f3f2f1"; statusBar.style.borderTop = "1px solid #e0dfdd"; statusBar.style.padding = "6px 16px"; statusBar.style.fontSize = "13px"; // 插入到表单容器内 document.getElementById("contentIFrame").contentDocument.body.appendChild(statusBar); // 绑定实体状态变更事件,实时更新状态栏文本 formContext.data.entity.addOnChange(() => { const currentStatus = formContext.getAttribute("statuscode").getText(); document.getElementById("custom-bottom-status-bar").innerText = `当前状态:${currentStatus}`; }); // 初始化加载时显示当前状态 const initialStatus = formContext.getAttribute("statuscode").getText(); document.getElementById("custom-bottom-status-bar").innerText = `当前状态:${initialStatus}`; }
将该脚本作为Web资源上传至系统,设置表单加载事件调用此函数即可生效。
方案2:Power Apps组件框架(PCF)自定义控件
开发专属PCF控件实现底部固定状态栏:
- 创建PCF项目,设计固定在表单底部的控件布局;
- 绑定实体的
statuscode字段,实现状态实时同步; - 将控件添加到表单底部区域(需调整表单布局预留控件位置)。
可行性证明要点
可向客户展示以下内容佐证可行性:
- 两种方案均基于Dynamics 365云端官方支持的扩展能力(Web资源、PCF),属于平台合规的自定义方式;
- 快速原型验证:通过JavaScript脚本可在测试环境中1小时内搭建出底部状态栏效果;
- 兼容性:自定义状态栏适配云端所有表单类型,不会干扰原有系统功能。
内容的提问来源于stack exchange,提问作者Yuvaraj T
相关产品推荐
相关产品推荐

