
- 操作環境:
- OS:Windows 11
- Webブラウザー:Edge
- 使用プラン(*):Microsoft 365 Business Premium
*DataverseのテーブルおよびWeb APIにアクセスできる組織アカウントでサインインしていること
なお、この記事では、VBAの使用許可や開発メニュー表示といった初期設定や、VBAエディタの使い方の説明は割愛いたします。また、前の記事にも記載した通り、Dataverse for TeamsはWeb API未対応であり、この記事で扱うのはDataverseとなります。
Dataverse Web APIについて
Dataverse Web APIは、Dataverseのテーブルやデータに対し、プログラムで様々な処理を行うための仕様を取り決めたものです。
Dataverse Web APIの使用方法は公式記事に掲載されています。この記事で参考にした公式記事を以下に列挙します。
- OAuth2.0認証(共有シークレットを使ったアクセストークン要求):
Microsoft ID プラットフォームの OAuth 2.0 クライアント資格情報フロー - Microsoft identity platform | Microsoft Learn
*この記事では、クライアントシークレット(クライアント資格情報の共有シークレット)によるアクセストークン要求を使用します - HTTPリクエスト作成・エラー処理:
HTTP 要求の作成とエラーの処理 - Power Apps | Microsoft Learn - テーブルデータ検索:
Web API を使用してテーブルの行を取得する - Power Apps | Microsoft Learn - テーブルデータ追加:
Web API を使用してテーブル行を作成する - Power Apps | Microsoft Learn - テーブルデータ変更・削除:
Web API を使用したテーブル行の更新と削除 (Microsoft Dataverse) - Power Apps | Microsoft Learn
Entra管理C API初期設定
WebブラウザーよりMicrosoft Entra管理センターにアクセスし、左メニューの[ID>アプリケーション>アプリの登録]を選択し、[新規登録]を選択します。

以下の通り設定し、[登録]を選択します。
- 名前:(Dataverse Web APIの接続用アプリであることが分かる名前)
- アカウントの種類:この組織ディレクトリのみに含まれるアカウント
- リダイレクトURL(選択肢):Web
- リダイレクトURL(値):https://localhost

登録が完了し、サブメニューの[概要]画面に遷移したら、以下の値を控えておきます。
- アプリケーション(クライアント)ID
- ディレクトリ(テナント)ID

サブメニューの[APIのアクセス許可]を選択し、[アクセス許可の追加]を選択します。

[所属する組織で使用しているAPI]タブを選択し、[Dataverse]でキーワード検索し、候補に表示されたらこれを選択します。

[アクセス許可]の[user_impersonation]にチェックをつけ、[アクセス許可の追加]を選択します。

サブメニューの[証明書とシークレット]を選択し、[クライアントシークレット]タブを選択し、[新しいクライアントシークレット]を選択します。

以下の通り設定し、[追加]を選択します。
- 説明:(Dataverse Web APIの接続用シークレットであることが分かる名前)
- 有効期限:(適宜設定)
元の画面で今追加したクライアントシークレットの値を控えておきます。

PP管理C Dataverse環境の初期設定
この例では、新たな環境を用意し、Dataverseの初期設定を行います。
Power Platform管理センターにアクセスし、左メニューの[環境]を選択し、[新規]を選択します。

[新しい環境]画面で以下の通り設定し、[次へ]を選択します。
- 名前:(環境の用途が分かる名前を適宜入力)
- 種類:(用途に応じて選択。この例ではお試しということで[開発者]を選択)
- Dataverseデータストアを追加しますか?:はい(種類が開発者の場合は自動で[はい]になる)
[Dataverseを追加]画面で [保存]を選択します。

[最新の情報に更新]を選択し、新しい環境が作成された旨のメッセージが表示されたら、その環境を選択します。

[設定]を選択します。

[ユーザーとアクセス許可]を展開し、[部署]を選択します。

Dataverse Web APIを実行できるユーザーの属する部署がなければ、[新しい部署]から作成します。この例では、画面に表示されている既存の部署に実行ユーザーが属しているため、これを使用することとし、部署名を控えておきます。

