SubmitForm後の添付ファイルの取得
言わずもがなな部分もありますが、Power Appsにおける編集フォームは自分が思っているよりも高性能です。
ユーザーがデータを追加、更新するときに使用する関数という認識ですが、
- フィールドごとのエラーチェック
- エラーの場合、
ErrorKind
プロパティが設定され、OnFailure
式が実行
- エラーの場合、
- データ検証後に、データをデータソースに更新
SubmitForm
- 成功した場合、Errorプロパティをクリア
-
OnSuccess
式が実行される - 送信失敗の場合、Errorプロパティに問題の説明を設定
- 同時更新を防ぐべく
ErrorKind.Conflict
というErrorKindを持つ
-
Unsaved
プロパティで未保存の変更が失われるのを防ぐ
などなど、機能がモリモリ。
その中でもLastSubmit
は、正常に送信されたレコードを返す非常に便利なプロパティです。
登録後に一意の値であるID
を含め、レコードを丸々取得できます。
さて、SharePoint Listsをデータソースにしていて、添付ファイルが有効である場合、
SubmitFormでは、Listsに添付ファイルをアップロードすることができます。
Power Appsの豊富な機能でも、Power Appsのみの機能で、添付ファイルをアップロードすることは方法が限られます。
アップロード先がListsの添付ファイル列ですが、複数のファイルをまとめてアップロードできるSubmitForm
は、それだけでも魅力的な機能といえます。
Form.LastSubmit.添付ファイル
フォームコントロールの名前がForm
の場合、
「Form.LastSubmit.添付ファイル」
こちらから添付ファイルの一覧を取得できるようです。
列名 | データ型 | 詳細 |
---|---|---|
AbsoluteUri |
string 文字列 |
添付ファイルのリンク |
DisplayName |
string 文字列 |
拡張子付きのファイル名 |
Id |
string 文字列 |
識別子 |
Value |
string 文字列 |
コントロールからファイルが保存がされる場所 |
テーブル型
のデータですので、ギャラリー コントロール
で参照できそうだなと思います。
ギャラリー コントロールをForm.LastSubmit.添付ファイル
を表示できない
ところが面白いことに、ギャラリー コントロール
のItems
にForm.LastSubmit.添付ファイル
を設定しても値は参照できません。なぜでしょうね。
- カーソルを合わせると値の参照できるが
- テキストラベルで値が参照できない(無効となる)
私が、2024.06.10にキャンバスアプリで検証した結果
コレクションに格納しても表現できない。
ClearCollect(colFiles, Form.LastSubmit.添付ファイル);
を使って、コレクション(colFiles)をItems
に設定したらどうなるでしょうか。
おもしろいことにcolFiles
は、真っ白!
テーブル コントロールの場合
👆上がモダン、👇下がクラシックのテーブル コントロール
です。
- モダンは普通に表示される!
- クラシックはErrorを出しながら出力する
非常に謎な現象が発生します。
とりまParseJSON 関数で対処する
このままだと平行線ですので、JSON 関数を用いて、値をJSON文字列にできるか試してみます。
無事できました。
これからParseJSON 関数を介して値を取得できそうです。
// jsonObj: JSON(Form.LastSubmit.添付ファイル)をあらかじめ実行
Table(ParseJSON(jsonObj))
テキストラベルは
ThisItem.Value.DisplayName
ThisItem.Value.Id
ThisItem.Value.AbsoluteUri
上記を指定しています。
AbsoluteUri
AbsoluteUri
を用いるとアップロードした添付ファイルが開けます。
AbsoluteUriは、https://{SharePoint Site}/Lists/{Lists Name}/Attachments/{Listの行ID}/{File name}
と組み立てられます。アップロードしたあと、ファイル名はURLエンコードされます。
しかし前述で表現しているAbsoluteUri
やDisplayName
は、エンコード前の文字が表示されます。
ChatGPT
でありえないファイル名をいくつか作ってもらい、
誤作動の要因となるファイル名を複数のパターンから提案してください。
拡張子は全て.pdfとします。
誤作動の要因となる可能性のあるファイル名のパターンを以下に提案します。これらのパターンは、システムやソフトウェアが適切に処理できない場合があります。
1. **特殊文字を含むファイル名**
- `document?.pdf`
- `report#.pdf`
- `data<analysis>.pdf`
2. **非常に長いファイル名**
- `this_is_a_very_long_file_name_that_might_cause_errors_in_some_systems_due_to_length_constraints.pdf`
3. **空白やタブを含むファイル名**
- `report .pdf`
- `file name.pdf`
4. **制御文字を含むファイル名**
- `file\nname.pdf` (改行文字)
- `file\tname.pdf` (タブ文字)
5. **システム予約語を含むファイル名**
- `CON.pdf`
- `PRN.pdf`
- `AUX.pdf`
- `NUL.pdf`
6. **異なる言語やエンコードを含むファイル名**
- `ファイル名.pdf`
- `файл.pdf`
- `文件.pdf`
7. **拡張子が連続するファイル名**
- `document..pdf`
- `report.final.pdf`
これらのパターンは、特定のシステムやソフトウェア環境で誤作動を引き起こす可能性があります。テストや運用環境での使用にあたっては、注意が必要です。
document?.pdf
data<analysis>.pdf
-
file\nname.pdf
(改行文字) -
file\tname.pdf
(タブ文字)
GUIで設定できないため、まずつく名前ではないだろう、ということで除外
将来を見越して🐟ほうこく★📃.pdf
のような名前も使ってアップロードしてみます。
アップロードしてみたところ、一部タニにましたが、大体生きていますね。
- 🙆 файл.pdf
- 🙆 ファイル名.pdf
- 🙆 🐟ほうこく★📃.pdf
- 🙆 文件.pdf
- ❌ NUL.pdf
- ❌ PRN.pdf
- 🙆 report .pdf
- ❌(リンク切れ) report#.pdf
- 🙆 report.final.pdf
- 🙆 this_is_a_very_long_file_name_that_might_cause_errors_in_some_systems_due_to_length_constraints.pdf
- 🙆 document..pdf
- 🙆 document.pdf.pdf
- 🙆 filename.pdf
- 🙆 filetname.pdf
- AUX.pdf
- CON.pdf
- ❌ dataanalysis.pdf
PCの予約語以外いけましたね。AbsoluteUri
は絵文字であろうと空白を含んでいようと、そのまま評価されていることがわかりますね。
ちなみに何も記載がないテキストファイルなどは、アップロードができません。
■ 何も残らない・・・
Power Automateの添付ファイルの取得
アクションで、リストの添付ファイル名を覗いてみると・・・
おいおい・・・
まじかよ・・・
不思議だ・・・。
こんな小技ができそう
これが何の役に立つか・・・あんまり日の目を帯びなそうですが、下記のシナリオが考えられます。
-
SharePoint Lists
にSubmitForm
で添付ファイルを登録する -
Concat関数
でHTML文字列
から、リンク付きファイル名
を作成する - (2)の
HTML文字列
を、Power Automate
に渡す -
Power Automate
で、添付ファイルをドキュメント ライブラリ
に移動 - (3)で
ファイルのリンク
を取得し、(2)のリンクと置き換え - Listの
HTMLテキスト
列に反映
といったシナリオ・・・・?
このような運用は決して推奨しません。
Form.LastSubmit.添付ファイルから、リンク付き文字列をつくる
HTML テキスト
コントロールに下記の式を設定します。
Concat(
Form.LastSubmit.添付ファイル,
$"<p><a href='{AbsoluteUri}'>{DisplayName}</a></p>"
)
なぜかはわかりませんが、これも上手くいきます。
このAbsoluteUri
を、
- 添付ファイルのコンテンツの取得
- ドキュメントライブラリにファイルをコピー
- ファイルのプロパティの取得
上記から取得できるアイテムへのリンクから置き換えてみます。
果たしてうまくいくでしょうか。
結論 大体うまくいってしまう
report#.pdf
のようなリンク切れを起こすファイル名でない限り、この変な技は成立します。
赤枠からドキュメントライブラリに遷移
します。
いやー、誰かに怒られそうな実験ですね。