为屏幕创建下拉菜单

假设你需要为特定的 Acumatica 屏幕定义下拉菜单,例如以下屏幕截图中的 Reports 菜单。

StackOverflow 文档

这可以通过三种不同的方式实现:

  • 通过向屏幕的 ASPX 添加带有菜单项的工具栏
  • 通过向图形声明一个特殊的文件夹操作并在代码中添加菜单项
  • 通过使用 Acumatica 框架的自动化子系统(本示例未涵盖)

选项 1:在 ASPX 中创建下拉菜单

首先,确保 ASPX 页面的 PXDataSource 元素包含与单击菜单项时要执行的图形操作相对应的所有必要命令。

<px:PXDataSource 
    ID="ds" runat="server" Visible="True" PrimaryView="TranslHistRecords" TypeName="PX.Objects.CM.TranslationHistoryMaint">
    <CallbackCommands>
        ...
        <px:PXDSCallbackCommand Name="TranslationDetailsReport" Visible="False"/>
        ...
    </CallbackCommands>
</px:PXDataSource>

接下来,在 PXDataSource 元素后面添加一个自定义工具栏元素。在其中,定义一个 PXToolbarButton,其中包含链接到相应数据源命令的所需下拉菜单项,如以下代码所示。

<px:PXToolBar ID="toolbar1" runat="server" SkinID="Navigation" BackColor="Transparent" CommandSourceID="ds">
    <Items>
        <px:PXToolBarButton Text="Reports">
            <MenuItems>
                <px:PXMenuItem Text="Translation Details" CommandSourceID="ds" CommandName="TranslationDetailsReport"/>
            </MenuItems>
        </px:PXToolBarButton>
    </Items>
    <Layout ItemsAlign="Left" />
</px:PXToolBar>

由于其简单性,此选项可能看起来很诱人; 但是,有一个重要的缺点。如果你在具有处理指示器(例如文档释放屏幕或批量处理屏幕)的屏幕上实现此类下拉菜单,则指示符将显示在下拉菜单的左侧,如下所示。

StackOverflow 文档

如果不希望这样,请考虑在代码中定义下拉菜单,如下面的选项 2 部分所述。

选项 2:在图表中创建菜单

首先,在页面图中,声明一个与下拉菜单按钮对应的文件夹操作。

public PXAction<TranslationHistory> reportsFolder;
[PXUIField(DisplayName = "Reports", MapEnableRights = PXCacheRights.Select)]
[PXButton(SpecialType = PXSpecialButtonType.Report)]
protected virtual IEnumerable Reportsfolder(PXAdapter adapter)
{
    return adapter.Get();
}

接下来,在图形的构造函数中,指示该操作确实是一个下拉菜单,并添加需要显示为菜单项的所有操作,如下所示。

public TranslationHistoryMaint()
{
    this.reportsFolder.MenuAutoOpen = true;
    this.reportsFolder.AddMenuAction(this.translationDetailsReport);
}

如果选择此方法,处理指示器将始终显示在菜单的右侧,这可以说是更好的用户体验。