Le RecordContext composant enveloppe un seul enregistrement Dataverse et le fournit en cascade à tous les composants descendants tels que les éditeurs, les grilles et les résumés de validation. Il hérite de MainContext, donc il prend en charge toutes les mêmes fonctions de sauvegarde, rafraîchissement, validation et suivi des états sales.
Il existe plusieurs façons de spécifier quel enregistrement doit RecordContext être chargé :
Record — Passer directement un TableRecord objet à l’écran. Utile lorsque vous avez déjà l’enregistrement en mémoire ou que vous créez un nouveau enregistrement.{/* Pas d''id' = mode création : commence par un enregistrement en mémoire,
émet une requête de création lors de la sauvegarde. */}
<RecordContext table="contact">
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext><RecordContext Record="@(new TableRecord { TableName = "contact" })">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</RecordContext>QueryParameterName et TableName — Le contexte lit l’ID de l’enregistrement à partir d’un paramètre de requête URL et récupère automatiquement l’enregistrement depuis Dataverse. Si aucune pièce d’identité n’est présente, un nouvel enregistrement est créé.{/* URL : /my-page ?id=00000000-0000-0000-0000-000000000001 */}
<RecordContext table="contact" queryParameterName="id">
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext><!-- URL : /my-page ?id=00000000-0000-0000-0000-000000000001 -->
<RecordContext TableName="contact" QueryParameterName="id">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</RecordContext>RecordId et TableName — Spécifier l’ID de l’enregistrement directement comme paramètre au lieu de le lire à partir de l’URL.<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>Utilisez le RecordLoaded rappel pour exécuter la logique après que l’enregistrement a été récupéré depuis Dataverse. Cela est utile pour initialiser l’état dépendant ou charger des données associées.
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)
{
// Initialiser les données liées à l’état ou à la charge dépendante
}
}Au lieu d’utiliser ChildContent, vous pouvez utiliser le ContextTemplate paramètre pour accéder directement à l’objet TableRecord dans votre balisage via une variable modèle.
{/* Réagir n’a pas <ContextTemplate> d’équivalent — rendre un enfant</ContextTemplate>
qui lit l’enregistrement chargé via le hook 'useRecordContext'. */}
function ContactHeader() {
const { record } = useRecordContext();
return <h2>Édition : {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>Édition : @context["firstname"]</h2>
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</ContextTemplate>
</RecordContext>Appel DeleteAsync() pour supprimer l’enregistrement actuel. L’utilisateur reçoit une invitation avec une boîte de confirmation avant que la suppression ne soit exécutée. Utilisez le OnBeforeDelete rappel pour exécuter une logique personnalisée ou annulez la suppression en réglant CancelEventArgs.Cancel sur true.
function MyPage() {
const onBeforeDelete = async () => {
// Lancer pour annuler la suppression :
// lancer une nouvelle erreur ('Supprimer annulée') ;
};
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)
{
// Annulez éventuellement la suppression
// eventArgs.Cancel = true ;
}
}Lorsqu’on utilise QueryParameterName, il RecordContext surveille automatiquement les changements d’URL. Si la valeur du paramètre de requête change tout en restant sur la même page, le contexte recharge le nouvel enregistrement sans navigation complète de la page. Après avoir sauvegardé un nouvel enregistrement créé, l’URL est mise à jour pour inclure l’ID du nouvel enregistrement.
L’exemple suivant montre un simple RecordContext qui affiche le texte pour l’enregistrement courant.
Nom | Type | Par défaut | Description |
|---|---|---|---|
ChildContent | RenderFragment? | Les composants enfants sont rendus dans ce contexte. | |
ContextTemplate | RenderFragment<TableRecord> | Vous pouvez éventuellement spécifier un modèle pour le dossier. Cela vous permet d’accéder à l’objet 'TableRecord' dans le modèle. | |
DisableUnsavedChangesWarning | bool? | Lorsqu’elle est réglée sur true, la boîte d’avertissement des modifications non enregistrées n’est pas affichée lors de la navigation hors de la page. L’avertissement est toujours affiché lors du rafraîchissement, quel que soit ce réglage. Si elle n’est pas explicitement définie, la valeur est héritée du contexte parent. | |
ForceSuccessfulValidationBeforeSave | bool | True | Si une validation réussie de l’enregistrement est effectuée avant d’autoriser sa sauvegarde. |
IsDirty | bool | False | Indique si l’enregistrement ou tout contexte enfant enregistré comporte des modifications non enregistrées. |
ParentContext | MainContext? | L’ancêtre le plus proche, MainContext, permettant des hiérarchies de contextes imbriqués. | |
QueryParameterName | string? | Le nom du paramètre de requête qui spécifie l’id de l’enregistrement à récupérer. | |
Record | TableRecord? | Le dossier renvoie à ce contexte d’enregistrement. | |
RecordId | string? | Le GUID spécifique de l’enregistrement pour le contexte. | |
TableName | string? | Le nom logique du tableau du dossier. |
ChildContentContextTemplateDisableUnsavedChangesWarningForceSuccessfulValidationBeforeSaveIsDirtyParentContextQueryParameterNameRecordRecordIdTableNameNom | Type | Description |
|---|---|---|
OnBeforeDelete | EventCallback<CancelEventArgs> | Rappel appelé avant de supprimer. Permet d’annuler l’opération de suppression. |
OnBeforeSave | EventCallback<CancelEventArgs> | Rappel a appelé avant de sauvegarder. Cela permet d’annuler l’opération de sauvegarde. |
RecordLoaded | EventCallback<TableRecord> | EventCallback pour se déclencher lorsque l’enregistrement est chargé. |
OnBeforeDeleteOnBeforeSaveRecordLoadedNom | Paramètres | Type | Description |
|---|---|---|---|
DeleteAsync | Task<bool> | Les demandes de confirmation suppriment alors l’enregistrement en cours. | |
GetRequests | List<OrganizationRequest> | Retourne la requête de création ou de mise à jour pour l’enregistrement s’il est sale, ainsi que les requêtes provenant de contextes enfants. | |
RefreshAsync | bool forceRefresh | Task | Recharge l’enregistrement depuis le serveur, en demandant éventuellement des modifications non enregistrées. |
ResetState | void | Réinitialise l’enregistrement et tous les contextes enfants à leur dernier état sauvegardé. | |
SaveAsync | bool? refresh | Task<bool> | Sauvegarde l’enregistrement et navigue vers l’URL de l’enregistrement si elle a été nouvellement créée. |
Validate | bool | Validez l’enregistrement et tous les sous-contextes (grille, recherche, édition, enregistrement, principal). |
DeleteAsyncGetRequestsRefreshAsyncResetStateSaveAsyncValidate