SharePointやDataverseでデータをコピーする方法を2つ紹介します。
また、ForAll関数で複数回コピーしつつ特定の列のみ異なる値を追加する方法についても紹介します。
Form.Updatesを利用する方法
フォームコントロールの更新値をレコードで取得できるUpdatesプロパティを利用してデータをコピーする方法です。
よくある詳細画面にコピーボタンを設置し、以下のコードをコピーアイコンのOnSelectに入力します。
Patch(
SampleList,
Defaults(SampleList),
Form1.Updates
)
クリックするとデータがコピーされるようになりました。
コピーされたかどうかがわかりづらいので、Notify関数などで通知を出すといいかもしれません。
ちなみにこの方法を利用して複数フォームを更新する方法があります。
ThisItemやGallery.Selectedなどのレコード値をコピーする方法(Dataverse限定)
フォームコントロールを使用せずにレコード値(ThisItem, Gallery.Selected, LookUpなど)をコピーする方法です。テストデータ作成などに活用できます。
レコード値にはIDや作成日列などのシステム列が含まれているため、前章の数式にレコード値を入力するとエラーが発生します。
一度以下の数式をOnSelectプロパティに入力したボタンをクリックすることで、上記のエラーを起こします。
Patch(
パフォーマンステストDataverse,
Defaults(パフォーマンステストDataverse),
First(パフォーマンステストDataverse) //レコード値
)
エラーが起きたことで、Errors関数でエラーを拾えるようになりました。
以下の数式をラベルのTextプロパティに入力し、表示されたテキストを再度ボタンのOnSelectプロパティに入力してください。
"Patch(
パフォーマンステストDataverse,
Defaults(パフォーマンステストDataverse),
First(
DropColumns(
Table(First(パフォーマンステストDataverse)),
" &
Concat(Filter(Errors(パフォーマンステストDataverse), Error = 9),""""&Column&""",
") &")
)
)"
DropColumns関数の最後の行の,を削除します。
この状態でボタンをクリックすると、正常にデータがコピーされます。
SharePointリストだと以下のエラーが解消できなかったので、詳しい人教えてください。
アップデートによりColumns系関数の""が不要になりました。
以下の数式でエラーが出ている列の一覧をテキストで取得できます。
Concat(Errors(パフォーマンステストDataverse), Column & ",")
ForAll関数で複数回コピーしつつ特定の列のみ異なる値を追加
ForAll関数を使用することで、Number列に1~10のインデックス値を追加しつつ他の列の値をコピーします。
以下のコード実現できます。パフォーマンステストDataverseなどは利用したいデータソースの値に置換してください。
ForAll(
Sequence(10),
Patch(
パフォーマンステストDataverse,
Defaults(パフォーマンステストDataverse),
First(
DropColumns(
Table(First(パフォーマンステストDataverse)),
"crc68_performanceid",
"createdon",
"modifiedon",
"statecode",
"versionnumber"
)
),
{Number:ThisRecord.Value}
)
)
Sequence(10)で10行のテーブルを作成し、それに対してForAllで繰り返し処理を行うことで10回コピー動作を繰り返します。
まだPatch関数の第三引数に変更したい列の値を入力することで、コピー値とは別の値を入力することができます。
以下のようにNumber列のみインデックス値を入力できました。
コメント