Botones de operación

Un botón de operación ejecuta una operación registrada por el servidor — una API personalizada, una acción personalizada, uno de los mensajes propios de Dataverse o código propio — y solo se muestra a los usuarios para los que está registrado. El botón pregunta una vez al servidor qué operaciones puede ejecutar el usuario iniciado sesión, y comprueba cada registro que enviaría con lo que el usuario podría hacerle, para no ofrecer lo que el servidor rechazaría. El servidor sigue juzgando cada solicitud cuando se envía.

Registro de una operación

Registra una operación en el servidor Program.cs: AddOperationAccess para una operación Dataverse, AddOperationHandler para tu propio código. Dentro AddPortalRolede , WithOperationAccess y WithOperationHandler concede una a los titulares del rol. Un registro indica quién puede ejecutar la operación, los parámetros que puede llevar una solicitud, los registros a los que deben apuntar y las salidas que regresan.

  • ForEveryone(), ForSignedInUsers(), ForContactsMatching(fetchXml) y ForWebRoles(...) indican quién puede ejecutarlo; el registro de un rol es para los titulares del puesto. Bajo la seguridad nativa de Dataverse, los contactos tienen roles web en lugar de portales, y una API personalizada solo se ofrece a los usuarios cuyos roles de seguridad otorgan su privilegio de ejecución.
  • Una petición de tu propio código se juzga exactamente como la de una operación de Dataverse: el manejador solo ve las solicitudes que han pasado, con los parámetros que el servidor establece completados, y el llamador solo ve las salidas que devuelve el registro.
  • Tu propio código no puede compartir la transacción de Dataverse, así que se envía una solicitud por sí sola: un lote que lo lleve junto con cualquier otra cosa es rechazado.
  • La seguridad describe todo lo que puede decir un registro.

OperationButton

Pon un OperationButton lugar donde debe estar la operación, nombrando la operación y el parámetro en el que va su registro.

React Blazor
  • Está oculto para los usuarios que no pueden ejecutar la operación, y mientras la respuesta está en camino; se configura WhenNotAllowed (whenNotAllowed) para desactivarla en su lugar. La respuesta se pide una vez y se guarda mientras la aplicación está abierta; una solicitud que el servidor rechaza la solicita de nuevo.
  • El registro entra RecordParameteren : Record, cualquier registro por referencia, o bien el registro del RecordContext botón se queda en el botón una vez guardado. El usuario debe poder actuar en consecuencia según lo requiera el registro: el registro de un formulario indica lo que el usuario puede hacer con él, y se lee un registro nombrado por referencia para él.
  • En un formulario, una operación Dataverse sobre el registro del formulario se envía en la partida guardada propia del formulario, tras sus cambios, así que ambos se guardan o ninguno, y el registro se lee de nuevo. Tu propio código se ejecuta después de que se guardan los cambios del formulario.
  • Parameters se envían con cada petición, y GetParametersAsync (getParameters) recoge más cuando se pulsa el botón, por ejemplo, desde un diálogo, por ejemplo; al no devolver nada cancela el clic. ConfirmationMessage pregunta antes de que se ejecute la operación y OnCompleted devuelve sus salidas.
  • Establece su texto con Label o su contenido, y su icono, descripción emergente y apariencia como en cualquier otro botón.

Ejemplo

La demo registra unas líneas de su propio código como operación para todos. Escribe un nombre y haz clic en el botón: el servidor responde y la página dice el saludo.

Ejemplo de reacción Ejemplo de Blazor React TypeScript Razor
Saluda

OperaciónGridButton

En la barra de herramientas de una cuadrícula, OperationGridButton ejecuta la operación una vez por cada fila seleccionada, enviando la fila en RecordParameter, y luego actualiza la cuadrícula. Está habilitada mientras cada fila seleccionada es una sobre la que el usuario puede actuar, que cada fila dice por sí misma. Las peticiones de una operación de Dataverse se envían en una sola transacción, así que todas se ejecutan o ninguna; tu propio código se ejecuta en una fila a la vez y se detiene en la primera que falla.

React Blazor

Ejemplo: en cada fila seleccionada

Selecciona algunas cuentas y haz clic en Comprobar: el propio código de la demo lee cada una y responde a su nombre. Aprobación solo se concede a un rol de portal que ningún visitante posee, así que aparece desactivado.

