0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SubmitForm後の添付ファイルの取得

言わずもがなな部分もありますが、Power Appsにおける編集フォームは自分が思っているよりも高性能です。

ユーザーがデータを追加、更新するときに使用する関数という認識ですが、

  1. フィールドごとのエラーチェック
    • エラーの場合、ErrorKindプロパティが設定され、OnFailure式が実行
  2. データ検証後に、データをデータソースに更新 SubmitForm
    • 成功した場合、Errorプロパティをクリア
    • OnSuccess式が実行される
    • 送信失敗の場合、Errorプロパティに問題の説明を設定
    • 同時更新を防ぐべくErrorKind.ConflictというErrorKindを持つ
  3. Unsavedプロパティで未保存の変更が失われるのを防ぐ

などなど、機能がモリモリ。

その中でもLastSubmitは、正常に送信されたレコードを返す非常に便利なプロパティです。
登録後に一意の値であるIDを含め、レコードを丸々取得できます。

さて、SharePoint Listsをデータソースにしていて、添付ファイルが有効である場合、
SubmitFormでは、Listsに添付ファイルをアップロードすることができます。

Power Appsの豊富な機能でも、Power Appsのみの機能で、添付ファイルをアップロードすることは方法が限られます。

アップロード先がListsの添付ファイル列ですが、複数のファイルをまとめてアップロードできるSubmitForm は、それだけでも魅力的な機能といえます。

Form.LastSubmit.添付ファイル

フォームコントロールの名前がFormの場合、
「Form.LastSubmit.添付ファイル」こちらから添付ファイルの一覧を取得できるようです。

image.png

列名 データ型 詳細
AbsoluteUri string文字列 添付ファイルのリンク
DisplayName string文字列 拡張子付きのファイル名
Id string文字列 識別子
Value string文字列 コントロールからファイルが保存がされる場所

テーブル型のデータですので、ギャラリー コントロールで参照できそうだなと思います。

ギャラリー コントロールをForm.LastSubmit.添付ファイルを表示できない

ところが面白いことに、ギャラリー コントロールItemsForm.LastSubmit.添付ファイルを設定しても値は参照できません。なぜでしょうね。

  • カーソルを合わせると値の参照できるが

image.png

  • テキストラベルで値が参照できない(無効となる)

image.png

私が、2024.06.10にキャンバスアプリで検証した結果

コレクションに格納しても表現できない。

ClearCollect(colFiles, Form.LastSubmit.添付ファイル);を使って、コレクション(colFiles)をItemsに設定したらどうなるでしょうか。

おもしろいことにcolFilesは、真っ白!

image.png

テーブル コントロールの場合

👆上がモダン、👇下がクラシックのテーブル コントロールです。

image.png

  • モダンは普通に表示される!
  • クラシックはErrorを出しながら出力する

非常に謎な現象が発生します。

とりまParseJSON 関数で対処する

このままだと平行線ですので、JSON 関数を用いて、値をJSON文字列にできるか試してみます。

image.png

無事できました。

これからParseJSON 関数を介して値を取得できそうです。

Items
// jsonObj: JSON(Form.LastSubmit.添付ファイル)をあらかじめ実行
Table(ParseJSON(jsonObj))

image.png

テキストラベルは

  • ThisItem.Value.DisplayName
  • ThisItem.Value.Id
  • ThisItem.Value.AbsoluteUri

上記を指定しています。

AbsoluteUri

AbsoluteUriを用いるとアップロードした添付ファイルが開けます。

image.png

AbsoluteUriは、https://{SharePoint Site}/Lists/{Lists Name}/Attachments/{Listの行ID}/{File name}と組み立てられます。アップロードしたあと、ファイル名はURLエンコードされます。
しかし前述で表現しているAbsoluteUriDisplayNameは、エンコード前の文字が表示されます。

ChatGPTでありえないファイル名をいくつか作ってもらい、

プロンプト
誤作動の要因となるファイル名を複数のパターンから提案してください。
拡張子は全て.pdfとします。
GPTの回答
誤作動の要因となる可能性のあるファイル名のパターンを以下に提案します。これらのパターンは、システムやソフトウェアが適切に処理できない場合があります。

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のような名前も使ってアップロードしてみます。

image.png

アップロードしてみたところ、一部タニにましたが、大体生きていますね。

image.png

  • 🙆 файл.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は絵文字であろうと空白を含んでいようと、そのまま評価されていることがわかりますね。

image.png

image.png

ちなみに何も記載がないテキストファイルなどは、アップロードができません。

image.png

■ 何も残らない・・・

image.png

Power Automateの添付ファイルの取得アクションで、リストの添付ファイル名を覗いてみると・・・

おいおい・・・

image.png

まじかよ・・・

image.png

不思議だ・・・。

こんな小技ができそう

これが何の役に立つか・・・あんまり日の目を帯びなそうですが、下記のシナリオが考えられます。

  1. SharePoint ListsSubmitFormで添付ファイルを登録する
  2. Concat関数HTML文字列から、リンク付きファイル名を作成する
  3. (2)のHTML文字列を、Power Automateに渡す
  4. Power Automateで、添付ファイルをドキュメント ライブラリに移動
  5. (3)でファイルのリンクを取得し、(2)のリンクと置き換え
  6. ListのHTMLテキスト列に反映

といったシナリオ・・・・?

image.png

このような運用は決して推奨しません。

Form.LastSubmit.添付ファイルから、リンク付き文字列をつくる

HTML テキストコントロールに下記の式を設定します。

HtmlText
Concat(
    Form.LastSubmit.添付ファイル,
    $"<p><a href='{AbsoluteUri}'>{DisplayName}</a></p>"
)

なぜかはわかりませんが、これも上手くいきます。

image.png

このAbsoluteUriを、

  1. 添付ファイルのコンテンツの取得
  2. ドキュメントライブラリにファイルをコピー
  3. ファイルのプロパティの取得
    上記から取得できるアイテムへのリンクから置き換えてみます。

image.png

果たしてうまくいくでしょうか。

結論 大体うまくいってしまう

report#.pdfのようなリンク切れを起こすファイル名でない限り、この変な技は成立します。

image.png

赤枠からドキュメントライブラリに遷移します。

image.png

いやー、誰かに怒られそうな実験ですね。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?