⛄
Service Portal Widget で Catalog variables を取得する
概要
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