カテゴリ「Power Apps」の34件の投稿 Feed

2025年7月15日 (火)

今年の2月ごろ、Power Apps の研修でいつものようにモバイルアプリにカメラ機能を搭載してそこからPower Automate 経由で SharePoint に画像を保存するという演習をやろうとするとうまくいかないというトラブルが。

結果的には、一時的な不具合だったようで現在は修正されていますが、それだけでなく画像の取り扱いの仕様が少し変わったところもあるようなので改めて画像についての取り扱いを整理しておきたいと思います。
※あくまでも2025年7月現在の話であり、今後はまた変更されることもあると思いますのでご注意ください

Power Apps での画像の取り扱い

Power Apps では画像データは Base64形式で保持します。ですから、Power Automate に渡して画像を SharePoint や OneDrive(Business)にファイルとして保存する場合、Base64であることを考慮した処理が必要となります。

参考: そもそも Base64 とは?

ここでBase64 (ベース ロクジュウヨン) とは何かというのを補足しておきましょう。

Base64 とはバイナリデータ(0か1かで表現されたデータ) を文字データに変換するエンコーディング方式の一つです。画像やファイルのようなバイナリデータをアルファベット(A-Z, a-z)、数字(0-9)、特殊文字(+,/) の64種類の文字で表現します。Base 64の “64” はこれに由来しています。便利な反面、テキスト化すると、元データより多少膨らむ(約1.37倍)点には注意が必要です。

この仕組みはもともとデータを文字形式に変換して電子メールなどのテキストベースのプロトコルで送信できるようにするために設計されました。

さて、Power Apps のカメラコントロールの Photo プロパティでは撮影した画像が直接 Base64でエンコードされます。ラベルなどに Photo プロパティを割り当てると値を簡単に確認できます。

20250712_155343

ちなみに、Base64 には次の2つの形式があります。

  • Data URI
  • プレーン Base64

Data URI は接頭辞に "data:image/png;base64;iVBORw0..." のように実データ以外にファイルの種類などを示す文字列が追加されます。先ほどのカメラコントロールの Photo プロパティは Data URI です。

Power Automate にData URIを渡すと自動的にこの接頭辞は除去されプレーンな Base64 が渡されるようになっています。←これは実は、以前とは仕様が異なっているところ

ちなみに、画像コントロールや画像の追加コントロールに含まれるUploadedImageコントロールのImage プロパティはユーザーが画面に画像を追加すると Data URI ではなく appres://... という形式の値が格納されます。

20250712_121621

コントロール プロパティ 値の例
画像 Image appres://resources/P3293125
画像の追加 (UploadedImage1) Image appres://blobmanager/85db1f7390a34828b5d2f4f5e2cef0c3/1
画像の追加 (AddMediaButton1) Media appres://blobmanager/85db1f7390a34828b5d2f4f5e2cef0c3/1
カメラ Photo / Stream data:image/png;base64,iVBORw0…(中略)…K5CYII=

appres:// で始まるのは Power Apps 内の内部リソース参照となっていて、「埋め込み画像」または「一時参照URI」などと呼ばれたりもします。各形式の意味と用途は次の通りです。

値の形式 意味 取得元コントロール例 特徴

appres://resources/xxxxx...

アプリに事前に埋め込まれた静的リソースへの参照 画像コントロールImage 誰が見ても同じ画像

appres://blobmanager/xxxxx....

実行時にアップロードまたは選択された一時Blob参照

UploadedImage.Image

AddMediaButton.Media

一時的な画像、ユーザーごとに異なる

と、ここまでは PC ブラウザー上の話で、Power Apps のモバイルアプリの場合は異なります。埋め込み画像以外のカメラコントロールや画像の追加コントロールの画像は格納先のパスが表示され、それぞれ "/SessionStorage/" 配下に格納されているのがわかります。Screenshot_20250714_214205_power_ap

Power Automate のクラウドフローに画像を渡す場合は、 Power Apps V2 コネクターのトリガーの引数として「ファイル」を追加しておきます。

20250712_155851

20250712_155908_2

20250712_160342

Power Apps 側ではカメラコントロールで撮影した画像をプレビューするために画像コントロールのImageプロパティに割り当てることがよくあります。そのため、この場合の画像コントロールの Image プロパティにはData URIの Base 64 が格納されます。

20250712_223641

20250712_223428

ところで、画像の拡張子はカメラコントロールのPhotoプロパティから取得する場合は PNG形式ですが、その他の画像形式などもあり得ます。汎用的に拡張子を判定するためには次のように式を構成することも可能です。これをフローの呼び出し時などに使うといいでしょう。

//PCブラウザーかモバイル化の判定
Set(_IsMobile,If(Host.OSType="Android" || Host.OSType="iOS",true,false));

//Base64の先頭からmime typeを抽出する
Set(_mimeType,
//PCブラウザーの場合
If(!_IsMobile,Mid(Camera1.Photo,6,Find(";",Camera1.Photo)-6),
//モバイルの場合
Right(Camera1.Photo,4)
));

