このガイドは、開発者がコード アプリ用の Power Apps クライアント ライブラリを使用して、コード アプリをMicrosoft Dataverseに接続するのに役立ちます。
[前提条件]
- Power Appsのコード アプリ用クライアント ライブラリ
- Power Apps CLI (PAC CLI) バージョン 1.46 以降
- Dataverse が有効になっている環境
- PAC CLI を使用して環境に接続する必要があります
Steps
PAC CLI を使用して環境に接続していることを確認します。
pac コードの add-data-source コマンドを使用して、Dataverse をデータ ソースとしてコード アプリに追加します。
pac code add-data-source -a dataverse -t <table-logical-name><table-logical-name>を、接続先の Dataverse テーブルの論理名に置き換えます。
サポートされているシナリオ
コード アプリ用の Power Apps クライアント ライブラリ は、Dataverse に接続するときに次のシナリオをサポートします。
Dataverse エンティティをコード アプリに追加します。
オプション セットのオプション値の書式設定された値 (ラベル) を取得します。
ルックアップと連携する 現時点では、ルックアップ操作時に、ガイダンスに従って単一値のナビゲーション プロパティに関連付けるか、作成時にレコードを関連付ける必要があります。 専用のハウツーガイドが近日公開予定です。 Power Apps チームは、コード アプリで参照を使いやすくするために積極的に取り組んでいます。
イメージとファイルのアップロードとダウンロード (プレビュー)。 npm ベースの cli を使用して Dataverse をデータ ソースとして追加すると、生成される関数は
src/generated/servicesの一部になります。CRUD 操作を実行します。
- Create
- 取得
- RetrieveMultiple
- Update
- 削除
委任対象:
FilterSort-
Topクエリ
ページングのサポート。
ヒント
完全な作業例をお探しですか? Dataverse デモ アプリは、この記事で取り上げるすべてのパターン (CRUD 操作、ルックアップ フィールド、画像とファイルのアップロードとダウンロード、生成されたサービス) を React/TypeScript アプリで確認および拡張できます。 アプリを自分で実行するには、 PowerAppsCodeApps/samples/Dataverse/DEVELOPMENT.md のセットアップ手順に従って環境用に構成します。
コードアプリをセットアップする
コード アプリで作成、読み取り、更新、削除 (CRUD) 操作を実行する前に、必要な型とサービスをインポートします。
データ ソースを追加すると、モデル ファイルとサービス ファイルが自動的に生成され、 /generated/services/ フォルダーに配置されます。
たとえば、組み込みの Accounts テーブルをデータ ソースとして追加すると、次のファイルが作成されます。
-
AccountsModel.ts– Accounts テーブルのデータ モデルを定義します。 -
AccountsService.ts– Accounts データを操作するためのサービス メソッドを提供します。
次のように、コード内でこれらのファイルをインポートして使用できます。
import { AccountsService } from './generated/services/AccountsService';
import type { Accounts } from './generated/models/AccountsModel';
レコードの作成
生成されたモデルの種類とサービス メソッドを使用して、コード アプリから新しい Dataverse レコードを作成します。
生成されたモデルを使用してレコード オブジェクトを作成する
生成されたモデルには、Dataverse テーブルのスキーマが反映されます。 これらを使用してレコード オブジェクトを作成します。
注
レコードを作成するときは、主キーや所有権フィールドなどのシステム管理列または読み取り専用列を除外します。 読み取り専用の列を理解するには、 環境内のテーブル定義の参照に関するページを参照してください。 たとえば、[ 取引先企業] テーブルには、次のフィールドを含めないでください。
- AccountID
- オーナーID
- owneridname
- owneridtype
- owneridyominame
入力するフィールドのみを含むレコードを作成します。 たとえば、Accounts エンティティの場合は次のようになります。
const newAccount = { name: "New Account" statecode: 0, accountnumber: "ACCOO1" ... };生成されたサービスを使用してレコードを送信する
生成されたサービス ファイル内の関数を使用して、レコードを送信します。 たとえば、Accounts エンティティの場合は次のようになります。
try { const result = await AccountsService.create(newAccount as Omit<Accounts, 'accountid'>); if (result.data) { console.log('Account created:', result.data); return result.data; } } catch (err) { console.error('Failed to create account:', err); throw err; };
データの読み取り
1 つのレコードを取得するか、クエリを作成して複数のレコードを返すことができます。
1 つのレコードを取得する
1 つのレコードを取得するには、その主キー ( accountid など) が必要です。
const accountId = "<00000000-0000-0000-0000-000000000000>"; // Replace with actual ID value
try {
const result = await AccountsService.get(accountId);
if (result.data) {
console.log('Account retrieved:', result.data);
}
} catch (err) {
console.error('Failed to retrieve account:', err);
}
複数のレコードを取得する
Dataverse テーブルからすべてのレコードを取得するには、 getAll メソッドを使用します。
try {
const result = await AccountsService.getAll();
if (result.data) {
const accounts = result.data;
console.log(`Retrieved ${accounts.length} accounts`);
}
} catch (err) {
console.error('Failed to retrieve accounts:', err);
}
getAll メソッドは、IGetAllOptions インターフェイスを実装する省略可能なパラメーターを受け取ります。 クエリをカスタマイズするには、次のオプションを使用します。
interface IGetAllOptions {
maxPageSize?: number; // Maximum number of records per page
select?: string[]; // Specific fields to retrieve
filter?: string; // OData filter string
orderBy?: string[]; // Fields to sort by
top?: number; // Maximum number of records to retrieve
skip?: number; // Number of records to skip
skipToken?: string; // Token for pagination
}
Important
select パラメーターを使用して取得する列の数は常に制限します。
複数のオプションの例を次に示します。
const fetchAccounts = async () => {
const options: IGetAllOptions = {
select: ['name', 'accountnumber', 'address1_city'],
filter: "address1_country eq 'USA'",
orderBy: ['name asc'],
top: 50
};
try {
const result = await AccountsService.getAll(options);
return result.data || [];
} catch (err) {
console.error('Failed to fetch accounts:', err);
return [];
}
};
レコードの更新
レコードを更新するには、次のものが必要です。
- レコードの主キー値。 たとえば、アカウント テーブルでは、
accountid値です。 - 行いたい変更。
Important
レコードを更新する場合は、変更するプロパティのみを要求に含めます。 以前に取得したレコードの変更されたプロパティを設定し、そのデータを要求に含める場合、値が変更されなかった場合でも、すべてのプロパティを更新します。 このような誤った更新により、値が変更されることを想定するビジネス ロジックがトリガーされたり、監査データが破損して、変更されなかったデータが誰かが変更されたことを示したりする可能性があります。
次の例では、アカウントレコードの name プロパティと telephone1 プロパティを更新します。
const accountId = "<your-account-guid>";
const changes = {
name: "Updated Account Name",
telephone1: "555-0123"
};
try {
await AccountsService.update(accountId, changes);
console.log('Account updated successfully');
} catch (err) {
console.error('Failed to update account:', err);
}
Dataverse でレコードを削除する
レコードを削除するには、レコードの主キー値が必要です。 たとえば、アカウント テーブルでは、 accountid 値です。
例えば次が挙げられます。
const accountId = "<00000000-0000-0000-0000-000000000000>"; // Replace with actual ID value
try {
await AccountsService.delete(accountId);
console.log('Account deleted successfully');
} catch (err) {
console.error('Failed to delete account:', err);
}
サポートされていないシナリオ
次の機能はまだサポートされていません。
- ポリモーフィック検索
- PAC CLI を使用した Dataverse データソースの削除
- スキーマ定義 (エンティティ メタデータ) CRUD
- FetchXML のサポート
- 代替キーのサポート