Power Apps ギャラリー内に画像を表示する

調べたこと・分かったこと

Power Appsにて、ギャラリー内に画像を表示するのにハマったので残しておきます。

やりたかったこと

  • Power Appsのキャンバスアプリに配置したGalleryにて、データごとに画像を表示したい
  • このギャラリーのデータソースは、CDS(Common Data Service)に作成した以下のようなエンティティ
idproduct_name
1牛乳
2
3野菜
4
製品エンティティ

(Common Data Serviceは、名称が「Dataflex Pro」に変更されたようです。)

  • 画像ファイルは、「メディア」タブよりアップロード済み

上の例で言えば、牛乳のデータであれば牛乳の画像(milk.jpg)、肉のデータであれば肉の画像(meat.jpg)を表示したい

  • データが増えた際に、コードの修正は最小限としたい

例えば、ギャラリー内の画像コントロールのImageプロパティに、以下のように記述することを考えます。

Switch(ThisItem.product_name, "牛乳", milk, "肉", meat, "野菜", vegetables, "卵", eggs)

データの内容に応じて、表示する画像を切り替えるやり方です。

これでもやりたいことは実現できるのですが、製品データが増えた場合、分岐処理を追加する対応が必要になります。

これはできればやりたくない。。

ギャラリー内の画像をデータによって切り替える方法

1. 製品データに、画像パスを含める

idproduct_nameimg_path
1牛乳appres://resources/milk
2appres://resources/meat
3野菜appres://resources/vegetables
4appres://resources/eggs
製品エンティティ

メディアタブにてアップロードしたファイルへのパスは、以下の記述で指定できます。

appres://resources/ファイル名

注意点として、ファイルの拡張子は含めないことです。拡張子を含めてしまうとパスがうまく認識されませんでした。

2. ギャラリー内の画像コントロールのImageプロパティを以下に設定する

ThisItem.img_path

以上で、リストが正しく表示されました。

3. ダミー画面に画像を追加する

これまでの対応で、デバッグモードではうまく表示されるのですが、公開したアプリを起動すると画像が表示されません。

調査したところ、こちらに同じ事象を質問している投稿を見つけました。

Image resource not loading with app
OK. Here is my app scenario: I have created an app that includes several images as resources, but which does not directly use the images in an image control on ...

I faced the same issue and the only solution seems to creat that dummy screen and load all the images there.

https://powerusers.microsoft.com/t5/Building-Power-Apps/Image-resource-not-loading-with-app/td-p/90734

ダミー画面を追加して全イメージをロードする方法しかない、とのこと。

半信半疑でしたが、新規画面を追加してそこに全部の画像を追加したところ、本番アプリでも画像が表示されるようになりました!

まだ理屈は理解できてないですが、とりあえずできたのでよしとします。

コメント

タイトルとURLをコピーしました