Ejemplo de reacción Ejemplo de Blazor React TypeScript Razor
Todas las cuentas
Ordenar
Todas las cuentas
Tamaño de página 102050100
Ordenar
Nombre de la cuenta
Nombre de la cuenta
Escriba el nombre de la empresa o negocio.
Número de cuenta
Número de cuenta
Escriba un número de identificación o código para la cuenta para buscar e identificar rápidamente la cuenta en las vistas del sistema.
Teléfono principal
Teléfono principal
Escriba el número de teléfono principal de esta cuenta.
Dirección 1: Ciudad
Dirección 1: Ciudad
Escriba la ciudad para la dirección principal.
Ingresos anuales
Ingresos anuales
Escriba los ingresos anuales de la cuenta, que se utilizan como indicador en el análisis de rendimiento financiero.
Contacto principal
Contacto principal
Elija el contacto principal de la cuenta para proporcionar acceso rápido a los detalles de contacto.
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

Preguntar qué puede ejecutar el usuario

Los botones preguntan GET /api/permissions/operations, lo que responde solo para el usuario iniciado sesión: cada operación que pueda ejecutar, o solo las que nombras, con lo que puede llevar una solicitud para cada una y los registros a los que debe apuntar. Tu propia interfaz puede preguntar lo mismo a través IOperationAccessCache de Blazor o IPowerPortalsProService.GetOperationAccessForCurrentUserAsync useOperationAccess ppp.retrieveOperationAccessAsync en React.

Reaccionar Blazor

OperationButton Clase

Parámetros

Nombre
Tipo
Default
Descripción
AppearanceButtonAppearance?
Cómo queda el botón.
BusyMessagestring?
Lo que dice la superposición mientras se ejecuta la operación; un general 'Funcionando...' cuando no está activado.
ChildContentRenderFragment?
El contenido del botón, en lugar de OperationButtonBase.Label.
ConfirmationMessagestring?
Una pregunta que el usuario responde antes de que se ejecute la operación — '¿Emitir un reembolso por esta factura?' — O null para dirigirlo de inmediato.
ContextRecordContext?
El contexto de registro cuyo registro envía el botón. No es necesario si el botón está colocado dentro de un Components.RecordContext.
Disabledbool
False
Desactiva el botón, sea cual sea el uso que el usuario.
GetParametersAsyncFunc<Task<IReadOnlyDictionary<string, ColumnValueBase>>>?
Recopila parámetros cuando se hace clic en el botón — desde un diálogo, por ejemplo — añadidos a OperationButtonBase.Parameters. Al volver null se cancela el clic. Solo se les conoce una vez hecho clic, por lo que si el usuario puede ejecutar la operación se juzga antes de entonces sin ellos, y El camarero juzga la solicitud con ellos.
IconIcon?
Un icono mostrado antes del texto.
Labelstring?
El texto del botón.
Operation*string
El nombre de la operación, tal como está registrado.
ParametersIReadOnlyDictionary<string, ColumnValueBase>?
Los parámetros enviados con cada solicitud, por nombre. Un parámetro de registro es un Models.LookupValue; el registro que nombra debe ser uno sobre el que el usuario pueda actuar como el El registro de la operación lo requiere, o el botón cuenta como no permitido.
RecordTableRecordReference?
El registro enviado en OperationButtonBase.RecordParameter, por referencia. Cuando no está establecido, el registro de donde Components.RecordContext el botón se encuentra (o OperationButton.Context) se envía, una vez salvado.
RecordParameterstring?
El parámetro en el que se envía el registro — Objetivo, por ejemplo: un OperationButton's OperationButton.Record o registro de forma, cada fila seleccionada de un OperationGridButton.
RefreshRecordbool
True
Si el registro del formulario se lee una vez que una operación se ejecuta por sí sola —el código del anfitrión— ha ejecuta sobre él, ya que puede haberlo cambiado. Activado por defecto. Una operación Dataverse que se ejecuta en la forma La partida se lee de vuelta junto con la partida, como en React.
Tooltipstring?
Se muestra cuando el puntero descansa sobre el botón.
WhenNotAllowedOperationButtonBehavior
Hide
Qué hace el botón para que el usuario no ejecute la operación. Oculto por defecto.
Nombre: Appearance
Tipo: ButtonAppearance?
Descripción: Cómo queda el botón.
Nombre: BusyMessage
Tipo: string?
Descripción: Lo que dice la superposición mientras se ejecuta la operación; un general 'Funcionando...' cuando no está activado.
Nombre: ChildContent
Tipo: RenderFragment?
Descripción: El contenido del botón, en lugar de OperationButtonBase.Label.
Nombre: ConfirmationMessage
Tipo: string?
Descripción: Una pregunta que el usuario responde antes de que se ejecute la operación — '¿Emitir un reembolso por esta factura?' — O null para dirigirlo de inmediato.
Nombre: Context
Tipo: RecordContext?
Descripción: El contexto de registro cuyo registro envía el botón. No es necesario si el botón está colocado dentro de un Components.RecordContext.
Nombre: Disabled
Tipo: bool
Default: False
Descripción: Desactiva el botón, sea cual sea el uso que el usuario.
Nombre: GetParametersAsync
Tipo: Func<Task<IReadOnlyDictionary<string, ColumnValueBase>>>?
Descripción: Recopila parámetros cuando se hace clic en el botón — desde un diálogo, por ejemplo — añadidos a OperationButtonBase.Parameters. Al volver null se cancela el clic. Solo se les conoce una vez hecho clic, por lo que si el usuario puede ejecutar la operación se juzga antes de entonces sin ellos, y El camarero juzga la solicitud con ellos.
Nombre: Icon
Tipo: Icon?
Descripción: Un icono mostrado antes del texto.
Nombre: Label
Tipo: string?
Descripción: El texto del botón.
Nombre: Operation*
Tipo: string
Descripción: El nombre de la operación, tal como está registrado.
Nombre: Parameters
Tipo: IReadOnlyDictionary<string, ColumnValueBase>?
Descripción: Los parámetros enviados con cada solicitud, por nombre. Un parámetro de registro es un Models.LookupValue; el registro que nombra debe ser uno sobre el que el usuario pueda actuar como el El registro de la operación lo requiere, o el botón cuenta como no permitido.
Nombre: Record
Tipo: TableRecordReference?
Descripción: El registro enviado en OperationButtonBase.RecordParameter, por referencia. Cuando no está establecido, el registro de donde Components.RecordContext el botón se encuentra (o OperationButton.Context) se envía, una vez salvado.
Nombre: RecordParameter
Tipo: string?
Descripción: El parámetro en el que se envía el registro — Objetivo, por ejemplo: un OperationButton's OperationButton.Record o registro de forma, cada fila seleccionada de un OperationGridButton.
Nombre: RefreshRecord
Tipo: bool
Default: True
Descripción: Si el registro del formulario se lee una vez que una operación se ejecuta por sí sola —el código del anfitrión— ha ejecuta sobre él, ya que puede haberlo cambiado. Activado por defecto. Una operación Dataverse que se ejecuta en la forma La partida se lee de vuelta junto con la partida, como en React.
Nombre: Tooltip
Tipo: string?
Descripción: Se muestra cuando el puntero descansa sobre el botón.
Nombre: WhenNotAllowed
Tipo: OperationButtonBehavior
Default: Hide
Descripción: Qué hace el botón para que el usuario no ejecute la operación. Oculto por defecto.

