Kontaktprotokoll
Kontoeintrag
Die Komponente MainContext wird verwendet, um einen oder mehrere RecordContexts, SubGrids, oder ManyToManyLookupEditors zu kapseln und koordiniert Speicher-, Aktualisierungs-, Validierungs- und Dirty-State-Tracking über alle hinweg.
A MainContext kann jede beliebige Kombination der folgenden Kindkomponenten enthalten:
RecordContext — Wickelt einen einzelnen Dataverse-Datensatz zum Bearbeiten ein.SubGrid — Stellt eine Sammlung verwandter Unterlagen aus und verwaltet sie.ManyToManyLookupEditor — Verwaltet viele-zu-viele Beziehungen.<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>Fügen Sie ein SaveContextButton Inside A MenuBar ein, damit Benutzer Änderungen erhalten bleiben können. Wenn der Speicherknopf angeklickt wird, werden alle Dirty Records aller Kindkomponenten in einer einzigen transaktionalen Anfrage an Dataverse gespeichert. Wenn ein Datensatz nicht gespeichert werden kann, wird die gesamte Transaktion zurückgesetzt und keine Änderungen bleiben erhalten.
<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>Fügen Sie eine RefreshContextButton ein, damit Benutzer nicht gespeicherte Änderungen verwerfen und die Datensätze aus Dataverse neu laden können. Wenn es nicht gespeicherte Änderungen gibt, wird der Benutzer mit einem Bestätigungsdialog aufgefordert, bevor die Aktualisierung durchgeführt wird.
Standardmäßig validiert das Verfahren MainContext alle Kindkomponenten vor dem Speichern. Auf Deaktivieren dieses Verhaltens eingestellt ForceSuccessfulValidationBeforeSave false .
<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>Sie MainContext verfolgt automatisch, ob eine Kindkomponente über die IsDirty Eigenschaft nicht gespeicherte Änderungen hat. Wenn ein Benutzer versucht, von der Seite wegzunavigieren, während Änderungen nicht gespeichert sind, wird ein Bestätigungsdialog angezeigt. So eingestellt DisableUnsavedChangesWarning true , dass dieser Dialog für Navigationsänderungen unterdrückt wird. Die Warnung wird beim Aktualisieren immer angezeigt, unabhängig von dieser Einstellung.
<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>Nutze den Callback, OnBeforeSave um benutzerdefinierte Logik vor dem Speichervorgang auszuführen. Auf Einstellung gesetzt CancelEventArgs.Cancel true , um zu verhindern, dass der Speicherstand fortgesetzt wird.
function MyPage() {
const onBeforeSave = async () => {
// Führe benutzerdefinierte Validierung oder Logik aus.
// Werfen, um den Rettungswurf abzubrechen:
// einen neuen Fehler werfen ('Validierung fehlgeschlagen');
};
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)
{
// Führe benutzerdefinierte Validierung oder Logik aus
// Brechen Sie den Speicherstand bei Bedarf ab:
// eventArgs.Cancel = true;
}
}Das folgende Beispiel zeigt ein MainContext mit zwei RecordContexts, einem MenuBar mit Speicher- und Aktualisierungstasten sowie einem benutzerdefinierten OnBeforeSave Handler.
Name | Typ | Default | Beschreibung |
|---|---|---|---|
ChildContent | RenderFragment? | Die Kindkomponenten werden in diesem Kontext gerendert. | |
DisableUnsavedChangesWarning | bool? | Wenn auf true gesetzt, wird der Dialog für nicht gespeicherte Änderungen nicht angezeigt, wenn man von der Seite wegnavigiert. Die Warnung wird beim Aktualisieren immer angezeigt, unabhängig von dieser Einstellung. Wenn nicht explizit gesetzt, wird der Wert vom Elternkontext übernommen. | |
ForceSuccessfulValidationBeforeSave | bool | True | Sollte eine erfolgreiche Validierung des Datensatzes durchgeführt werden, bevor der Datensatz gespeichert werden kann. |
IsDirty | bool | False | Gibt an, ob dieser Kontext oder jedes registrierte Kind nicht gespeicherte Änderungen enthält. |
ParentContext | MainContext? | Der nächstgelegene Vorfahre MainContext, der verschachtelte Kontexthierarchien ermöglicht. |
ChildContentDisableUnsavedChangesWarningForceSuccessfulValidationBeforeSaveIsDirtyParentContextName | Typ | Beschreibung |
|---|---|---|
OnBeforeSave | EventCallback<CancelEventArgs> | Callback hat vor dem Speichern angerufen. Ermöglicht das Abbrechen des Speichervorgangs. |
OnBeforeSaveName | Parameter | Typ | Beschreibung |
|---|---|---|---|
GetRequests | List<OrganizationRequest> | Sammelt und gibt alle ausstehenden Speicheranfragen aus diesem Kontext und seinen Kindern zurück. | |
RefreshAsync | bool forceRefresh | Task | Aktualisiert diesen Kontext und alle registrierten Kindkomponenten. |
ResetState | void | Setzt in diesem Zusammenhang ausstehende Änderungen zurück und alle registrierten Kinder. | |
SaveAsync | bool? refresh | Task<bool> | Speichere den Kontext und alle kindlichen Kontexte (Raster, Datensatz usw.). |
Validate | bool | Validiert diesen Kontext und alle registrierten Kindkomponenten. |
GetRequestsRefreshAsyncResetStateSaveAsyncValidate