如何通过代码隐藏Acumatica物料清单和生产订单的所有相关界面
实现方案
以下是通过代码+自定义配置隐藏Acumatica物料清单、生产订单全部界面的操作步骤:
- 首先通过实现
ISitemapModifier接口批量隐藏站点地图中的目标模块节点,发布自定义项后全局生效,代码示例如下:
using PX.Data; using PX.SM; public class ProductionModuleSitemapModifier : ISitemapModifier { public void Modify(SitemapNode sitemapRoot) { // 隐藏物料清单根节点(含所有下属子界面) HideNodeByScreenId(sitemapRoot, "AM000000"); // 隐藏生产订单根节点(含所有下属子界面) HideNodeByScreenId(sitemapRoot, "AM200000"); // 隐藏生产模块整个工作区入口 HideNodeByScreenId(sitemapRoot, "WE000029"); } private void HideNodeByScreenId(SitemapNode currentNode, string targetScreenId) { if (currentNode.ScreenID.Equals(targetScreenId, System.StringComparison.OrdinalIgnoreCase)) { currentNode.Visible = false; currentNode.RestrictAccess = true; return; } foreach (var childNode in currentNode.Children) { HideNodeByScreenId(childNode, targetScreenId); } } }
注意:不同版本Acumatica的模块ScreenID可能存在差异,可打开目标界面后按Ctrl+Alt+左键点击界面空白处,在弹出的界面属性中查看准确ScreenID替换上述参数
- 完成代码修改后,可额外在自定义项目的「站点地图」配置页中,批量选中所有物料清单、生产订单相关的节点,将可见性设置为隐藏,避免代码未覆盖的自定义磁贴漏出。
- 若需要禁止用户直接输入URL访问对应界面,可批量配置界面访问权限,单界面权限配置代码示例如下,将所有相关界面的ScreenID替换后逐一设置即可:
PXAccessRights.SetForScreen("AM201500", PXAccessRight.Denied);
验证规则:发布自定义项后重新登录系统,左侧导航栏无生产相关工作区入口,全局搜索无物料清单、生产订单相关界面结果,直接输入目标界面URL会提示无访问权限即为配置成功。
内容的提问来源于stack exchange,提问作者Bajrang Patidar
相关产品推荐
相关产品推荐

