ひつじエンジニアのPowerPlatform備忘録

エンジニアの備忘録的ブログです。

【PowerApps】添付ファイルコントロールの添付ファイルサイズの上限について

背景

PowerAppsでカスタマイズしたSharepointリストフォームで100MBほどの動画ファイルを添付したいという要望があり、検証した結果を備忘録として残したいと思います。

 

 

検証結果

10MBきざみでダミーファイルを添付ファイルコントロールに添付し、Sharepointリストの添付ファイル列へ保存できるかを検証した結果、90MBまでは保存が確認できましたが、91MB以上からは保存が出来ませんでした。

※あくまで筆者の環境での検証結果であり、公式情報などの根拠はありませんのでご了承ください。

 

添付ファイルコントロールの最大添付サイズが100MB以上であれば、下図のようにコントロールへの添付自体は可能

保存ボタンをクリックする。

しかし、フォームが閉じると添付ファイルは添付されていない。

この検証方法では、90MBのファイルはうまく保存され、91MBからは保存されませんでした。

 

添付ファイルのサイズ上限設定方法

添付できるファイルの最大サイズ(合計ではなく添付ファイル一つのサイズ)の設定は添付ファイルコントロールの「MaxAttachmentSize」プロパティで設定できます。
デフォルト値:10(MB)

このプロパティに設定したサイズ以上のファイルを添付すると下図のような警告が表示され、添付がされません。

この設定はあくまで添付ファイルコントロールに添付できるファイルサイズを指定しているのであって、Sharepointリストの添付ファイル列に保存できる最大サイズを設定しているわけではないことに注意です。

 

 

おわりに

てっきりデータソース側の制限(今回はSharepointリストの添付ファイル列の制限250MB)までのサイズのファイルは保存できると思っていましたが、90MB程度までのファイルしか保存が出来ない結果となりました。
調べても公式な情報を見つけることが出来なかったですし、私の家のネットワーク環境などが関係しているのかな?とも思いました。
もし詳しい情報お持ちの方がいれば、ご教示頂けるとうれしいです。

【PowerApps】OnStartやOnEditなどのプロパティの実行順序と注意点について

背景

 PowerApps でSharepointリストのフォームをカスタマイズする際、フォーム実行時に変数を定義、初期化したりマスタからデータを取得したりといった処理を行えるプロパティがいくつかあります。(OnStartやOnVisibleなど)
 ここではそれらのプロパティの実行順序と、各プロパティで行う処理の注意点について記載していきます。

 

各プロパティの実行順序

プロパティOnStart、OnVisible、OnNew~各種の実行順序を調べるため、各プロパティで文字列変数にプロパティ名を結合する処理を設定し、その文字列変数を下記画像のようにラベルに表示しました。

結果として、下記のような実行順序となりました。

OnStart >  [OnVisible、OnNew、OnVisible、OnEdit]

どのプロパティよりも先にOnStartが実行されるようでした。
OnVisibleと[OnNew~各種]は実行順序がまちまちで、特にどちらが先に実行されるか決まっていないようでした。
各プロパティの特徴、注意点等を記載していきます。

 

OnStart

Appコントロールのプロパティで、アプリが実行されて一番最初に実行されます。

グローバル変数の宣言や、データソースからデータを取得してコレクションに格納するなど、アプリの中で使用するデータや変数の用意をする処理を行うのによいと思います。

Sharepointリストのフォームをカスタマイズしている場合(SharePointIntegrationコントロールが存在する)の注意点として、フォームを最初に開いた時はOnStartは実行されますが、一度フォームを閉じて再度フォームを開いた時にはOnStartが実行されない、という点が挙げられるかと思います。この動きについて下記解説します。

 

下図のようにリストアイテムのフォームを開きます。

フォーム外をクリックしてフォームを閉じます。

今開いていたのと別のアイテムのフォームを開きます。

このような動作をした場合、OnStartは最初にフォームを開いたときにしか実行されず、データがキャッシュされます。
ブラウザを更新後に再度アイテムのフォームを開いた際にはOnStartが実行されます。

 

