IPowerPortalsProService
L’interface IPowerPortalsProService fournit des méthodes pour effectuer des opérations CRUD, exécuter des requêtes, gérer les relations et récupérer des métadonnées depuis Dataverse. C’est le principal service d’accès aux données côté serveur dans PowerPortalsPro.
Note
Dans la plupart des cas, vous n’avez pas besoin d’appeler
IPowerPortalsProServicedirectement. LesRecordContextcomposants ,MainContext, et grid gèrent automatiquement les opérations de données. Utilisez ce service pour une logique personnalisée qui sort du flux de travail standard des composants.
Implémentations serveur et client
IPowerPortalsProService livré avec deux implémentations enregistrées automatiquement par le framework — votre code composant est identique contre les deux, et l’exécution injecte celle correspondant au contexte de rendu actif :
- Implémentation serveur (
PowerPortalsPro.Web.Server, enregistrée parAddPowerPortalsProWebServer) — s’exécute en cours, communique directement avec Dataverse viaIOrganizationService, et applique vosITablePermissionHandler/ITableRecordPermissionHandlerinterceptors avant toute lecture ou écriture. Sélectionné lors du rendu de la page sousInteractiveServerRenderModeou sous SSR statique. - Implémentation client (
PowerPortalsPro.Web.Client, enregistrée parAddPowerPortalsProWebClient) — s’exécute dans le navigateur via WebAssembly, ne possède aucun SDK Dataverse, et sérialise à la place chaque appel en JSON vers le point de terminaison HTTP côté serveur correspondant (/api/table/{name},/api/retrieveMultiple, etc.). Les gestionnaires de permissions s’appliquent toujours car la requête se retrouve sur le point d’arrivée du serveur. Consultez la page API client pour le format de câble et les routes appelées par l’implémentation client.
Parce que le contrat est identique, le même composant fonctionne sous n’importe quel mode d’interactivité (Serveur, WebAssembly ou Auto). Le code qui appelle _powerPortalsProService.RetrieveRecordAsync(...) une page rendue par serveur effectue un appel Dataverse en cours ; la même ligne dans une page rendue par WASM émet une requête HTTP — aucun branchement nécessaire.
Injection du Service
Injecter IPowerPortalsProService dans tout composant ou service Blazor via l’injection de constructeur ou de propriété.
// usePowerPortalsPro() renvoie le client typé que le framework distribue
// chaque appel CRUD à travers. L’objet 'ppp' expose récupérer / créer /
// mettre à jour / supprimer / associer / exécuter Plusieurs méthodes / métadonnées / fichiers
// par rapport à l’environnement Dataverse configuré.
import { usePowerPortalsPro } from '@powerportalspro/react';
function MyComponent() {
const { ppp } = usePowerPortalsPro();
// ...
}[Inject]
private IPowerPortalsProService _powerPortalsProService { get; set; } = null!;Récupérer un dossier
Utilisez RetrieveRecordAsync pour récupérer un seul enregistrement par nom de table et ID. Spécifiez optionnellement quelles colonnes retourner ; si elles sont omises, toutes les colonnes sont retournées.
// Récupérer toutes les colonnes
const account = await ppp.retrieveRecordAsync('account', accountId);
// Récupérer uniquement des colonnes spécifiques
const account = await ppp.retrieveRecordAsync('account', accountId, [
'name', 'telephone1', 'address1_city',
]);// Récupérer toutes les colonnes
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId);
// Récupérer uniquement des colonnes spécifiques
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId,
new[] { "name", "telephone1", "address1_city" });Requête de plusieurs enregistrements
Utilisez RetrieveRecordsAsync avec une chaîne de requête FetchXML pour récupérer plusieurs enregistrements avec filtrage, tri et support des entités liées.
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) {
// Traiter chaque enregistrement
}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)
{
// Traiter chaque enregistrement
}Création d’un dossier
Utilisez-le CreateRecordAsync pour créer un nouvel enregistrement dans Dataverse. La réponse contient l’ID du nouvel enregistrement créé.
// TableRecord utilise une carte de « propriétés » d’objets ColumnValue tapés à clé
// par nom de colonne. L’aide createTableRecord construit la forme du fil et
// estampille un « _idForCreate » temporaire afin que les références croisées puissent être résolues
// à l’intérieur d’un seul lot Create + Associate avant que le serveur n’attribue le
// 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;Mise à jour d’un enregistrement
À utiliser UpdateRecordAsync pour mettre à jour un enregistrement existant. Seules les propriétés définies sur le TableRecord sont envoyées à 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);Suppression d’un enregistrement
À utiliser DeleteRecordAsync pour supprimer un enregistrement par le nom de la table et l’ID.
await ppp.deleteRecordAsync('contact', contactId);await _powerPortalsProService.DeleteRecordAsync("contact", contactId);Records associés
Utilisez AssociateAsync et DisassociateAsync gérez les relations de plusieurs-à-plusieurs entre les enregistrements.
// Associé
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);
// Dissociation
await ppp.disassociateAsync(account, 'ppp_Account_ppp_Region_ppp_Region', regions);// Associé
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);
// Dissociation
await _powerPortalsProService.DisassociateAsync(account, "ppp_Account_ppp_Region_ppp_Region", regions);Exécution des requêtes
Utilisez ExecuteAsync pour une seule requête ou ExecuteMultipleAsync pour exécuter plusieurs requêtes dans une même transaction de base de données. Si une requête dans un lot transactionnel échoue, toutes les modifications sont annulées.
// Exécutez plusieurs requêtes dans une seule transaction. Chaque requête est un objet à union étiquetée discriminé par « type ».
const requests = [
{ type: 'create', record: contact },
{ type: 'update', record: account },
];
const responses = await ppp.executeMultipleAsync(requests, { returnResponses: true });// Exécuter plusieurs requêtes dans une seule transaction
var requests = new List<OrganizationRequest>
{
new CreateRequest(contact),
new UpdateRequest(account),
};
var responses = await _powerPortalsProService.ExecuteMultipleAsync(requests, returnResponses: true);Récupération des métadonnées
Utiliser RetrieveTableMetadataAsync et RetrieveViewMetadataAsync récupérer les métadonnées de table et de vue. Pour l’accès en cache, préférez ITableMetadataCache et IViewMetadataCache à la place.
const tableMetadata = await ppp.retrieveTableMetadataAsync('contact');
const viewMetadata = await ppp.retrieveViewMetadataAsync(viewId);var tableMetadata = await _powerPortalsProService.RetrieveTableMetadataAsync("contact");
var viewMetadata = await _powerPortalsProService.RetrieveViewMetadataAsync(viewId);Travailler avec les fichiers
À utiliser GetFileInfoAsync pour récupérer des métadonnées de fichiers ou d’images et, éventuellement, le contenu binaire d’un fichier ou d’une colonne d’image.
// Obtenir uniquement les métadonnées des fichiers
const fileInfo = await ppp.getFileInfoAsync('contact', contactId, 'ppp_contract');
// Obtenir les métadonnées des fichiers et le contenu binaire
const fileWithData = await ppp.getFileInfoAsync(
'contact', contactId, 'ppp_contract', { includeData: true },
);
const bytes = fileWithData.fileData;// Obtenir uniquement les métadonnées des fichiers
var fileInfo = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract");
// Obtenir les métadonnées des fichiers et le contenu binaire
var fileWithData = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract", includeData: true);
var bytes = fileWithData.FileData;IPowerPortalsProService Interface
Méthodes
Nom | Paramètres | Type | Description |
|---|---|---|---|
AssociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<AssociateResponse> | Associe un dossier à un ou plusieurs documents apparentés via une relation de plusieurs à plusieurs. |
ClearAllCachesAsync | Task<IReadOnlyList<CacheClearResult>> | Efface chaque côté Services.IClearableCache serveur (table / vue / privilège métadonnées, privilèges par utilisateur, paramètres de fichiers d’environnement) et reconstruit le Localed-Strings en cache atomiquement — les lecteurs continuent de voir les précédents chargé jusqu’à ce que le nouvel état soit entièrement rempli. Les caches paresseuses se rechargent sur le Prochaine demande qui en a besoin. | |
ClearCacheAsync | string name | Task<CacheClearResult> | Ça vide un cache nommé. Déclarations null en cas d’absence d’enregistrement les correspondances name de cache (insensibles aux majuscules) ; les échecs sont enveloppée dans le résultat plutôt que jetée. Même porte d’authentification que IPowerPortalsProService.ClearAllCachesAsync. |
CreateFileArchiveAsync | CreateFileArchiveRequest request | Task<FileArchiveResult> | Construit une archive (actuellement en zip ; les formats futurs sont en cours derrière le CreateFileArchiveRequest.Format enum) contenant chaque enregistrement charge utile pour la paire table/colonne nommée. Utilise la même chose par disque Chaîne de permissions en tant String,System.Boolean) que — non autorisée / manquante les lignes sont silencieusement supprimées de l’archive. Les noms de fichiers en double sont désambiguïsé par le |
CreateRecordAsync | TableRecord record | Task<CreateResponse> | Crée un nouvel enregistrement dans Dataverse. |
DeleteRecordAsync | string tableLogicalName Guid id | Task<DeleteResponse> | Supprime un enregistrement de Dataverse par le nom de la table et l’identifiant de l’enregistrement. |
DisassociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<DisassociateResponse> | Supprime une association entre un enregistrement et un ou plusieurs documents liés via une relation plusieurs-à-plusieurs. |
DownloadLocalizationSourceAsync | string sourceId string culture | Task<LocalizationDownload> | Téléchargements des clés qu’une source a contribuées à une culture durant le plus récent échauffement, comme JSON dans le même consommateur en forme d’objet imbriqué |
DownloadMergedLocalizationsAsync | string culture | Task<LocalizationDownload> | Télécharge les clés de localisation fusionnées pour une culture — la post-fusion valeur gagnante pour chaque clé stockée par le cache, quelle qu’elle soit Source l’a fourni à l’origine. Utilisez cela pour un instantané complet référence (tout ce que le portail servira réellement à cette culture) plutôt que la vision par source ci-dessus. |
ExecuteAsync | OrganizationRequest request | Task<OrganizationResponse> | Exécute une seule requête d’organisation contre Dataverse. |
ExecuteMultipleAsync | IEnumerable<OrganizationRequest> requests bool returnResponses | Task<List<OrganizationResponse>> | Exécute plusieurs requêtes d’organisation dans une seule transaction de base de données. Si une requête échoue, toutes les modifications du lot sont annulées. |
GetCacheNamesAsync | Task<IReadOnlyList<string>> | Retourne les noms de chaque côté Services.IClearableCacheserveur , approprié pour une interface d’administration qui souhaite afficher les boutons de nettoyage par cache. Même porte d’authentification comme IPowerPortalsProService.ClearAllCachesAsync s’applique au point de terminaison HTTP. | |
GetFileInfoAsync | string tableName Guid recordId string columnName bool includeData | Task<FileInfo> | Récupère les informations du fichier et, éventuellement, le contenu binaire à partir d’une colonne de fichier ou d’image dans Dataverse. |
GetFileInfosAsync | string tableName IEnumerable<Guid> recordIds string columnName bool includeData | Task<IEnumerable<FileInfo>> | Récupération par lots d’informations de fichiers pour de nombreux enregistrements de la même table / colonne En un seul aller-retour. En interne, les récupérations par disque sont en parallèle et Retourne la liste combinée. La même chaîne de gestionnaire d’autorisations par enregistrement s’exécute comme pour l’appel à un seul disque ; Les recherches ratées sont supprimées de la réponse plutôt que Échouer à tout le lot. Utilisé par « Download All » / « Download Select » de FileGrid afin que le client puisse créer un zip sans lancer N requêtes HTTP. |
GetLocalizationOverviewAsync | Task<LocalizationOverview> | Retourne un instantané destiné à l’administrateur du pipeline de localisation de chaînes : le Configuration statique qui alimentait le réchauffement ainsi que les enregistrements de charge par source produit par le dernier échauffement. Soutient | |
GetMergedLocalizationEntriesAsync | string culture | Task<IReadOnlyList<MergedLocalizationEntry>> | Retourne les clés de localisation fusionnées d’une culture sous forme de liste structurée — chaque Clé que le cache servira, sa valeur gagnante après la fusion, et la source fournie Cette valeur. Mêmes données que DownloadMergedLocalizationsAsync(System.String) par clé annoté avec son origine (fichier / ressource web / métadonnées Dataverse) afin qu’un administrateur puisse Inspectez la provenance dans une grille. Les entrées sont triées par clé. |
GetOrganizationSettingsAsync | Task<OrganizationSettings> | Récupère les paramètres organisationnels provenant du Dataverse Bilan
| |
GetTablePermissionsForCurrentUserAsync | string tableLogicalName | Task<TableSecurityPermission> | Retourne le masque combiné au niveau Models.TableSecurityPermission de la table de l’utilisateur actuel pour tableLogicalName — l’union bit par bit de Lire / Créer / Écrire / Drapeaux Delete / Append / AppendTo tout |
GetTranslationAvailabilityAsync | Task<TranslationAvailability> | Indique si la fonction de localisation-traduction est utilisable dans l’environnement actuel : si le service de traduction Azure est configuré, si la traduction a été gérée La solution est installée, et les langues cibles candidates (les cultures prises en charge par le portail annoté avec la tradupabilité Azure). Soutient la décision de | |
RetrieveRecordAsync | string tableLogicalName Guid id IEnumerable<string> columns | Task<TableRecord> | Récupère un seul enregistrement depuis Dataverse par nom de table et identifiant d’enregistrement. |
RetrieveRecordsAsync | string fetchXml | Task<RetrieveRecordsResponse> | Récupère plusieurs enregistrements depuis Dataverse à l’aide d’une requête FetchXML. Prend en charge le filtrage, le tri, la pagination, les entités liées et les requêtes agrégées. |
RetrieveTableMetadataAsync | string tableLogicalName | Task<TableMetadata> | Récupère les métadonnées des tables depuis Dataverse, y compris les définitions de colonnes, les relations et la configuration d’affichage. |
RetrieveViewMetadataAsync | Guid viewId | Task<ViewMetadata> | Récupère les métadonnées de la vue depuis Dataverse, y compris la requête FetchXML de la vue, les colonnes et la configuration d’affichage. |
RetrieveViewsForTableAsync | string tableLogicalName | Task<IEnumerable<ViewMetadata>> | Récupère chaque enregistrement de métadonnées de vue pour une table. Utilisé par des grilles qui doivent énumérer les vues disponibles (view-picker, résolution de la vue par défaut, etc.). L’implémentation côté serveur lit depuis |
TranslateLocalizationFileAsync | TranslationRequest request | Task<TranslationResult> | Traduit automatiquement un fichier de localisation téléchargé en une ou plusieurs langues cibles via Azure Traducteur, réutilisation de la mémoire de traduction Dataverse et rapport du nombre de chaînes de caractères Traduit fraîchement versus réutilisé. Un fichier par langue cible plus un zip de tout. |
UpdateRecordAsync | TableRecord record | Task<UpdateResponse> | Met à jour un enregistrement existant dans Dataverse. Seules les propriétés définies sur l’enregistrement sont envoyées à Dataverse. |
AssociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
ClearAllCachesAsyncServices.IClearableCache serveur (table / vue / privilège métadonnées, privilèges par utilisateur, paramètres de fichiers d’environnement) et reconstruit le Localed-Strings en cache atomiquement — les lecteurs continuent de voir les précédents chargé jusqu’à ce que le nouvel état soit entièrement rempli. Les caches paresseuses se rechargent sur le Prochaine demande qui en a besoin. ClearCacheAsyncnull en cas d’absence d’enregistrement les correspondances name de cache (insensibles aux majuscules) ; les échecs sont enveloppée dans le résultat plutôt que jetée. Même porte d’authentification que IPowerPortalsProService.ClearAllCachesAsync.CreateFileArchiveAsyncCreateFileArchiveRequest.Format enum) contenant chaque enregistrement charge utile pour la paire table/colonne nommée. Utilise la même chose par disque Chaîne de permissions en tant String,System.Boolean) que — non autorisée / manquante les lignes sont silencieusement supprimées de l’archive. Les noms de fichiers en double sont désambiguïsé par le CreateRecordAsyncDeleteRecordAsyncGuid id
DisassociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
DownloadLocalizationSourceAsyncstring culture
DownloadMergedLocalizationsAsyncExecuteAsyncExecuteMultipleAsyncbool returnResponses
GetCacheNamesAsyncServices.IClearableCacheserveur , approprié pour une interface d’administration qui souhaite afficher les boutons de nettoyage par cache. Même porte d’authentification comme IPowerPortalsProService.ClearAllCachesAsync s’applique au point de terminaison HTTP.GetFileInfoAsyncGuid recordId
string columnName
bool includeData
GetFileInfosAsyncIEnumerable<Guid> recordIds
string columnName
bool includeData
GetLocalizationOverviewAsyncGetMergedLocalizationEntriesAsyncDownloadMergedLocalizationsAsync(System.String) par clé annoté avec son origine (fichier / ressource web / métadonnées Dataverse) afin qu’un administrateur puisse Inspectez la provenance dans une grille. Les entrées sont triées par clé.GetOrganizationSettingsAsync-
DefaultCurrency — la monnaie de base de l’organisation, utilisée par le mode création des éditeurs (MoneyEdit ) pour afficher le bon symbole sur les disques tout neufs. -
BlockedFileExtensions +MaxUploadFileSizeInBytes — envoi de fichier Les contraintes que les clients miroirent pour rejeter les fichiers invalides avant le aller-retour.
GetTablePermissionsForCurrentUserAsyncModels.TableSecurityPermission de la table de l’utilisateur actuel pour tableLogicalName — l’union bit par bit de Lire / Créer / Écrire / Drapeaux Delete / Append / AppendTo tout GetTranslationAvailabilityAsyncRetrieveRecordAsyncGuid id
IEnumerable<string> columns
RetrieveRecordsAsyncRetrieveTableMetadataAsyncRetrieveViewMetadataAsyncRetrieveViewsForTableAsyncTranslateLocalizationFileAsyncUpdateRecordAsync