プリザンターの「非表示」の挙動を従来の挙動に戻す方法

:::note info
11月18日に公開された[Ver.1.4.10.2](https://github.com/Implem/Implem.Pleasanter/releases/tag/Pleasanter_1.4.10.2)で以前の挙動に差し戻されたので、1.4.10.0と1.4.10.1を使用している場合**以外**は、本記事の対応は不要です。
:::

11月12日に公開された[Ver.1.4.10.0](https://github.com/Implem/Implem.Pleasanter/releases/tag/Pleasanter_1.4.10.0)で項目の非表示に関する挙動が変更されました。

## どんな挙動に
### Ver.1.4.10.0までの挙動
項目を非表示にすると編集画面の中だけで非表示になり、一覧などでは表示されていた。

### Ver.1.4.10.0からの挙動
項目を非表示にすると全ての画面で非表示になる。

これはなかなかな破壊的な変更ですね。

## どうしてこの挙動に？
この挙動の変更は、下記のソースが変更されたことに起因します。
* [テナント](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-bf7dcee51ad2deb5d14181c5afdad642ba76c805988b2e50b281a47327f60a4eR39)
* [組織](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-c2b972d05fc3177a47387b61185451652eb9061d98085de8599ae6b79f1d2a89R475)
* [グループ](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-53a27d0abb019a2328e9178ec5caccb02df7c170e36036b139e9fb9efec824d0R479)
* [ユーザー](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-147faf665f1eb36f024a106464bdfe1f19c8d2742f333bdf076c8917144a65d3R471)
* [招待履歴](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-74ee4d773d528467aaf6d024dd9a8df6229b6aeafc2e0753f92957b4ed65ec03R464)
* [サイト](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-6128ca8c8a9927f2f1008adcee92a569911d593ce43e43e04c156b5c666b40a1R522)
* [記録テーブル](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-17217083112a3e94a872b2d5473c029e521b471625ba70894079f9a504222735R751)
* [期限付きテーブル](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-b03c601cbe6fd7d5b2a2d9c72a93006020b89719f57d72a73b4b7331ee1bc49fR751)
* [Wiki](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-cf99592752a353b9ceaaf09c94ee6601a971373f09d5e1c56eae468d42ea8e48R39)
* [ダッシュボード](https://github.com/Implem/Implem.Pleasanter/commit/1cb2a738668eb95df3cc4529187d6dbc26c4d59f#diff-5a427b6c2d41f956ef38d798c76ea328203d8e53430f6ed8b2d561d04d3682ceR530)

## 中身を見てみよう
どの項目に対しても与えられている変更は同じなので、代表で記録テーブルへの変更を見てみましょう。
```diff_c_sharp
- if (serverScriptModelColumn?.Hide == true)
+ if (serverScriptModelColumn?.Hide ?? column.Hide == true)
```
変更前はサーバースクリプトで`Hide = true`となっていたときのみに非表示となっていたのですが、変更後はサーバースクリプトで値が変更されなかったときは、項目毎の表示・非表示の設定が適用されるように変更されています。

## 従来の挙動に戻すには
これは簡単に変更出来ます。編集画面以外の場合は、サーバースクリプトで設定された値を使用して、編集画面の場合は、項目の非表示を使うようにするだけです。
サーバースクリプトで分類Aに対してこの挙動を再現すると
```js
//「行表示の前」に入れる
columns.ClassA.Hide = (context.Action === 'edit' ? columns.ClassA.Hide : false));
```
こうなります。これで、従来の挙動を再現することができました。

ただ、これだと全てのサイトでこの作業をする必要があってかなり面倒・・・。
こういう時は拡張サーバースクリプトを使えば、全てのサイトに適用することが出来ます。
1ファイルにまとめて書くことも出来るのですが、メンテ性の観点からコード部分のみを別ファイルに分離してみました。

```json:ItemHideModeBefore_1_4_9_2.json
{
    "Name": "1.4.9.2以前の非表示の挙動に戻すスクリプト",
    "BeforeOpeningRow": true,
    "Body": "// Write an arbitrary script."
}
```
```js:ItemHideModeBefore_1_4_9_2.json.js
try {
	if(context.Action !== 'edit') {
        for (let column of columns) {
            column.Value.Hide = false;
        }
    }
} catch (e) {
    context.Log(e.stack);
}
```

これを、マニュアルの[開発者向け機能：拡張機能：拡張サーバスクリプト](https://pleasanter.org/ja/manual/extended-server-script)の「スクリプトを外部ファイルから読み込む」に従って配置すればOKです。
配置完了後はプロセスの再起動を忘れずに。

## まとめ
サーバースクリプトを使ってコードに加えられた変更の挙動を上書きすることが出来ました。サーバースクリプトはコード本体での処理の後から実行されることを押さえておくと、今回の様なコード本体に加えられた変更の挙動を上書きしたり出来るので、かなり便利です。