このことから、OnStartではグローバル変数の宣言や、キャッシュされることでパフォーマンスが良くなるような大きなデータを読み込む処理を行うことがよさそうです。

※2022/11/30現在Microsoftの公式ドキュメントではOnStartの使用は推奨されておらず、代わりにStartScreen プロパティに初期表示するスクリーンを指定し、スクリーンのOnVisibleで処理をすることを勧めているようです。

 

OnVisible

OnVisibleはスクリーンコントロールのプロパティで、スクリーンが表示された時に実行されます。スクリーン上でしか参照できないローカル変数の宣言(UpdateContext)が行えます。

アプリで一番最初に表示されるスクリーンのOnVisibleはOnStartと同様に、最初にフォームを開いたときにしか実行されません。

 

OnNew、OnVisible、OnEdit

SharePointIntegrationコントロールのプロパティで、それぞれフォームを新規、表示、編集モードで開いた際に実行されます。

SharePointIntegrationコントロールSharepointリストの「フォームのカスタマイズ」からPowerAppsアプリを作成した際に追加されるコントロールです。

これらのプロパティでは、フォームを開くたびに必ず実行されてほしい処理を書くのが良いかと思います。(アイテムの列値を使った判定処理など)

OnNew~各種のプロパティでの注意点としては、OnStartでデータソースから取り込んだデータを使って判定処理などをすると、データがまだ取り込み中に判定をしてしまい、思っていない動作になる場合があることです。下記で解説します。


OnStartで家計簿マスタからデータをフィルターして取り込み、masterData1コレクションに格納します。

OnEditでmasterData1が空かどうかを判定し、空じゃない場合は
文字列"masterDataComleted"をProcessVal変数に結合します。

実際にフォームを初回実行(データがキャッシュされていない状態)すると、masterData1が空の判定となり、ProcessVal変数に追加されません。
※下図の赤い囲みはProcessVal変数の値で、OnStart→OnVisible→OnEditの順に実行されたことを表しています。

フォームを一度閉じ、再度フォームを開くとProcessVal変数に文字列"masterDataComleted"が追加されており、masterData1が正しく取り込まれた後にOnEditで判定処理が行われたことが分かります。

このように、OnStartで取り込んだデータをOnEditやOnViewなどで判定処理に使用すると、想定していない動作となる場合があるので注意が必要です。
パフォーマンスは多少落ちますが、今回で言うとOnEditの中でmasterData1を取り込むなどの回避策が考えられます。

 

おわりに

プロパティでの実行順序について自分なりにまとめてみました。
認識が間違っている点などございましたら是非ご指摘頂けますと幸いです。

今回の記事は2022/11/30現在の情報です。

 

【PowerAutomate】SharePointリストの添付ファイル列のファイルをライブラリに保存する方法

方法

PowerAutomateのフローからSharePointリストアイテムの添付ファイル列のファイルを取得し、ドキュメントライブラリへ保存する方法を記載する。

STEP1:PowerAutomateフローを作成

今回はPowerAppsでカスタマイズしたSharePointリストフォームから呼び出すフローを作成します。他のものでもよいのですが、ここでは「インスタントクラウドフローを構築する」>「PowerApps(V2)」トリガーからフローを作成します。

フローの編集画面を開き、「PowerApps(V2)」トリガーをクリックし、「入力の追加」>「数」の順にクリックして引数に数値型の項目を追加する。
左側の入力欄に引数名を[ID]と指定する。(ここにリストアイテムのIDを指定する)


「添付ファイルの取得」アクションを追加し、下記のようにプロパティを設定する。

[サイトのアドレス]:対象のサイト
[リスト名]:呼び出し元の対象リスト
[ID]:「PowerApps(V2)」トリガーの引数ID

※このアクションでは添付ファイル列の一覧が取得できるイメージで、ファイルのコンテンツ自体は取得されない。

 

「添付ファイルのコンテンツの取得」アクションを追加し、下記のようにプロパティを設定する。

