IPowerPortalsProService
Die Benutzeroberfläche IPowerPortalsProService bietet Methoden zur Durchführung von CRUD-Operationen, zur Ausführung von Abfragen, zur Verwaltung von Beziehungen und zum Abruf von Metadaten aus Dataverse. Es ist der primäre Service für serverseitigen Datenzugriff in PowerPortalsPro.
Anmerkung
In den meisten Fällen müssen Sie nicht direkt anrufen
IPowerPortalsProService. Die ,MainContext, und GitterkomponentenRecordContextübernehmen die Datenoperationen automatisch. Nutzen Sie diesen Service für benutzerdefinierte Logik, die außerhalb des Standard-Komponenten-Workflows liegt.
Server- und Client-Implementierungen
IPowerPortalsProService Wird mit zwei Implementierungen ausgeliefert, die automatisch vom Framework registriert werden – Ihr Komponentencode ist gegenüber beiden identisch, und die Laufzeit injiziert jeweils diejenige, die zum aktiven Renderkontext passt:
- Serverimplementierung (
PowerPortalsPro.Web.Server, registriert vonAddPowerPortalsProWebServer) — läuft im Prozess, kommuniziert direkt mit Dataverse überIOrganizationService, und setzt IhreITablePermissionHandler/ITableRecordPermissionHandlerInterceptors vor jedem Lesen oder Schreiben an. Ausgewählt, wenn die Seite unterInteractiveServerRenderModeoder statischem SSR gerendert wird. - Client-Implementierung (
PowerPortalsPro.Web.Client, registriert vonAddPowerPortalsProWebClient) — läuft im Browser unter WebAssembly, hat überhaupt kein Dataverse SDK und serialisiert stattdessen jeden Aufruf mit JSON an den entsprechenden serverseitigen HTTP-Endpunkt (/api/table/{name},/api/retrieveMultiple, usw.). Die Berechtigungshandler gelten weiterhin, weil die Anfrage wieder am Endpunkt des Servers landet. Siehe die Client-API-Seite für das Wire-Format und die von der Client-Implementierung aufgerufenen Routen.
Da der Vertrag identisch ist, arbeitet dieselbe Komponente in jedem Interaktivitätsmodus (Server, WebAssembly oder Auto). Code, der eine servergerenderte Seite aufruft _powerPortalsProService.RetrieveRecordAsync(...) , führt einen inprozessorientierten Dataverse-Aufruf aus; dieselbe Zeile auf einer WASM-gerenderten Seite stellt eine HTTP-Anfrage – kein Verzweiging erforderlich.
Injektion des Dienstes
Injizieren Sie IPowerPortalsProService in jede Blazor-Komponente oder -Dienstleistung über Constructor- oder Property-Injektion.
// usePowerPortalsPro() gibt den typisierten Client zurück, den das Framework dispatcht
// Jeder CRUD-Anruf durch. Das Objekt 'ppp' zeigt abrufen / erstellen /
// aktualisieren / löschen / zuordnen / ausführenMehrere / Metadaten / Dateimethoden
// gegen die konfigurierte Dataverse-Umgebung.
import { usePowerPortalsPro } from '@powerportalspro/react';
function MyComponent() {
const { ppp } = usePowerPortalsPro();
// ...
}[Inject]
private IPowerPortalsProService _powerPortalsProService { get; set; } = null!;Abruf eines Datensatzes
Verwenden RetrieveRecordAsync Sie, um einen einzelnen Datensatz anhand von Tabellennamen und ID abzurufen. Geben Sie optional an, welche Spalten zurückgegeben werden sollen; wenn ausgelassen, werden alle Spalten zurückgegeben.
// Alle Spalten abrufen
const account = await ppp.retrieveRecordAsync('account', accountId);
// Nur spezifische Spalten abrufen
const account = await ppp.retrieveRecordAsync('account', accountId, [
'name', 'telephone1', 'address1_city',
]);// Alle Spalten abrufen
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId);
// Nur spezifische Spalten abrufen
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId,
new[] { "name", "telephone1", "address1_city" });Abfrage mehrerer Datensätze
Verwenden RetrieveRecordsAsync Sie mit einer FetchXML-Abfragezeichenkette, um mehrere Datensätze mit Unterstützung für Filterung, Sortierung und verknüpfte Entitäten abzurufen.
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) {
// Bearbeiten Sie jeden Datensatz
}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)
{
// Bearbeiten Sie jeden Datensatz
}Erstellung eines Datensatzes
Verwenden CreateRecordAsync Sie, um einen neuen Datensatz in Dataverse zu erstellen. Die Antwort enthält die ID des neu erstellten Datensatzes.
// TableRecord verwendet eine 'Properties'-Abbildung der typisierten ColumnValue-Objekte, die mit Keyd versehen sind
// nach Spaltennamen. Der createTableRecord-Helfer baut die Drahtform und
// stempelt einen temporären '_idForCreate', damit Querverweise aufgelöst werden können
// innerhalb eines einzelnen Create + Associate-Batches, bevor der Server das
// 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;Aktualisierung eines Datensatzes
Verwenden Sie UpdateRecordAsync es, um einen bestehenden Datensatz zu aktualisieren. Nur die auf der Domain gesetzten TableRecord Eigenschaften werden an Dataverse gesendet.
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);Löschen eines Datensatzes
Nutze es, DeleteRecordAsync um einen Datensatz nach Tabellennamen und ID zu löschen.
await ppp.deleteRecordAsync('contact', contactId);await _powerPortalsProService.DeleteRecordAsync("contact", contactId);Assoziierende Aufzeichnungen
Verwenden AssociateAsync Sie und DisassociateAsync verwalten Sie viele-zu-viele Beziehungen zwischen Datensätzen.
// Associate
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);
// Dissoziieren
await ppp.disassociateAsync(account, 'ppp_Account_ppp_Region_ppp_Region', regions);// Associate
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);
// Dissoziieren
await _powerPortalsProService.DisassociateAsync(account, "ppp_Account_ppp_Region_ppp_Region", regions);Ausführung von Anfragen
Verwenden ExecuteAsync Sie für eine einzelne Anfrage oder ExecuteMultipleAsync um mehrere Anfragen in einer einzigen Datenbanktransaktion auszuführen. Wenn eine Anfrage in einem transaktionalen Batch fehlschlägt, werden alle Änderungen zurückgesetzt.
// Führe mehrere Anfragen in einer einzigen Transaktion aus. Jede Anfrage ist ein getaggtes Union-Objekt, das nach 'type' diskriminiert wird.
const requests = [
{ type: 'create', record: contact },
{ type: 'update', record: account },
];
const responses = await ppp.executeMultipleAsync(requests, { returnResponses: true });// Führe mehrere Anfragen in einer einzigen Transaktion aus
var requests = new List<OrganizationRequest>
{
new CreateRequest(contact),
new UpdateRequest(account),
};
var responses = await _powerPortalsProService.ExecuteMultipleAsync(requests, returnResponses: true);Abruf von Metadaten
Verwenden RetrieveTableMetadataAsync Sie und RetrieveViewMetadataAsync um Tabellen- und Ansichtsmetadaten abzurufen. Für zwischengespeicherte Zugriffe bevorzugen ITableMetadataCache Sie stattdessen und IViewMetadataCache .
const tableMetadata = await ppp.retrieveTableMetadataAsync('contact');
const viewMetadata = await ppp.retrieveViewMetadataAsync(viewId);var tableMetadata = await _powerPortalsProService.RetrieveTableMetadataAsync("contact");
var viewMetadata = await _powerPortalsProService.RetrieveViewMetadataAsync(viewId);Arbeit mit Dateien
Verwenden GetFileInfoAsync Sie es, um Datei- oder Bildmetadaten und optional den Binärinhalt aus einer Datei- oder Bildspalte abzurufen.
// Nur Dateimetadaten abrufen
const fileInfo = await ppp.getFileInfoAsync('contact', contactId, 'ppp_contract');
// Erhalten Sie Dateimetadaten und binäre Inhalte
const fileWithData = await ppp.getFileInfoAsync(
'contact', contactId, 'ppp_contract', { includeData: true },
);
const bytes = fileWithData.fileData;// Nur Dateimetadaten abrufen
var fileInfo = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract");
// Erhalten Sie Dateimetadaten und binäre Inhalte
var fileWithData = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract", includeData: true);
var bytes = fileWithData.FileData;IPowerPortalsProService Interface
Methoden
Name | Parameter | Typ | Beschreibung |
|---|---|---|---|
AssociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<AssociateResponse> | Verknüpft einen Eintrag mit einem oder mehreren verwandten Unterlagen durch eine viele-zu-viele-Beziehung. |
ClearAllCachesAsync | Task<IReadOnlyList<CacheClearResult>> | Löscht jede serverseitige Services.IClearableCache Karte (Tabelle / Ansicht / Privileg) Metadaten, Benutzerrechte, Umgebungsdatei-Einstellungen) und stellt die Lokalisierte Zeichenketten cachen atomar – die Leser sehen weiterhin das zuvor Daten geladen, bis der neue Zustand vollständig besetzt ist. Lazy Caches füllen sich auf der Nächste Anfrage, die sie braucht. | |
ClearCacheAsync | string name | Task<CacheClearResult> | Löscht einen benannten Cache. Rückkehrt null , wenn nicht registriert ist Cache-Übereinstimmungen name (Groß- und Kleinschreibungsunempfindlich); Fehler sind eingewickelt im Ergebnis statt weggeworfen. Dasselbe Authentor wie IPowerPortalsProService.ClearAllCachesAsync. |
CreateFileArchiveAsync | CreateFileArchiveRequest request | Task<FileArchiveResult> | Erstellt ein Archiv (derzeit zip; zukünftige Formate leben hinter dem CreateFileArchiveRequest.Format enum) mit allen Aufzeichnungen Dateinutzlast für das benannte Tabellen-/Spaltenpaar. Verwendet dieselbe pro Platte Permission-Chain als String,System.Boolean) — unbefugt / fehlend Reihen werden lautlos aus dem Archiv gestrichen. Doppelte Dateinamen sind eindeutig durch das Suffix |
CreateRecordAsync | TableRecord record | Task<CreateResponse> | Erstellt einen neuen Datensatz in Dataverse. |
DeleteRecordAsync | string tableLogicalName Guid id | Task<DeleteResponse> | Löscht einen Datensatz aus Dataverse nach Tabellennamen und Datensatz-ID. |
DisassociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<DisassociateResponse> | Entfernt eine Verbindung zwischen einem Datensatz und einem oder mehreren verwandten Datensätzen über eine viele-zu-viele-Beziehung. |
DownloadLocalizationSourceAsync | string sourceId string culture | Task<LocalizationDownload> | Lädt die Schlüssel herunter, eine Quelle hat zu einer Kultur beigetragen, während der meisten kürzlich aufgewärmt, als JSON im gleichen Konsumenten mit verschachtelten Objekten |
DownloadMergedLocalizationsAsync | string culture | Task<LocalizationDownload> | Lädt die zusammengeführten Lokalisierungsschlüssel für eine Kultur herunter – die Post-Merge Gewinnwert für jeden Schlüssel, den der Cache gespeichert hat, unabhängig davon, welchen Die Quelle lieferte es ursprünglich. Nutzen Sie dies für eine vollständige Momentaufnahme Referenz (alles, was das Portal tatsächlich für diese Kultur dienen wird) und nicht die oben beschriebene Ansicht pro Quelle. |
ExecuteAsync | OrganizationRequest request | Task<OrganizationResponse> | Führt eine einzelne Organisationsanfrage gegen Dataverse aus. |
ExecuteMultipleAsync | IEnumerable<OrganizationRequest> requests bool returnResponses | Task<List<OrganizationResponse>> | Führt mehrere Organisationsanfragen in einer einzigen Datenbanktransaktion aus. Wenn eine Anfrage fehlschlägt, werden alle Änderungen im Batch zurückgesetzt. |
GetCacheNamesAsync | Task<IReadOnlyList<string>> | Gibt die Namen aller serverseitigen Services.IClearableCache, passend zurück. für eine Admin-Benutzeroberfläche, die pro Cache Lösch-Buttons rendern will. Gleiches Authentifizierungsgate wie IPowerPortalsProService.ClearAllCachesAsync auf dem HTTP-Endpunkt gilt. | |
GetFileInfoAsync | string tableName Guid recordId string columnName bool includeData | Task<FileInfo> | Ruft Dateiinformationen und optional den Binärinhalt aus einer Datei- oder Bildspalte in Dataverse ab. |
GetFileInfosAsync | string tableName IEnumerable<Guid> recordIds string columnName bool includeData | Task<IEnumerable<FileInfo>> | Batch-Abruf von Dateiinformationen für viele Datensätze derselben Tabelle / Spalte in einer einzigen Hin- und Rückfahrt. Intern fächert man die pro Platte parallel ab und gibt die kombinierte Liste zurück. Die gleiche pro-record-Permission-Handler-Kette läuft wie für der Ein-Record-Anruf; Fehlgeschlagene Nachschlage werden aus der Antwort gestrichen, anstatt Ich bin bei der ganzen Charge durchgefallen. Verwendet von FileGrids 'Download All' / 'Download Selected', damit der Client eine zip, ohne N HTTP-Anfragen abzufeuern. |
GetLocalizationOverviewAsync | Task<LocalizationOverview> | Gibt einen administrativ orientierten Schnappschuss der String-Lokalisierungspipeline zurück: die Statische Konfiguration, die das Aufwärmen sowie die Ladeaufzeichnungen pro Quelle steuerte Produziert durch das letzte Aufwärmen. Unterstützt den | |
GetOrganizationSettingsAsync | Task<OrganizationSettings> | Ruft die organisationsweiten Einstellungen ab, die aus dem Dataverse stammen
| |
GetTablePermissionsForCurrentUserAsync | string tableLogicalName | Task<TableSecurityPermission> | Gibt die kombinierte Tabellen-Maske Models.TableSecurityPermission des aktuellen Benutzers zurück für tableLogicalName — die bitweise Vereinigung von Lesen / Erstellen / Schreiben / Löschen / Anhängen / Anhängen To markiert jede registrierte |
GetTranslationAvailabilityAsync | Task<TranslationAvailability> | Gibt zurück, ob die Lokalisierungs-Übersetzungsfunktion in der aktuellen Umgebung nutzbar ist: ob der Azure-Übersetzungsdienst konfiguriert ist, ob die Übersetzung verwaltet wurde Die Lösung ist installiert, und die potenziellen Zielsprachen (die vom Portal unterstützten Kulturen annotiert mit Azure-translateability). Unterstützt die Entscheidung der | |
RetrieveRecordAsync | string tableLogicalName Guid id IEnumerable<string> columns | Task<TableRecord> | Ruft einen einzelnen Datensatz aus Dataverse anhand von Tabellennamen und Datensatz-ID ab. |
RetrieveRecordsAsync | string fetchXml | Task<RetrieveRecordsResponse> | Ruft mehrere Datensätze aus Dataverse mithilfe einer FetchXML-Abfrage ab. Unterstützt Filterung, Sortierung, Auslagerung, verknüpfte Entitäten und aggregierte Abfragen. |
RetrieveTableMetadataAsync | string tableLogicalName | Task<TableMetadata> | Enthält Tabellenmetadaten aus Dataverse, einschließlich Spaltendefinitionen, Beziehungen und Anzeigekonfiguration. |
RetrieveViewMetadataAsync | Guid viewId | Task<ViewMetadata> | Ruft Ansichtsmetadaten aus Dataverse ab, einschließlich der FetchXML-Abfrage, Spalten und Anzeigekonfiguration der Ansicht. |
RetrieveViewsForTableAsync | string tableLogicalName | Task<IEnumerable<ViewMetadata>> | Ruft jeden View-Metadaten-Datensatz für eine Tabelle ab. Verwendet von Grids, die es brauchen Listen Sie die verfügbaren Ansichten auf (View-Picker, Standard-Ansichtsauflösung usw.). Die serverseitige Implementierung liest aus dem sich befindlichen |
TranslateLocalizationFileAsync | TranslationRequest request | Task<TranslationResult> | Maschinell übersetzt eine hochgeladene Lokalisierungsdatei über Azure in eine oder mehrere Zielsprachen Übersetzer, Wiederverwendung des Dataverse-Übersetzungsspeichers und Meldung der Anzahl der Strings Frisch übersetzt versus wiederverwendet. Gibt pro Zielsprache eine Datei plus eine ZIP von allen zurück. |
UpdateRecordAsync | TableRecord record | Task<UpdateResponse> | Aktualisiert einen bestehenden Datensatz in Dataverse. Nur die im Datensatz gesetzten Eigenschaften werden an Dataverse gesendet. |
AssociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
ClearAllCachesAsyncServices.IClearableCache Karte (Tabelle / Ansicht / Privileg) Metadaten, Benutzerrechte, Umgebungsdatei-Einstellungen) und stellt die Lokalisierte Zeichenketten cachen atomar – die Leser sehen weiterhin das zuvor Daten geladen, bis der neue Zustand vollständig besetzt ist. Lazy Caches füllen sich auf der Nächste Anfrage, die sie braucht. ClearCacheAsyncnull , wenn nicht registriert ist Cache-Übereinstimmungen name (Groß- und Kleinschreibungsunempfindlich); Fehler sind eingewickelt im Ergebnis statt weggeworfen. Dasselbe Authentor wie IPowerPortalsProService.ClearAllCachesAsync.CreateFileArchiveAsyncCreateFileArchiveRequest.Format enum) mit allen Aufzeichnungen Dateinutzlast für das benannte Tabellen-/Spaltenpaar. Verwendet dieselbe pro Platte Permission-Chain als String,System.Boolean) — unbefugt / fehlend Reihen werden lautlos aus dem Archiv gestrichen. Doppelte Dateinamen sind eindeutig durch das Suffix CreateRecordAsyncDeleteRecordAsyncGuid id
DisassociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
DownloadLocalizationSourceAsyncstring culture
DownloadMergedLocalizationsAsyncExecuteAsyncExecuteMultipleAsyncbool returnResponses
GetCacheNamesAsyncServices.IClearableCache, passend zurück. für eine Admin-Benutzeroberfläche, die pro Cache Lösch-Buttons rendern will. Gleiches Authentifizierungsgate wie IPowerPortalsProService.ClearAllCachesAsync auf dem HTTP-Endpunkt gilt.GetFileInfoAsyncGuid recordId
string columnName
bool includeData
GetFileInfosAsyncIEnumerable<Guid> recordIds
string columnName
bool includeData
GetLocalizationOverviewAsyncGetOrganizationSettingsAsync-
DefaultCurrency – die Basiswährung der Organisation, verwendet im Create-Mode Editoren (MoneyEdit ), um das richtige Symbol auf brandneuen Datensätzen darzustellen. -
BlockedFileExtensions +MaxUploadFileSizeInBytes — Datei-Upload Constraints, die Clients spiegeln, um ungültige Dateien vor dem Roundtrip abzulehnen.
GetTablePermissionsForCurrentUserAsyncModels.TableSecurityPermission des aktuellen Benutzers zurück für tableLogicalName — die bitweise Vereinigung von Lesen / Erstellen / Schreiben / Löschen / Anhängen / Anhängen To markiert jede registrierte GetTranslationAvailabilityAsyncRetrieveRecordAsyncGuid id
IEnumerable<string> columns
RetrieveRecordsAsyncRetrieveTableMetadataAsyncRetrieveViewMetadataAsyncRetrieveViewsForTableAsyncTranslateLocalizationFileAsyncUpdateRecordAsync