IPowerPortalsProService
IPowerPortalsProServiceインターフェースは、CRUD操作の実行、クエリの実行、リレーションシップの管理、Dataverseからのメタデータ取得の方法を提供します。PowerPortalsProにおけるサーバー側のデータアクセスの主要なサービスです。
注記
ほとんどの場合、直接電話
IPowerPortalsProService必要はありません。RecordContext、MainContext、グリッドの各コンポーネントはデータ操作を自動的に処理します。標準コンポーネントワークフローの外にあるカスタムロジックにはこのサービスをご利用ください。
サーバーおよびクライアント実装
IPowerPortalsProService フレームワークによって自動的に登録された2つの実装が付属しています — コンポーネントコードは両方で同一であり、ランタイムはアクティブなレンダリングコンテキストに一致するものを注入します:
- サーバー実装 (
PowerPortalsPro.Web.Server、AddPowerPortalsProWebServerが登録)— プロセス中で実行し、IOrganizationServiceを通じてDataverseと直接通信し、読み書き前にITablePermissionHandler/ITableRecordPermissionHandlerインターセプターを適用します。ページがInteractiveServerRenderModeまたは静的SSRでレンダリングされるときに選択されます。 - クライアント実装 (
PowerPortalsPro.Web.Client、AddPowerPortalsProWebClient登録)— ブラウザ上でWebAssemblyの下で動作し、Dataverse SDKは一切搭載せず、代わりに各呼び出しをJSONでシリアライズして対応するサーバーサイドのHTTPエンドポイント(/api/table/{name}、/api/retrieveMultipleなど)に変換します。パーミッションハンドラーは、リクエストがサーバーのエンドポイントに戻るため、依然として適用されます。ワイヤー形式とクライアント実装呼び出しのルートについては、 クライアントAPI ページをご覧ください。
契約が同一であるため、同じコンポーネントはサーバー、WebAssembly、Autoのいずれかのインタラクティブモードで動作します。サーバーレンダリングされたページで _powerPortalsProService.RetrieveRecordAsync(...) を呼び出すコードは、進行中のDataverse呼び出しを行います。WASMレンダリングされたページの同じ行がHTTPリクエストを発行します — 分岐は不要です。
サービスの注入
構成ツールやプロパティ注入を通じて、任意のBlazorコンポーネントやサービスに IPowerPortalsProService を注入できます。
// usePowerPortalsPro() はフレームワークが発する型付きクライアントを返します
// すべてのCRUDからの電話がつながっています。「ppp」オブジェクトは、検索・作成・公開します。
// 更新 / 削除 / アソシエイト / 実行 複数 / メタデータ / ファイルメソッド
// 設定されたDataverse環境に対して。
import { usePowerPortalsPro } from '@powerportalspro/react';
function MyComponent() {
const { ppp } = usePowerPortalsPro();
// ...
}[Inject]
private IPowerPortalsProService _powerPortalsProService { get; set; } = null!;記録の回収
テーブル名とIDで単一のレコードを取得するには、オプションで RetrieveRecordAsync を使えます。どの列を返すかを指定することもできます。省略するとすべての列が返されます。
// すべての列を取得する
const account = await ppp.retrieveRecordAsync('account', accountId);
// 特定の列のみ取得
const account = await ppp.retrieveRecordAsync('account', accountId, [
'name', 'telephone1', 'address1_city',
]);// すべての列を取得する
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId);
// 特定の列のみ取得
var account = await _powerPortalsProService.RetrieveRecordAsync("account", accountId,
new[] { "name", "telephone1", "address1_city" });複数のレコードのクエリ
FetchXMLクエリ文字列と組み合わせた RetrieveRecordsAsync を使い、フィルタリング、ソート、リンクエンティティのサポートで複数のレコードを取得します。
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) {
// 各レコードの処理
}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)
{
// 各レコードの処理
}記録の作成
CreateRecordAsyncを使ってDataverseで新しいレコードを作成しましょう。応答には新たに作成されたレコードのIDが含まれています。
// TableRecordは、タイプ付きColumnValueオブジェクトの「プロパティ」マップをキー付けします
// 列名で。createTableRecordヘルパーはワイヤー形状を作成し、
// 一時的な「_idForCreate」をスタンプし、クロスレコード参照を解決できるようにします
// サーバーが
// リアル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;記録の更新
既存のレコードを更新するには UpdateRecordAsync を使ってください。 TableRecord に設定されたプロパティのみが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);記録の削除
DeleteRecordAsyncを使ってテーブル名とIDでレコードを削除してください。
await ppp.deleteRecordAsync('contact', contactId);await _powerPortalsProService.DeleteRecordAsync("contact", contactId);記録の関連付け
AssociateAsyncとDisassociateAsyncを使って、レコード間の多対多関係を管理しましょう。
// アソシエイト
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);
// 解離
await ppp.disassociateAsync(account, 'ppp_Account_ppp_Region_ppp_Region', regions);// アソシエイト
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);
// 解離
await _powerPortalsProService.DisassociateAsync(account, "ppp_Account_ppp_Region_ppp_Region", regions);リクエストの実行
ExecuteAsyncを単一のリクエストに使うか、単一のデータベーストランザクションで複数のリクエストを実行するためのExecuteMultipleAsync。トランザクションバッチ内の任意のリクエストが失敗した場合、すべての変更はロールバックされます。
// 1つのトランザクションで複数のリクエストを実行します。各リクエストは「タイプ」で区別されたタグ付きユニオンオブジェクトです。
const requests = [
{ type: 'create', record: contact },
{ type: 'update', record: account },
];
const responses = await ppp.executeMultipleAsync(requests, { returnResponses: true });// 1つのトランザクションで複数のリクエストを実行する
var requests = new List<OrganizationRequest>
{
new CreateRequest(contact),
new UpdateRequest(account),
};
var responses = await _powerPortalsProService.ExecuteMultipleAsync(requests, returnResponses: true);メタデータの取得
RetrieveTableMetadataAsyncとRetrieveViewMetadataAsyncを使ってテーブルやビューのメタデータを取得してください。キャッシュアクセスの場合は、ITableMetadataCacheと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);ファイルの扱い方
GetFileInfoAsyncを使ってファイルや画像のメタデータを取得し、必要に応じてファイルや画像の列からバイナリコンテンツを取得します。
// ファイルのメタデータのみを取得します
const fileInfo = await ppp.getFileInfoAsync('contact', contactId, 'ppp_contract');
// ファイルのメタデータとバイナリコンテンツを取得します
const fileWithData = await ppp.getFileInfoAsync(
'contact', contactId, 'ppp_contract', { includeData: true },
);
const bytes = fileWithData.fileData;// ファイルのメタデータのみを取得します
var fileInfo = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract");
// ファイルのメタデータとバイナリコンテンツを取得します
var fileWithData = await _powerPortalsProService.GetFileInfoAsync("contact", contactId, "ppp_contract", includeData: true);
var bytes = fileWithData.FileData;IPowerPortalsProService Interface
方法
名称 | パラメータ | 種類 | 概要 |
|---|---|---|---|
AssociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<AssociateResponse> | 多対多関係を通じて、1つまたは複数の関連レコードとレコードを関連付けます。 |
ClearAllCachesAsync | Task<IReadOnlyList<CacheClearResult>> | サーバー側のすべての Services.IClearableCache (テーブル/ビュー/特権)をクリアします メタデータ、ユーザーごとの権限、環境ファイル設定)をまとめて再構築します。 局所化された文字列は原子的にキャッシュされます — 読者は以前のものを引き続き見ることができます 新しい状態が完全に埋め尽くされるまでデータを読み込みます。レイジーキャッシュのリフィルは 次に彼らが必要なリクエストです。 | |
ClearCacheAsync | string name | Task<CacheClearResult> | 名前のあるキャッシュを1つクリアします。登録されていない場合は返品 null キャッシュマッチは name (大文字に区別されません);失敗は以下の通りです。 投げるのではなく、結果に包まれている。同じ認証ゲート IPowerPortalsProService.ClearAllCachesAsync。 |
CreateFileArchiveAsync | CreateFileArchiveRequest request | Task<FileArchiveResult> | アーカイブを構築する(現在はzipファイル、将来のフォーマットは CreateFileArchiveRequest.Format 列挙)を含むすべてのレコードの 指定されたテーブル/カラムペアのファイルペイロード。同じレコード単位を使用しています 許可チェーンを String,System.Boolean) として — 不正/欠落 アーカイブから行が静かに削除されます。重複するファイル名は以下の通りです。 接尾辞 |
CreateRecordAsync | TableRecord record | Task<CreateResponse> | Dataverseで新しいレコードを作成します。 |
DeleteRecordAsync | string tableLogicalName Guid id | Task<DeleteResponse> | Dataverseからテーブル名とレコードIDでレコードを削除します。 |
DisassociateAsync | TableRecordReference record string relationshipName IEnumerable<TableRecordReference> relatedRecords EntityRole? role | Task<DisassociateResponse> | 多対多の関係を通じて、レコードと1つ以上の関連レコードとの関連付けを除去します。 |
DownloadLocalizationSourceAsync | string sourceId string culture | Task<LocalizationDownload> | 鍵のダウンロードは、最も多くの文化に貢献した一つのソースです 最近のウォームアップで、同じ入れ子オブジェクト形状のJSONのコンシューマーとして |
DownloadMergedLocalizationsAsync | string culture | Task<LocalizationDownload> | ある文化の統合済みローカリゼーションキーをダウンロードします — ポストマージ キャッシュに保存されているすべての鍵に対して勝利値が、どの鍵であっても 元々はソースが提供していました。これを完全なスナップショットに使ってください 参考資料(ポータルがその文化で実際に機能するすべての情報) 上記の各情報源視点ではなく、 |
ExecuteAsync | OrganizationRequest request | Task<OrganizationResponse> | Dataverseに対して単一の組織リクエストを実行します。 |
ExecuteMultipleAsync | IEnumerable<OrganizationRequest> requests bool returnResponses | Task<List<OrganizationResponse>> | 単一のデータベーストランザクションで複数の組織リクエストを実行します。 リクエストが失敗した場合、バッチ内のすべての変更がロールバックされます。 |
GetCacheNamesAsync | Task<IReadOnlyList<string>> | 適切なサーバー側の Services.IClearableCacheの名前を返します キャッシュごとにクリアボタンをレンダリングしたい管理者UI向けに。同じ認証ゲート HTTPエンドポイントに適用される IPowerPortalsProService.ClearAllCachesAsync 。 | |
GetFileInfoAsync | string tableName Guid recordId string columnName bool includeData | Task<FileInfo> | Dataverseのファイルや画像列からファイル情報およびオプションでバイナリコンテンツを取得します。 |
GetFileInfosAsync | string tableName IEnumerable<Guid> recordIds string columnName bool includeData | Task<IEnumerable<FileInfo>> | 同じテーブル/カラムの多くのレコードのファイル情報をバッチで取得する 往復で。内部では、レコードごとのフィートが並列に並列でフェッチアウトされ、 結合されたリストを返します。レコードごとの権限ハンドラーチェーンは、の場合と同じように動作します シングルレコードコール;検索に失敗した場合は応答から除外されます。 バッチ全体が失敗した。 FileGridの「すべてダウンロード」/「選択済みダウンロード」で使われ、クライアントが N個のHTTPリクエストを発生させずにzipを送ること。 |
GetLocalizationOverviewAsync | Task<LocalizationOverview> | 文字列ローカリゼーションパイプラインの管理者向けスナップショットを返します: ウォームアップを駆動する静的設定とソースごとの負荷記録 直近のウォームアップによって生まれた。ロー | |
GetMergedLocalizationEntriesAsync | string culture | Task<IReadOnlyList<MergedLocalizationEntry>> | 1つの文化の統合されたローカライゼーションキーを構造化されたリストとして返します — キャッシュが提供するキー、マージ後の勝利値、そしてどのソースが提供されるか その価値。データと同じですが、キーごとに表示されます DownloadMergedLocalizationsAsync(System.String) 管理者が作成元(ファイル/ウェブリソース/Dataverseメタデータ)を注釈付けし、 グリッド状の出所を調べてください。エントリーはキーごとにソートされています。 |
GetOrganizationSettingsAsync | Task<OrganizationSettings> | Dataverseから得た組織全体の設定を取得
| |
GetTablePermissionsForCurrentUserAsync | string tableLogicalName | Task<TableSecurityPermission> | 現在のユーザーのテーブルレベルの複合マスク Models.TableSecurityPermission 返します tableLogicalName — Read / Create / Write / のビットごとの和集合 Delete / Append / AppendTo は、 |
GetTranslationAvailabilityAsync | Task<TranslationAvailability> | ローカライズ・翻訳機能が現在の環境で使用可能かどうかを返します: Azure翻訳サービスが設定されているか、翻訳が管理されているか ソリューションがインストールされ、候補言語(ポータルがサポートする文化)が対象となります Azure翻訳性で注釈付き)。 | |
RetrieveRecordAsync | string tableLogicalName Guid id IEnumerable<string> columns | Task<TableRecord> | Dataverseからテーブル名とレコードIDで単一のレコードを取得します。 |
RetrieveRecordsAsync | string fetchXml | Task<RetrieveRecordsResponse> | FetchXMLクエリを用いてDataverseから複数のレコードを取得します。 フィルタリング、ソート、ページング、リンクエンティティ、集約クエリをサポートしています。 |
RetrieveTableMetadataAsync | string tableLogicalName | Task<TableMetadata> | Dataverseからテーブルのメタデータを取得し、列定義、関係、表示設定などを含みます。 |
RetrieveViewMetadataAsync | Guid viewId | Task<ViewMetadata> | Dataverseからビューメタデータを取得し、ビューのFetchXMLクエリ、列、表示設定などが含まれます。 |
RetrieveViewsForTableAsync | string tableLogicalName | Task<IEnumerable<ViewMetadata>> | テーブルのすべてのビューメタデータレコードを取得します。必要なグリッドで使われる 利用可能なビュー(ビューピッカー、デフォルトビュー解像度など)を列挙します。 サーバー側の実装は、進行中の |
TranslateLocalizationFileAsync | TranslationRequest request | Task<TranslationResult> | アップロードされたローカライゼーションファイルをAzure経由で1つ以上のターゲット言語に機械翻訳します TranslatorはDataverse翻訳メモリを再利用し、文字列数を報告します。 新たに翻訳されたものと再利用されたもの。ターゲット言語ごとに1つのファイルとすべてのzipファイルを返します。 |
UpdateRecordAsync | TableRecord record | Task<UpdateResponse> | Dataverseの既存のレコードを更新します。レコード上に設定されたプロパティのみがDataverseに送信されます。 |
AssociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
ClearAllCachesAsyncServices.IClearableCache (テーブル/ビュー/特権)をクリアします メタデータ、ユーザーごとの権限、環境ファイル設定)をまとめて再構築します。 局所化された文字列は原子的にキャッシュされます — 読者は以前のものを引き続き見ることができます 新しい状態が完全に埋め尽くされるまでデータを読み込みます。レイジーキャッシュのリフィルは 次に彼らが必要なリクエストです。 ClearCacheAsyncnull キャッシュマッチは name (大文字に区別されません);失敗は以下の通りです。 投げるのではなく、結果に包まれている。同じ認証ゲート IPowerPortalsProService.ClearAllCachesAsync。CreateFileArchiveAsyncCreateFileArchiveRequest.Format 列挙)を含むすべてのレコードの 指定されたテーブル/カラムペアのファイルペイロード。同じレコード単位を使用しています 許可チェーンを String,System.Boolean) として — 不正/欠落 アーカイブから行が静かに削除されます。重複するファイル名は以下の通りです。 接尾辞 CreateRecordAsyncDeleteRecordAsyncGuid id
DisassociateAsyncstring relationshipName
IEnumerable<TableRecordReference> relatedRecords
EntityRole? role
DownloadLocalizationSourceAsyncstring culture
DownloadMergedLocalizationsAsyncExecuteAsyncExecuteMultipleAsyncbool returnResponses
GetCacheNamesAsyncServices.IClearableCacheの名前を返します キャッシュごとにクリアボタンをレンダリングしたい管理者UI向けに。同じ認証ゲート HTTPエンドポイントに適用される IPowerPortalsProService.ClearAllCachesAsync 。GetFileInfoAsyncGuid recordId
string columnName
bool includeData
GetFileInfosAsyncIEnumerable<Guid> recordIds
string columnName
bool includeData
GetLocalizationOverviewAsyncGetMergedLocalizationEntriesAsyncDownloadMergedLocalizationsAsync(System.String) 管理者が作成元(ファイル/ウェブリソース/Dataverseメタデータ)を注釈付けし、 グリッド状の出所を調べてください。エントリーはキーごとにソートされています。GetOrganizationSettingsAsync-
DefaultCurrency — 組織の基本通貨で、作成モードで使用されます 編集者(MoneyEdit )が新しいレコードに正しいシンボルを表示します。 -
BlockedFileExtensions +MaxUploadFileSizeInBytes — ファイルアップロード 制約はクライアントが往復前に無効なファイルを拒否するためにミラーします。
GetTablePermissionsForCurrentUserAsyncModels.TableSecurityPermission 返します tableLogicalName — Read / Create / Write / のビットごとの和集合 Delete / Append / AppendTo は、 GetTranslationAvailabilityAsyncRetrieveRecordAsyncGuid id
IEnumerable<string> columns
RetrieveRecordsAsyncRetrieveTableMetadataAsyncRetrieveViewMetadataAsyncRetrieveViewsForTableAsyncTranslateLocalizationFileAsyncUpdateRecordAsync