0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PowerApps】入力数を増減できる動的フォームの作成方法

Posted at

入力数を増減できる動的フォームの作成方法

フォームに複数の入力欄を設けたいけど、最初から固定数を表示するのではなく、ユーザーが必要に応じて追加・削除できるようにしたい。そんなときに便利なのが「動的フォーム」です。

この記事では、PowerAppsで、入力欄を自由に追加・削除できるフォームの作り方を解説します。

gif.gif

画面イメージ

image.png

必要なもの

※入力箇所2点 添付ファイル1点の想定

image.png

image.png

各コントロールのプロパティ

スクリーン

image.png

RegisterScreen.OnVisible
ClearCollect(
    colFormData,
    {
        Index: 1, //通し番号
        Title: "", //タイトル
        Remarks: "", //備考
        attchment: Table(), //添付ファイル
        ID: 100 //ID 100刻みの場合
    }
);

入力フォームがすべて閉じられた時の追加ボタン

image.png

icnAddFormL.OnSelect
Collect(colFormData,{ID: 100 });
icnAddFormL.Visible
CountRows(colFormData)< 1

⏷ギャラリー

image.png

galForm.Items
ForAll(Sequence(CountRows(colFormData)),Patch(Index(Sort(colFormData,ID,SortOrder.Ascending), Value),{Index:Value}))

通し番号表示ラベル

image.png

lblIndex.Text
ThisItem.Index

タイトルラベル

image.png
※タイトルを表示しているだけなので割愛

テキストボックス

image.png

txtTitle.OnChange
Patch(colFormData,LookUp(colFormData,ID=ThisItem.ID),{Title:txtTitle.Text})
txtTitle.Default
ThisItem.Title

image.png

上記txtTitleと同様のため割愛

・・・


添付ファイル

image.png

Attachment.Items
ThisItem.attchment
Attachment.OnAddFile
Patch(colFormData,LookUp(colFormData,ID=ThisItem.ID),{attchment:Self.Attachments})

image.png

添付ファイルの最初の画像のみ表示する画像コントロール

分かりやすくするためギャラリーに入れてますがなくても問題ありません。

imgAttachmentValue.Image
First(Attachment.Attachments).Value

フォーム追加用ボタン

image.png

icnAaddForm.OnSelect
// ThisItem の位置に新規行を挿入
// ID  100 刻み
//   - 最後に挿入  Max(ID) + 100
//   - 先頭に挿入  100 を新規IDにし全行を +100 して頭出し
//   - 途中に挿入  ThisItem.ID に新規を入れそこ以上のIDを +100 でシフト
With(
    {
        step: 100,
        curID: ThisItem.ID,
        minID: Min(colFormData, ID),
        maxID: Max(colFormData, ID),
        isTail: ThisItem.ID = Max(colFormData, ID),
        isHead: ThisItem.ID = Min(colFormData, ID)
    },
    If(
        isTail,
        // 末尾に挿入
        Collect(colFormData, { ID: maxID + step }),
        // 先頭 or 途中
        UpdateIf(
            colFormData,
            ID >= If(isHead, minID, curID),
            { ID: ID + step }
        );
        Collect(
            colFormData,
            { ID: If(isHead, step, curID) }
        )
    )
)

フォーム削除ボタン

image.png

icnClose.OnSelect
Remove(colFormData,Filter(colFormData,ID=ThisItem.ID))

背景

image.png
背景です。htmlテキストImage図形でもOKです。

まとめ

保存はForAllでしてあげればいいと思います。
使う場面はあまりないと思いますが、レコードごとに添付ファイルを持たせる考え方はほかの場面でも応用できると思います!

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?