追加出費なく使える範囲でPower Platformを使い倒すため、データソースをSharePointリストだけで頑張る方法を調べました。
Power Appsのフォームコントロールで「個人」型データを指定する
編集フォームでリストに書き込む
フォームで個人型に対応する値をメールアドレスなどから構成する場合は、対応するカードのUpdateやDefaultを以下のように指定します。
{
Claims: "i:0#.f|membership|" & User().Email,
DisplayName: User().FullName
}
Patch関数でリストに書き込む
Patch関数の更新で個人型のレコードを書き込む列名に対して、以下のような値を指定します。
Claimsにメールアドレスが正しく入ってれば、Displynameはじめほかの値は適切な値に置き換えてリストに保存される模様。
{
Value:"",
'@odata.type':"#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser",
Claims: "i:0#.f|membership|" & Lower(User().Email),
Department: "",
DisplayName: "",
Email: "",
JobTitle: "",
Picture: ""
}
Power Appsで取得した画像をAutomateを経由せずにリストに格納する
詳細はリンク先を参照
画像をJSON形式で扱うことで、リストの複数行テキスト列に格納できます。この方法であれば、SharePoint内に画像ライブラリや画像の保存フォルダを用意する必要がありません。
画像を文字列で扱えるといっても、フォームコントロールを介してリストにデータを送ることはできません。代わりに、Patch関数またはCollect関数でSharePointリストにアイテムを追加します。
JSON形式で画像を扱うとき
JSON関数に画像を読み取るコントロールのphotoやimageプロパティを渡します。ここでは、グローバル変数ImageJsonにカメラコントロールCamera1で取得した画像を設定するコードを紹介します。
Set(
ImageJson,
JSON(Camera1.photo,IncludeBinaryData)
);
SharePointリストに投稿するとき
JSON形式の画像ImageJSONをSharePointリストの複数行テキスト列GAZOに格納します。Patch関数を使った場合は次のようになります。
Patch( リストの名前,
Defaults( リストの名前 ),
{ Title: "タイトル列の値",
GAZO: ImageJSON
}
)
JSON形式で格納された画像を表示するとき
複数行テキスト列の値を読むと、ダブルクォーテーションで囲まれた文字列が返ります。このダブルクォーテーションを除去する操作をします。画像コントロールなどのimageプロパティに以下のような設定を行います。
ここではリストの2番目のレコードのGAZO列の値を表示します。
Substitute( Index( リストの名前, 2).GAZO,"""","")
SharePointリストのアイテム数(行数)制限
リストのアイテム数にはいくつかの上限が存在します。リストを読み込むサービスによる制限もあり、注意が必要です。
明確な上限数ない注意点
PowerAppsで大量のデータを読み込ませると処理しきれずに動作が不安定になります。
明確な上限数・閾値
100
Power AutomateのSharePointコネクタ「複数の項目を取得する」アクションでは、既定の読み込み件数が100です。設定を変更すれば5000件まで行けます。詳しくはリンク先をあご覧ください。
500
Power Appsが読み込む件数は既定が500件です。設定変更で2000まで行けます。これ以上はうまく委任を使ってください。
2,000
PowerAppsで読み込める最大の件数です。これ以上の件数があるデータソースを使用する場合は、委任できる関数で2000件以下に絞って読み込む必要があります。
PowerAppsの初心者だと2000件以上のデータソースは扱えないと思っている方もいますので、委任の考え方を身に付けてこの壁を突破しましょう。
5,000
SharePointリストのビューが一度に処理できる上限です。リストの並べかえなどが適切に行えない場合があります。
5000以上のアイテム数が入ったリストを操作する場合は、委任とインデックス列を意識する必要があります。インデックス付の列の設定を忘れずに。
SharePointリストの5000件問題として有名な閾値ですが、真の上限ではありません。「委任とインデックス付列」を意識していれば大丈夫です。
30,000,000
SharePointリストに保存できるアイテム数の上限です。存在するアイテム数が3000万件を超えないようにサービスを設計しましょう。
3000万行のデータを手軽さが売りのSharePointリストでやるのかという観点はありますが、業務システムだと平気で5年10年使われることもありますので限界まで余裕を持っておきたいですね。