これまでの2回の記事で、#1ではスキーマを作成し、#2ではパッケージの展開、編集、デプロイ、そして結果を確認しました。今回は、既存のコネクタを複製して別名で新しいコネクタを作り、メソッドの変更や追加を行います。
対象者:開発上級者
今回作成するコネクタ
- GraphEndPoint_SharePointList
指定したidを持つレコードを返す「GetItem」メソッドと、アイテム一覧テーブルと次のアイテムリストへのトークンを含む単一レコード返す[GetItems]メソッドを持つコネクタを作成します。
今回も、前回に続き、既存のコネクタからデータを取得する新しいコネクタを作成します。目的は、スキーマ構築のテクニックを学び、VSCodeでソースコードを複製する際のポイントに着目することです。さらに、タイマーやボタンを使ったループ処理で、標準コネクタの大きな課題である「委任問題」を解決する方法も学べます。
コネクタの複製(VSCode)
Power Appsでも同じ機能(API)を持つコネクタを複数設置することは可能ですが、編集が必要なスキーマやリソースが増えるため、今回はVSCodeを使用して行います。
対象のファイルを検索してコピー&ペースト
今回は、「GraphEndPoint_MyProf」というコネクタを複製し、修正を加えていきます。「GraphEndPoint_MyProf.xml」をコピー&ペースト[Ctrl + C]→[Ctrl + V]します。
- 「GraphEndPoint_MyProf.xml」をコピー&ペースト[Ctrl + C]→[Ctrl + V]します。
- 「「GraphEndPoint_MyProf_copy.xml」が作成されたことを確認します。
- 「GraphEndPoint_MyProf_copy.xml」を「GraphEndPoint_SharePointList.xml」に名前変更します。
これで新しいコネクタ「GraphEndPoint_SharePointList」の定義ファイルが準備出来ました。
作成するコネクタに対応するスキーマの確認
今回はSharePoint Listに対するGraph API EndPointのレスポンススキーマが必要です。
レスポンススキーマの確認はGraph Explorerで行うことが出来ます。
SharePoint List Items を取得するエンドポイントの例は以下です。
https://graph.microsoft.com/v1.0/sites/{Site-Id}/lists/{List-Id}/items
↑のエンドポイントはリストアイテム一覧の最小限のプロパティを取得するものです。
カスタムフィールドの値を取得したい場合はさらにクエリパラメータを追加します。
https://graph.microsoft.com/v1.0/sites/{Site-Id}/lists/{List-Id}/items?$expand=fields
さらに、既定の取得数(=100)を超えた場合に「@odata.nextLink」プロパティを強制的に取得するために、クエリパラメータを追加します。(事前にリストに2件以上のアイテムを追加しておきます。)
https://graph.microsoft.com/v1.0/sites/{Site-Id}/lists/{List-Id}/items?$expand=fields&top=1
以下のようなレスポンスが返ります。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('{Site-Id}')/lists('{List-Id}')/items(fields())",
"@odata.nextLink": "https://graph.microsoft.com/v1.0/sites/{Site-Id}/lists/{List-Id}/items?$expand=fields&top=1&$skiptoken=<skiptoken>",
"@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET sites('<guid>')/lists('<guid>')/items?$select=contentType,sharepointIds",
"value": [
{
"@odata.etag": "\"<GUID>,2\"",
"createdDateTime": "2024-04-15T06:10:31Z",
"eTag": "\"<GUID>,2\"",
"id": "1",
"lastModifiedDateTime": "2024-04-15T06:10:32Z",
"webUrl": "https://{SiteDomain}/sites/{SiteName}/Shared%20Documents/General",
"createdBy": {
"user": {
"email": "user@example.com",
"id": "<GUID>",
"displayName": "userName"
}
},
"lastModifiedBy": {
"application": {
"id": "<GUID>",
"displayName": "Microsoft Teams Services"
},
"user": {
"email": "user@example.com",
"id": "<GUID>",
"displayName": "userName"
}
},
"parentReference": {
"id": "<GUID>",
"siteId": "{SiteDomain},<GUID>,<GUID>"
},
"contentType": {
"id": "0x0120003BF3AF65D28FC843921B238BCDAE74AB",
"name": "フォルダー"
},
"fields@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites('{Site-Id}')/lists('{List-Id}')/items('1')/fields/$entity",
"fields": {
"@odata.etag": "\"<GUID>,2\"",
"Modified": "2024-04-15T06:10:32Z",
"FileLeafRef": "General",
"MediaServiceImageTags": [],
"id": "1",
"ContentType": "フォルダー",
"Created": "2024-04-15T06:10:31Z",
"AuthorLookupId": "9",
"EditorLookupId": "9",
"_CheckinComment": "",
"LinkFilenameNoMenu": "General",
"LinkFilename": "General",
"ItemChildCount": "8",
"FolderChildCount": "2",
"_ComplianceFlags": "",
"_ComplianceTag": "",
"_ComplianceTagWrittenTime": "",
"_ComplianceTagUserId": "",
"_CommentCount": "",
"_LikeCount": "",
"_DisplayName": "",
"AppAuthorLookupId": "1",
"AppEditorLookupId": "1",
"Edit": "0",
"_UIVersionString": "1.0",
"ParentVersionStringLookupId": "1",
"ParentLeafNameLookupId": "1"
}
}
]
}
例として挙げたレスポンスでは[fields]プロパティのみを追加で取得していますが、もちろん、それ以外にも多くの情報を追加で取得することが可能です。そのため、Graph Explorerを使用して様々な情報を取得することをお勧めします。
スキーマファイルの修正
Graph Explorerで取得したレスポンススキーマに基づいてXMLスキーマを作成し、「GraphEndPoint_SharePointList.xml」ファイルに適用します。
既存リソースの複製とメソッド及びレスポンスサービスの定義を行います。
コネクター定義の追加
コネクタの定義は現段階で完了しており、再パッキングを行ってもエラーは発生しません。しかし、Power Appsにインポートした後でも、複製や修正を加えたコネクタは参照可能なコネクタとして認識されていないようです。
定義ファイルを見つけ出す
まずは、アンパックしたフォルダ内で該当するファイルを探してみます。各フォルダを開くと、関連がありそうなファイルが2つ見つかりました。それは[Connectors]フォルダの[Connections.json]ファイルと[DataSources]フォルダの[GraphEndPoint_MyProf.json]ファイルです。
これらの二つの定義ファイルについては、ファイル名と内容から推測して編集や追加を行います。
定義ファイルを修正・追加する
コネクター定義内では”DataSouces”を参照してることが推測できますので新規追加したレスポンススキーマ定義ファイル「GraphEndPoint_SharePointList.xml」の拡張子を除いた名前を追加します。
“DataSources”の参照先として「GraphEndPoint_SharePointList.json」を追加します。
以上で追加したコネクタ定義は完了しました。
しかし、アプリから見ると、まだ何かが足りないように感じます。コネクタの定義は存在しますが、アプリからそれをどこで参照するのかが不明なようです。そのために、適切な設定項目を探してみましょう。
マニュフェストの定義を追加
数値.jsonファイル内にそれらしき設定が見つかりました。
このファイルに定義を追加していきます。
パッキングしてZipファイルに圧縮後インポートを行いコネクタが追加されたことを確認します。
リストアイテム一覧を取得するメソッドは正常に動作しています。
期待した結果が得られたことが確認できました。
今回のまとめ
今回、以前作成したコネクタを複製し、内容を修正することで新しいコネクタを追加できたことが実証されました。レスポンススキーマが分かっていれば、必要に応じてコネクタを追加することが可能です。しかし、多数のカスタムフィールドを含むリストやライブラリが環境内にある場合、都度コネクタを追加するのは非効率的です。解決策は、環境内の全リストとライブラリの全カスタムフィールドを[fields]に格納することです。Graph APIは存在しないプロパティを無視するように設計されているため、実装者はエラーを心配する必要がなく、一つのメソッドで全てを処理できます。
コメント