acumatica - 自定义屏幕上的新操作定义
问题描述
我正在尝试在 2020R1 的自定义屏幕上实施新的操作定义,为 2021R2 做准备。我似乎无法将这些操作分组到文件夹中,并且最后一个操作不会隐藏。我错过了什么?
这是在图形定义中:
public override void Configure(PXScreenConfiguration graph)
{
var context = graph.GetScreenConfigurationContext<NGBiopsyEntry, NGBiopsy>();
context.AddScreenConfigurationFor(screenConfig =>
screenConfig
.WithActions(actions =>
{
actions.Add(a=>a.ActionSubmitBiopsy);
actions.Add(a=>a.ActionRefreshWorkTickets,
config=>config
.InFolder(FolderType.ActionsFolder));
actions.Add(a=>a.ActionStartPGTMTesting,
config=>config
.InFolder(FolderType.ActionsFolder));
actions.Add(a=>a.ActionSetEmbryoIDGen,
config=>config
.InFolder(FolderType.ActionsFolder)
.IsHiddenAlways());
}));
}
但我仍然得到这个:
即使在重新启动应用程序、重建 dll、发布定制项目之后。我还缺少另一个设置吗?
解决方案
新的工作流程很有趣。今年在峰会上有一个很棒的演示,所以请留意发布视频的时间,以获得更多精彩的额外细节。这应该是一个很容易解决的问题,但它不是通用的,所以我将分享您可能必须添加菜单操作的 2 种方法。
引起我注意的第一件事是您的菜单操作不在您指定的 Actions 文件夹中。这是一个非常明显的迹象,表明上下文并不完全正确。我把我的分成两部分,我认为你用一种方法设置你的。
在这两种情况下,您都需要首先覆盖配置,指定图形和主 DAC。然后,您使用您的 WorkflowContext (再次)为您的图形和主 DAC 定义一个配置。在那之后,事情开始变得有点复杂。
这是针对还没有屏幕配置的新自定义屏幕,还是您正在扩展已经存在的工作流程?在第一个示例中,我向已定义工作流(和屏幕配置)的 POReceiptEntry 图中添加了几个打印操作。另外,我正在从 POReceiptEntry_Extension 类中添加我的操作,因此我需要在 Add.xml 中指定它。
public override void Configure(PXScreenConfiguration config)
=> Configure(config.GetScreenConfigurationContext<POReceiptEntry, POReceipt>());
protected virtual void Configure(WorkflowContext<POReceiptEntry, POReceipt> context)
{
context.UpdateScreenConfigurationFor(screen =>
{
return screen
.WithActions(actions =>
{
actions.Add<POReceiptEntry_Extension>(
g => g.printItemLabel,
a => a.InFolder(FolderType.ActionsFolder)
);
actions.Add<POReceiptEntry_Extension>(
g => g.printSOLabel,
a => a.InFolder(FolderType.ActionsFolder)
);
});
});
}
向自定义屏幕添加操作时,屏幕配置在您创建之前不会创建。在此示例中,您将看到UpdateScreenConfigurationFor更改为AddScreenConfigurationFor。此外,您会看到 Add 这次没有指定扩展名,因为这些操作是在我的自定义(基本)图中定义的。
public override void Configure(PXScreenConfiguration config)
=> Configure(config.GetScreenConfigurationContext<MyGraph, MyDAC>());
protected virtual void Configure(WorkflowContext<MyGraph, MyDAC> context)
{
context.AddScreenConfigurationFor(screen =>
{
return screen
.WithActions(actions =>
{
actions.Add(
g => g.myAction,
a => a.InFolder(FolderType.ActionsFolder)
);
});
});
}
给其他读者的注意事项:
我正在使用 2021R1,为了其他人的利益,我与 Kyle 交谈并得知他正在使用 2020R1。他的具体实现有点复杂,需要补充
.AddDefaultFlow(workflow => workflow...
创建他的默认工作流程。这也可以在屏幕定义中完成,也可以从自定义项目的屏幕编辑器中完成,尽管我不记得我们的系统管理员是否这样做了,或者我的示例中的 AddScreenConfiguration 是否为我处理了它。
推荐阅读
- reactjs - 避免在 Reactjs 中更改状态时重新计算
- android - 应用的主题在 Oreo 8.1 设备上崩溃
- google-fit-sdk - 如何从 Google Fitness api 获取体重数据?
- r - 如何使用 ggplot 和 brewer 包绘制包含计数的数据集?
- javascript - “如果”条件不起作用。我该如何比较它们。我也尝试过将值转换为整数类型,但它仍然无法正常工作
- python - 使用 Pandas 从 CSV 解析用引号括起来的 JSON 字符串
- css - CSS未在移动设备上更新
- node.js - Safari Put Request Method 不允许 cors 问题
- azure-eventgrid - 通过 logicapps 将自定义消息发布到事件网格
- firebaseui - 无法解析版本 4.0.1 中的符号“AuthUI”