今回は、キャンバスアプリでDataverseの関連レコードを一緒に保存する処理について書きます。
一般的なキャンバスアプリでのリレーションの取り扱いについては以下をご参照下さい。
この記事の関連レコードを含めたデータの登録方法のセクションの応用です。
親テーブルのレコードを先に保存して、そのレコードに紐づいた子レコードの登録を同時に行うときには以下のような処理を書きます。
変数「myRecord」に親テーブルのGUIDを保存しています。
そのGUIDを子レコードのリレーションを保存する検索列に保存することで、紐付けをすることができます。
以下は、説明上一般的な値にしているので、それぞれテーブル名や列名などはご自身の値に設定して下さい。
//親レコードの新規追加
UpdateContext({myRecord: Patch(親テーブル, Defaults(親テーブル),
{
列1:値1
,列2:値2
}
)}
);
//子レコードの新規追加
ForAll(子レコードのアイテム,
Patch(子テーブル, Defaults(子テーブル),
{
列1:値1
,列2:値2
,親テーブルとリレーションを組んだ検索列:myRecord
}
)
)
;
私の生のコードも置いておきます。ご参考までに
私はAI Builderの領収書処理モデルで読み取ったアイテムを子テーブルに分けて、領収書テーブルの1レコードに紐づける処理をしています。
UpdateContext({myRecord: Patch(領収書処理_1, Defaults(領収書処理_1),
{
業者名:MerchantNameResult.Text
,業者住所:MerchantAddressResult.Text
,業者電話番号:MerchantPhoneResult.Text
,日付:TransactionDateResult.Text
,小計:SubtotalResult.Text
,税額:TaxResult.Text
,合計:TotalResult.Text
}
)}
);
ForAll(ReceiptProcessor1.PurchasedItems,
Patch(領収書アイテムテーブル, Defaults(領収書アイテムテーブル),
{
アイテム名:Name
,価格:Price
,数量:Quantity
,合計金額:TotalPrice
,領収書処理テーブル:myRecord
}
)
)
;