Registro de contacto
Registro de la cuenta
El MainContext componente se utiliza para encapsular uno o más RecordContexts, SubGrids, ManyToManyLookupEditors o y coordina guardar, actualizar, validar y rastrear estados sucios en todos ellos.
A MainContext puede contener cualquier combinación de los siguientes componentes hijos:
RecordContext — Envuelve un único registro Dataverse para su edición.SubGrid — Exhibe y gestiona una colección de registros relacionados.ManyToManyLookupEditor — Gestiona relaciones de muchos a muchos.<MainContext>
<RecordContext table="contact" id={contactId}>
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext>
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext><MainContext>
<RecordContext Record="@_contact">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</RecordContext>
<RecordContext Record="@_account">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>Incluye un SaveContextButton dentro de una MenuBar para permitir que los usuarios persistan los cambios. Cuando se hace clic en el botón de guardar, todos los registros sucios de todos los componentes hijos se guardan en una única solicitud transaccional a Dataverse. Si algún registro no se guarda, toda la transacción se revierte y no se continúan cambios.
<MainContext>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext table="contact" id={contactId}>
<TextEdit columnName="firstname" />
</RecordContext>
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext><MainContext>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext Record="@_contact">
<TextEdit ColumnName="firstname" />
</RecordContext>
<RecordContext Record="@_account">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>Incluye un RefreshContextButton para permitir a los usuarios descartar los cambios no guardados y recargar los registros desde Dataverse. Si hay cambios no guardados, se le indica un diálogo de confirmación al usuario antes de realizar la actualización.
Por defecto, valida MainContext todos los componentes hijos antes de guardar. Configura ForceSuccessfulValidationBeforeSave para false desactivar este comportamiento.
<MainContext forceSuccessfulValidationBeforeSave={false}>
<SaveContextButton />
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext><MainContext ForceSuccessfulValidationBeforeSave="false">
<MenuBar>
<SaveContextButton />
</MenuBar>
<RecordContext Record="@_record">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>El MainContext sistema rastrea automáticamente si algún componente hijo tiene cambios no guardados a través de la IsDirty propiedad. Si un usuario intenta alejarse de la página mientras hay cambios sin guardar, se muestra un cuadro de confirmación. Configura DisableUnsavedChangesWarning para true suprimir este diálogo para cambios de navegación. La advertencia siempre aparece al actualizar, independientemente de esta configuración.
<MainContext warnOnUnsavedChanges={false}>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext><MainContext DisableUnsavedChangesWarning="true">
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext Record="@_record">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>Usa la OnBeforeSave callback para ejecutar lógica personalizada antes de la operación de guardado. Configura CancelEventArgs.Cancel para true evitar que la partida de salvación continúe.
function MyPage() {
const onBeforeSave = async () => {
// Ejecuta validación o lógica personalizada.
// Lanzar para abortar la tirada:
// lanzar un nuevo error ('Validación fallida');
};
return (
<MainContext onBeforeSave={onBeforeSave}>
<SaveContextButton />
<RecordContext table="account" id={accountId}>
<TextEdit columnName="name" />
</RecordContext>
</MainContext>
);
}<MainContext OnBeforeSave="OnBeforeSave">
<MenuBar>
<SaveContextButton />
</MenuBar>
<RecordContext Record="@_record">
<TextEdit ColumnName="name" />
</RecordContext>
</MainContext>
@code {
private async Task OnBeforeSave(CancelEventArgs eventArgs)
{
// Ejecutar validación o lógica personalizada
// Cancela la partida guardada si es necesario:
// eventArgs.Cancel = true;
}
}El siguiente ejemplo demuestra a MainContext con dos RecordContexts, a MenuBar con los botones de guardar y actualizar, y un manejador personalizado OnBeforeSave .
Nombre | Tipo | Default | Descripción |
|---|---|---|---|
ChildContent | RenderFragment? | Los componentes hijos representados dentro de este contexto. | |
DisableUnsavedChangesWarning | bool? | Cuando se configura en true, el cuadro de advertencia de cambios no guardados no se muestra al alejarse de la página. La advertencia siempre aparece al actualizar, independientemente de esta configuración. Si no se establece explícitamente, el valor se hereda del contexto padre. | |
ForceSuccessfulValidationBeforeSave | bool | True | ¿Debería realizarse una validación exitosa del registro antes de permitir que se guarde? |
IsDirty | bool | False | Indica si este contexto o cualquier hijo registrado tiene cambios no guardados. |
ParentContext | MainContext? | El antepasado más cercano, MainContext, que permite jerarquías de contexto anidado. |
ChildContentDisableUnsavedChangesWarningForceSuccessfulValidationBeforeSaveIsDirtyParentContextNombre | Tipo | Descripción |
|---|---|---|
OnBeforeSave | EventCallback<CancelEventArgs> | Llamó la llamada antes de guardar. Permite cancelar la operación de guardado. |
OnBeforeSaveNombre | Parámetros | Tipo | Descripción |
|---|---|---|---|
GetRequests | List<OrganizationRequest> | Recoge y devuelve todas las solicitudes de guardado pendientes de este contexto y sus hijos. | |
RefreshAsync | bool forceRefresh | Task | Actualiza este contexto y todos los componentes hijos registrados. |
ResetState | void | Reinicia pendientes de cambios en este contexto y de todos los niños registrados. | |
SaveAsync | bool? refresh | Task<bool> | Guarda el contexto y cualquier contexto hijo (cuadra, registro, etc.). |
Validate | bool | Valida este contexto y todos los componentes hijos registrados. |
GetRequestsRefreshAsyncResetStateSaveAsyncValidate