acumatica
Techniques d'interface utilisateur
Recherche…
Création d'un menu déroulant pour un écran
Supposons que vous deviez définir un menu déroulant pour un écran Acumatica particulier, tel que le menu Rapports de la capture d'écran suivante.
Cela peut être réalisé de trois manières différentes:
- En ajoutant une barre d'outils avec un élément de menu à l'ASPX de l'écran
- En déclarant une action "dossier" spéciale au graphique et en ajoutant des éléments de menu dans le code
- En utilisant le sous-système Automation du framework Acumatica (non couvert par cet exemple)
Option 1: Création d'un menu déroulant dans ASPX
Tout d'abord, assurez-vous que l'élément PXDataSource de la page ASPX contient toutes les commandes nécessaires correspondant aux actions du graphique que vous souhaitez effectuer lorsque vous cliquez sur un élément de menu.
<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>
Ensuite, ajoutez un élément de barre d'outils personnalisé juste après l'élément PXDataSource. Dans ce document, définissez un PXToolbarButton avec les éléments de menu déroulant souhaités liés aux commandes de source de données respectives, comme indiqué dans le code suivant.
<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>
Cette option peut sembler tentante en raison de sa simplicité. Cependant, il y a un inconvénient important . Si vous implémentez une telle liste déroulante sur un écran avec un indicateur de traitement (tel qu'un écran de publication de document ou un écran de traitement en masse), l'indicateur apparaîtra à gauche de votre menu déroulant, comme indiqué ci-dessous.
Si cela n'est pas souhaitable, envisagez de définir un menu déroulant dans le code, comme décrit dans la section Option 2 ci-dessous.
Option 2: Création d'un menu dans le graphique
Tout d'abord, dans le graphique de la page, déclarez une action "dossier" qui correspondra au bouton du menu déroulant.
public PXAction<TranslationHistory> reportsFolder;
[PXUIField(DisplayName = "Reports", MapEnableRights = PXCacheRights.Select)]
[PXButton(SpecialType = PXSpecialButtonType.Report)]
protected virtual IEnumerable Reportsfolder(PXAdapter adapter)
{
return adapter.Get();
}
Ensuite, dans le constructeur du graphique, indiquez que l'action est bien un menu déroulant et ajoutez toutes les actions à afficher sous forme d'éléments de menu, comme indiqué ci-dessous.
public TranslationHistoryMaint()
{
this.reportsFolder.MenuAutoOpen = true;
this.reportsFolder.AddMenuAction(this.translationDetailsReport);
}
Si vous sélectionnez cette approche, l'indicateur de traitement apparaîtra toujours à droite de votre menu, ce qui est sans doute meilleur.