11月18日に公開されたVer.1.4.10.2で以前の挙動に差し戻されたので、1.4.10.0と1.4.10.1を使用している場合以外は、本記事の対応は不要です。
11月12日に公開されたVer.1.4.10.0で項目の非表示に関する挙動が変更されました。
どんな挙動に
Ver.1.4.10.0までの挙動
項目を非表示にすると編集画面の中だけで非表示になり、一覧などでは表示されていた。
Ver.1.4.10.0からの挙動
項目を非表示にすると全ての画面で非表示になる。
これはなかなかな破壊的な変更ですね。
どうしてこの挙動に?
この挙動の変更は、下記のソースが変更されたことに起因します。
中身を見てみよう
どの項目に対しても与えられている変更は同じなので、代表で記録テーブルへの変更を見てみましょう。
- if (serverScriptModelColumn?.Hide == true)
+ if (serverScriptModelColumn?.Hide ?? column.Hide == true)
変更前はサーバースクリプトでHide = true
となっていたときのみに非表示となっていたのですが、変更後はサーバースクリプトで値が変更されなかったときは、項目毎の表示・非表示の設定が適用されるように変更されています。
従来の挙動に戻すには
これは簡単に変更出来ます。編集画面以外の場合は、サーバースクリプトで設定された値を使用して、編集画面の場合は、項目の非表示を使うようにするだけです。
サーバースクリプトで分類Aに対してこの挙動を再現すると
//「行表示の前」に入れる
columns.ClassA.Hide = (context.Action === 'edit' ? columns.ClassA.Hide : false));
こうなります。これで、従来の挙動を再現することができました。
ただ、これだと全てのサイトでこの作業をする必要があってかなり面倒・・・。
こういう時は拡張サーバースクリプトを使えば、全てのサイトに適用することが出来ます。
1ファイルにまとめて書くことも出来るのですが、メンテ性の観点からコード部分のみを別ファイルに分離してみました。
{
"Name": "1.4.9.2以前の非表示の挙動に戻すスクリプト",
"BeforeOpeningRow": true,
"Body": "// Write an arbitrary script."
}
try {
if(context.Action !== 'edit') {
for (let column of columns) {
column.Value.Hide = false;
}
}
} catch (e) {
context.Log(e.stack);
}
これを、マニュアルの開発者向け機能:拡張機能:拡張サーバスクリプトの「スクリプトを外部ファイルから読み込む」に従って配置すればOKです。
配置完了後はプロセスの再起動を忘れずに。
まとめ
サーバースクリプトを使ってコードに加えられた変更の挙動を上書きすることが出来ました。サーバースクリプトはコード本体での処理の後から実行されることを押さえておくと、今回の様なコード本体に加えられた変更の挙動を上書きしたり出来るので、かなり便利です。