IPowerPortalsProService
La IPowerPortalsProService interfaz proporciona métodos para realizar operaciones CRUD, ejecutar consultas, gestionar relaciones y recuperar metadatos de Dataverse. Es el servicio principal para el acceso a datos desde el lado del servidor en PowerPortalsPro.
Nota
En la mayoría de los casos no necesitas llamar
IPowerPortalsProServicedirectamente. LosRecordContextcomponentes ,MainContext, y grid gestionan automáticamente las operaciones de datos. Utiliza este servicio para lógica personalizada que esté fuera del flujo de trabajo estándar de componentes.
Implementaciones de servidor y cliente
IPowerPortalsProService viene con dos implementaciones registradas automáticamente por el framework — tu código de componentes es idéntico contra ambos, y el runtime inyecta la que coincide con el contexto de renderizado activo:
- Implementación del servidor (
PowerPortalsPro.Web.Server, registrada porAddPowerPortalsProWebServer) — se ejecuta en proceso, se comunica directamente con Dataverse a través deIOrganizationService, y aplica tusITablePermissionHandler/ITableRecordPermissionHandlerinterceptors antes de cualquier lectura o escritura. Seleccionado cuando la página se renderiza bajoInteractiveServerRenderModeo SSR estático. - Implementación cliente (
PowerPortalsPro.Web.Client, registrada porAddPowerPortalsProWebClient) — se ejecuta en el navegador bajo WebAssembly, no tiene ningún SDK Dataverse y, en su lugar, serializa cada llamada en JSON al punto final HTTP correspondiente del lado del servidor (/api/table/{name},/api/retrieveMultiple, etc.). Los manejadores de permisos siguen aplicándose porque la solicitud vuelve a caer en el endpoint del servidor. Consulta la página de la API del cliente para el formato de cable y las rutas que llama la implementación del cliente.
Como el contrato es idéntico, el mismo componente funciona bajo cualquier modo de interactividad (Servidor, WebAssembly o Auto). El código que llama _powerPortalsProService.RetrieveRecordAsync(...) a una página renderizada por el servidor realiza una llamada Dataverse en proceso; la misma línea en una página renderizada por WASM emite una solicitud HTTP — sin necesidad de ramificación.
Inyectando el Servicio
Inyectar IPowerPortalsProService en cualquier componente o servicio de Blazor mediante inyección de constructor o propiedad.
// usePowerPortalsPro() devuelve el cliente tipado que el framework despacha
// cada llamada CRUD a pasar. El objeto 'ppp' expone recuperar / crear /
// actualizar / eliminar / asociar / ejecutarMúltiples métodos / metadatos / archivos
// frente al entorno Dataverse configurado.
import { usePowerPortalsPro } from '@powerportalspro/react';
function MyComponent() {
const { ppp } = usePowerPortalsPro();
// ...
}[Inject]
private IPowerPortalsProService _powerPortalsProService { get; set; } = null!;Recuperación de un récord
Úsase RetrieveRecordAsync para obtener un solo registro por nombre de tabla e ID. Opcionalmente especifica qué columnas devolver; si se omite, se devuelven todas las columnas.
// Recuperar todas las columnas
const account = await ppp.retrieveRecordAsync('account', accountId);
// Recuperar solo columnas específicas
const account = await ppp.retrieveRecordAsync('account', accountId, [
'name', 'telephone1', 'address1_city',
]);// Recuperar todas las columnas
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId);
// Recuperar solo columnas específicas
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId,
new[] { "name", "telephone1", "address1_city" });Consulta de múltiples registros
Úsalo RetrieveRecordsAsync con una cadena de consulta FetchXML para recuperar múltiples registros con filtrado, ordenación y soporte para entidades enlazadas.
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) {
// Procesar 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)
{
// Procesar cada registro
}Creación de un Registro
Úsalo CreateRecordAsync para crear un nuevo registro en Dataverse. La respuesta contiene el ID del registro recién creado.
// TableRecord utiliza un mapa de 'propiedades' de objetos ColumnValue tipados con clave
// por nombre de columna. El helper createTableRecord construye la forma del alambre y
// sella un '_idForCreate' temporal para que las referencias entre registros puedan resolverse
// dentro de un solo lote Crear + Asociar antes de que el servidor asigne el
// 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;Actualización de un registro
Úsalo UpdateRecordAsync para actualizar un registro existente. Solo las propiedades establecidas en el TableRecord se envían a 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);Eliminar un registro
Úsalo DeleteRecordAsync para eliminar un registro por nombre de la tabla e ID.
await ppp.deleteRecordAsync('contact', contactId);await _powerPortalsProService.DeleteRecordAsync("contact", contactId);Registros asociados
Utiliza AssociateAsync y DisassociateAsync gestiona relaciones de muchos-a-muchos entre registros.
// Asociado
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);
// Disociación
await ppp.disassociateAsync(account, 'ppp_Account_ppp_Region_ppp_Region', regions);// Asociado
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);
// Disociación
await _powerPortalsProService.DisassociateAsync(account, "ppp_Account_ppp_Region_ppp_Region", regions);Ejecución de solicitudes
Úsala ExecuteAsync para una sola solicitud o ExecuteMultipleAsync para ejecutar múltiples solicitudes en una única transacción de base de datos. Si alguna petición en un lote transaccional falla, todos los cambios se revierten.
// Ejecuta múltiples solicitudes en una sola transacción. Cada solicitud es un objeto de unión etiquetada discriminado por 'tipo'.
const requests = [
{ type: 'create', record: contact },
{ type: 'update', record: account },
];
const responses = await ppp.executeMultipleAsync(requests, { returnResponses: true });// Ejecutar múltiples solicitudes en una sola transacción
var requests = new List<OrganizationRequest>
{
new CreateRequest(contact),
new UpdateRequest(account),
};
var responses = await _powerPortalsProService.ExecuteMultipleAsync(requests, returnResponses: true);Recuperación de metadatos
Usar RetrieveTableMetadataAsync y RetrieveViewMetadataAsync recuperar metadatos de tablas y vistas. Para acceso en caché, prefiere ITableMetadataCache y IViewMetadataCache en su lugar.
const tableMetadata = await ppp.retrieveTableMetadataAsync('contact');
const viewMetadata = await ppp.retrieveViewMetadataAsync(viewId);var tableMetadata = await _powerPortalsProService.RetrieveTableMetadataAsync("contact");
var viewMetadata = await _powerPortalsProService.RetrieveViewMetadataAsync(viewId);Trabajando con archivos
Se usa GetFileInfoAsync para recuperar metadatos de archivos o imágenes y, opcionalmente, el contenido binario de una columna de archivo o imagen.
// Obtener solo metadatos de archivos
const fileInfo = await ppp.getFileInfoAsync('contact', contactId, 'ppp_contract');
// Obtener metadatos de archivos y contenido binario
const fileWithData = await ppp.getFileInfoAsync(
'contact', contactId, 'ppp_contract', { includeData: true },
);
const bytes = fileWithData.fileData;// Obtener solo metadatos de archivos
var fileInfo = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract");
// Obtener metadatos de archivos y contenido binario
var fileWithData = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract", includeData: true);
var bytes = fileWithData.FileData;IPowerPortalsProService Interface
Métodos
Nombre | Parámetros | Tipo | Descripción |
|---|---|---|---|
AssociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<AssociateResponse> | Asocia un registro con uno o más registros relacionados mediante una relación de muchos a muchos. |
ClearAllCachesAsync | Task<IReadOnlyList<CacheClearResult>> | Limpia todos los servidores Services.IClearableCache (tabla / vista / privilegio metadatos, privilegios por usuario, configuración del archivo de entorno) y reconstruye el Localized-strings en caché atómicamente — los lectores continúan viendo lo que antes Cargados datos hasta que el nuevo estado esté completamente poblado. Recarga de cachés perezosas en el Próxima petición que los necesite. | |
ClearCacheAsync | string name | Task<CacheClearResult> | Limpia una caché con nombre. Devoluciones null cuando no están registradas coincidencias name de caché (insensibles a mayúsculas y minúsculas); los fallos son envuelta en el resultado en vez de tirada. La misma puerta de autenticación que IPowerPortalsProService.ClearAllCachesAsync. |
CreateFileArchiveAsync | CreateFileArchiveRequest request | Task<FileArchiveResult> | Construye un archivo (actualmente zip; formatos futuros en activo detrás del CreateFileArchiveRequest.Format enum) que contiene los registros de todos los registros carga útil para el par de tablas/columnas nombradas. Utiliza lo mismo por disco Cadena de permisos como String,System.Boolean) — no autorizada / perdida Las filas se eliminan silenciosamente del archivo. Los nombres de archivo duplicados son desambiguado mediante |
CreateRecordAsync | TableRecord record | Task<CreateResponse> | Crea un nuevo registro en Dataverse. |
DeleteRecordAsync | string tableLogicalName Guid id | Task<DeleteResponse> | Elimina un registro de Dataverse por nombre de tabla e ID de registro. |
DisassociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<DisassociateResponse> | Elimina una asociación entre un registro y uno o más registros relacionados mediante una relación de muchos a muchos. |
DownloadLocalizationSourceAsync | string sourceId string culture | Task<LocalizationDownload> | Descargas las claves que una fuente aportó a una cultura durante la mayoría calentamiento reciente, como JSON en el mismo consumidor con forma de objeto anidado |
DownloadMergedLocalizationsAsync | string culture | Task<LocalizationDownload> | Descarga las claves de localización fusionadas para una cultura: la post-fusión valor ganador para cada clave almacenada en la caché, independientemente de cuál La fuente lo proporcionó originalmente. Utiliza esto para una instantánea completa referencia (todo lo que el portal realmente servirá para esa cultura) en lugar de la visión por fuente anterior. |
ExecuteAsync | OrganizationRequest request | Task<OrganizationResponse> | Ejecuta una única solicitud de organización contra Dataverse. |
ExecuteMultipleAsync | IEnumerable<OrganizationRequest> requests bool returnResponses | Task<List<OrganizationResponse>> | Ejecuta múltiples solicitudes de organización en una única transacción de base de datos. Si alguna petición falla, todos los cambios en el lote se revierten. |
GetCacheNamesAsync | Task<IReadOnlyList<string>> | Devuelve los nombres de cada lado Services.IClearableCachedel servidor , adecuado para una interfaz de administrador que quiere renderizar botones de limpieza por caché. Misma puerta de autenticación como IPowerPortalsProService.ClearAllCachesAsync se aplica en el punto final HTTP. | |
GetFileInfoAsync | string tableName Guid recordId string columnName bool includeData | Task<FileInfo> | Recupera información de archivos y, opcionalmente, el contenido binario de una columna de archivo o imagen en Dataverse. |
GetFileInfosAsync | string tableName IEnumerable<Guid> recordIds string columnName bool includeData | Task<IEnumerable<FileInfo>> | Recuperación por lotes de información de archivo para muchos registros de la misma tabla o columna en un solo viaje de ida y vuelta. Internamente ventila el disco por disco en paralelo y devuelve la lista combinada. La misma cadena de manejadores de permisos por registro se ejecuta que para la llamada de disco único; Las búsquedas fallidas se eliminan de la respuesta en lugar de suspendiendo todo el lote. Usado por el sistema 'Descargar todo' / 'Descargar seleccionado' de FileGrid para que el cliente pueda construir un zip sin disparar N solicitudes HTTP. |
GetLocalizationOverviewAsync | Task<LocalizationOverview> | Devuelve una instantánea dirigida al administrador de la canalización de localización de cadenas: la Configuración estática que impulsaba el calentamiento más los registros de carga por fuente producido por el calentamiento más reciente. Respalda a | |
GetMergedLocalizationEntriesAsync | string culture | Task<IReadOnlyList<MergedLocalizationEntry>> | Devuelve las claves de localización fusionadas de una cultura como una lista estructurada — cada Clave la caché que servirá, su valor ganador tras la fusión y qué fuente se suministró ese valor. Mismos datos que DownloadMergedLocalizationsAsync(System.String) pero por clave anotado con su origen (archivo / recurso web / metadatos Dataverse) para que un administrador pueda Inspecciona la procedencia en una cuadrícula. Las entradas están ordenadas por clave. |
GetOrganizationSettingsAsync | Task<OrganizationSettings> | Recupera la configuración organizacional obtenida del Dataverse Récord
| |
GetTablePermissionsForCurrentUserAsync | string tableLogicalName | Task<TableSecurityPermission> | Devuelve la máscara combinada a nivel Models.TableSecurityPermission de tabla del usuario actual para tableLogicalName — la unión bit a bit de Leer / Crear / Escribir / Eliminar / Añadir / Añadir / Añadir A cualquier |
GetTranslationAvailabilityAsync | Task<TranslationAvailability> | Devuelve si la función de localización-traducción es utilizable en el entorno actual: si el servicio de traducción de Azure está configurado, si la traducción gestionada se instala la solución y los idiomas objetivo candidatos (las culturas soportadas por el portal anotado con Azure-translatability). Respalda la decisión de | |
RetrieveRecordAsync | string tableLogicalName Guid id IEnumerable<string> columns | Task<TableRecord> | Recupera un único registro de Dataverse por nombre de tabla e ID de registro. |
RetrieveRecordsAsync | string fetchXml | Task<RetrieveRecordsResponse> | Recupera múltiples registros de Dataverse usando una consulta FetchXML. Soporta filtrado, ordenación, paginación, entidades enlazadas y consultas agregadas. |
RetrieveTableMetadataAsync | string tableLogicalName | Task<TableMetadata> | Recupera metadatos de tablas de Dataverse, incluyendo definiciones de columnas, relaciones y configuración de visualización. |
RetrieveViewMetadataAsync | Guid viewId | Task<ViewMetadata> | Recupera metadatos de la vista de Dataverse, incluyendo la consulta FetchXML de la vista, columnas y configuración de visualización. |
RetrieveViewsForTableAsync | string tableLogicalName | Task<IEnumerable<ViewMetadata>> | Recupera todos los registros de metadatos de la vista para una tabla. Usado por cuadrículas que necesitan enumerar las vistas disponibles (selector de vistas, resolución de vista predeterminada, etc.). La implementación del lado del servidor lee desde |
TranslateLocalizationFileAsync | TranslationRequest request | Task<TranslationResult> | Traduce automáticamente un archivo de localización subido a uno o más idiomas destino a través de Azure Traductor, reutilizando la memoria de traducción de Dataverse y reportando cuántas cadenas había Recién traducido frente a reutilizado. Devuelve un archivo por idioma destino más un zip de todos. |
UpdateRecordAsync | TableRecord record | Task<UpdateResponse> | Actualiza un registro existente en Dataverse. Solo se envían las propiedades establecidas en el registro a Dataverse. |
AssociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
ClearAllCachesAsyncServices.IClearableCache (tabla / vista / privilegio metadatos, privilegios por usuario, configuración del archivo de entorno) y reconstruye el Localized-strings en caché atómicamente — los lectores continúan viendo lo que antes Cargados datos hasta que el nuevo estado esté completamente poblado. Recarga de cachés perezosas en el Próxima petición que los necesite. ClearCacheAsyncnull cuando no están registradas coincidencias name de caché (insensibles a mayúsculas y minúsculas); los fallos son envuelta en el resultado en vez de tirada. La misma puerta de autenticación que IPowerPortalsProService.ClearAllCachesAsync.CreateFileArchiveAsyncCreateFileArchiveRequest.Format enum) que contiene los registros de todos los registros carga útil para el par de tablas/columnas nombradas. Utiliza lo mismo por disco Cadena de permisos como String,System.Boolean) — no autorizada / perdida Las filas se eliminan silenciosamente del archivo. Los nombres de archivo duplicados son desambiguado mediante CreateRecordAsyncDeleteRecordAsyncGuid id
DisassociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
DownloadLocalizationSourceAsyncstring culture
DownloadMergedLocalizationsAsyncExecuteAsyncExecuteMultipleAsyncbool returnResponses
GetCacheNamesAsyncServices.IClearableCachedel servidor , adecuado para una interfaz de administrador que quiere renderizar botones de limpieza por caché. Misma puerta de autenticación como IPowerPortalsProService.ClearAllCachesAsync se aplica en el punto final HTTP.GetFileInfoAsyncGuid recordId
string columnName
bool includeData
GetFileInfosAsyncIEnumerable<Guid> recordIds
string columnName
bool includeData
GetLocalizationOverviewAsyncGetMergedLocalizationEntriesAsyncDownloadMergedLocalizationsAsync(System.String) pero por clave anotado con su origen (archivo / recurso web / metadatos Dataverse) para que un administrador pueda Inspecciona la procedencia en una cuadrícula. Las entradas están ordenadas por clave.GetOrganizationSettingsAsync-
DefaultCurrency — la moneda base de la organización, utilizada por create-mode editores (MoneyEdit ) para mostrar el símbolo correcto en discos completamente nuevos. -
BlockedFileExtensions +MaxUploadFileSizeInBytes — carga de archivos las restricciones que los clientes reflejan para rechazar archivos inválidos antes del viaje de ida y vuelta.
GetTablePermissionsForCurrentUserAsyncModels.TableSecurityPermission de tabla del usuario actual para tableLogicalName — la unión bit a bit de Leer / Crear / Escribir / Eliminar / Añadir / Añadir / Añadir A cualquier GetTranslationAvailabilityAsyncRetrieveRecordAsyncGuid id
IEnumerable<string> columns
RetrieveRecordsAsyncRetrieveTableMetadataAsyncRetrieveViewMetadataAsyncRetrieveViewsForTableAsyncTranslateLocalizationFileAsyncUpdateRecordAsync