//ファイルの拡張子を決める
Set(_fileExtension,
    If(_IsMobile,
        _mimeType,
        Switch(_mimeType,
            "image/jpeg", ".jpg",
            "image/png", ".png",
            "image/gif", ".gif",
            "image/bmp", ".bmp",
            // Default case (optional)
            Blank()
        )
    )
);

20250714_220753

さて、先述した通りPower Automateに送信するときにはData URI(data:image/xxx;base64,) のヘッダー部分を自動的に除去し、contentBytes にはプレーンBase64のみが格納されます。実際のフローの実行結果からもcontentBytesのフィールドで確認できます。

20250712_163309

そのため、SharePoint にファイルを保存する場合は、SharePoint コネクターの「ファイルの作成」アクションのファイルコンテンツ プロパティでは base64ToBinary 関数を使い、次のように式を指定します。以上で SharePoint に画像をファイルとして保存することができます。

base64ToBinary(triggerBody()?['file']?['contentBytes'])

20250712_224510

従来からの仕様変更の注意点

長らく(昨年の2024年のおそらく後半までは) Power Apps のカメラコントロールから Power Automate に渡した画像はData Uri 形式であったため、Power Automate 側で画像を受け取った後は dataUriToBinary() を使っていました。ですが、内部的な使用変更があったようでプレーンなBase64が渡されるようになっているため base64ToBinary() を使う必要があるので注意しましょう。

2024年11月 6日 (水)

Power Apps のキャンバスアプリの共有画面が更新され、SharePoint などの共有リンク作成画面と似た画面に変わっています。変わったばかりで表記も英語のままですね。

この新しいUXでユーザーのロールを編集するなどしていると時々不具合が発生することがあります。そんな時にはクラシックな共有画面にアクセスしてみましょう。クラシックなUXの方が今のところ操作は安定しているようです。

分かりにくいのですが、右上の3点リーダーをクリックすると、「Use classic sharing」というメニューが表示されます。

20241106_200327

ここをクリックすると次の通り、クラシックな共有画面にアクセスできます。

20241106_201055

トラブルの原因や発生条件はわからないのですが、とりあえず、Power Platform 環境で起きたトラブルシューティングの顛末を記録しておきます。

----------------------------------

弊社ではPower Apps の研修を定期的にしているのですけれど、受講者の方には最近は専用の開発者環境を事前に作成しておいてそこでアプリ作成をしてもらうようにしています。

そのため、研修の度にリセットして利用しています。

いつものように昨日の午前中に受講者用の環境をリセットしたわけです。で、今日はその環境でアプリ作成をあれこれとしてもらうことにしました。

まず起きたのが午前中にそれぞれに作成した開発者環境が環境の切り替えに現れなくなったというもの。それぞれの開発者環境でのアプリ開発をする前に、たまたま、新機能のキャンバスアプリの同時編集を試していました。その直後だったので、それが何かしら影響しているのかも知れない気もしなくもありません。同時編集のリンクにアクセスしようと、全員が何かしらアクセスできないエラーが起きていたためです。しかも、各アカウントに私のPC上からアクセスすると環境切り替えに目的の環境は出てきていました。そうなると各PC側の問題かと考えます。受講者の方々のPC側の問題かも? ととりあえず、キャッシュクリアをお願いしたのですが状況は改善せず。

今考えると、トラブルの最初はここだったような気がします。

仕方がないので、テナントの管理者である私のアカウントであれば全員の開発者環境はアクセスできるため、各環境のURLをそれぞれに渡して、直接環境へのリンクにアクセスしてもらいました。まずはこれで問題なくアプリが作れるようになったのです。

しかし、午後過ぎに突然、アプリが作成できなくなりました。リセットしていない他の環境では起きなかったので、共通項としては「開発者環境」&「最近リセットした」くらいなんですね。あっ、そういえば、もう一つ、リセットしていないけれど昨日新規に作成した開発環境でも同じ現象が発生していました。

キャンパスアプリを作成しようとすると下記のようにエラーが表示されるのです。

20241106_181920

つい、さきほどまで作成できていましたし、だれも何も設定変更などしていないので、これは明らかにおかしい。ちなみに、こうなると既存のアプリも編集できないし、エクスポートもできません。

ということで、まずは問題が起きているユーザーアカウントに切り替えて、Power Platform 管理センターにアクセスするのですが、本来、ユーザー自身が環境管理者となっているはずの「開発者環境」がそもそも全く表示されません。表示されているのは唯一、既定の環境のみ。

仕方がないので、またまたPower Platform管理者である私が Power Platform 管理センターから問題の生じている各開発者環境にアクセスします。すると環境ハブにはアクセスできるのですが、アクセス権限に問題が生じているのだろうと「設定」画面やセキュリティロール画面にアクセスしようとすると、次のエラーが表示されてしまい何もできなくなってしまう。

