1.手順概要
【前提】
レコードプロデューサーは作成済みであること。
ポータル画面以外での登録および更新ができること。
ポータル画面以外で更新したデータをポータル画面で再度表示させる必要があること。
- ポータル画面のURLに以下のパラメータを追加する
・case_sysid:チケットのSysID
・table_name:チケットのデータテーブル名 - ポータル画面上で以下の処理を行うウィジェットを作成する
・URLから各パラメータを取得する
・取得したパラメータからチケットデータを取得する
・取得したチケットデータを各変数にセットする - レコードプロデューサーに、変数として作成したウィジェットを配置する
2.URLにパラメータを追加する
以下のチケット登録画面のURLは、
https://<インスタンスID>.service-now.com/csm?id=sc_cat_item&sys_id=<レコードプロデューサーSysID>
であり、このURLにパラメータを追加する。
[case_sysid]、[table_name]のパラメータを追加すると、以下のURLとなる。
https://<インスタンスID>.service-now.com/csm?id=sc_cat_item&sys_id=<レコードプロデューサーSysID>&case_sysid=<チケットのSysID>&table_name=<チケットのデータテーブル名>
このURLで画面にアクセスします。
3.ウィジェットを作成
URLパラメータの取得は、サーバースクリプトにて以下で行う。
$sp.getParameter("<パラメータ名>")
パラメータを取得すれば、テーブルデータは取得できるため、取得したデータを[data]オブジェクトに格納し、クライアントサイドで値セットが可能となる。
上記から、以下のようなスクリプトを作成できる。
Server script
(function(data) {
// URLパラメータを取得する
var case_sysid = $sp.getParameter("case_sysid");
var table_name = $sp.getParameter("table_name");
var cat_item = $sp.getParameter("sys_id");
// テーブルの値を取得する
var caserecord = new GlideRecord(table_name);
if (caserecord.isValid() && caserecord.get(case_sysid)) {
// レコードプロデューサーで定義している変数を取得する(テーブルとマッピングしているもののみ)
var grFields = new GlideRecord('item_option_new');
grFields.addQuery('cat_item', cat_item);
grFields.addQuery('map_to_field', true);
grFields.query();
// クライアントスクリプトで使用したいデータをセットする
data.case_sysid = case_sysid;
data.table_name = table_name;
data.fields = {};
data.variables = [];
while (grFields.next()) {
var varName = grFields.getValue("name");
var colName = grFields.getValue("field");
data.fields[varName] = caserecord.getValue(colName);
}
}
})(data);
Client controller
function($scope, spUtil, $uibModal, $location, $window) {
var c = this;
// 値セット
for (var key in c.data.fields) {
$scope.page.g_form.setValue(key, c.data.fields[key]);
}
}