為螢幕建立下拉選單

假設你需要為特定的 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);
}

如果選擇此方法,處理指示器將始終顯示在選單的右側,這可以說是更好的使用者體驗。