Compte
Contact Primaire
Le LookupRecordContext composant charge et offre un accès d’édition à l’enregistrement référencé par un champ de recherche sur le parent RecordContext. Il hérite de BaseColumnEdit, donc il se lie à une colonne via le ColumnName paramètre comme tout autre éditeur.
Lorsque vous placez un LookupRecordContext dans un RecordContext et spécifiez un ColumnName qui correspond à un champ de recherche, le composant lit automatiquement la valeur de recherche de l’enregistrement parent, récupère l’enregistrement référencé depuis Dataverse, et l’expose comme un fichier imbriqué RecordContext. Tous les éditeurs placés dans la LookupRecordContext liaison des champs du registre consulté.
Le ColumnName paramètre doit se référer à une colonne de recherche sur l’enregistrement parent. Le composant utilise cela pour résoudre la table cible et l’ID de l’enregistrement.
{/* Les modifications <LookupRecordContext> internes lient aux colonnes sur le</LookupRecordContext>
Tableau du dossier LOOKED-UP — le contact lié, pas le compte. */}
<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>Par exemple RecordContext, vous pouvez utiliser le ContextTemplate paramètre au lieu de ChildContent pour accéder directement à l’objet recherché TableRecord dans votre balisage.
{/* React n’a pas <ContextTemplate> — lisez le dossier LOOKED-UP</ContextTemplate>
à l’intérieur d’un composant enfant via 'useRecordContext' (la recherche génère son
RecordContext imbriqué propre, donc ce crochet renvoie le contact, et non le
compte). */}
function PrimaryContactHeading() {
const { record } = useRecordContext();
const first = String(record?.['firstname']?.value ?? '');
const last = String(record?.['lastname']?.value ?? '');
return <h3>Contact principal : {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>Contact principal : @context["firstname"] @context["lastname"]</h3>
<ColumnEdit ColumnName="emailaddress1" />
</ContextTemplate>
</LookupRecordContext>
</RecordContext>Les modifications apportées aux champs à l’intérieur de un LookupRecordContext sont enregistrées dans le cadre de l’opération de sauvegarde parente MainContext . Le OnBeforeSave rappel peut être utilisé pour exécuter une logique personnalisée ou annuler la sauvegarde.
function MyPage() {
const onBeforeSave = async () => {
// Logique personnalisée avant de sauvegarder l’enregistrement consulté.
// Lance pour annuler la sauvegarde.
};
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)
{
// Logique personnalisée avant d’enregistrer l’enregistrement consulté
}
}Cette RecordContext propriété donne accès à l’intérieur RecordContext pour des opérations programmatiques telles que le rafraîchissement ou la vérification de l’état sale.
{/* Pas de pseudo extérieur — l’idiome React est un enfant qui dit
le contexte imbriqué via « useRecordContext » et expose tout ce dont il a besoin
(ici, un bouton rafraîchissement). Le crochet renvoie les disques LOOKED-UP
Contexte, donc « actualiser () » recharge le contact, pas le compte parent. */}
function RefreshContactButton() {
const { refresh } = useRecordContext();
return <button onClick={() => refresh()}>Rafraîchir le contact</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();
}
}L’exemple suivant montre un formulaire de compte qui affiche les coordonnées du contact principal en ligne, à l’aide d’une LookupRecordContext liaison au primarycontactid champ de recherche.
Nom | Type | Par défaut | Description |
|---|---|---|---|
ChildContent | RenderFragment? | Contenu enfant du composant | |
ColumnName* | string | Nom logique de colonne pour lier l’éditeur à partir de l’enregistrement de table. | |
ContextTemplate | RenderFragment<TableRecord> | Afficher le fragment qui reçoit l’enregistrement chargé pour affichage ou édition. | |
Description | string? | Description à afficher dans l’infobulle. | |
Disabled | bool? | Si l’éditeur est désactivé. | |
DisplayLabelWhenAvailable | bool | True | Précise s’il faut afficher une étiquette si disponible. |
DisplayTooltipWhenAvailable | bool | True | Précise s’il faut afficher une infobulle si disponible. |
DisplayValidationErrorMessage | bool | True | Un message d’erreur de validation doit-il s’afficher lorsque le composant échoue à la validation ? |
IsVisible | bool | True | L’éditeur est-il visible ? |
Label | string? | Le texte doit être affiché comme une étiquette pour l’éditeur. | |
ReadOnly | bool? | L’éditeur devrait-il être en lecture seule ? | |
RecordContext | RecordContext | Fournit l’accès à l’intérieur LookupRecordContext.RecordContext pour les opérations programmatiques. | |
Required | bool? | Si la valeur est requise. | |
Value | LookupValue? | La valeur de recherche actuelle (référence) gérée par ce contexte. |
ChildContentColumnName*ContextTemplateDescriptionDisabledDisplayLabelWhenAvailableDisplayTooltipWhenAvailableDisplayValidationErrorMessageIsVisibleLabelReadOnlyRecordContextLookupRecordContext.RecordContext pour les opérations programmatiques.RequiredValueNom | Type | Description |
|---|---|---|
OnBeforeSave | EventCallback<CancelEventArgs> | Rappel a appelé avant de sauvegarder. Cela permet d’annuler l’opération de sauvegarde. |
ValueChanged | EventCallback<ColumnValueBase> | Obtient ou définit un callback qui met à jour la valeur liée. |
OnBeforeSaveValueChangedNom | Paramètres | Type | Description |
|---|---|---|---|
GetValidationErrors | List<string> | Retourne une collection des erreurs de validation courantes. |
GetValidationErrors