次の方法で共有


方法: SharePoint 操作 (プレビュー)

Power Apps SDK を使用してコード アプリを SharePoint に接続し、生成されたモデルとサービスを使用して SharePoint リストに対して CRUD (作成、読み取り、更新、削除) 操作を実行します。

[前提条件]

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

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

レコードの作成

次の手順の例では、モデル ファイルの型の例は、 ChoicesTest1Choices1ValuepersonValue、および lookupValueです。

  1. 選択した 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; 
  1. ペイロードを構築して生成する

必ず、 #を含むプロパティを省略し、選択、参照、ユーザー用に展開されたオブジェクトを含め、必要に応じてコンテンツ タイプ情報を追加してください。 生成されたモデルの種類を使用して、ペイロードの構築に役立ちます。

// 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 やアイテムの同期やアクセス許可の変更などのアクションはサポートされていません。 これらの機能を追加するには、コード アプリ用のカスタム サービス ファイルを作成します。