セキュリティで保護されたスクリプトインクルードを無効にする方法

K_ Morita
Kilo Guru

こんにちは。

セキュリティで保護されているスクリプトインクルードを無効にする方法を探しています。

Romeアップグレード後、CABワークベンチのスケジュールに会議予定が表示されなくなりました。原因を調べていくと、スクリプトインクルード[CABFormUtil]が2レコード存在していることが原因らしいことがわかりました。この2レコードはパッケージが異なっていますがアプリケーションは同じGlobalになっています(添付ファイルのimage01.png)。

呼び出し元のCABSNCでは、

obj[elName] = new global CABFormUtil().getVDV(_gr, elName);

のように呼び出しているので、パッケージがGlobalの古い方のスクリプトインクルードが呼ばれてしまっているのではないかと推測しています(添付ファイルのimange02.png)。

CABワークベンチはカスタマイズしていますが、その後のアップグレードでこのような状況になっているのではないかと思いますが、このスクリプトインクルードはセキュリティで保護されているため、古い方のスクリプトインクルードを無効にすることができません。

このような状況なのですが、解決方法に心当たりがある方がいらっしゃいましたらご教授ください。

参考になるかわかりませんが、CABワークベンチを表示したときにエラーログに出力されたメッセージを添付しておきます(エラーログ.txt)

1 ACCEPTED SOLUTION

iwai
Giga Sage

基本的にはセキュリティで保護された(Protection policy: Protected)のScriptが起因の不具合は、NowSupportに問い合わせて解消してもらうことになるはずです。

何か特別な理由で手動で変更したい場合は、UpdateSetの適用でScriptをActive Falseにすることが出来ます。(この操作で発生する問題は自己責任になってしまいます)

下記のScriptは、ScriptでUpdateSetのXMLを作成して、UpdateSetとして適用するScriptです。Scripts Backgroundで実行してください。SYSIDは環境に合わせて変更してください。Scriptの中だけでXMLを処理するのでUpdateSetの記録等は残りません。もし、元に戻したくなったらScripts BackgroundのRollbackを実行してください。

// Script include Recordを読み込む
var gr = new GlideRecord("sys_script_include");
gr.get('d91e1a6db73223000482da23ee11a989');

// Script include Active = false
gr.active = false;

// XMLの作成
var ser = new GlideRecordXMLSerializer(); // XMLの作成
var payload = '' + ser.serialize(gr);
// XML の 形式を UpdateSet XML に変換する
payload = payload.replace('<sys_script_include>', '<record_update table="sys_script_include"><sys_script_include action="INSERT_OR_UPDATE">').replace('</sys_script_include>', '</sys_script_include></record_update>')

var gum = new GlideUpdateManager2(); // UpdateSet 管理クラス
// UpdateSet XML 適用
gum.loadXML(payload);

View solution in original post

2 REPLIES 2

iwai
Giga Sage

基本的にはセキュリティで保護された(Protection policy: Protected)のScriptが起因の不具合は、NowSupportに問い合わせて解消してもらうことになるはずです。

何か特別な理由で手動で変更したい場合は、UpdateSetの適用でScriptをActive Falseにすることが出来ます。(この操作で発生する問題は自己責任になってしまいます)

下記のScriptは、ScriptでUpdateSetのXMLを作成して、UpdateSetとして適用するScriptです。Scripts Backgroundで実行してください。SYSIDは環境に合わせて変更してください。Scriptの中だけでXMLを処理するのでUpdateSetの記録等は残りません。もし、元に戻したくなったらScripts BackgroundのRollbackを実行してください。

// Script include Recordを読み込む
var gr = new GlideRecord("sys_script_include");
gr.get('d91e1a6db73223000482da23ee11a989');

// Script include Active = false
gr.active = false;

// XMLの作成
var ser = new GlideRecordXMLSerializer(); // XMLの作成
var payload = '' + ser.serialize(gr);
// XML の 形式を UpdateSet XML に変換する
payload = payload.replace('<sys_script_include>', '<record_update table="sys_script_include"><sys_script_include action="INSERT_OR_UPDATE">').replace('</sys_script_include>', '</sys_script_include></record_update>')

var gum = new GlideUpdateManager2(); // UpdateSet 管理クラス
// UpdateSet XML 適用
gum.loadXML(payload);

K_ Morita
Kilo Guru

iwaiさん

回答ありがとうございます。手動で更新したいわけではありませんので、Now Supportに相談してみます。