[サイトのアドレス]:対象のサイト
[リスト名]:呼び出し元の対象リスト
[ID]:「PowerApps(V2)」トリガーの引数ID
[ファイル識別子]:前述の「添付ファイルの取得」アクションのIdを指定する。
※Idを指定すると自動でApplyToEachの中にアクションが配置され、添付ファイルの数だけループするように構成され、全ての添付ファイルに対しコンテンツの取得処理が行われるようになる。



ApplyToEachの中の「添付ファイルのコンテンツの取得」アクションの下に「ファイルの作成」アクションを追加し、下記のようにプロパティを設定する。

[サイトのアドレス]:対象のサイトを設定する。
[フォルダーのパス]:保存先のパスを指定する。(ここではtestLibというライブラリの
           ルートを指定している)
[ファイル名]:「添付ファイルの取得」アクションの「DisplayName」

[ファイルコンテンツ]:「添付ファイルのコンテンツの取得」アクションの
            「添付ファイルのコンテンツ」


フローの全体像は下の図のようになります。



STEP2:PowerAppsでカスタマイズしたSharepointリストフォームから呼び出す

PowerApps編集画面の左側の「Powerautomateアイコン」>「フローの追加」からSTEP1で作成したフローを追加します。

下記のように記述することでSTEP1で作ったフローを呼び出せます。

添付ファイル保存フロー.Run( リストアイテムのID )

※下記の例では、リストアイテムを更新した際に実行されるSharePointFormの[OnSuccess]プロパティで呼び出すことで、アイテムの作成、更新時に対象のリストアイテムの添付ファイルがライブラリへ保存されるようにしています。

 

おわりに

すべて標準のアクションのみで完結することができました。
添付ファイル列のファイルをライブラリへ保存する場面に出くわしたら参考にして頂ければ幸いです。

【SharePoint】PowerAutomateやPowerappsでのSPOのユーザー列の取り扱い、データ構成について

背景

下記のような場面でSharePointOnlineのユーザー列のデータ形式を知る必要があったので、ユーザー列への値設定方法についてわかる範囲でまとめてみました。

◆PowerAppsでSharePointリストをデータソースとしており、ユーザー列のコンボボックスに任意のユーザーを設定する場面

◆PowerAutomateでSharePointリストアイテムの列値の更新時、ユーザー列に任意のユーザーを指定する場面

 

1.SPOのユーザー列のデータ構成

PowerAutomateの「項目の取得」アクションでユーザー列の値を取得してきたJSONの構成が下記になります。

※[@odata.type]プロパティ以外以外にも値が入ってきますが、ここでは構成を確認したかっただけなので空文字に加工しております。

{
       "@odata.type": "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser",
       "Claims": "i:0#.f|membership|" & UPN"),
       "DisplayName": "",
       "Email": "",
       "Picture": ,
       "Department": "",
       "JobTitle": ""
}

PowerAutomate内では上記データの[@odata.type]プロパティ以外のプロパティを参照することが出来ます。

 

2.PowerAppsでSharepointリストのユーザー列をデータソースとするコントロールに任意のユーザーを設定する方法

Powerapps上のコンボボックスなどの規定値や更新値に任意のユーザーを設定する方法について記載します。

下記画像では、Sharepointリストのユーザー列をデータソースとするコンボボックスの「DefaultSelectedItems」プロパティに任意のユーザーを設定して規定値としています。

-「Claims」,「DisplayName」のプロパティは必須項目となります。
-「Claims」には "i:0#.f|membership|" & Lower("任意のメールアドレス")を指定します。
-「DisplayName」はコンボボックスで選択されている項目の表示名として使われますが、実際にユーザー情報のDisplayNameは更新されません。

リストフォームを開くと下記のように初期表示されます。



-複数ユーザーの指定の際は、上記オブジェクトをTable関数で配列に追加した形で設定します。
例)

Table(

 {
     Claims: "i:0#.f|membership|XXX@BBB.onmicrosoft.com",
     DisplayName: "羊 太郎",
     Email: "",
     Picture: "",
     Department: "",
     JobTitle: ""
 },

 {
     Claims: "i:0#.f|membership|UUU@BBB.onmicrosoft.com",
     DisplayName: "象 太郎",
     Email: "",
     Picture: "",
     Department: "",
     JobTitle: ""
 }

)

 

