Power Apps でDataverse列をPatchする|テキスト・数値・選択肢・ファイル・画像の全列型ガイド

DataverseはSharePointと比べてPatchの書き方が異なる列型がいくつかあります。特にYes/No列と選択肢列はSharePoint経験者が最もつまずくポイントです。本記事では列型別にPatchの書き方を整理します。最後にSharePointとの違いを一覧で比較するので、切り替えの際の参考にしてください。

SharePointと違うDataverseのPatch:先に知っておくべき3点

SharePointからDataverseに切り替えたときに戸惑いやすい点が3つあります。選択肢列がEnum形式(Status.Draft のような書き方)になること、Yes/No列がBoolean(true/false)ではなくEnum扱いになること、そしてファイル・画像列が直接Patchできることです。最初の2点は「SharePointのやり方が通用しない」という意味でエラーが出やすいので、先に覚えておくと後半が読みやすくなります。

テキスト列

テキスト列には文字列をそのまま渡します。SharePointと同じ要領です。1行テキスト・メール・電話番号・URLはいずれも同じ書き方でPatchできます。

TextColumn: "こんにちは"
TextColumn: inpTitle.Text

1行テキストの最大文字数は4,000字です。それを超える場合は複数行テキスト列(プレーンまたはリッチテキスト)に変更してください。どちらも渡し方は同じです。リッチテキスト列にはHTMLタグを含む文字列を渡せます。表示側はHTMLテキストコントロールで受け取ると書式が保持されます。

数値列

数値列にはダブルクォートなしの数値を渡します。これもSharePointと同じです。TextInputから渡す場合は Value() でラップが必要です。

NumberColumn: 28
NumberColumn: Value(inpAge.Text)

Dataverseには整数・小数・浮動小数点・期間・言語コードなど複数の数値型がありますが、Power Apps側からはいずれも数値を渡すだけで変わりません。通貨列も実体は数値です。金額を数値で渡すだけで、通貨記号や換算レートはDataverse側が管理します。

CurrencyColumn: 9.99

日付・時刻列

日付列にはDatePickerの .SelectedDate か Today() / Now() 関数を渡します。SharePointと同じ要領です。

DateColumn: dpHireDate.SelectedDate
DateColumn: Today()

選択肢(Choice)列:DataverseはEnum形式

DataverseのChoice列はSharePointのChoiceとは異なります。SharePointは { Value: "Red" } のようなレコード形式でしたが、DataverseはEnum形式で渡します。

// 列名.オプション名 の形式
StatusColumn: Status.Draft
StatusColumn: Status.Open

Power Apps数式バーで列名を打ってドットを押すと、登録されている選択肢が補完候補に出てきます。そこから選ぶと確実です。コントロールから渡す場合はDropdownのSelectedを使います。

Yes/No列:SharePoint経験者が最もつまずくポイント

DataverseのYes/No列はSharePointと最も動作が違う列です。SharePointのYes/No列はBoolean(true/false)をそのまま渡せますが、DataverseのYes/No列は実態がChoice型です。そのため true/false を直接渡すとエラーになります。

// NG(SharePoint式の書き方。Dataverseでは動かない)
PropertyDamage: tglDamage.Value

// OK(If文でEnum形式に変換して渡す)
PropertyDamage: If(
    tglDamage.Value,
    PropertyDamage.Yes,
    PropertyDamage.No
)

SharePointで動いていたコードをDataverseに移行するとここで必ずつまずきます。Toggleから渡す場合はIf文でYes/Noに変換する必要があることを覚えておいてください。このEnumの列名はDataverseのテーブル設計時に設定した列名です。数式バーで補完が効くので確認しながら入力してください。

ルックアップ列

DataverseのルックアップはSharePointのChoices関数は使いません。DropdownのItemsに参照先テーブルを直接設定してDropdown.Selectedを渡す形が基本です。

// DropdownのItemsプロパティ
Employees

// Patchに渡す
ParentRecord: ddEmployee.Selected

画像列:.valueと.fullの使い分け

DataverseはSharePointと異なり、ファイルや画像をPatch関数で直接書き込めます。SharePointの画像列はPower Appsからの直接Patchができないのとは大きな違いです。

// 画像を保存する(AddPictureコントロール)
ImageColumn: UploadedImage1.image

// ギャラリーで表示する(サムネイル推奨)
Image1.Image = ThisItem.ImageColumn.value

// 詳細画面で高解像度を表示する
Image1.Image = ThisItem.ImageColumn.full

Dataverseの画像列には .value と .full の2つのプロパティがあります。.value はDataverseが自動生成したサムネイル(低解像度・角丸)、.full は元ファイルです。ギャラリーでは .value を使うのがパフォーマンス上おすすめです。リスト表示時に全行分の高解像度画像を読み込まずに済むため表示が速くなります。詳細画面で大きく見せたいときだけ .full を使う設計が定石です。

AutoNumber列はPatch不可

AutoNumber列(自動採番)はPatchできません。Dataverseが自動的に連番を割り当てるため、アプリ側から値をセットしようとするとエラーになります。Patch文に含めなければエラーにはなりません。自動採番列はPatch時には無視してください。

SharePointとDataverseの主な違い

SharePointとDataverseのPatchで押さえるべき違いを整理します。テキスト・数値・日付はどちらも同じ書き方で渡せます。Choice列はSharePointがレコード形式({ Value: "Red" })なのに対し、DataverseはEnum形式(Status.Draft)です。Yes/No列はSharePointがBoolean直渡しOKなのに対し、DataverseはIf文でYes/Noに変換が必要です。画像列はSharePointがPower Appsから直接Patch不可なのに対し、DataverseはPatch可能です。SharePointの複雑な列型のPatch解説と合わせて読むと理解が深まります。

まとめ

DataverseやSharePointのPatchパターンを含む応用ガイド全体はPatch関数 応用ガイドでまとめています。列型ごとの比較表や学習ロードマップも掲載しています。

Dataverse列のPatchでSharePoint経験者が引っかかりやすいのは、選択肢列のEnum形式とYes/No列のIf変換の2点です。この2点さえ覚えれば、それ以外はSharePointとほぼ同じ感覚で書けます。Patch関数の基本については新規レコード作成編を、既存レコード更新のパターンは既存レコード更新編を参照してください。

Xでフォローしよう