Boutons d’opération

Un bouton d’opération exécute une opération enregistrée par le serveur — une API personnalisée, une action personnalisée, un message propre à Dataverse, ou un code à vous — et ne l’affiche qu’aux utilisateurs pour lesquels il est enregistré. Le bouton demande une fois au serveur quelles opérations l’utilisateur connecté peut exécuter, et vérifie chaque enregistrement qu’il enverrait par rapport à ce que l’utilisateur pourrait lui faire, afin de ne pas offrir ce que le serveur refuserait. Le serveur juge toujours chaque requête lors de son envoi.

Enregistrement d’une opération

Enregistrer une opération dans le Program.csserveur : AddOperationAccess pour une opération Dataverse, AddOperationHandler pour votre propre code. Dans AddPortalRole, WithOperationAccess et WithOperationHandler en accorder une aux titulaires du rôle. Un enregistrement indique qui peut exécuter l’opération, les paramètres qu’une requête peut porter, les enregistrements auxquels elle doit pointer et les sorties qui reviennent.

  • ForEveryone(), ForSignedInUsers(), ForContactsMatching(fetchXml) et ForWebRoles(...) indiquer qui peut l’exécuter ; l’enregistrement d’un rôle est destiné aux titulaires du rôle. Sous la sécurité native Dataverse, les contacts détiennent des rôles web plutôt que des rôles de portail, et une API personnalisée n’est proposée qu’aux utilisateurs dont les rôles de sécurité accordent son privilège d’exécution.
  • Une requête pour votre propre code est jugée exactement comme l’est une opération Dataverse : le gestionnaire ne voit que les requêtes passées, avec les paramètres définis par le serveur remplis, et l’appelant ne voit que les sorties retournées par l’enregistrement.
  • Votre propre code ne peut pas partager la transaction Dataverse, donc une demande est envoyée de son propre côté : un lot qui le transporte avec tout autre est refusé.
  • La sécurité décrit tout ce qu’une immatriculation peut dire.

OpérationBouton

Mettez un OperationButton point où l’opération appartient, en nommant l’opération et le paramètre dans lequel son enregistrement est inclus.

React Blazor
  • Elle est cachée aux utilisateurs qui ne peuvent pas exécuter l’opération, et pendant que la réponse est en cours ; on règle WhenNotAllowed (whenNotAllowed) pour la désactiver à la place. La réponse est demandée une fois et conservée tant que l’application est ouverte ; une demande refusée par le serveur la demande à nouveau.
  • L’enregistrement est inclus RecordParameter: Record, n’importe quel enregistrement par référence, ou alors l’enregistrement du RecordContext bouton s’y installe, une fois qu’il est sauvegardé. L’utilisateur doit pouvoir agir dessus comme l’enregistrement l’exige : l’enregistrement d’un formulaire indique ce que l’utilisateur peut lui faire, et un enregistrement nommé par référence est lu pour celui-ci.
  • Sur un formulaire, une opération Dataverse sur l’enregistrement du formulaire est envoyée dans la sauvegarde propre du formulaire, après ses modifications, donc les deux sont sauvegardés ou aucun, et l’enregistrement est relu. Votre propre code s’exécute après la sauvegarde des modifications du formulaire.
  • Parameters sont envoyés avec chaque requête, et GetParametersAsync (getParameters) en recueille davantage lorsque le bouton est cliqué, par exemple depuis une boîte de dialogue, ; ne rien retourner annule le clic. ConfirmationMessage demande avant que l’opération ne s’exécute, et OnCompleted rend ses sorties.
  • Réglez son texte avec Label ou son contenu, ainsi que son icône, infobulle et apparence comme sur n’importe quel autre bouton.

Exemple

La démo enregistre quelques lignes de son propre code comme une opération pour tout le monde. Tapez un nom et cliquez sur le bouton : le serveur répond, et la page formule la salutation.

Exemple de réaction Exemple de Blazor React TypeScript Razor
Dis bonjour

OpérationGridButton

