Service Portal Widget で Catalog variables を取得する

2023/03/03に公開

概要

ServiceNowではOTBを実施するとサポートが受けられなくなったり、OOBとの差分の吸収にコストがかかるようになってしまう。
この場合新たにWidgetを追加するして機能を追加することが最適であるが、通常の方法ではCatalog variablesを取得することはできない。
こちらでは取得する為のスクリプトを記載する。

取得スクリプト

server script

1 formatter idのリストを取得してクライアントに渡す

data.formmaterIds = {};
var grSUF = new GlideRecord('sys_ui_formatter');
grSUF.orderBy('name');
grSUF.query();
while (grSUF.next()) {
data.formmaterIds[grSUF.getDisplayValue('table')] = grSUF.getUniqueValue();
}

client script

2 URLのParamとserver scriptで取得したformatter idのリストで合致させて取得したformatterIdを元に、ページ上の要素でもっているformatterのCatalog variablesの一覧を取得することができる。

api.controller = function($scope,$window) {
var c = this;
......
var URLParams = new URLSearchParams($window.location.search);
var formatterId = c.data.formmaterIds[URLParams.get('table名のURLパラメータ')];
var pageFields = $('sp-variable-layout').scope().formModel._formatters[formatterId].widgetInstance.data.sc_cat_item._fields;
cosole.log(pageFields)

3 後は以下の様にg_formをページ上の要素から取得すればCatalog Client Scriptのように扱えるし、各項目のDOMカスタマイズもできるだろう

var g_form = $('sp-variable-layout').scope().getGlideForm();
g_form.getValue('pageFieldsの中の項目');

Discussion