「RetrievePriviledgeForUser: The user id xxxxx-xxxxx-xxxxx has not been assined any roles. They need a role with the prvReadOrganization priviledge. ~」

20241106_181515

まぁ、権限がないということなんですが、私がテナント管理者だしPower Platform 管理者だし、これ以上誰も特権は持っていないわけです。さてさて、、、セキュリティ情報がどこか壊れた? 

と、途方に暮れかけていたのですが、一つだけ利用できる設定がありました! 環境ハブのコマンドバーにある「メンバーシップ」メニューです。これが開ける! が、

「現在、管理者を表示できません。再試行する前に[自分を追加する]をクリックして、システム管理者ロールに自分のアカウントを追加してください」

20241106_185529

と表示されます。ということで急ぎ、「自分を追加する」をクリックすると自分自身ともともと指定していたユーザーも自動的に追加されました! 

20241106_185754

これでどうやら復活した模様。無事に設定画面にもアクセスできるようになり、アプリの作成、編集、エクスポートもできるように。また、各ユーザーアカウントからも Power Platform 管理センター上の「環境」に各管理者となっている環境も現れるようになりました。

20241106_195307

原因は全く持って不明ですが、今後、もし似たような問題に直面することがあれば、自分を含めほかの方にも対処療法として知っておくとよいかなと思ったので、ここに書き留めておくことにしました。

ご参考まで。

p.s. ちなみに、アプリが突如作成できなくなった時には、とりあえず問題の起きていない環境もしくは受講者それぞれの組織のテナントでアプリ作成をしてもらい、研修後にあらためて(落ち着いて) 環境の確認をしていたところ、上記の「メンバーシップ」の追加での修正にたどりつきました。

p.s. おいしみ(@ksgiksg)さん / X)さんからの追加情報で、「メンバーシップ」の追加に関しては↓が関係しているのではということでした。

PowerPlatform管理者が環境の管理者に自動割り当てされなくなった #Microsoft - Qiita

確かに、管理者が環境の設定にアクセスできなかったのはこれのようですね。ですが、解せないのはこれを追加することで、環境の管理者として設定していたユーザーがこれまで通り、環境にアクセスできるようになったということですね。管理者の私はともかく、ユーザーは直接関係ないはずで。うーん、たぶん小さいバグでも踏んだ気がします。。。ですが、おいしみさん、この情報はちゃんと読んでいなかったので、情報提供をありがとうございました!!!

2024年9月27日 (金)

Power Platform の HTTP with Microsoft Entra ID コネクターが 2024年8月末ごろに急遽廃止になったようです。現在、Power Automate で確認したところモダンデザイナーではそもそも旧コネクターがでてきません。コネクターの一覧でも "Deprecated" の文字があります。

20240927_182754

後継としてはすでに提供されている HTTP with Microsoft Entra ID (preauthorized) を使うことになります。ただ、API エンドポイントによってはどうも制限がされているようです。私のお客様からも利用できないエンドポイントがあるという話は耳にしています。この辺りは、下記の新旧コネクターの比較記事が詳しいです。

What is the difference between HTTP with Microsoft Entra ID and HTTP with Microsoft Entra ID (preauthorized) connectors? - Forward Forever

なお、Microsoft Learn のコネクター説明のページは 2024年9月27日現在、日本語ページに "廃止" については書かれていません。ただし、英語の方はすでに更新されおり、廃止に言及しています。

HTTP With Microsoft Entra ID (deprecated) [DEPRECATED] - Connectors | Microsoft Learn

ちなみにさきほどご紹介した Forward Forever の記事の下にコメント欄があり、あれこれやり取りされていますが、どうも廃止は急だったようでアナウンスもなかったようですね。私もあれこれ調べましたが、廃止のアナウンスは見つけられませんでした。コメント内でも "サポートに問い合わせたら Microsoft も知らなかったようだ" とも書かれているので、いつの間にか廃止になったようです。コネクターで deprecated になるものはたくさんありますけど、こんなに早く廃止されて使えなくなるというのは珍しいように思います。

ということで、これに関して日本語の情報が見当たらなかったので備忘録として記事にしておきました。

2024年9月21日 (土)

[単なる備忘録]

Power Apps モデル駆動型アプリで、マイアプリから削除しようとするとエラーで削除できず。ソリューションから削除しようと既定のソリューションを開いて削除しようとしてもエラー。依存関係を確認するも特に影響しそうなものはない。あれこれ調べて結局、ソリューションをクラシック表示に切り替えて当該アプリをソリューションから削除してみたら削除ができた。

20240921_170053

でモダンになぜかアプリが残っているので、これを再度削除するとすっきり削除できた。モダン画面のバグではないかと思うのだけれど理屈はよくわかりません。

ということで、また削除できなかった時のための自分向けの備忘録でした(もしかしたら同じ状況になる人もいるかもしれないので一応公開してみました)。