首页 > 解决方案 > 自定义屏幕上的新操作定义

问题描述

我正在尝试在 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、发布定制项目之后。我还缺少另一个设置吗?

标签: acumatica

解决方案


新的工作流程很有趣。今年在峰会上有一个很棒的演示,所以请留意发布视频的时间,以获得更多精彩的额外细节。这应该是一个很容易解决的问题,但它不是通用的,所以我将分享您可能必须添加菜单操作的 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 是否为我处理了它。


推荐阅读