O RecordContext componente envolve um único registro Dataverse e o fornece como um valor em cascata para todos os componentes descendentes, como editores, grades e resumos de validação. Ele herda de MainContext, então suporta todos os mesmos recursos de salvamento, atualização, validação e rastreamento de estado sujo.
Existem várias maneiras de especificar qual registro a RecordContext deve carregar:
Record — Passe um TableRecord objeto diretamente. Útil quando você já tem o registro na memória ou está criando um novo.{/* Sem 'id' = modo criação: começa com um registro em memória,
emite um CreateRequest no save. */}
<RecordContext table="contact">
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext><RecordContext Record="@(new TableRecord { TableName = "contact" })">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</RecordContext>QueryParameterName e TableName — O contexto lê o ID do registro a partir de um parâmetro de consulta URL e recupera o registro do Dataverse automaticamente. Se não houver identificação, um novo registro é criado.{/* URL: /my-page?id=00000000-0000-0000-0000-00000-0000000001 */}
<RecordContext table="contact" queryParameterName="id">
<TextEdit columnName="firstname" />
<TextEdit columnName="lastname" />
</RecordContext><!-- URL: /my-page?id=00000000-0000-0000-0000-00000-0000000001 -->
<RecordContext TableName="contact" QueryParameterName="id">
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</RecordContext>RecordId e TableName — Especifique o ID do registro diretamente como parâmetro em vez de lê-lo pela 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>Use o RecordLoaded callback para executar a lógica após o registro ser recuperado do Dataverse. Isso é útil para inicializar estados dependentes ou carregar dados relacionados.
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)
{
// Inicializar dados relacionados ao estado dependente ou carregar
}
}Em vez de usar ChildContent, você pode usar o ContextTemplate parâmetro para acessar o TableRecord objeto diretamente na sua marcação via uma variável modelo.
{/* React não tem <ContextTemplate> equivalente — render um filho</ContextTemplate>
que lê o registro carregado via o hook 'useRecordContext'. */}
function ContactHeader() {
const { record } = useRecordContext();
return <h2>Editando: {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>Editando: @context["firstname"]</h2>
<TextEdit ColumnName="firstname" />
<TextEdit ColumnName="lastname" />
</ContextTemplate>
</RecordContext>Chamada DeleteAsync() para excluir o registro atual. O usuário recebe um diálogo de confirmação antes da execução da exclusão. Use o OnBeforeDelete callback para rodar lógica personalizada ou cancele a exclusão definindo CancelEventArgs.Cancel para true.
function MyPage() {
const onBeforeDelete = async () => {
// Arremesse para cancelar o deleção:
// lançar um novo erro ('Excluir cancelado');
};
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)
{
// Opcionalmente, cancele a exclusão
// eventArgs.Cancel = true;
}
}Ao usar QueryParameterName, ele RecordContext monitora automaticamente as mudanças de URL. Se o valor do parâmetro de consulta mudar enquanto permanece na mesma página, o contexto recarrega o novo registro sem uma navegação completa da página. Após salvar um registro recém-criado, a URL é atualizada para incluir o ID do novo registro.
O exemplo a seguir demonstra um simples RecordContext que exibe o texto do registro atual.
Nome | Tipo | Padrão | Descrição |
|---|---|---|---|
ChildContent | RenderFragment? | Os componentes filhos renderizados dentro desse contexto. | |
ContextTemplate | RenderFragment<TableRecord> | Você pode, opcionalmente, especificar um modelo para registro. Isso permite que você acesse o objeto 'TableRecord' no modelo. | |
DisableUnsavedChangesWarning | bool? | Quando configurado como true, o diálogo de aviso de alterações não salvas não é exibido ao navegar para fora da página. O aviso sempre aparece ao atualizar, independentemente dessa configuração. Se não for explicitamente definido, o valor é herdado do contexto pai. | |
ForceSuccessfulValidationBeforeSave | bool | True | Deve ser realizada uma validação bem-sucedida do registro antes de permitir que o registro seja salvo. |
IsDirty | bool | False | Indica se o registro ou qualquer contexto filho registrado tem alterações não salvas. |
ParentContext | MainContext? | O ancestral mais próximo é o MainContext, permitindo hierarquias de contexto aninhado. | |
QueryParameterName | string? | O nome do parâmetro de consulta que especifica o id do registro a ser recuperado. | |
Record | TableRecord? | O registro está vinculado a esse contexto de registro. | |
RecordId | string? | O GUID específico do registro para o contexto. | |
TableName | string? | O nome lógico da tabela do registro. |
ChildContentContextTemplateDisableUnsavedChangesWarningForceSuccessfulValidationBeforeSaveIsDirtyParentContextQueryParameterNameRecordRecordIdTableNameNome | Tipo | Descrição |
|---|---|---|
OnBeforeDelete | EventCallback<CancelEventArgs> | Chamada de retorno antes de apagar. Permite cancelar a operação de exclusão. |
OnBeforeSave | EventCallback<CancelEventArgs> | O retorno chamou antes de salvar. Permite cancelar a operação de salvamento. |
RecordLoaded | EventCallback<TableRecord> | EventCallback para ser acionado quando o registro for carregado. |
OnBeforeDeleteOnBeforeSaveRecordLoadedNome | Parâmetros | Tipo | Descrição |
|---|---|---|---|
DeleteAsync | Task<bool> | Solicita confirmação e então apaga o registro atual. | |
GetRequests | List<OrganizationRequest> | Retorna a solicitação de criação ou atualização do registro se estiver sujo, além de solicitações de contextos filhos. | |
RefreshAsync | bool forceRefresh | Task | Recarrega o registro do servidor, opcionalmente solicitando sobre alterações não salvas. |
ResetState | void | Reinicia o registro e todos os contextos filhos para seu último estado salvo. | |
SaveAsync | bool? refresh | Task<bool> | Salva o registro e navega até a URL do registro caso ele tenha sido criado recentemente. |
Validate | bool | Valide o registro e quaisquer subcontextos (grid, lookup edit, record, main). |
DeleteAsyncGetRequestsRefreshAsyncResetStateSaveAsyncValidate