前の画面に戻り、今度は[ユーザーとアクセス許可]の[アプリケーションユーザー]を選択します。

[新規アプリユーザー]を選択します。
前の工程で設定したEntra IDのアプリを選択し、[追加]を選択します。

以下の通り設定し、[作成]を選択します。
- 部署:図表3-6で確認または作成した部署名
- セキュリティロール:Environment Maker、System Customizer、システム管理者
なお、必要なセキュリティロールは公式記事に掲載されていますが、この記事の設定作業を行った環境では、[環境管理者]というセキュリティロールが見つかりませんでした。もしこれが表示された場合は、選択する必要があります。

Dataverseテーブル用意
この例では、前の記事で紹介した、Excel VBAでSharePointリストをデータ検索した結果を流用し、テーブルを作成することにします。
画面のように、結果シートを[書籍管理.xlsx]などのファイル名で保存しておきます。

Power Appsの画面にアクセスし、右上の環境名を選択し、前の工程で設定した環境に切り替えます。

環境が切り替わったら、左メニューの[テーブル]を選択し、[新しいテーブル>新しいテーブルを作成する]を選択します。

[Excelファイルまたは.CSVをインポート]を選択します。

[デバイスから選択]ボタンを押し、この工程の最初に用意したExcelファイルを選択します。

インポートが完了したら、作成されたテーブルの[・・・]を選択し、[データを表示する]を選択します。
画面下部に列名とデータが表示されます。この例では、isbn_codeでエラーが発生していますので、この列名を選択し、[列の編集]を選択します。

isbn_codeの[データの種類]が数値(浮動小数点数)になっていることが原因でした。これを[1行テキスト]に変更し、[更新]を選択します。
もし他の列でもエラーが発生していたり、値の表示がおかしかったりする場合は、データの種類等を見直します。
テーブルの[・・・]を選択し、[プロパティ]を選択します。
テーブルの[表示名]と[複数形の名前]を分かりやすい値に変更し、[スキーマ名]を確認し、[保存]を選択します。

[保存して終了]を選択します。

保存が完了すると、テーブル一覧に作成したテーブルが表示されます。
右上の設定アイコンを選択し、[開発者リソース]を選択します。

[WebAPIエンドポイント]の値を控えておきます。

Excelファイル用意
VBAを実行するExcelファイルを用意します(拡張子はxlsm)。
- Menuシート:各ボタン(ActiveXコントロール)を押すと、Dataverseのテーブルに接続し、データの検索や更新を行います。

- Searchシート:Menuシートの[書籍管理データ検索]ボタンを押すと、Dataverseのテーブルの検索結果をこのシートに出力します。

- Renewシート:このシートに追加・変更・削除対象(Action列で識別)のデータを入力しておき、Menuシートの[書籍管理データ反映]ボタンを押すと、Dataverseのテーブルに反映されます。

- VBAプロジェクト:Mainシート上にソースを実装します。画面に表示されているのは検索・更新ボタンクリック時にデータ検索・更新のプロシージャを呼び出すソースです。データ検索・更新のプロシージャ自体のソースは次の記事で紹介します。

Web APIのデータのやり取りはJson型というデータフォーマットを使用します。こちらのサイトにVBA用の変換モジュールJsonConverter.basがあるので、ダウンロードします。

ダウンロードしたZIPを展開しておきます。VBAのプロジェクトエクスプローラ上で右クリックし、[ファイルのインポート]を選択します。
展開したファイル内のJsonConverter.basを選択します。
VBAのプロジェクトエクスプローラー上に、[標準モジュール>JsonConverter]が表示されます。

[ツール>参照設定]を選択し、[Microsoft Scripting Runtime]のチェックをオンにします。これが未実施の場合、API呼び出し時のHTTPリクエストオブジェクトの作成でエラーが発生します。

次の記事に続きます。
当ブログ内の連載記事
当ブログ内の関連記事