PowerAppsで列の違うSharePointをCollectionしたい！

# 自己紹介
はじめまして。PowerAppsを触って約半年(触ってない期間もありますけど...)
主に社内の申請を管理するようなPowerAppsのメンテナンス、新規開発等しています！
皆様に見られる形での記事投稿は初めてとなります。
少し緊張しますが・・・よろしくお願いします！

# この記事で伝えたいこと
::: note info
ClearCollect(TestCollection,MySharePoint1,MySharePoint2)
で結合はできるぞ！
だけど、ClearCollectするときは、内部列名と型の違いに気をつけよう！
特に別SharePoint同士等で似たような列名がついてると簡単に内部列名がかぶるぞ！
:::

# 本題
さて、さっそく本題ですが・・・
PowerAppsで列の違うSharePointをCollectionしたい、
なんてことないですか？ ~~ありますよね？じゃあやってみましょう。~~

```
ClearCollect(TestCollection,MySharePoint1,MySharePoint2)
```
これでTestCollectionというMySharePoint1とMySharePoint2を結合したものができあがります👍！！！
(もちろん、Collectとかでもできます)

:::note info
※気をつけてほしいのが、ClearCollectの際には列の型等は合わせましょう。でないとエラーになってしまいます...。例えば、Boolean(正確にはSharePointでは「はい/いいえ」ですね！)に文字列をいれようとすると怒られちゃいます。
:::

これでできましたね👏！！！
なーんて、これだけだと記事が終わってしまうので・・・ここで更に注意してほしいことが・・・

まずそもそもSharePointには**内部列名**というものが存在します。

### 内部列名
内部列名自体はSharePointのリストのページの右上にある
歯車→リストの設定と行くと列名がズラッと出てくるので内部列名を確認したいものをクリックします。
クリックした先のページのURLの末尾、Field=以降の値が内部列名になります。

こいつがなかなかに厄介で・・・
**英語**で列名を作った場合にはそのまま内部列名に反映されるのですが・・・(columnという列名を作ったら先に紹介したURLでいうとField=columnとなる。)
※正確には例外があるそうです
参考：https://live-style.jp/sharepoint_internalname/

**日本語**で列名を作った場合、例えば「テストです」という列を作った場合は以下のような形式に変換されてしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676003/a8eeed97-9f3c-f5b0-3e45-2d647edc49e4.png)
更に、この内部列名あとで列の名称変更等しても変わりません。逆に言うと、正確に内部列名をつけたいなら最初に英語でつけてから後で日本語に名前を変えましょう、ということですね！

ちなみに、この内部列名をChatGPTにぶん投げて変換してねと伝えるとある程度推測できたりします。
引き継いだときとかに便利かもしれませんね！
でも大体しか合ってないので注意は必要です。

:::note warn
※ここは実体験からの推測になるのでそういうドキュメントがあったりしたわけではありません。また、説明と違うことが起きても責任は負いません。すみません🙇
:::
======ここから======
その上に変換されるのは**5文字まで**で5文字から先には数字が割り振られる
例：「テストです：テスト1」という列と、「テストです：テスト2」という列があった場合
「テストです：テスト2」の内部列名は _x30c6__x30b9__x30c8__x3067__x30「1」 になります。
もしくは書いていて思ったんですが、内部列名に上限の文字数があるのかもしれません。
======ここまで======

### ということは・・・？
MySharePoint1というSharePointには「テストです：テスト1」「テストです：テスト2」という列を、
MySharePoint2というSharePointには「テストです：テスト3」「テストです：テスト4」という列を追加してClearCollectをした場合に、「テストです：テスト1」と「テストです：テスト3」が、「テストです：テスト2」と「テストです：テスト4」の内部列名がおなじになってしまうということになり、「型に互換性がありません。」というエラーが出てしまいます

・・・なんだか分かりづらくなってしまいましたね。
とにかく、SharePoint同士のClearCollect中に「型に互換性がありません。」と出た場合は似ている列名の**内部列名**と、型の違いに気をつけましょう！

ちなみに
```
https://"ここにサイト名(/site/とかも含めて)"/_api/Web/Lists/getByTitle("ここにリスト名")/fields?$select=InternalName,Title&$filter=Hidden%20eq%20false
```
これをURLに入れて叩くと、全ての列の内部列名がずらっと出てきます。非常に見づらいと思いますがInternalNameが内部列名にあたりますのでブラウザ内で検索して下さい。
# 応用？編
```
ClearCollect(TestCollection,MySharePoint1,{column1:"test",column2:""})
```
こんなこともできちゃいます。
こうすることによってTestCollectionには、MySharePoint1にcolumn1とcolumn2という列が追加された上で、column1には"test"という値が入っている行が追加されます。

もし、MySharePoint1にcolumn1もしくは、column2という列があった場合は該当の列は追加されることなく値だけがはいった行が追加されることになります。
どちらの場合も、既存の列に関しては**空欄**となります。

↓ちなみに、こんな感じも行けます。↓
```
ClearCollect(TestCollection,MySharePoint1,MyCollection)
```
なんとなく察してるとは思いますが、TestCollectionにはMySharePoint1にMyCollectionを結合したものが入ります。もし、MyCollectionにcolumn1などの列がすでにある場合、一つ前に記述してあるとおりの結果になります。

# あとがき
いかがでしたでしょうか。
初めて書いてみたんですが、なんだか筆が乗ってしまってごちゃごちゃしてしまいました。
次からはもう少しさっぱり書きたいですね・・・。

修正等何かあれば気軽にコメント＆指摘ください！
質問等も答えられる範囲なら答えますが・・・まだ知識が浅いので答えられるとは限りません・・・。

# 参考
Power Apps の Collect、Clear、および ClearCollect 関数
https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-clear-collect-clearcollect

【SharePoint】列の内部名について
https://live-style.jp/sharepoint_internalname/

SharePoint 列の内部名を Excel で簡単一覧！
https://www.illuminate-j.jp/blog/sharepoint-internalfieldname