IPowerPortalsProService
A IPowerPortalsProService interface fornece métodos para realizar operações CRUD, executar consultas, gerenciar relacionamentos e recuperar metadados do Dataverse. É o serviço principal para acesso a dados do lado do servidor no PowerPortalsPro.
Nota
Na maioria dos casos, você não precisa ligar
IPowerPortalsProServicediretamente. OsRecordContextcomponentes ,MainContext, e grade gerenciam automaticamente as operações de dados. Use esse serviço para lógica personalizada que esteja fora do fluxo padrão de componentes.
Implementações de Servidor e Cliente
IPowerPortalsProService vem com duas implementações registradas automaticamente pelo framework — seu código de componente é idêntico em ambos, e o runtime injeta aquela que corresponde ao contexto ativo de renderização:
- Implementação do servidor (
PowerPortalsPro.Web.Server, registrada porAddPowerPortalsProWebServer) — roda em processo, comunica diretamente com o Dataverse atravésIOrganizationServicede , e aplica seusITablePermissionHandler/ITableRecordPermissionHandlerinterceptors antes de qualquer leitura ou escrita. Selecionado quando a página é renderizada sobInteractiveServerRenderModeou SSR estático. - Implementação cliente (
PowerPortalsPro.Web.Client, registrada porAddPowerPortalsProWebClient) — roda no navegador sob WebAssembly, não possui nenhum SDK Dataverse e, em vez disso, serializa cada chamada em JSON para o endpoint HTTP do lado do servidor correspondente (/api/table/{name},/api/retrieveMultiple, etc.). Os handlers de permissão ainda se aplicam porque a requisição retorna ao endpoint do servidor. Veja a página da API do Cliente para o formato da wire e as rotas que a implementação do cliente chama.
Como o contrato é idêntico, o mesmo componente funciona em qualquer modo de interatividade (Servidor, WebAssembly ou Auto). Código que chama _powerPortalsProService.RetrieveRecordAsync(...) uma página renderizada pelo servidor faz uma chamada Dataverse em processo; a mesma linha em uma página renderizada por WASM emite uma requisição HTTP — sem necessidade de ramificação.
Injeção do Serviço
Injetar IPowerPortalsProService em qualquer componente ou serviço Blazor via injeção de construtor ou propriedade.
// usePowerPortalsPro() retorna o cliente tipado que o framework despacha
// toda chamada CRUD que passa. O objeto 'ppp' expõe recuperar / criar /
// atualizar / excluir / associar / executarMúltiplos / metadados / métodos de arquivo
// contra o ambiente Dataverse configurado.
import { usePowerPortalsPro } from '@powerportalspro/react';
function MyComponent() {
const { ppp } = usePowerPortalsPro();
// ...
}[Inject]
private IPowerPortalsProService _powerPortalsProService { get; set; } = null!;Recuperando um Registro
Use RetrieveRecordAsync para buscar um único registro pelo nome da tabela e ID. Opcionalmente especifique quais colunas devolver; se omitido, todas as colunas são retornadas.
// Recuperar todas as colunas
const account = await ppp.retrieveRecordAsync('account', accountId);
// Recuperar apenas colunas específicas
const account = await ppp.retrieveRecordAsync('account', accountId, [
'name', 'telephone1', 'address1_city',
]);// Recuperar todas as colunas
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId);
// Recuperar apenas colunas específicas
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId,
new[] { "name", "telephone1", "address1_city" });Consulta a múltiplos registros
Use RetrieveRecordsAsync com uma string de consulta FetchXML para recuperar múltiplos registros com suporte a filtragem, ordenação e entidades vinculadas.
const fetchXml = `<fetch>
<entity name='contact'>
<attribute name='fullname' />
<attribute name='emailaddress1' />
<filter>
<condition attribute='parentcustomerid' operator='eq' value='...' />
</filter>
<order attribute='fullname' />
</entity>
</fetch>`;
const response = await ppp.retrieveRecordsAsync(fetchXml);
for (const record of response.tableRecords) {
// Processar cada registro
}var fetchXml = @"<fetch>
<entity name='contact'>
<attribute name='fullname' />
<attribute name='emailaddress1' />
<filter>
<condition attribute='parentcustomerid' operator='eq' value='...' />
</filter>
<order attribute='fullname' />
</entity>
</fetch>";
var response = await _powerPortalsProService.RetrieveRecordsAsync(fetchXml);
foreach (var record in response.TableRecords)
{
// Processar cada registro
}Criando um Registro
Use CreateRecordAsync para criar um novo registro no Dataverse. A resposta contém o ID do registro recém-criado.
// O TableRecord usa um mapa de 'propriedades' de objetos ColumnValue tipados com chaveamento
// pelo nome da coluna. O helper createTableRecord constrói a forma do fio e
// carimba um '_idForCreate' temporário para que referências entre registros possam ser resolvidas
// dentro de um único lote Create + Associate antes que o servidor atribua o
// Real ID.
import { createTableRecord } from '@powerportalspro/react';
const newContact = createTableRecord('contact', {
firstname: { type: 'string', value: 'John' },
lastname: { type: 'string', value: 'Doe' },
});
const response = await ppp.createRecordAsync(newContact);
const newRecordId = response.id;var newContact = new TableRecord { TableName = "contact" };
newContact["firstname"] = new StringValue("John");
newContact["lastname"] = new StringValue("Doe");
var response = await _powerPortalsProService.CreateRecordAsync(newContact);
var newRecordId = response.Id;Atualizando um Registro
Use UpdateRecordAsync para atualizar um registro existente. Apenas as propriedades definidas no TableRecord são enviadas para o Dataverse.
const recordToUpdate = createTableRecord('contact', {
telephone1: { type: 'string', value: '555-1234' },
}, { id: contactId });
await ppp.updateRecordAsync(recordToUpdate);var recordToUpdate = new TableRecord
{
TableName = "contact",
Id = contactId
};
recordToUpdate["telephone1"] = new StringValue("555-1234");
await _powerPortalsProService.UpdateRecordAsync(recordToUpdate);Apagando um Registro
Use DeleteRecordAsync para deletar um registro pelo nome da tabela e ID.
await ppp.deleteRecordAsync('contact', contactId);await _powerPortalsProService.DeleteRecordAsync("contact", contactId);Registros Associados
Use AssociateAsync e DisassociateAsync gerencie relações muitos-para-muitos entre registros.
// Associado
const account = { tableName: 'account', id: accountId };
const regions = [
{ tableName: 'ppp_region', id: regionId1 },
{ tableName: 'ppp_region', id: regionId2 },
];
await ppp.associateAsync(account, 'ppp_Account_ppp_Region_ppp_Region', regions);
// Dissociação
await ppp.disassociateAsync(account, 'ppp_Account_ppp_Region_ppp_Region', regions);// Associado
var account = new TableRecordReference("account", accountId);
var regions = new List<TableRecordReference>
{
new TableRecordReference("ppp_region", regionId1),
new TableRecordReference("ppp_region", regionId2),
};
await _powerPortalsProService.AssociateAsync(account, "ppp_Account_ppp_Region_ppp_Region", regions);
// Dissociação
await _powerPortalsProService.DisassociateAsync(account, "ppp_Account_ppp_Region_ppp_Region", regions);Execução de Solicitações
Use ExecuteAsync para uma única requisição ou ExecuteMultipleAsync para executar múltiplas requisições em uma única transação de banco de dados. Se qualquer requisição em um lote transacional falhar, todas as alterações são revertidas.
// Execute múltiplas requisições em uma única transação. Cada solicitação é um objeto de união marcada discriminado por 'tipo'.
const requests = [
{ type: 'create', record: contact },
{ type: 'update', record: account },
];
const responses = await ppp.executeMultipleAsync(requests, { returnResponses: true });// Execute múltiplas requisições em uma única transação
var requests = new List<OrganizationRequest>
{
new CreateRequest(contact),
new UpdateRequest(account),
};
var responses = await _powerPortalsProService.ExecuteMultipleAsync(requests, returnResponses: true);Recuperando Metadados
Use RetrieveTableMetadataAsync e RetrieveViewMetadataAsync para recuperar metadados de tabela e visualização. Para acesso em cache, prefere ITableMetadataCache e IViewMetadataCache em vez disso.
const tableMetadata = await ppp.retrieveTableMetadataAsync('contact');
const viewMetadata = await ppp.retrieveViewMetadataAsync(viewId);var tableMetadata = await _powerPortalsProService.RetrieveTableMetadataAsync("contact");
var viewMetadata = await _powerPortalsProService.RetrieveViewMetadataAsync(viewId);Trabalhando com Arquivos
Use GetFileInfoAsync para recuperar metadados de arquivos ou imagens e, opcionalmente, o conteúdo binário de uma coluna de arquivo ou imagem.
// Obtenha apenas metadados de arquivos
const fileInfo = await ppp.getFileInfoAsync('contact', contactId, 'ppp_contract');
// Obtenha metadados de arquivos e conteúdo binário
const fileWithData = await ppp.getFileInfoAsync(
'contact', contactId, 'ppp_contract', { includeData: true },
);
const bytes = fileWithData.fileData;// Obtenha apenas metadados de arquivos
var fileInfo = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract");
// Obtenha metadados de arquivos e conteúdo binário
var fileWithData = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract", includeData: true);
var bytes = fileWithData.FileData;IPowerPortalsProService Interface
Métodos
Nome | Parâmetros | Tipo | Descrição |
|---|---|---|---|
AssociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<AssociateResponse> | Associa um registro a um ou mais registros relacionados por meio de uma relação muitos-para-muitos. |
ClearAllCachesAsync | Task<IReadOnlyList<CacheClearResult>> | Limpa todos os servidores Services.IClearableCache (tabela / visualização / privilégio metadados, privilégios por usuário, configurações do arquivo do ambiente) e reconstrói o Localized-strings cacheam atômicamente — os leitores continuam a ver o anteriormente dados carregados até que o novo estado esteja totalmente preenchido. Caches preguiçosos recarregam no Próximo pedido que precisar deles. | |
ClearCacheAsync | string name | Task<CacheClearResult> | Limpa um cache nomeado. Retornos null quando não registrado correspondências name de cache (insensíveis a maiúsculas e maiúsculas); falhas são Envolvido no resultado em vez de jogado fora. Mesmo portão de autenticação que IPowerPortalsProService.ClearAllCachesAsync. |
CreateFileArchiveAsync | CreateFileArchiveRequest request | Task<FileArchiveResult> | Constrói um arquivo (atualmente zip; formatos futuros estão disponíveis atrás do CreateFileArchiveRequest.Format enum) contendo todos os registros carga útil para o par nomeado de tabela / coluna. Usa o mesmo por disco Cadeia de permissão como String,System.Boolean) — não autorizada / ausente As linhas são silenciosamente retiradas do arquivo. Nomes de arquivos duplicados são desambiguado com |
CreateRecordAsync | TableRecord record | Task<CreateResponse> | Cria um novo registro no Dataverse. |
DeleteRecordAsync | string tableLogicalName Guid id | Task<DeleteResponse> | Exclui um registro do Dataverse pelo nome da tabela e pelo ID do registro. |
DisassociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<DisassociateResponse> | Remove uma associação entre um registro e um ou mais registros relacionados por meio de uma relação muitos-para-muitos. |
DownloadLocalizationSourceAsync | string sourceId string culture | Task<LocalizationDownload> | Downloads as chaves que uma fonte contribuiu para uma cultura durante a maior parte aquecimento recente, como JSON no mesmo consumidor em forma de objeto aninhado |
DownloadMergedLocalizationsAsync | string culture | Task<LocalizationDownload> | Baixa as chaves de localização mesclaras para uma cultura — o pós-fusão valor vencedor para cada chave armazenada pelo cache, independentemente de qual A fonte originalmente fornecia isso. Use isso para um snapshot completo referência (tudo o que o portal realmente vai servir para essa cultura) em vez da visão por fonte acima. |
ExecuteAsync | OrganizationRequest request | Task<OrganizationResponse> | Executa uma única solicitação de organização contra o Dataverse. |
ExecuteMultipleAsync | IEnumerable<OrganizationRequest> requests bool returnResponses | Task<List<OrganizationResponse>> | Executa múltiplas requisições de organização em uma única transação de banco de dados. Se alguma solicitação falhar, todas as alterações no lote são revertidas. |
GetCacheNamesAsync | Task<IReadOnlyList<string>> | Retorna os nomes de cada lado Services.IClearableCachedo servidor , adequado para uma interface de administrador que quer renderizar botões de limpeza por cache. Mesmo portão de autenticação como IPowerPortalsProService.ClearAllCachesAsync se aplica ao endpoint HTTP. | |
GetFileInfoAsync | string tableName Guid recordId string columnName bool includeData | Task<FileInfo> | Recupera informações de arquivos e, opcionalmente, o conteúdo binário de uma coluna de arquivo ou imagem no Dataverse. |
GetFileInfosAsync | string tableName IEnumerable<Guid> recordIds string columnName bool includeData | Task<IEnumerable<FileInfo>> | Recuperação em lote de informações de arquivos para muitos registros da mesma tabela / coluna em uma única viagem de ida e volta. Internamente, ventila o disco por disco em paralelo e retorna a lista combinada. A mesma cadeia de manipuladores de permissões por registro executa como para a chamada de disco único; Consultas falhadas são eliminadas da resposta em vez de Falhando no lote todo. Usado pelo 'Download All' / 'Download Selected' do FileGrid para que o cliente possa construir um zip sem disparar N requisições HTTP. |
GetLocalizationOverviewAsync | Task<LocalizationOverview> | Retorna um snapshot voltado para o administrador do pipeline de localização de strings: o configuração estática que conduziu o aquecimento, além dos registros de carga por fonte Produzido pelo aquecimento mais recente. Apoia o | |
GetOrganizationSettingsAsync | Task<OrganizationSettings> | Recupera as configurações organizacionais obtidas do Dataverse Histórico
| |
GetTablePermissionsForCurrentUserAsync | string tableLogicalName | Task<TableSecurityPermission> | Retorna a máscara combinada em nível Models.TableSecurityPermission de tabela do usuário atual para tableLogicalName — a união bit a bit de Ler / Criar / Escrever / Flags de Delete / Append / AppendTo qualquer |
GetTranslationAvailabilityAsync | Task<TranslationAvailability> | Retorna se o recurso de localização-tradução é utilizável no ambiente atual: se o serviço de tradução do Azure está configurado, se a tradução gerenciou a solução é instalada, e os idiomas-alvo candidatos (as culturas suportadas pelo portal anotado com Azure-translatability). Apoia a decisão da | |
RetrieveRecordAsync | string tableLogicalName Guid id IEnumerable<string> columns | Task<TableRecord> | Recupera um único registro do Dataverse por nome da tabela e ID do registro. |
RetrieveRecordsAsync | string fetchXml | Task<RetrieveRecordsResponse> | Recupera múltiplos registros do Dataverse usando uma consulta FetchXML. Suporta filtragem, ordenação, paginação, entidades vinculadas e consultas agregadas. |
RetrieveTableMetadataAsync | string tableLogicalName | Task<TableMetadata> | Recupera metadados de tabela do Dataverse, incluindo definições de colunas, relacionamentos e configuração de exibição. |
RetrieveViewMetadataAsync | Guid viewId | Task<ViewMetadata> | Recupera metadados da visualização do Dataverse, incluindo a consulta FetchXML da visualização, colunas e configuração de exibição. |
RetrieveViewsForTableAsync | string tableLogicalName | Task<IEnumerable<ViewMetadata>> | Recupera todos os registros de metadados de visualização de uma tabela. Usado por grades que precisam enumere as visualizações disponíveis (view-picker, resolução padrão-view, etc.). A implementação do lado do servidor lê do |
TranslateLocalizationFileAsync | TranslationRequest request | Task<TranslationResult> | Traduz automaticamente um arquivo de localização carregado para um ou mais idiomas-alvo via Azure Tradutor, reutilizando a memória de tradução do Dataverse e reportando quantas strings estavam Traduzido recém-usado versus reutilizado. Retorna um arquivo por idioma de destino mais um zip de todos. |
UpdateRecordAsync | TableRecord record | Task<UpdateResponse> | Atualiza um registro existente no Dataverse. Apenas as propriedades definidas no registro são enviadas para o Dataverse. |
AssociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
ClearAllCachesAsyncServices.IClearableCache (tabela / visualização / privilégio metadados, privilégios por usuário, configurações do arquivo do ambiente) e reconstrói o Localized-strings cacheam atômicamente — os leitores continuam a ver o anteriormente dados carregados até que o novo estado esteja totalmente preenchido. Caches preguiçosos recarregam no Próximo pedido que precisar deles. ClearCacheAsyncnull quando não registrado correspondências name de cache (insensíveis a maiúsculas e maiúsculas); falhas são Envolvido no resultado em vez de jogado fora. Mesmo portão de autenticação que IPowerPortalsProService.ClearAllCachesAsync.CreateFileArchiveAsyncCreateFileArchiveRequest.Format enum) contendo todos os registros carga útil para o par nomeado de tabela / coluna. Usa o mesmo por disco Cadeia de permissão como String,System.Boolean) — não autorizada / ausente As linhas são silenciosamente retiradas do arquivo. Nomes de arquivos duplicados são desambiguado com CreateRecordAsyncDeleteRecordAsyncGuid id
DisassociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
DownloadLocalizationSourceAsyncstring culture
DownloadMergedLocalizationsAsyncExecuteAsyncExecuteMultipleAsyncbool returnResponses
GetCacheNamesAsyncServices.IClearableCachedo servidor , adequado para uma interface de administrador que quer renderizar botões de limpeza por cache. Mesmo portão de autenticação como IPowerPortalsProService.ClearAllCachesAsync se aplica ao endpoint HTTP.GetFileInfoAsyncGuid recordId
string columnName
bool includeData
GetFileInfosAsyncIEnumerable<Guid> recordIds
string columnName
bool includeData
GetLocalizationOverviewAsyncGetOrganizationSettingsAsync-
DefaultCurrency — a moeda base da organização, usada pelo modo criação editores (MoneyEdit ) para renderizar o símbolo certo em discos totalmente novos. -
BlockedFileExtensions +MaxUploadFileSizeInBytes — upload de arquivo restrições que os clientes espelham para rejeitar arquivos inválidos antes da viagem de ida e volta.
GetTablePermissionsForCurrentUserAsyncModels.TableSecurityPermission de tabela do usuário atual para tableLogicalName — a união bit a bit de Ler / Criar / Escrever / Flags de Delete / Append / AppendTo qualquer GetTranslationAvailabilityAsyncRetrieveRecordAsyncGuid id
IEnumerable<string> columns
RetrieveRecordsAsyncRetrieveTableMetadataAsyncRetrieveViewMetadataAsyncRetrieveViewsForTableAsyncTranslateLocalizationFileAsyncUpdateRecordAsync