Dans la barre d’outils d’une grille, OperationGridButton l’opération est exécutée une fois pour chaque ligne sélectionnée, envoyant la ligne dans RecordParameter, puis rafraîchissant la grille. Elle est activée alors que chaque ligne sélectionnée est une sur laquelle l’utilisateur peut agir, ce que chaque ligne indique elle-même. Les requêtes d’une opération Dataverse sont envoyées en une seule transaction, donc elles s’exécutent toutes ou aucune ne s’exécute ; votre propre code s’exécute sur une ligne à la fois et s’arrête à la première qui échoue.

React Blazor

Exemple : sur chaque ligne sélectionnée

Sélectionnez quelques comptes et cliquez sur Vérifier : le code de la démo lit chacun et répond à son nom. Approuver n’est accordé qu’à un rôle de portail qu’aucun visiteur n’occupe, donc il apparaît désactivé.

Exemple de réaction Exemple de Blazor React TypeScript Razor
Tous les récits
Trier
Tous les récits
Taille de la page 102050100
Trier
Nom du compte
Nom du compte
Tapez le nom de l’entreprise ou de l’entreprise.
Numéro de compte
Numéro de compte
Tapez un numéro d’identification ou un code pour le compte afin de rechercher et d’identifier rapidement le compte dans les vues système.
Téléphone principal
Téléphone principal
Tapez le numéro de téléphone principal de ce compte.
Adresse 1 : Ville
Adresse 1 : Ville
Saisissez la ville de l’adresse principale.
Chiffre d’affaires annuel
Chiffre d’affaires annuel
Saisissez le revenu annuel du compte, utilisé comme indicateur dans l’analyse de la performance financière.
Personne-ressource principale
Personne-ressource principale
Choisissez le contact principal du compte pour fournir un accès rapide aux coordonnées.
Abernathy - MacGyverKTWSLQHY(491) 600-8029Tampa$15 959 059,84Bradford Kiehn
Abshire - Marks4EBO9F42(432) 879-3107Boston$14 635 260,82Archibald Bailey
Adams - TorphyK6VNNUCN(864) 842-2566Annapolis$4 567 299,55Merle Vandervort
Altenwerth, D'Amore and ManteF9MN5BAZ(125) 048-0015Gulfport$3 839 082,81Heidi Reichel
Ankunding and Sons92P2G0SF(603) 147-5429Fargo$32 724 448,89Fatima White
Balistreri, Heller and Murphy3Y0AF481(909) 808-9886New Haven$7 097 756,35Angie Kreiger
Balistreri, Steuber and SchultzFF5RCGXG(435) 761-0052Hattiesburg$35 943 517,75Jake Bogisich
Bartoletti LLCJBQ0L2O8(292) 573-7498Santa Fe$766 813,66Cecil Sipes
Bartoletti, Ratke and BeattyWZIDG7K2(267) 075-5978Portland$32 338 459,84Tabitha Morissette
Barton, Koepp and CroninTGAL5Y8F(821) 885-8434Norman$43 550 293,98Marc Dibbert
Bashirian - HamillZS1XZLDL(792) 135-0145Baltimore$15 916 182,51Alexie Dach
Bashirian - WeberOC5PYOJC(492) 789-5504Cranston$23 269 960,31Emmet Krajcik
Baumbach and SonsX8V8TZRX(670) 937-4364Ann Arbor$4 319 879,33Charity Sawayn
Baumbach, Maggio and TurnerV24ZA492(509) 251-9848Orlando$25 479 745,81Cali McClure
Beahan IncB9XXSIJM(262) 429-4179Sioux Falls$45 854 197,84Tressa Graham
Berge and SonsWO8OIGR6(165) 108-8947Topeka$40 560 550,52Delphine Jerde
Bergnaum GroupT3KB03RE(381) 148-7032Rapid City$32 406 150,23Dakota Ward
Bergstrom and SonsG99XNRDY(182) 902-0206Casper$48 880 601,83Grant Funk
Bergstrom, Bins and FlatleyJ1TXPJ9I(409) 160-0657Pittsburgh$21 005 421,54Blanche Gulgowski
Blanda - Terry4L8RSVL9(190) 468-0033Vancouver$33 567 160,56Fausto Pagac
Bode LLCF5IR66HK(386) 496-6921Detroit$1 800 033,15Kane Pollich
Bogisich, Mitchell and BalistreriPCVDL8PS(267) 567-6606Manchester$10 336 491,66Esperanza Luettgen
Borer - MohrLHI1SSVO(070) 539-8404Providence$36 092 236,14Emelia Murray
Botsford - Baumbach8JZK18K6(389) 188-6100Cranston$318 662,34Maria Runte
Botsford, Schroeder and KassulkeU39NNCOJ(960) 101-3753Sacramento$19 016 940,28Raphael Bergnaum
Boyer - SchaeferEFJQXML0(473) 115-3249Fort Wayne$48 601 111,30Moses Metz
Boyle, Zulauf and LakinXXRF6GXU(028) 071-4090Helena$31 856 728,91Federico Hamill
Brekke LLCUCLPTB19(795) 385-0349Norman$25 296 518,98Noemie Stracke
Brekke, Feeney and JohnsVMGNL1M7(203) 861-9656Charleston$13 632 447,58Kristin Koch
Brown, Rohan and MayerEMOSYGOI(479) 235-6497Fairbanks$49 780 735,02Phoebe Legros
Cassin, Kassulke and Schaefer5KSSVNW7(852) 978-3789Flagstaff$29 260 487,45Dedrick Thiel
Christiansen - MetzGSZJ1ODJ(183) 163-4723Reno$25 227 451,85Hattie Schuster
Cole, Tillman and LangworthY1JNB47Q(289) 893-2488Dover$13 838 171,56Jody Rohan
Connelly, Cassin and Ledner69QI6R89(507) 196-5103Wilmington$28 880 982,86Berneice Stracke
Considine Inc1ZGMEMAV(013) 094-8065Anchorage$6 796 633,66Guido Hagenes
Considine, Wilkinson and SpencerHK18ZLOO(772) 222-6147Jersey City$8 490 647,93Douglas Prosacco
Cormier - HettingerJFLKC0CK(508) 849-8368Tucson$14 771 052,63Nola Hand
Cremin - Hodkiewicz4D30N08W(757) 968-3487Fort Wayne$27 239 848,21America Harber
Cruickshank - PollichP3JT5LVY(048) 698-7364Santa Fe$32 195 480,36Joey Reilly
Cruickshank, Auer and SchoenTV06VSEA(516) 585-5831Sioux Falls$3 560 781,82Tiana Kiehn
Cummerata GroupAJYD1N4I(429) 577-7392Minneapolis$20 579 317,84Gustave Zboncak
Daniel LLCADF0WMN9(371) 118-7804Madison$49 497 674,02Francisco Smitham
Denesik, Skiles and Beier2ZMSATDW(716) 332-8853Louisville$25 958 417,48Dock Aufderhar
Dibbert LLC4WT0EDV0(343) 448-8435Huntington$24 379 660,89Elroy Leuschke
Dickinson IncC7SI8E20(429) 201-5173Dover$44 819 510,87Milton Ledner
Dietrich and SonsLAEDD52L(189) 560-2423Hartford$3 522 175,29Heath Kunde
Donnelly - Sanford8SW26RNC(738) 522-0182Fort Wayne$37 819 037,93Betsy King
Dooley - NitzscheNUCMFF7S(574) 958-0441Charleston$11 318 528,04Roman Dietrich
Durgan and SonsCKOSAHML(332) 942-8325Saint Paul$5 901 769,33Connor Marks
Ebert - WymanHJBQWXIR(753) 557-3136Los Angeles$15 782 605,89Zetta Nolan

