Power AppsをListのフォームとして使う

自動生成されるPower Appsの画面を修正したいのですが、うまく動きません。まぁ、はじめめから機能するとは思ってなかっけど嫌なものです。本当にこのツールは使い物になりません。


２ページ目では、値を取得できませんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d90f307a-94fd-ea6d-0dde-1542ca5a1521.png)



[SharePoint フォームの統合について](https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/sharepoint-form-integration)


Power Apps で Microsoft Lists または SharePoint ライブラリ フォームを簡単にカスタマイズ できるようになりました。 この記事では、これらのフォームの動作とカスタマイズ方法について詳しく説明します。

リスト フォームをカスタマイズしたことがある場合、既定の生成されたフォームが、項目の作成、表示、編集などのすべての操作に対応していることをご存知でしょう。 これは、生成された数式と SharePointIntegration コントロールによって実現されています。

# 既定の生成されたフォームを理解する

既定の生成されたフォームは、次のコントロールと対応する既定値で構成されています:

+ FormScreen1 - これは、フォームを含むスクリーン です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/1ca93b7a-6ea2-3061-03e6-a98fd93df1ee.png)

+ SharePointForm1 - これは、リスト アイテムの作成、表示、または編集に使用されるフォーム です。

  + データ ソース - フォームがカスタマイズされているリストです。
  + 項目 - リストから選択された項目です。 これは、Power Apps Studio で操作するとき便利なように、リストの First() 項目に設定されています。

```
If( IsBlank(SharePointIntegration.Selected) || IsEmpty(SharePointIntegration.Selected),
    First('*YourListName*'),
    SharePointIntegration.Selected )
```

:::note
上記の数式パターン (... SharePointDatasourceName.Selected を使用) は、フォームの Item プロパティで機能します。 SharePoint レコードの値を設定する数式パターンについては、[以下のセクション](https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/sharepoint-form-integration#common-issues-with-the-sharepointintegration-object) を参照してください。
:::

この２つの説明はさっぱり意味が分かりませんね。以下のセッションではOnView プロパティが出てくるけど、どこにもないよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/161a20a2-8694-51e0-5ddf-7ef2cce095df.png)

OnView プロパティなんかは、ここにはない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a8b392ed-5e51-7a18-a383-8fd2a5a2e4ab.png)


+ OnSuccess - 項目が正常に作成または保存されると、フォームがリセットされ、SharePoint でこのフォームが非表示になります。

```
ResetForm(SharePointForm1); RequestHide()
```

OnSuccess もないけど... 何の説明だろう。

えええ、SharePointForm1 の話をしている？　おいおい黒丸ってことはSharePointForm1とは並列... 話題が変わったと思うよ、普通の場合。外人さんの思考は違うのか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/4f04b2be-6ece-e94a-da08-81eb6115b3d5.png)

+ SharePointIntegration - このコントロールは、SharePoint と Power Apps の間でユーザー アクションを伝達します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0c28530f-4b01-f5b4-e572-43be45edb77c.png)

  + データ ソース - フォームがカスタマイズされているリストです。

    'YourListName'

  + OnNew - SharePointForm1 を新しいモードに設定します。

     NewForm(SharePointForm1)

  + OnView - SharePointForm1 を表示モードに設定します。

     ViewForm(SharePointForm1)

 + OnEdit - SharePointForm1 を編集モードに設定します。

     EditForm(SharePointForm1) 

 + OnSave - SharePointForm1 の変更を送信します。 フォームの送信が成功すると、 SharePointForm1.OnSuccess 式が実行されます。

   SubmitForm(SharePointForm1)

 + OnCancel - SharePointForm1 の変更をリセットします。 ユーザーが SharePoint で キャンセル を選択すると、SharePoint では常にフォームが非表示になります。

   ResetForm(SharePointForm1)

これらの既定値によって、SharePoint 内で実行したときにフォームが機能し、ユーザーが SharePoint でフォームと対話したときに Power Apps フォーム モードが変更され、変更内容が SharePoint に確実に送信されます。


# SharePointIntegration コントロールを理解する

SharePointIntegration コントロールは、SharePoint と Power Apps の間でユーザー アクションを伝達します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/75591336-95db-641d-c2c4-63c76f530900.png)


:::note alert
注意

SharePointIntegration コントロールのプロパティには、フォームが SharePoint で実行されているときにのみアクセスでき、Power Apps Studio でフォームをカスタマイズしているときにはアクセスできません。 これらのプロパティは、OnStart または OnVisible では使用できないことがあります。
:::

SharePointIntegration コントロールには、次のプロパティがあります:

+ 選択済み - リストから選択された項目です。

+ OnNew - ユーザーが SharePoint で 新規 ボタンを選択、または 項目の作成 フォームを開くときに実行するアクション。

+ OnView - ユーザーが SharePoint で 項目 を選択、または 項目の詳細 フォームを開くときに実行するアクション。

+ OnEdit - ユーザーが SharePoint で すべてを編集 ボタンを選択、または 項目の編集 フォームを開くときに実行するアクション。

+ OnSave -ユーザーが SharePoint で 保存 ボタンを選択したときに実行するアクション。

+ OnCancel -ユーザーが SharePoint で キャンセル ボタンを選択したときに実行するアクション。

+ SelectedListItemID - リストで選択された項目 ID です。

+ データ ソース – フォームが表示、編集、または作成するレコードが含まれるリストです。 このプロパティを変更すると、Selected プロパティと SelectedItemID プロパティが機能しなくなる場合があります。

現在の設定を見ると最初のページが設定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0a36cbdd-fbf9-9f21-6540-ae0f3abb800c.png)

# 既定のフォームをカスタマイズする

既定の生成されたフォームと SharePointIntegration コントロールを理解したら、数式を変更して、フォームをさらにカスタマイズすることができます。 フォームをカスタマイズするときの注意事項をいくつか次に示します:

+ ユーザーが SharePoint で 保存 を選択したときの動作をカスタマイズするには、SharePointIntegration コントロールの OnSave 式を使用します。 複数のフォームがある場合は、現在使用しているフォームに対する変更だけを送信してください。

:::note
OnNew、OnView、および OnEdit 式の変数には異なる値を設定します。 OnSave 式でこの変数を使用すると、使用されているフォームを指定できます。
:::

+ すべてのフォームの OnSuccess 式に必ず RequestHide() を含めてください。 これを忘れると、SharePoint はフォームを非表示にするタイミングを認識できません。 また、フォームが表示されロジックを実行できる間にすべてのコードが実行できるように、RequestHide() を呼び出した後は重要なコードを実行しないでください。
+ SharePoint では、ユーザーが キャンセル を選択したときにフォームの非表示を制御できないので、SharePointIntegration コントロールの OnCancel 式で必ずフォームをリセットしてください。
+ SharePointIntegration コントロールのプロパティは OnStart または OnVisible では使用できないことがあり、それらのイベントはリストの読み込み中に 1 回だけ実行します。 OnNew、OnView、または OnEdit 式を使って、フォームが毎回ユーザーに表示される前にロジックを実行できます。


# SharePointIntegration は追加できないなぁ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/868e8862-fa26-08da-f6b0-f4992fbd5c29.png)

ここでも追加できないって書かれてます。

https://tana-techlog.net/?p=594