Eventos

Nombre
Tipo
Descripción
OnCompletedEventCallback<OperationCompletedEventArgs>
Levantado una vez que la operación se ha ejecutado, con lo que respondió.
OnErrorEventCallback<Exception>
Se activa cuando la operación falla, en lugar del diálogo de error aparece el botón de otro tipo.
Nombre: OnCompleted
Tipo: EventCallback<OperationCompletedEventArgs>
Descripción: Levantado una vez que la operación se ha ejecutado, con lo que respondió.
Nombre: OnError
Tipo: EventCallback<Exception>
Descripción: Se activa cuando la operación falla, en lugar del diálogo de error aparece el botón de otro tipo.
Reaccionar Blazor

OperationGridButton Clase

Parámetros

Nombre
Tipo
Default
Descripción
AppearanceButtonAppearance?
Cómo queda el botón.
BusyMessagestring?
Lo que dice la superposición mientras se ejecuta la operación; un general 'Funcionando...' cuando no está activado.
ConfirmationMessagestring?
Una pregunta que el usuario responde antes de que se ejecute la operación — '¿Emitir un reembolso por esta factura?' — O null para dirigirlo de inmediato.
Disabledbool
False
Desactiva el botón, sea cual sea el uso que el usuario.
GetParametersAsyncFunc<Task<IReadOnlyDictionary<string, ColumnValueBase>>>?
Recopila parámetros cuando se hace clic en el botón — desde un diálogo, por ejemplo — añadidos a OperationButtonBase.Parameters. Al volver null se cancela el clic. Solo se les conoce una vez hecho clic, por lo que si el usuario puede ejecutar la operación se juzga antes de entonces sin ellos, y El camarero juzga la solicitud con ellos.
IconIcon?
Un icono mostrado antes del texto.
Labelstring?
El texto del botón.
Operation*string
El nombre de la operación, tal como está registrado.
ParametersIReadOnlyDictionary<string, ColumnValueBase>?
Los parámetros enviados con cada solicitud, por nombre. Un parámetro de registro es un Models.LookupValue; el registro que nombra debe ser uno sobre el que el usuario pueda actuar como el El registro de la operación lo requiere, o el botón cuenta como no permitido.
RecordParameterstring?
El parámetro en el que se envía el registro — Objetivo, por ejemplo: un OperationButton's OperationButton.Record o registro de forma, cada fila seleccionada de un OperationGridButton.
Tooltipstring?
Se muestra cuando el puntero descansa sobre el botón.
VisibilityBehaviorGridButtonBehavior?
Cuando se muestra el botón, por la selección. Con un parámetro de registro, para uno o más seleccionados Peleas; sin, siempre.
WhenNotAllowedOperationButtonBehavior
Hide
Qué hace el botón para que el usuario no ejecute la operación. Oculto por defecto.
Nombre: Appearance
Tipo: ButtonAppearance?
Descripción: Cómo queda el botón.
Nombre: BusyMessage
Tipo: string?
Descripción: Lo que dice la superposición mientras se ejecuta la operación; un general 'Funcionando...' cuando no está activado.
Nombre: ConfirmationMessage
Tipo: string?
Descripción: Una pregunta que el usuario responde antes de que se ejecute la operación — '¿Emitir un reembolso por esta factura?' — O null para dirigirlo de inmediato.
Nombre: Disabled
Tipo: bool
Default: False
Descripción: Desactiva el botón, sea cual sea el uso que el usuario.
Nombre: GetParametersAsync
Tipo: Func<Task<IReadOnlyDictionary<string, ColumnValueBase>>>?
Descripción: Recopila parámetros cuando se hace clic en el botón — desde un diálogo, por ejemplo — añadidos a OperationButtonBase.Parameters. Al volver null se cancela el clic. Solo se les conoce una vez hecho clic, por lo que si el usuario puede ejecutar la operación se juzga antes de entonces sin ellos, y El camarero juzga la solicitud con ellos.
Nombre: Icon
Tipo: Icon?
Descripción: Un icono mostrado antes del texto.
Nombre: Label
Tipo: string?
Descripción: El texto del botón.
Nombre: Operation*
Tipo: string
Descripción: El nombre de la operación, tal como está registrado.
Nombre: Parameters
Tipo: IReadOnlyDictionary<string, ColumnValueBase>?
Descripción: Los parámetros enviados con cada solicitud, por nombre. Un parámetro de registro es un Models.LookupValue; el registro que nombra debe ser uno sobre el que el usuario pueda actuar como el El registro de la operación lo requiere, o el botón cuenta como no permitido.
Nombre: RecordParameter
Tipo: string?
Descripción: El parámetro en el que se envía el registro — Objetivo, por ejemplo: un OperationButton's OperationButton.Record o registro de forma, cada fila seleccionada de un OperationGridButton.
Nombre: Tooltip
Tipo: string?
Descripción: Se muestra cuando el puntero descansa sobre el botón.
Nombre: VisibilityBehavior
Tipo: GridButtonBehavior?
Descripción: Cuando se muestra el botón, por la selección. Con un parámetro de registro, para uno o más seleccionados Peleas; sin, siempre.
Nombre: WhenNotAllowed
Tipo: OperationButtonBehavior
Default: Hide
Descripción: Qué hace el botón para que el usuario no ejecute la operación. Oculto por defecto.

Eventos

Nombre
Tipo
Descripción
OnCompletedEventCallback<OperationCompletedEventArgs>
Levantado una vez que la operación se ha ejecutado, con lo que respondió.
OnErrorEventCallback<Exception>
Se activa cuando la operación falla, en lugar del diálogo de error aparece el botón de otro tipo.
Nombre: OnCompleted
Tipo: EventCallback<OperationCompletedEventArgs>
Descripción: Levantado una vez que la operación se ha ejecutado, con lo que respondió.
Nombre: OnError
Tipo: EventCallback<Exception>
Descripción: Se activa cuando la operación falla, en lugar del diálogo de error aparece el botón de otro tipo.