【ワンランク上のPower Apps】 Copy関数が便利そう！（クリップボードへコピー）

# はじめに
こんにちは。ヨウセイです。ワンランク上のおっさんはコピー関数でアプリでのちょっとした作業に活用が出来るー！
ということで、今回は最近追加されたCopy関数が便利じゃないかと思うので、その活用法を書いてみようと思います。

※2023.5.2時点のバージョン：3.23043.16の内容で記載しています

# Copy関数
最近のアップデートでCopy関数が追加されました。テキストをクリップボードへコピーできる機能です。よくあるリンクをコピーなどの機能がキャンバスアプリでも使えるようになりました。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-copy

**使用例**
公式からの抜粋です。テキストであればクリップボードへコピーできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/8dcb171a-c1d8-58e1-12cb-e340dc911789.png)
**注意点**
動作プロパティでのみ使用なので、ボタンなどのOnSelectやOnChangeなどに使えます。アプリ埋め込みの場合はサポートしていないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/76111c3a-8eca-04eb-e089-16a7743728ca.png)
公式にもある通りテキストであればクリップボードへコピー出来るので、
リンクをコピーする、や、JSON化したものをコピーする、や、
テーブルやフォームの内容も加工してテキスト化すればコピー出来るとなります。
試してみた結果とサンプルを載せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/7e163ae7-ee15-3172-936f-9b9aea4bf107.png)

# リンクをコピー（素のテキストやURLなど）
サンプルとしてテキスト入力コントロールにURLを記載
アイコンを追加してOnSelectにCopy関数でそれをコピーする処理を書く
```
Copy(TextInput.Text)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/2111c404-e81b-1704-1499-56855b8f2682.png)
メモ帳に貼り付ける→コピーされていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/95be5104-0e81-53a2-e4da-89ad13e250d6.png)
Teamsチャットやメールへ貼り付けてリンクを共有できます。
サンプルではアプリURLをそのままにしてますが、用途としてはアプリの特定のレコードの詳細ページへのリンクなどでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/356aba5b-1120-8111-b14d-ad37b56743e8.png)

# JSON（コレクションをJSON化）をコピー
あまり用途がないかもしれませんが、データソースやコレクションをそのままJSON化したものをコピーも出来ます。
※サンプルなのでSPOリストをそのままコレクションへ入れてそれをJSON化してます。添付ファイルはエラーになるので省いてます
```
Set(Col,DropColumns(人材スキルリスト,"{Attachments}"));
Copy(JSON(Col,JSONFormat.IgnoreBinaryData));
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/c33b39d8-3cc1-6554-56c3-ed6e9e63410c.png)
メモ帳に貼り付ける→コピーされていますね。※汚くてすいません。
★どれくらいのデータ量が対応できるかは未検証です。以下でいうと2万文字以上はできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/55f087ef-111c-0d9c-2cb6-c7f4fff1cb2f.png)
もう少し加工したデータであればJSONで値が欲しいよという場合は使えるかもしれません。

# テーブル（ギュラリー表示内容）を加工してコピー
これが一番用途あるんじゃ？と思った内容です。
ギャラリーに表示したデータをコピーして列構成にしてエクセルに張るなどに活用できるかと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/0279d1ea-f1d6-e123-509c-f9648f3368bc.png)

**サンプル①：列名と値をタブ区切り**
対象の列名と値を出し、タブ区切りでつなげる。1行ずつ改行。
※スキル言語は複数の選択肢列なのでカンマ区切りで加工
```
Copy(Concat(Gallery1.AllItems,
Concatenate("氏名:",氏名,Char(9),"アドレス:" ,メールアドレス,Char(9),"言語: ",Concat('スキル（言語）',Value ,","))
 ,Char(10)))
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/38df24bc-2520-74e7-1d5e-12a7ccb754bc.png)
メモ帳に貼り付ける→こんな感じでコピーされます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/2ca7517b-4737-9c59-122d-3ead450700d8.png)
Excelに貼り付け　→これだと使いずらいのでサンプル②では列構成に変えました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/4aff9a42-cd03-eba8-cdd6-314d5f20dadf.png)

**サンプル②：列ヘッダを付けて値をタブ区切り**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/bffcc747-2062-a1bd-a1b3-dde6ccfd0e35.png)
```
Copy(
    Concatenate("氏名",Char(9),"アドレス",Char(9),"言語",Char(10),
    Concat(Gallery1.AllItems,
    Concatenate(氏名,Char(9),メールアドレス,Char(9),Concat('スキル（言語）',Value , ","))
 ,Char(10))))
```
Excelに貼り付け　→これならそのままデータとして使えますね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/b0c464a7-8edf-5ab6-3772-9ae172126cd4.png)
★ギャラリーのデータを元にしているため（委任警告なしのコレクション使用なしで）100件まで取れて、スクロールで次を表示する実装の場合は、出ているまでの取得となります。コレクションをItemsにしている場合などは設定値上限のの500～2000までとなります。
→実装によって、ギャラリーのAllItemsにするのか、コレクションをもとにするのかなど調整ください。


# フォームの内容をコピー
おまけにフォームのコピーです。フォームの内容はフォーム.Updatesで取れます。
同じような感じですがこちらは列名、タブ、値　で改行して次の値...としています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/f3b0a895-09d3-a382-3f2f-97da6ef1ea84.png)
```
Copy(
    With({data:Form2.Updates},
    Concatenate("氏名",Char(9),data.氏名,Char(10),"アドレス" ,Char(9),data.メールアドレス,Char(10),"言語",Char(9),Concat(data.'スキル（言語）',Value ,","),Char(10),"ポスト",Char(9),Concat(data.'スキル（ポスト）',Value ,","),Char(10),"コメント",Char(9),data.コメント)
    )
);
```
メモ帳に貼り付け →Teamsなどにパッと転記する際などに便利かと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/bacb7d55-e3b5-adc2-5e65-a387298ff238.png)
Excelに貼り付け　→１レコードごとのデータとして使えそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249807/d9b15399-e508-08d0-82d0-c5c9ec9356a0.png)


# おわりに
ということで今回は新たに追加されたCopy関数について、使い方と思いついた活用方法を載せてみました。
リンクのコピー機能はWebアプリなどでよくあるし、以前も作りたかったけど出来なかったので今回のアップデートはうれしい限りです。
また、ギャラリーに出しているのをエクセルフォーマットでも欲しいという要件があったりすると思います。フローを使った実装をしてそこそこの工数がかかったりもします。（内容にもよりますが）
実際にはそこまで重要性はなく、とりあえず手動を含めてもいいからというレベルの場合もあるので、そういった場合はこの機能で代替え効くかもなと思いました。
自分も出たばかりの機能でまだ実際には試せてないので今後活用して行こうと思います。それでは。