Die Komponente RecordContext umhüllt einen einzelnen Dataverse-Datensatz und stellt ihn als Kaskadenwert an alle nachkommenden Komponenten wie Editoren, Raster und Validierungszusammenfassungen bereit. Es erbt von MainContext, unterstützt also alle gleichen Funktionen zum Speicheren, Auffrischen, Validieren und Dirty-State-Tracking.
Es gibt verschiedene Möglichkeiten, anzugeben, welcher Datensatz geladen werden RecordContext soll:
Record — Passieren Sie ein TableRecord Objekt direkt. Nützlich, wenn du den Datensatz bereits im Speicher hast oder einen neuen Eintrag erstellst.{/* Kein 'id' = Erstellungsmodus: beginnt mit einem Datensatz im Speicher,
gibt beim Speichern eine CreateRequest aus. */}
<RecordContext table="contact">
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext><RecordContext Record="@(new TableRecord { TableName = "contact" })">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</RecordContext>QueryParameterName und TableName — Der Kontext liest die Datensatz-ID aus einem URL-Abfrageparameter und ruft den Datensatz automatisch aus Dataverse ab. Ist keine ID vorhanden, wird ein neuer Datensatz erstellt.{/* URL: /my-page?id=00000000-0000-0000-0000-00000000001 */}
<RecordContext table="contact" queryParameterName="id">
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext><!-- URL: /my-page?id=00000000-0000-0000-0000-00000000001 -->
<RecordContext TableName="contact" QueryParameterName="id">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</RecordContext>RecordId und TableName — Geben Sie die Datensatz-ID direkt als Parameter an, anstatt sie aus der URL zu lesen.<RecordContext table="contact" id="00000000-0000-0000-0000-000000000001">
<TextEdit columnName="firstname" />
</RecordContext><RecordContext TableName="contact" RecordId="00000000-0000-0000-0000-000000000001">
<TextEdit ColumnName="firstname" />
</RecordContext>Verwenden Sie den Rückruf RecordLoaded , um Logik auszuführen, nachdem der Datensatz aus Dataverse abgerufen wurde. Dies ist nützlich, um abhängige Zustände zu initialisieren oder verwandte Daten zu laden.
function MyPage() {
const onRecordLoaded = (record: TableRecord) => {
// Initialize dependent state or load related data
};
return (
<RecordContext
table="contact"
queryParameterName="id"
onRecordLoaded={onRecordLoaded}
>
<TextEdit columnName="firstname" />
</RecordContext>
);
}<RecordContext TableName="contact"
QueryParameterName="id"
RecordLoaded="OnRecordLoaded">
<TextEdit ColumnName="firstname" />
</RecordContext>
@code {
private async Task OnRecordLoaded(TableRecord record)
{
// Initialisieren Sie abhängige Zustands- oder lastbezogene Daten
}
}Anstatt , kannst du den ContextTemplate Parameter nutzen, um direkt auf das TableRecord Objekt in deinem Markup über eine Vorlagenvariable ChildContentzuzugreifen.
{/* React hat kein <ContextTemplate> Äquivalent – rendere ein Kind</ContextTemplate>
Komponente, die den geladenen Datensatz über den Haken 'useRecordContext' liest. */}
function ContactHeader() {
const { record } = useRecordContext();
return <h2>Bearbeitung: {String(record?.['firstname']?.value ?? '')}</h2>;
}
<RecordContext table="contact" queryParameterName="id">
<ContactHeader />
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext><RecordContext TableName="contact" QueryParameterName="id">
<ContextTemplate>
<h2>Bearbeitung: @context["firstname"]</h2>
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</ContextTemplate>
</RecordContext>Rufen Sie DeleteAsync() an, um den aktuellen Datensatz zu löschen. Der Benutzer erhält vor der Ausführung der Löschung einen Bestätigungsdialog. Verwenden Sie den Callback, OnBeforeDelete um benutzerdefinierte Logik auszuführen, oder brechen Sie das Löschen ab, indem Sie CancelEventArgs.Cancel auf true.
function MyPage() {
const onBeforeDelete = async () => {
// Werfen Sie, um das Löschen abzubrechen:
// wirft einen neuen Fehler ('Löschen, abgesagt');
};
return (
<RecordContext
table="contact"
queryParameterName="id"
onBeforeDelete={onBeforeDelete}
>
<MenuBar>
<DeleteContextButton />
</MenuBar>
<TextEdit columnName="firstname" />
</RecordContext>
);
}<RecordContext TableName="contact"
QueryParameterName="id"
OnBeforeDelete="OnBeforeDelete">
<MenuBar>
<DeleteContextButton />
</MenuBar>
<TextEdit ColumnName="firstname" />
</RecordContext>
@code {
private async Task OnBeforeDelete(CancelEventArgs eventArgs)
{
// Optional die Löschung abbrechen
// eventArgs.Cancel = true;
}
}Bei Verwendung QueryParameterNameüberwacht die RecordContext URL-Änderungen automatisch. Wenn sich der Wert des Abfrageparameters ändert, während er auf derselben Seite bleibt, lädt der Kontext den neuen Datensatz neu, ohne eine vollständige Seitennavigation durchzuführen. Nach dem Speichern eines neu erstellten Datensatzes wird die URL aktualisiert, um die ID des neuen Datensatzes einzubeziehen.
Das folgende Beispiel zeigt ein einfaches Beispiel RecordContext , das Text für den aktuellen Datensatz anzeigt.
Name | Typ | Default | Beschreibung |
|---|---|---|---|
ChildContent | RenderFragment? | Die Kindkomponenten werden in diesem Kontext gerendert. | |
ContextTemplate | RenderFragment<TableRecord> | Du kannst optional eine Vorlage zur Dokumentation angeben. Dies ermöglicht Ihnen Zugriff auf das Objekt 'TableRecord' in der Vorlage. | |
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 | Zeigt an, ob der Datensatz oder ein registrierter Kind-Kontext ungespeicherte Änderungen aufweist. |
ParentContext | MainContext? | Der nächstgelegene Vorfahre MainContext, der verschachtelte Kontexthierarchien ermöglicht. | |
QueryParameterName | string? | Der Name des Abfrageparameters, der die ID des abzurufenden Datensatzes angibt. | |
Record | TableRecord? | Der Datensatz ist mit diesem Datensatz verknüpft. | |
RecordId | string? | Das spezifische GUID des Protokolls für den Kontext. | |
TableName | string? | Der tabellenlogische Name des Datensatzes. |
ChildContentContextTemplateDisableUnsavedChangesWarningForceSuccessfulValidationBeforeSaveIsDirtyParentContextQueryParameterNameRecordRecordIdTableNameName | Typ | Beschreibung |
|---|---|---|
OnBeforeDelete | EventCallback<CancelEventArgs> | Ein Rückruf hat vor der Löschung angerufen. Ermöglicht das Abbrechen der Löschoperation. |
OnBeforeSave | EventCallback<CancelEventArgs> | Callback hat vor dem Speichern angerufen. Ermöglicht das Abbrechen des Speichervorgangs. |
RecordLoaded | EventCallback<TableRecord> | EventCallback wird ausgelöst, wenn der Datensatz geladen ist. |
OnBeforeDeleteOnBeforeSaveRecordLoadedName | Parameter | Typ | Beschreibung |
|---|---|---|---|
DeleteAsync | Task<bool> | Er fordert eine Bestätigung auf und löscht dann den aktuellen Datensatz. | |
GetRequests | List<OrganizationRequest> | Gibt die Erstellungs- oder Aktualisierungsanfrage für den Datensatz zurück, wenn er unsauber ist, sowie Anfragen aus Kind-Kontexten. | |
RefreshAsync | bool forceRefresh | Task | Lädt den Datensatz vom Server neu, wobei optional nach nicht gespeicherten Änderungen gefragt wird. |
ResetState | void | Setzt den Datensatz und alle kindlichen Kontexte auf ihren zuletzt gespeicherten Zustand zurück. | |
SaveAsync | bool? refresh | Task<bool> | Speichert den Datensatz und navigiert zur URL des Datensatzes, falls er neu erstellt wurde. |
Validate | bool | Validiere den Datensatz und alle Subkontexte (Raster, Suchbearbeitung, Datensatz, Haupt). |
DeleteAsyncGetRequestsRefreshAsyncResetStateSaveAsyncValidate