はじめに
ServiceNowでは、Task(task)やBase CI(cmdb)テーブルは、それぞれを頂点に子ととして様々な拡張テーブルを持っています。例えば、Incident(incident)やProblem(problem)はTaskを拡張したテーブルです。
ここでは、上位テーブルに作成したレコードを下位テーブルに移すScriptを検証します。
前提
Hardware(cmdb_ci_hardware)テーブルは、Base CIテーブルから見て子孫のテーブルの一つですが、さらに多くの子孫テーブルを持ち、CIでも大きくハードウェアに分類されるものが登録されるテーブルです。このテーブルにあるレコードを下位テーブルであるComputer(cmdb_ci_computer)に、Scriptで移してみましょう。
Script
検証ですので、ScriptはScripts - Backgroundで実行します。
実行するScriptは以下のとおりです。
今回はCIの名前が「Computer100」であるものをハードコードで指定しています。
Script
var targetName = 'Computer100';
var gr = new GlideRecord('cmdb_ci_hardware');
gr.addQuery('name', targetName);
gr.query();
if (gr.next()) {
gs.info('レコードを更新します: ' + gr.sys_id);
gr.sys_class_name = 'cmdb_ci_computer';
gr.sys_class_path = '/!!/!2/!(';
gr.update();
gr.initialize();
gr.addQuery('name', targetName);
gr.query();
if (gr.next()) {
gs.info('レコードが更新されました: ' + gr.sys_id);
}
} else {
gs.info('該当するレコードが見つかりませんでした。');
}
Scriptの出力結果は以下のとおりです。
念の為、レコードの更新前後で、sys_idが変わっていないことも確認できます。
実際のレコードで確認する。
変更前と変更後で、無事Classが変わっていることがわかります。