Demander ce que l’utilisateur peut exécuter

Les boutons demandent GET /api/permissions/operations, ce qui répond uniquement pour l’utilisateur connecté : chaque opération qu’il peut exécuter, ou seulement celles que vous nommez, avec ce qu’une demande peut contenir et les enregistrements auxquels elle doit pointer. Votre propre interface utilisateur peut poser la même question via IOperationAccessCache ou IPowerPortalsProService.GetOperationAccessForCurrentUserAsync sur Blazor, ou useOperationAccess ppp.retrieveOperationAccessAsync sur React.

Réagir Blazor

OperationButton Classe

Paramètres

Nom
Type
Par défaut
Description
AppearanceButtonAppearance?
À quoi ressemble le bouton.
BusyMessagestring?
Ce que la superposition indique pendant que l’opération tourne ; un « Fonctionne... » général quand il n’est pas réglé.
ChildContentRenderFragment?
Le bouton est contenu, à la place de OperationButtonBase.Label.
ConfirmationMessagestring?
Une question à laquelle l’utilisateur répond avant que l’opération ne se lance — « Émettre un remboursement pour cette facture ? » — Ou null de le lancer immédiatement.
ContextRecordContext?
Le contexte d’enregistrement dont le bouton envoie. Pas nécessaire si le bouton est placé à l’intérieur d’un Components.RecordContext.
Disabledbool
False
Désactive le bouton, peu importe ce que l’utilisateur utilise.
GetParametersAsyncFunc<Task<IReadOnlyDictionary<string, ColumnValueBase>>>?
Collecte des paramètres lorsque le bouton est cliqué — par exemple dans un dialogue — ajoutés à OperationButtonBase.Parameters. Le retour null annule le clic. Ils ne sont connus que une fois cliqué, donc si l’utilisateur peut exécuter l’opération est jugé avant ce moment sans eux, et Le serveur juge la demande avec eux.
IconIcon?
Une icône montrée avant le texte.
Labelstring?
Le texte du bouton.
Operation*string
Le nom de l’opération, tel qu’il est enregistré.
ParametersIReadOnlyDictionary<string, ColumnValueBase>?
Les paramètres envoyés avec chaque requête, par nom. Un paramètre d’enregistrement est un Models.LookupValue; l’enregistrement qu’il nomme doit être un sur lequel l’utilisateur peut agir, car le l’enregistrement de l’opération l’exige, ou le bouton compte comme non autorisé.
RecordTableRecordReference?
Le registre envoyé dans OperationButtonBase.RecordParameter, par référence. Quand il n’est pas fixé, l’enregistrement de là où Components.RecordContext le bouton se trouve (ou OperationButton.Context) est envoyé, une fois sauvé.
RecordParameterstring?
Le paramètre dans lequel l’enregistrement est envoyé — Cible, par exemple : an OperationButton's OperationButton.Record ou enregistrement de forme, chaque ligne sélectionnée d’un OperationGridButton.
RefreshRecordbool
True
Que l’enregistrement du formulaire soit lu une fois qu’une opération s’est exécutée seule — le code de l’hôte — a exécute dessus, car il a pu le modifier. Activé par défaut. Une opération Dataverse qui dépend des La sauvegarde est relue avec la sauvegarde, comme sur React.
Tooltipstring?
Affiché lorsque le pointeur repose sur le bouton.
WhenNotAllowedOperationButtonBehavior
Hide
Ce que fait le bouton empêche l’utilisateur d’exécuter l’opération. Caché par défaut.
Nom: Appearance
Type: ButtonAppearance?
Description: À quoi ressemble le bouton.
Nom: BusyMessage
Type: string?
Description: Ce que la superposition indique pendant que l’opération tourne ; un « Fonctionne... » général quand il n’est pas réglé.
Nom: ChildContent
Type: RenderFragment?
Description: Le bouton est contenu, à la place de OperationButtonBase.Label.
Nom: ConfirmationMessage
Type: string?
Description: Une question à laquelle l’utilisateur répond avant que l’opération ne se lance — « Émettre un remboursement pour cette facture ? » — Ou null de le lancer immédiatement.
Nom: Context
Type: RecordContext?
Description: Le contexte d’enregistrement dont le bouton envoie. Pas nécessaire si le bouton est placé à l’intérieur d’un Components.RecordContext.
Nom: Disabled
Type: bool
Par défaut: False
Description: Désactive le bouton, peu importe ce que l’utilisateur utilise.
Nom: GetParametersAsync
Type: Func<Task<IReadOnlyDictionary<string, ColumnValueBase>>>?
Description: Collecte des paramètres lorsque le bouton est cliqué — par exemple dans un dialogue — ajoutés à OperationButtonBase.Parameters. Le retour null annule le clic. Ils ne sont connus que une fois cliqué, donc si l’utilisateur peut exécuter l’opération est jugé avant ce moment sans eux, et Le serveur juge la demande avec eux.
Nom: Icon
Type: Icon?
Description: Une icône montrée avant le texte.
Nom: Label
Type: string?
Description: Le texte du bouton.
Nom: Operation*
Type: string
Description: Le nom de l’opération, tel qu’il est enregistré.
Nom: Parameters
Type: IReadOnlyDictionary<string, ColumnValueBase>?
Description: Les paramètres envoyés avec chaque requête, par nom. Un paramètre d’enregistrement est un Models.LookupValue; l’enregistrement qu’il nomme doit être un sur lequel l’utilisateur peut agir, car le l’enregistrement de l’opération l’exige, ou le bouton compte comme non autorisé.
Nom: Record
Type: TableRecordReference?
Description: Le registre envoyé dans OperationButtonBase.RecordParameter, par référence. Quand il n’est pas fixé, l’enregistrement de là où Components.RecordContext le bouton se trouve (ou OperationButton.Context) est envoyé, une fois sauvé.
Nom: RecordParameter
Type: string?
Description: Le paramètre dans lequel l’enregistrement est envoyé — Cible, par exemple : an OperationButton's OperationButton.Record ou enregistrement de forme, chaque ligne sélectionnée d’un OperationGridButton.
Nom: RefreshRecord
Type: bool
Par défaut: True
Description: Que l’enregistrement du formulaire soit lu une fois qu’une opération s’est exécutée seule — le code de l’hôte — a exécute dessus, car il a pu le modifier. Activé par défaut. Une opération Dataverse qui dépend des La sauvegarde est relue avec la sauvegarde, comme sur React.
Nom: Tooltip
Type: string?
Description: Affiché lorsque le pointeur repose sur le bouton.
Nom: WhenNotAllowed
Type: OperationButtonBehavior
Par défaut: Hide
Description: Ce que fait le bouton empêche l’utilisateur d’exécuter l’opération. Caché par défaut.

