Konto
Primärer Kontakt
Die Komponente LookupRecordContext lädt und bietet Bearbeitungszugriff auf den Datensatz, der durch ein Nachschlagefeld im Elternfeld RecordContextreferenziert wird. Es erbt von BaseColumnEdit, also bindet es über den Parameter ColumnName an eine Spalte, genau wie jeder andere Editor.
Wenn Sie ein LookupRecordContext in a RecordContext legen und ein ColumnName spezifizieren, das auf ein Nachschlagefeld abgebildet ist, liest die Komponente automatisch den Nachschlagwert aus dem übergeordneten Datensatz, ruft den referenzierten Datensatz aus Dataverse ab und stellt ihn als verschachteltes RecordContextObjekt frei. Alle Editoren, die innerhalb der LookupRecordContext Bindung zu den Feldern des nachgeschlagenen Datensatzes platziert werden.
Der Parameter ColumnName muss sich auf eine Nachschlagespalte im Elterndatensatz beziehen. Die Komponente verwendet dies, um die Zieltabelle und die Datensatz-ID aufzulösen.
{/* Bearbeitungen im <LookupRecordContext> Inneren binden an Spalten auf der</LookupRecordContext>
Die Tabelle des LOOKED-UP-Datensatzes – der verknüpfte Kontakt, nicht das Konto. */}
<RecordContext table="account" queryParameterName="id">
<LookupRecordContext columnName="primarycontactid">
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
<TextEdit columnName="emailaddress1" />
</LookupRecordContext>
</RecordContext><RecordContext TableName="account" QueryParameterName="id">
<LookupRecordContext ColumnName="primarycontactid">
<ColumnEdit ColumnName="firstname" />
<ColumnEdit ColumnName="lastname" />
<ColumnEdit ColumnName="emailaddress1" />
</LookupRecordContext>
</RecordContext>Zum Beispiel RecordContextkannst du den ContextTemplate Parameter verwenden, anstatt ChildContent direkt auf das nachgeschlagene TableRecord Objekt in deinem Markup zuzugreifen.
{/* React hat keine <ContextTemplate> – lesen Sie den LOOKED-UP-Datensatz</ContextTemplate>
innerhalb einer Kindkomponenten über 'useRecordContext' (die Abfrage erzeugt seine
eigenes verschachteltes RecordContext, also gibt dieser Hook den Kontakt zurück, nicht den
Account). */}
function PrimaryContactHeading() {
const { record } = useRecordContext();
const first = String(record?.['firstname']?.value ?? '');
const last = String(record?.['lastname']?.value ?? '');
return <h3>Hauptkontakt: {first} {last}</h3>;
}
<RecordContext table="account" queryParameterName="id">
<LookupRecordContext columnName="primarycontactid">
<PrimaryContactHeading />
<TextEdit columnName="emailaddress1" />
</LookupRecordContext>
</RecordContext><RecordContext TableName="account" QueryParameterName="id">
<LookupRecordContext ColumnName="primarycontactid">
<ContextTemplate>
<h3>Hauptkontakt: @context["firstname"] @context["lastname"]</h3>
<ColumnEdit ColumnName="emailaddress1" />
</ContextTemplate>
</LookupRecordContext>
</RecordContext>Änderungen an Feldern innerhalb eines LookupRecordContext werden als Teil der Elternspeicherung MainContext gespeichert. Der Rückruf OnBeforeSave kann verwendet werden, um benutzerdefinierte Logik auszuführen oder den Speicherstand abzubrechen.
function MyPage() {
const onBeforeSave = async () => {
// Benutzerdefinierte Logik vor dem Speichern des nachgeschlagenen Datensatzes.
// Werfen, um den Spielstand abzubrechen.
};
return (
<MainContext>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext table="account" queryParameterName="id">
<TextEdit columnName="name" />
<LookupRecordContext
columnName="primarycontactid"
onBeforeSave={onBeforeSave}
>
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</LookupRecordContext>
</RecordContext>
</MainContext>
);
}<MainContext>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
<RecordContext TableName="account" QueryParameterName="id">
<ColumnEdit ColumnName="name" />
<LookupRecordContext ColumnName="primarycontactid"
OnBeforeSave="OnBeforeSave">
<ColumnEdit ColumnName="firstname" />
<ColumnEdit ColumnName="lastname" />
</LookupRecordContext>
</RecordContext>
</MainContext>
@code {
private async Task OnBeforeSave(CancelEventArgs eventArgs)
{
// Benutzerdefinierte Logik vor dem Speichern des nachgeschlagenen Datensatzes
}
}Die Eigenschaft RecordContext bietet Zugriff auf das Innere RecordContext für programmatische Operationen wie das Auffrischen oder Überprüfen des Dirty State.
{/* Kein äußerer Referenz-Handle – die React-Redewendung ist ein Kind, das liest
den verschachtelten Kontext über 'useRecordContext' und stellt alles, was er benötigt, bereit
(hier, ein Aktualisieren-Button). Der Hook bringt die LOOKED-UP-Platte zurück
Kontext, also lädt 'refresh()' den Kontakt neu, nicht das übergeordnete Konto. */}
function RefreshContactButton() {
const { refresh } = useRecordContext();
return <button onClick={() => refresh()}>Kontakt aktualisieren</button>;
}
<LookupRecordContext columnName="primarycontactid">
<RefreshContactButton />
<TextEdit columnName="firstname" />
</LookupRecordContext><LookupRecordContext @ref="_lookupContext" ColumnName="primarycontactid">
<ColumnEdit ColumnName="firstname" />
</LookupRecordContext>
@code {
private LookupRecordContext _lookupContext;
private async Task RefreshContact()
{
await _lookupContext.RecordContext.RefreshAsync();
}
}Das folgende Beispiel zeigt ein Kontoformular, das die Details des primären Kontakts inline anzeigt, indem er eine LookupRecordContext Bindung zum Suchfeld verwendet primarycontactid .
Name | Typ | Default | Beschreibung |
|---|---|---|---|
ChildContent | RenderFragment? | Kindinhalt der Komponente | |
ColumnName* | string | Spaltenlogischer Name, um den Editor aus dem Tabelleneintrag zu binden. | |
ContextTemplate | RenderFragment<TableRecord> | Rendere ein Fragment, das den geladenen Datensatz zur Darstellung oder Bearbeitung erhält. | |
Description | string? | Beschreibung wird im Tooltip angezeigt. | |
Disabled | bool? | Sollte der Editor deaktiviert werden? | |
DisplayLabelWhenAvailable | bool | True | Gibt an, ob eine Etikette angezeigt werden soll, falls verfügbar. |
DisplayTooltipWhenAvailable | bool | True | Gibt an, ob ein Tooltip angezeigt werden soll, falls verfügbar. |
DisplayValidationErrorMessage | bool | True | Sollte eine Fehlermeldung zur Validierung angezeigt werden, wenn die Komponente die Validierung nicht besteht? |
IsVisible | bool | True | Ist der Editor sichtbar? |
Label | string? | Text soll als Etikett für den Editor angezeigt werden. | |
ReadOnly | bool? | Sollte der Editor nur lesegeschützt sein? | |
RecordContext | RecordContext | Bietet Zugang zum inneren LookupRecordContext.RecordContext Gebäude für programmatische Operationen. | |
Required | bool? | Sollte der Wert erforderlich sein. | |
Value | LookupValue? | Der aktuelle Lookup-Wert (Referenz), der von diesem Kontext verwaltet wird. |
ChildContentColumnName*ContextTemplateDescriptionDisabledDisplayLabelWhenAvailableDisplayTooltipWhenAvailableDisplayValidationErrorMessageIsVisibleLabelReadOnlyRecordContextLookupRecordContext.RecordContext Gebäude für programmatische Operationen.RequiredValueName | Typ | Beschreibung |
|---|---|---|
OnBeforeSave | EventCallback<CancelEventArgs> | Callback hat vor dem Speichern angerufen. Ermöglicht das Abbrechen des Speichervorgangs. |
ValueChanged | EventCallback<ColumnValueBase> | Erhält oder setzt einen Callback, der den gebundenen Wert aktualisiert. |
OnBeforeSaveValueChangedName | Parameter | Typ | Beschreibung |
|---|---|---|---|
GetValidationErrors | List<string> | Gibt eine Sammlung der aktuellen Validierungsfehler zurück. |
GetValidationErrors