Power Apps SDK を使用してコード アプリを SharePoint に接続し、生成されたモデルとサービスを使用して SharePoint リストに対して CRUD (作成、読み取り、更新、削除) 操作を実行します。
[前提条件]
- Power Apps コードアプリ SDK @microsoft/power-apps - npmパッケージ
- Power Apps CLI (PAC CLI) バージョン 1.50 以降
- PAC CLI を使用して環境に接続する必要があります
サポートされているシナリオ
Power Apps SDK を使用して SharePoint に接続する場合、次のシナリオがサポートされます。
- PAC CLI を使用して SharePoint リストをデータ ソースとして追加する
- SharePoint リストに対して CRUD 操作を実行する
- 選択肢、ルックアップ、または人物/グループ列に使用できる値を取得する
コードアプリをセットアップする
コード アプリで作成、読み取り、更新、削除 (CRUD) 操作を実行する前に、次のセットアップ手順を完了してください。
データ呼び出しの前に 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
}, []);
SharePoint データ ソースを追加する
「データ への接続」の手順に従って、SharePoint データ ソースを追加します。
必要な型とサービスをインポートする
データ ソースを追加すると、モデル ファイルとサービス ファイルが自動的に生成され、 /generated/services/ フォルダーに配置されます。 たとえば、 ChoicesTest1 リストを追加すると、次のファイルが作成されます。
-
ChoicesTest1Model.ts– ChoicesTest1 リストのデータ モデルを定義します。 -
ChoicesTest1Service.ts– ChoicesTest1 リスト内のデータを操作するためのサービス メソッドを提供します。
次のように、App.tsx コードでこれらのファイルをインポートして使用できます。
import { ChoicesTest1Service } from './generated/services/ChoicesTest1Service';
import type { ChoicesTest1 } from './generated/models/ChoicesTest1Model';
レコードの読み取り
次の使用例は、すべての項目をフェッチし、ステートを設定します。
const loadRecords = async () => {
try {
const result = await ChoicesTest1Service.getAll();
if (result.data) {
setRecords(result.data); // result.data is T[]
} else {
// handle empty or error
}
} catch (err) {
// handle error
}
};
この例では、1 つのレコードを読み取ります。
const fetchOne = async (id: string) => {
const r = await ChoicesTest1Service.get(id);
if (r.data) {
// r.data is a single record typed as ChoicesTest1
}
};
レコードの作成
次の手順の例では、モデル ファイルの型の例は、 ChoicesTest1、 Choices1Value、 personValue、および lookupValueです。
- 選択した ID を展開されたオブジェクトにマップする
注
生成されるモデルには、フォームでのバインドに使用されるが、SharePoint コネクタに送信されるペイロードには含まれない # (例: Choices1#Id) を含む内部プロパティ名が含まれる場合があります。 リスト内の行を更新または作成する場合、SharePoint API では、ID だけでなく、参照先の列 (作成者、エディター、個人/グループ列など) に展開オブジェクトを提供することが想定されます。
詳細については、 SharePoint API のドキュメント を参照してください。
const choices1Obj = selectedChoices1Id
? choices1Options.find(c => c.Id === selectedChoices1Id)
: undefined;
const personObj = selectedPersonClaims
? personOptions.find(p => p.Claims === selectedPersonClaims)
: undefined;
const lookupObj = selectedLookupId
? lookupOptions.find(l => l.Id === selectedLookupId)
: undefined;
- ペイロードを構築して生成する
必ず、 #を含むプロパティを省略し、選択、参照、ユーザー用に展開されたオブジェクトを含め、必要に応じてコンテンツ タイプ情報を追加してください。 生成されたモデルの種類を使用して、ペイロードの構築に役立ちます。
// Content type (example static sample; retrieve dynamically if needed)
const contentTypeId = "0x0100..."; // replace with your content type id
const payload = {
Title: titleValue,
Choices1: choices1Obj,
Choices2: choices2Obj,
Choices3: choices3Obj,
person: personObj,
yesno: yesnoBoolean,
lookup: lookupObj,
"{ContentType}": {
"@odata.type": "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedContentType",
Id: contentTypeId,
Name: "Item"
}
} as Partial<Omit<ChoicesTest1, "ID">>;
// create
const created = await ChoicesTest1Service.create(payload as Omit<ChoicesTest1, "ID">);
if (created.data) {
// success
}
レコードの更新
生成されたサービス ファイルの update(id, payload) を使用します。 レコードの作成時と同じ展開オブジェクトを指定します。
例えば次が挙げられます。
const updatePayload = {
Title: updatedTitle,
Choices1: updatedChoices1Obj,
// ...
} as Partial<Omit<ChoicesTest1, "ID">>;
await ChoicesTest1Service.update(recordId, updatePayload);
レコードを削除する
サービス recordId 必要な文字列 ID であることを確認します。 これは、多くの場合、文字列に変換された数値項目 ID です。
await ChoicesTest1Service.delete(recordId);
参照先エンティティ (選択肢/参照/人物)
ドロップダウンを設定するには、 getReferencedEntity()を呼び出します。 SharePoint は常に、参照先エンティティのオブジェクトを含む値配列を返します。 一部のコネクタは { value: [] }形式で構造体を返し、他のコネクタは配列を直接提供するため、応答を正規化することができます。
// The first parameter is a search term, the second is the referenced entity name
const res = await ChoicesTest1Service.getReferencedEntity("", "Choices1");
// normalize:
const dataArray = (res.data as { value?: any[] })?.value || res.data;
const options = Array.isArray(dataArray) ? dataArray : [];
// map to select options:
const selectOpts = options.map(o => ({ id: o.Id, label: o.Value }));
サポートされていないシナリオ
Power Apps SDK と PAC CLI では、SharePoint リストに対する CRUD 操作が可能ですが、ドキュメント処理 API やアイテムの同期やアクセス許可の変更などのアクションはサポートされていません。 これらの機能を追加するには、コード アプリ用のカスタム サービス ファイルを作成します。