3.PowerAppsでPatch関数を使ってリストのユーザー列に任意のユーザーを設定する方法

Patch関数で直接Sharepointリストのユーザー列の値を設定する際も、前述した構成のオブジェクトや配列を指定することで保存が可能です。


下記コードでは、リストに[Title]列(1行テキスト)と[ユーザー選択列](ユーザー列)を指定してアイテムを追加している。

Patch(検証リスト ,Defaults(検証リスト),
    {
        Title:"title",
        ユーザー選択:
         {
            Claims:  "i:0#.f|membership|" & Lower(メールアドレス),
            Department: "",
            DisplayName: "",
            Email: "",
            JobTitle: "",
            Picture: ""        
        }
    }
);

 

 

4.PowerAutomateでSharepointリストのユーザー列を任意のユーザーに設定する方法

PowerAutomateの「項目の更新」アクションなどでユーザー列に任意のユーザーを設定する方法について記載します。

[ユーザー選択]ユーザー列(単数選択)にClaims値を設定する。
 

 

複数選択可能のユーザー列の更新については下記記事をぜひご覧ください。

hitsuji-techblog.hatenablog.com

 

以上

 

【PowerAutomate】「項目の更新」アクションでSharePointリストアイテムのユーザー列に複数のユーザーを設定する方法

背景

PowerAutomateの「項目の更新」アクションでSharePointリストアイテムの列の値を変更する際、複数選択可のユーザー列にユーザーを設定する必要があったため、この方法を記載する。

 

STEP1

複数選択可のユーザー列に値を設定する場合、下記形式のレコードを要素とする配列を設定する必要がある。

{
  "Claims": UPN(ユーザー列のClaims値など)}
}

「Apply To Each」アクションで配列変数に上記形式のレコードを追加していく。

ここでは、「項目の取得」アクションで取得したSharePointリストアイテムの複数選択可のユーザー列値を「Apply To Each」アクションでループ処理し、各Claims値を設定したレコードを配列変数へ追加している。

 

STEP2

「項目の更新」アクションの複数選択可のユーザー列の入力欄の右側の端にある「アレイ全体の入力に切り替える」ボタンをクリックする

 

STEP3

STEP1で作成した配列を「項目の更新」アクションの複数選択可のユーザー列に設定する。

以上

 

 

【SharePoint】アクセス許可レベル(編集、投稿、閲覧など)のID一覧(追加したアクセス許可レベルのID確認方法についても記載)

背景

PowerAutomateで標準アクション(アイテムまたはフォルダーへのアクセス権の付与)を使ってSharePointリストアイテムの権限を設定する際、設定する権限のIDが必要となったため、備忘録として既定のアクセス許可レベルのIDを表にしておきます。

(GETのHTTP要求を使い、ブラウザ上でIDを確認する方法も後述)

 

アクセス許可レベル ID
フルコントール 1073741829
デザイン 1073741828
編集 1073741830
投稿 1073741827
閲覧 1073741826
制限付きアクセス 1073741825

 

 

 

ブラウザで各アクセス許可レベルを確認する方法

STEP1

ブラウザのアドレスバーに「SharePointサイトURL + /_api/web/roledefinitions」と入力して検索するとXML形式で権限の情報が大量に表示される

 

STEP2

無料のXML整形ツールなどでxmlを整形し、アクセス許可レベル名を探し、その前に

出てくる「RoleDefinitions(xxxxxxxxxx)」という記述のxxxxxxxxxxの部分がIDとなります。(下記画像では[閲覧]のIDを赤で囲んでいます)

整形したxml

自分で追加したアクセス許可レベルのIDもこの方法で確認することが出来ます。

 

おわりに

もっとスマートに権限のを知る方法がありそうですが、とりあえずブラウザで簡単に確認は出来ました。
他の方法があればぜひ教えて頂きたいです。