【Power Apps】URL パラメーターを指定して SharePoint リストアイテムを表示する

# 【Power Apps】URL パラメーターを指定して SharePoint リストアイテムを表示する

URL パラメーターに SharePoint カスタムリストのアイテム ID を指定し、Power Apps で作成したフォームで表示する方法です。URL パラメーターに指定された値を取得するためには、[Param 関数](https://learn.microsoft.com/power-platform/power-fx/reference/function-param#param) を使います。

:::note info
※2024/12 更新
OnStart プロパティを使用しないように修正
:::

## 準備

SharePoint のカスタムリスト (例では、Announce リスト) でアプリを作成します。

1. 対象のカスタムリストを表示して、[統合] > [Power Apps] > [アプリの作成] を選択します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/4b122a77-952c-c108-8cbf-3df04a749f36.png)
1. 自動でアプリが作成されます。
1. [名前を付けて保存] をクリックしてアプリを保存します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/1d20f382-9ebf-06a1-a59a-8580a270b628.png)

## パラメーターの有無で開くスクリーンを変更する

### StartScreen プロパティ

App の StartScreen プロパティを設定します。

URL パラメーターがない場合は、一覧画面 (BrowseScreen1)、パラメーターある場合は、詳細表示画面 (DetailScreen1) が初期表示画面になるように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/322d401a-5084-be29-e008-cbf26ca2c369.png)

```powershell
If(
    IsBlank(Param("ID")),
    BrowseScreen1,
    DetailScreen1
)
```

## パラメーターをコンテキスト変数に設定する

### OnVisible プロパティ

DetailScreen1 の OnVisible プロパティを設定します。

URL パラメーターがある場合にコンテキスト変数 (_ID) に数値に変換した値を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/be9fd859-edcc-1b7a-f4f8-f3bd7a179a2d.png)


```powershell
If(
    !IsBlank(Param("ID")),
    UpdateContext({_ID: Value(Param("ID"))})
);
```

## 遷移先のコンテキスト変数に設定する

### BrowseScreen1 から DetailScreen1 画面への遷移

BrowseGallery1 の OnSelect プロパティの Navigate 関数に、選択しているアイテムの ID を指定して、DetailScreen1 のコンテキスト変数として呼び出せるように渡します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/76572ca4-7ce2-f731-6c56-4338bcbd1c5c.png)

```powershell
Navigate(
    DetailScreen1,
    ScreenTransition.None,
    {_ID: BrowseGallery1.Selected.ID}
);
```

### DetailScreen1 から EditScreen1 画面への遷移

IconEdit1 の OnSelect プロパティの Navigate 関数に、アイテムの ID を指定して、EditScreen1 のコンテキスト変数として呼び出せるように渡します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/84fe2557-ccda-7fd1-cb57-3bbf800252a9.png)

```powershell
EditForm(EditForm1);
Navigate(
    EditScreen1,
    ScreenTransition.None,
    {_ID: _ID}
);
```

## Form コンポーネントに表示するアイテムを設定する

### Item プロパティ

DetailScreen1 の DetailForm1 と EditScreen1 の EditForm1 それぞれの Item プロパティを設定します。

LookUp 関数でアイテムを取得するように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/38c28b45-3cac-6d16-9ef1-1041f7b93f97.png)

```powershell
LookUp(Announce, ID = _ID)
```

# カスタムリストからアプリのフォームを直接開く

列の書式設定を設定してビューからアイテムの詳細をアプリで開くように設定します。

## 準備

作成したアプリの [詳細] から Web リンク(URL) を取得しておきます。

## 列の書式設定

列の書式を設定してアプリが開くように設定します。
![image-20230316102317031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/86d5912b-dd83-88f6-55b7-69fc89d04cc8.png)

### 書式設定

```json
{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json",
  "elmType": "a",
  "txtContent": "@currentField",
  "attributes": {
    "target": "_blank",
    "href": "='https://apps.powerapps.com/play/e/{環境 ID}/a/{アプリID}?tenantId={テナントID}&ID=' + [$ID]"
  }
}
```

# 参考サイト

- [Param関数を使いPower Apps キャンバスアプリの任意のページを表示させる - Qiita](https://qiita.com/kumukai/items/9817811e76f633ba375d)
- [【Power Apps】Param関数を使ってアプリ起動時の画面を制御する - Qiita](https://qiita.com/kumukai/items/aaf0de5e6c9c782b3a33)
- [Power Apps の Launch 関数と Param 関数 - Power Platform | Microsoft Learn](https://learn.microsoft.com/power-platform/power-fx/reference/function-param#param)