Événements

Nom
Type
Description
OnCompletedEventCallback<OperationCompletedEventArgs>
A été soulevé une fois l’opération lancée, avec ce qu’elle a répondu.
OnErrorEventCallback<Exception>
Affiché lorsque l’opération échoue, à la place de la boîte d’erreur affiche le bouton autrement.
Nom: OnCompleted
Type: EventCallback<OperationCompletedEventArgs>
Description: A été soulevé une fois l’opération lancée, avec ce qu’elle a répondu.
Nom: OnError
Type: EventCallback<Exception>
Description: Affiché lorsque l’opération échoue, à la place de la boîte d’erreur affiche le bouton autrement.
Réagir Blazor

OperationGridButton Classe

Paramètres

Nom
Type
Par défaut
Description
AppearanceButtonAppearance?
À quoi ressemble le bouton.
BusyMessagestring?
Ce que la superposition indique pendant que l’opération tourne ; un « Fonctionne... » général quand il n’est pas réglé.
ConfirmationMessagestring?
Une question à laquelle l’utilisateur répond avant que l’opération ne se lance — « Émettre un remboursement pour cette facture ? » — Ou null de le lancer immédiatement.
Disabledbool
False
Désactive le bouton, peu importe ce que l’utilisateur utilise.
GetParametersAsyncFunc<Task<IReadOnlyDictionary<string, ColumnValueBase>>>?
Collecte des paramètres lorsque le bouton est cliqué — par exemple dans un dialogue — ajoutés à OperationButtonBase.Parameters. Le retour null annule le clic. Ils ne sont connus que une fois cliqué, donc si l’utilisateur peut exécuter l’opération est jugé avant ce moment sans eux, et Le serveur juge la demande avec eux.
IconIcon?
Une icône montrée avant le texte.
Labelstring?
Le texte du bouton.
Operation*string
Le nom de l’opération, tel qu’il est enregistré.
ParametersIReadOnlyDictionary<string, ColumnValueBase>?
Les paramètres envoyés avec chaque requête, par nom. Un paramètre d’enregistrement est un Models.LookupValue; l’enregistrement qu’il nomme doit être un sur lequel l’utilisateur peut agir, car le l’enregistrement de l’opération l’exige, ou le bouton compte comme non autorisé.
RecordParameterstring?
Le paramètre dans lequel l’enregistrement est envoyé — Cible, par exemple : an OperationButton's OperationButton.Record ou enregistrement de forme, chaque ligne sélectionnée d’un OperationGridButton.
Tooltipstring?
Affiché lorsque le pointeur repose sur le bouton.
VisibilityBehaviorGridButtonBehavior?
Lorsque le bouton est affiché, par la sélection. Avec un paramètre d’enregistrement, pour un ou plusieurs sélectionnés des disputes ; sans, toujours.
WhenNotAllowedOperationButtonBehavior
Hide
Ce que fait le bouton empêche l’utilisateur d’exécuter l’opération. Caché par défaut.
Nom: Appearance
Type: ButtonAppearance?
Description: À quoi ressemble le bouton.
Nom: BusyMessage
Type: string?
Description: Ce que la superposition indique pendant que l’opération tourne ; un « Fonctionne... » général quand il n’est pas réglé.
Nom: ConfirmationMessage
Type: string?
Description: Une question à laquelle l’utilisateur répond avant que l’opération ne se lance — « Émettre un remboursement pour cette facture ? » — Ou null de le lancer immédiatement.
Nom: Disabled
Type: bool
Par défaut: False
Description: Désactive le bouton, peu importe ce que l’utilisateur utilise.
Nom: GetParametersAsync
Type: Func<Task<IReadOnlyDictionary<string, ColumnValueBase>>>?
Description: Collecte des paramètres lorsque le bouton est cliqué — par exemple dans un dialogue — ajoutés à OperationButtonBase.Parameters. Le retour null annule le clic. Ils ne sont connus que une fois cliqué, donc si l’utilisateur peut exécuter l’opération est jugé avant ce moment sans eux, et Le serveur juge la demande avec eux.
Nom: Icon
Type: Icon?
Description: Une icône montrée avant le texte.
Nom: Label
Type: string?
Description: Le texte du bouton.
Nom: Operation*
Type: string
Description: Le nom de l’opération, tel qu’il est enregistré.
Nom: Parameters
Type: IReadOnlyDictionary<string, ColumnValueBase>?
Description: Les paramètres envoyés avec chaque requête, par nom. Un paramètre d’enregistrement est un Models.LookupValue; l’enregistrement qu’il nomme doit être un sur lequel l’utilisateur peut agir, car le l’enregistrement de l’opération l’exige, ou le bouton compte comme non autorisé.
Nom: RecordParameter
Type: string?
Description: Le paramètre dans lequel l’enregistrement est envoyé — Cible, par exemple : an OperationButton's OperationButton.Record ou enregistrement de forme, chaque ligne sélectionnée d’un OperationGridButton.
Nom: Tooltip
Type: string?
Description: Affiché lorsque le pointeur repose sur le bouton.
Nom: VisibilityBehavior
Type: GridButtonBehavior?
Description: Lorsque le bouton est affiché, par la sélection. Avec un paramètre d’enregistrement, pour un ou plusieurs sélectionnés des disputes ; sans, toujours.
Nom: WhenNotAllowed
Type: OperationButtonBehavior
Par défaut: Hide
Description: Ce que fait le bouton empêche l’utilisateur d’exécuter l’opération. Caché par défaut.

Événements

Nom
Type
Description
OnCompletedEventCallback<OperationCompletedEventArgs>
A été soulevé une fois l’opération lancée, avec ce qu’elle a répondu.
OnErrorEventCallback<Exception>
Affiché lorsque l’opération échoue, à la place de la boîte d’erreur affiche le bouton autrement.
Nom: OnCompleted
Type: EventCallback<OperationCompletedEventArgs>
Description: A été soulevé une fois l’opération lancée, avec ce qu’elle a répondu.
Nom: OnError
Type: EventCallback<Exception>
Description: Affiché lorsque l’opération échoue, à la place de la boîte d’erreur affiche le bouton autrement.