【Fiori】List Reportの一括変更機能 (Mass Edit) を使ってみる

## はじめに
List Reportの一覧画面で複数のレコードを選択しての一括変更が、UI5バージョン1.98（OData V4は1.110あたり）からできるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/7c5d9a50-1c9e-73d5-7043-edacebad7a1c.png)
[Enabling Editing Using a Dialog (Mass Edit) in the List Report](https://sapui5.hana.ondemand.com/#/topic/7cc4f04364c540c397130ff92f84c3ca) より

この記事では、OData V4のサービスを使用したList Reportアプリで一括変更を有効化する手順について説明します。

## CAPの場合
CAPの2023年12月のリリースで、一括変更がサポートされるようになったというアナウンスがありました。

https://cap.cloud.sap/docs/releases/dec23#sapui5-mass-edit

一括変更を使用するためには、package.jsonファイルに以下の設定を追加する必要があります。
```
  "cds": {
    "fiori": {
      "bypass_draft": true
    }
  }
```

ただし、検証時点（2024年1月）では一括変更ダイアログの保存ボタンを押した時点で、以下のエラーになりました。

```
[odata] - > PATCH Books(ID=2,IsActiveEntity=true) 
[cds] - TypeError: Cannot read properties of undefined (reading '@Common.DraftRoot.ActivationAction')
```

SAP Communityに同様の質問が上がっていますが、まだ解決していません。

- https://answers.sap.com/questions/14030552/sample-application-for-feature-bypass-draft.html
- https://answers.sap.com/questions/14024184/feature-bypass-draft-in-cap-not-working-on-post.html

2024/2/3 追記
@sap/cdsのバージョンを7.5.2から7.6.1に上げたところ、問題が解決しました。上記2つめのスレッドによると7.5.3でも解決していたとのことです。

## RAPの場合
RAPで作成したODataサービスの場合、一括変更機能を使うことができました。RAP側で特別な設定はありません（ドラフトを使用することくらい）。

## List Reportの設定
manifest.jsonに設定を入れるだけで有効化できます。

```json
                    "options": {
                        "settings": {
                            "contextPath": "/Books",
                            "variantManagement": "Page",
                            "navigation": {
                                "Books": {
                                    "detail": {
                                        "route": "BooksObjectPage"
                                    }
                                }
                            },
                            "controlConfiguration": {
                                "@com.sap.vocabularies.UI.v1.LineItem": {
                                    "tableSettings": {
                                        "enableMassEdit": true //追加
                                    }
                                }
                            }
  ```     

controlConfigurationをどこに入れたらよいかわからない場合があると思います。そんなときはPage Mapを使うと簡単ですが、"enableMassEdit"はPage Mapからはまだ設定できないので、代わりにselectionModeの設定をすることで、controlConfigurationが自動的に入ります。あとは`"enableMassEdit": true`を追加するだけです。
一括変更を有効化するためにはSelection Modeが"Multiとなっている必要がありますが、デフォルトがMultiなので、selectionModeの設定はあってもなくてもよいです。

- webappフォルダを右クリック > Show Page Map
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/ac9dc9a5-898a-4aa0-4c6b-a7cba2d99f7f.png)
- List Reportの編集ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/0d98b20d-86b1-b63d-7204-7cf14e2df941.png)
- Tableの設定で、Selection Modeに"Multi"を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/cb3c0abc-59e0-114a-c581-60051953903a.png)

行を選択すると、"Edit"ボタンが有効になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/6db4e017-da7f-d299-048d-50a80b49a88d.png)

"Edit"を押すと以下のダイアログが出てきます。変更しない項目は< Keep Values >のままにしておき、変更したい項目に値を入れて保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/5a495d18-bad0-a78c-16ca-3c7ff0dab0ad.png)

StockStatusが"2"に更新されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/3e0e54e2-9697-ea5e-7295-7b4021b9c434.png)

## 制限事項について
以下のドキュメントに一括変更できない項目の種類が記載されています。日付、時刻、ドロップダウン項目、カスタム項目などは変更できないということです。
https://sapui5.hana.ondemand.com/#/topic/965ef5b2895641bc9b6cd44f1bd0eb4d.html

## 変更させたくない項目の指定はできる？
ドキュメントを見る限り、特定の項目を変更ダイアログに出さないという設定はできないようです。ただし、一覧に出ていない項目はダイアログに出てこないので、@UI.LineItemアノテーションや@UI.Hiddenアノテーションでコントロールすることになると思います。