はじめに
この記事は、Power Apps Advent Calendar 2023 12/18 担当分の記事です。
SharePointリストの画像列に画像を追加したときの挙動ですが、(私が確認した限りでは)11/11時点では変更されていました。
私がなにか勘違いしていると思いたいんだけど、 #SharePoint リストの画像列に画像追加するとSiteAssets配下ではなく、添付ファイル項目として登録されるようになった?? https://t.co/TkMiI3IUG4
— コルネ (@koruneko32767) 2023年11月11日
恐らくこちらのアップデートに関連した更新なのですが、公式で詳しく説明されているドキュメントは私は見つけられなかったです。
(なんかこれだけ書くと、いかがでしたでしょうか?の情報のない記事みたいになっちゃいますねw)
もし公式での詳しいアナウンスをご存知の方はコメントなどでご教示いただけますと幸いです。
アップデート後の仕様
さて、肝心のアップデート内容です。
何が変わったか?というとアップロードした画像ファイルの保存先です。
これまでは、SiteAssets(サイトのリソースファイル)のListsフォルダ配下に、リストIDの名前で作成されたフォルダ配下にそれぞれ画像が格納されていました。
しかしこれからは既存のリストも含めてSiteAssets配下には画像ファイルは作成されなくなりました。
*注意*
これまで保存していた画像は変わらずSiteAssets配下にあります。
ではどこに保存されるようになったか?というと、その行の「添付ファイル」フィールドに保存されるようになりました。
このアップデートによりリストのデータはリスト内だけで完結できるようになりました。
一々SiteAssetsを参照して~ということや、誤ってSiteAssets内のファイルやフォルダを消してしまうという事故がこれでなくなりましたね。
Power Appsで新しくなった画像列を利用する
画像列にアイテムを登録する
登録はこれまでと同じようにできます。
データソースから作成された新しい方のアプリを例に見てみましょう。
チェックアイコンを押してSubmitFormを行ってみます。
SubmitForm(Form1)
無事登録されましたね。
そして見ていただければわかるかと思いますが、添付ファイルフィールドにはなにも登録していなかったのに、添付ファイルにアイテムがあることがわかりますね。
比較用に添付ファイルなしの場合の行も置いておきます。
ただしこちらの画像列に紐づいた添付ファイルですが、リスト上で編集することはできません。
画像列のアイテムを表示する
画像列のアイテムもこれまでと同じように参照して表示が可能です。
もちろん画像のサイズを指定することもこれまで同様可能です。
気を付けないといけないのは添付ファイル項目です。
リスト上では表示されないようになっていましたが、Power Appsから参照すると普通に表示できます。
またこちらPower Appsから編集もでき、削除もできちゃいます。
削除しちゃうと、画像列は添付ファイルのアイテムを参照しているだけなので画像は表示されなくなります。
ただし、画像列には画像の情報はある...というおかしなデータになっちゃいます。
Note
添付ファイルの画像ファイルを消してもリストではしばらく画像は表示できるかと思います。(多分キャッシュかな?)
ただし画像ファイルを選択して、画像の保存されているリンクを開くと対象のファイルが見つからない旨のエラーが返ってくるかと思います。
Power Appsで見るとこんな感じ。
したがって、ユーザの操作ミスや知識不足による誤操作を避けるためにもアプリで添付ファイル列を表示/編集できるようにする場合は、画像列に紐づいたファイルを表示しないようにする必要があります。
さて、フィルタの方法ですが"Reserved_ImageAttachment"で始まらない添付ファイルのアイテム名でフィルタするしか現状対策はないです。
Power AppsからSharePoint Listに接続して得られる情報、ThisItem.添付ファイル
ではそれが添付ファイルに紐づいたアイテムなのかを確実に判断する術はありません。
画像列の画像ファイル名から判断する。という手もありますがこれには2つ問題があります。
- 画像ファイルのファイル名を取得するのがちょっと面倒
- Power Appsから画像ファイルを更新した場合、添付ファイルに前のアイテムが残ったままになる
まず1つ目のファイル名の取得ですがファイル名そのままの形式では取得できません。
このような形式から頑張ってファイル名を取得してあげる必要があります。
詳しいやり方は今回の本筋から離れるので割愛。
続いて2つ目の添付ファイルが残ったままの件ですが、リストから画像ファイルを変更した場合は元々設定されていた画像ファイルも添付ファイルから置き換わってくれます。
ただし、Power Appsから変更した場合は添付ファイル列に元々あった画像ファイルは変更されずに、新規画像ファイルが添付ファイルに登録されます。
画像列の画像の向き先は追加された添付ファイルの画像を向いてくれるので、見た目的には問題ないんですけどね。
さて、そんなわけでPower Appsから画像を5回変更した場合添付ファイル列には、
新規登録時の画像ファイル1枚 + 画像を変更した回数分の画像ファイル5枚
の計6枚の画像ファイルが添付ファイル列に登録されることになります。
IP Manager呼び出して更新してるっぽいですけど何とかしてくれないですかね。。。
上記の理由より"Reserved_ImageAttachment"で始まらない添付ファイルのアイテム名でフィルタして添付ファイルは表示してあげる必要が現状はあります。
Filter(ThisItem.添付ファイル, !StartsWith(DisplayName, "Reserved_ImageAttachment"))
お察しの方もいらっしゃると思いますが、"Reserved_ImageAttachment"で始まるファイルがもしユーザからアップされた場合はこのやり方はアウトです。
より厳密にするのであれば、もうちょっとフィルタ条件を絞るぐらいですかね。。。
どこかで妥協する必要はあります。
100点は求めないでください。
画像列のアイテムを削除する
これまでは画像列にBlank()
を渡せば画像ファイルを削除することができていました。
しかし、現時点ではそれでは画像の削除はできなくなっています。
画像ファイルの持ち方の仕様が変わっているので呼び出されるAPI Manager側も変更を加えなきゃいけないはずなんですが、それがまだ(?)行われてないからですね。(多分)
deleteFileAsync
が呼び出されてるっぽいですが、ファイル削除じゃないんじゃないかな。。。
暫定対応として一番簡単なのは、削除用の画像を用意してその画像に置き換えることですね。
実際画像ファイルが削除されるわけではないですが、削除されているように見せかけることでユーザに「ここに登録されている画像はないんだな」と認識してもらう運用です。
- 削除用画像を用意
(動き揃えるために空白の画像でもいいです。今回は説明用に×アイコンの画像を利用。)
- 画像の削除を行うためのアイコンやボタンを追加
(画像の追加コントロールには画像の削除を行う機能はないので独自で実現する必要があります。
これは今回の仕様変更に関係ありません。)
- 画像削除用アイコンやボタンが選択されたときは画像削除用フラグをオンにする
DeleteIcon.OnSelect
UpdateContext({isDeleteImage: true})
- 画像削除用フラグが立っていた場合は画像を削除用画像に切り替える
Image.Image
If(
isDeleteImage,
Delete,
// else
IsBlank(AddPicture1.Media),
Parent.Default,
AddPicture1.Media
)
- 画像変更時は画像削除用フラグをオフにする
AddPicture.OnChange
UpdateContext({isDeleteImage: false})
添付ファイルコントロール列をユーザが直接コントロールを弄ることなく既存の添付ファイル列のファイルを消す。
なんてことは現状API直接叩かないとできないはずですので、Pathc()やSubmitForm()では実現できないはずですね。
なにかいい案あれば教えてくださいー
おまけ
他できるようになったこと
Hirano AIさんもおっしゃっていますが、リストに対してドラッグ&ドロップで画像列にファイルを追加できるようになりました!
ってことは、もしかして、ようやく画像列に画像をドラッグ&ドロップできるようになったのかな? と確認したらできるようになっていた。
— HIRANO Ai | MVP 👉 ❤️ SharePoint (@ai_yamasaki) 2023年11月11日
添付ファイル扱いに変えたうえで、これを実装したのかも。#SharePoint #MicrosoftLists https://t.co/ySpS4WBkhl pic.twitter.com/rLKBAGM1qk
ただしこれは、SharePoint Listではできません。
Microsoft Listでのみできます。
SiteAssetsに画像が作成されるようにする
---2023/12/27 追記---
以下記事でリストの画像列に追加した画像が添付ファイル列ではなく"SiteAssets"配下に作成される方法を追記しました。
もちろんデメリットもあります。
おわりに
SharePoint Listの仕様がそもそも変わったことや、それによる変更点などがまとめられたような記事が公式にもないっぽかったので今回まとめました。
Power AuotmateやPower BIでにこれ関連の変更は気が向いたらまとめます。
こうした方が良いよー。や、ここ違うくない?などあればご指摘お待ちしております。