次の方法で共有


方法: コード アプリを Dataverse に接続する (プレビュー)

このガイドは、開発者が Power Apps SDK を使用してコード アプリを Microsoft Dataverse に接続するのに役立ちます。

プレビュー機能は運用環境での使用を想定しておらず、機能が制限されている可能性があります。 これらの機能は、お客様が早期にアクセスしてフィードバックを提供できるように、公式リリースの前に利用できます。

[前提条件]

Steps

  1. PAC CLI を使用して環境に接続していることを確認します。

  2. pac コードの add-data-source コマンドを使用して、Dataverse をデータ ソースとしてコード アプリに追加する

    pac code add-data-source -a dataverse -t <table-logical-name>
    

    <table-logical-name>を、接続先の Dataverse テーブルの論理名に置き換えます。

サポートされているシナリオ

Power Apps SDK を使用して Dataverse に接続する場合は、次のシナリオがサポートされます。

  • PAC CLI を使用して Dataverse エンティティをコード アプリに追加する

  • CRUD 操作を実行します。

    • Create
    • 取得
    • RetrieveMultiple
    • Update
    • 削除​​
  • 委任対象:

    • Filter
    • Sort
    • Top クエリ
  • ページングのサポート

コードアプリをセットアップする

コード アプリで作成、読み取り、更新、削除 (CRUD) 操作を実行する前に、次の 2 つのセットアップ手順を完了してください。

  1. データ呼び出しの前に Power Apps SDK の初期化を確認する

    App.tsx ファイルで、Power Apps SDK が完全に初期化されるのを待ってからデータ操作を実行するロジックを実装します。 これにより、初期化されていないサービスまたはコンテキストが見つからない場合に発生するエラーが回避されます。

    API 呼び出しを行う前に、非同期関数または状態管理を使用して初期化を確認します。 例えば次が挙げられます。

    useEffect(() => {
    // Define an async function to initialize the Power Apps SDK
    const init = async () => {
          try {
                await initialize(); // Wait for SDK initialization
                setIsInitialized(true); // Mark the app as ready for data operations
          } catch (err) {
                setError('Failed to initialize Power Apps SDK'); // Handle initialization errors
                setLoading(false); // Stop any loading indicators
          }
    };
    
    init(); // Call the initialization function when the component mounts
    }, []);
    
    useEffect(() => {
    // Prevent data operations until the SDK is fully initialized
    if (!isInitialized) return;
    
    // Place your data reading logic here
    }, []);
    
  2. 必要な型とサービスをインポートする

    データ ソースを追加すると、モデル ファイルとサービス ファイルが自動的に生成され、 /generated/services/ フォルダーに配置されます。 たとえば、組み込みの Accounts テーブルをデータ ソースとして追加すると、次のファイルが作成されます。

    • AccountsModel.ts – Accounts テーブルのデータ モデルを定義します。

    • AccountsService.ts – Accounts データを操作するためのサービス メソッドを提供します。

    これらを次のようにコードにインポートして使用できます。

    import { AccountsService } from './generated/services/AccountsService';
    import type { Accounts } from './generated/models/AccountsModel';
    

レコードの作成

  1. 生成されたモデルを使用してレコード オブジェクトを作成する

    生成されるモデルは、Dataverse テーブルのスキーマを反映しており、レコード オブジェクトの作成に使用する必要があります。

    レコードを作成するときは、主キーや所有権フィールドなどのシステム管理列または読み取り専用列を除外します。 環境内のテーブル定義を参照することで、読み取り専用の列を理解するために使用できるツールを示します。 たとえば、[ 取引先企業] テーブルには、次のフィールドを含めないでください。

    • AccountID
    • オーナーID
    • owneridname
    • owneridtype
    • owneridyominame

    入力するフィールドのみを含むレコードを作成します。 たとえば、Accounts エンティティの場合は次のようになります。

    
    const newAccount = {
       name: "New Account"
       statecode: 0,
       accountnumber: "ACCOO1"
       ...
    };
    
  2. 生成されたサービスを使用してレコードを送信する

    生成されたサービス ファイル内の関数を使用して、レコードを送信します。 たとえば、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 [];
}
};

レコードの更新

レコードを更新するには、次のものが必要です。

  1. レコードの主キー値。 たとえば、アカウント テーブルでは、 accountid 値です。
  2. 行いたい変更。

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);
}

サポートされていないシナリオ

次の機能はまだサポートされていません。

  • オプション セットの書式設定された値と表示名の取得
  • ルックアップ フィールド(多態性ルックアップを含む)
  • Dataverse のアクションと関数
  • PAC CLI を使用した Dataverse データソースの削除
  • スキーマ定義 (エンティティ メタデータ) CRUD
  • FetchXML のサポート
  • 代替キーのサポート