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.DisplayNameThisItem.Value.IdThisItem.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?.pdfdata<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のようなリンク切れを起こすファイル名でない限り、この変な技は成立します。
赤枠からドキュメントライブラリに遷移します。
いやー、誰かに怒られそうな実験ですね。




















