- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-06-2022 11:52 PM
インポートセットテーブルに添付されたCSVファイルをカスタムテーブルへインポートするスクリプトを実装しましたが、テーブルのカラム属性が異なるため、値が反映されまない状況です。
スキームID、システムID、性能情報種別IDは
属性がインポートセットテーブルでは文字列、カスタムテーブルは参照(※)となっています。
※スキームマスタ、システムマスタ、性能情報種別マスタの値を参照
参照項目への値の反映をする方法について、ご教示いただければと思います。
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-07-2022 12:20 AM
Reference項目を表示値で一致させる場合は、下記のScript ”setDisplayValue”で可能です。
参考資料Docs:GlideElement | ServiceNow Developers
var rec = new GlideRecord('incident');
rec.initialize();
rec.caller_id = gs.getUserID();
rec.short_description = 'test';
// Assignment Group(Reference項目)に表示値で設定する。大文字小文字はどちらでも該当するが全角半角などの曖昧一致はしない
rec.assignment_group.setDisplayValue('Incident Management');
// Reference項目の内部値を表示
gs.info('rec.assignment_group >> ' + rec.assignment_group);
// Reference項目の表示値を表示
gs.info('rec.assignment_group getDisplayValue >> ' + rec.assignment_group.getDisplayValue());
// rec.assignment_group >> 12a586cd0bb23200ecfd818393673a30
// rec.assignment_group getDisplayValue >> Incident Management
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-08-2022 02:32 AM
すみません、確認したところ、性能情報明細テーブル画面から入力した場合でもスキームIDに値が反映されないことが分かりました。
フォームで入力する際のマスタ参照はできておりますが、更新ボタンを押しても値が反映されていません。
スキームマスタとの参照設定に問題があると思われますので、そちらの線で確認を進めています。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-08-2022 02:34 AM
すみません、確認したところ、性能情報明細テーブル画面から入力した場合でもスキームIDに値が反映されないことが分かりました。
フォームで入力する際のマスタ参照はできておりますが、更新ボタンを押しても値が反映されていません。
スキームマスタとの参照設定に問題があると思われますので、そちらの線で確認を進めています。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-08-2022 04:45 PM
- Table設定を見たところ、誤りがあります。参照項目(Reference項目)の最大長が3文字や10文字、5文字になっています。正しくは32文字必要です。参照項目の内部値 SYSIDの32文字を格納します。表示する文字の長さは関係ありません。表示値は内部に格納していないためです。(Reference項目の最大長の初期値は32文字なので、32ではない場合、手動で値を変更した可能性があります)
- ”u_scheme_master” Tableの”u_scheme_id”は表示項目として正しく設定されています。
- Queryする方法はいくつかあります。
- grSch.addQuery('u_scheme_id',record[0]);
grSch.query();
grSch.next();
と
grSch.get('u_scheme_id', record[0]);
は同じようにQueryします。単純一致条件がひとつしかない場合にgetだけで処理できます。
参考資料:GlideRecord | ServiceNow Developers - 表示値で格納する場合は、
rec.u_scheme_id.setDisplayValue(record[0]);
これだけでQueryしてSYSIDを格納します。setDisplayValueにも複数方法があります。
参考資料:GlideElement | ServiceNow Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-08-2022 05:58 PM
ご確認いただきありがとうございます。
ご指摘の通り、桁数を32文字に変更しましたら値の設定ができました。
この度はご丁寧にご対応いただき誠にありがとうございました。
今後ともどうぞよろしくお願いいたします。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-23-2022 10:42 PM
クライアントスクリプトで似たような困りごとがあって探していたので貼っておきます。
Script Include
var GetAbelTuter = Class.create();
//関数AbstractAjaxProcessorを継承を宣言
GetAbelTuter.prototype = Object.extendsObject(AbstractAjaxProcessor, {
//getUserNameAndEmpNoメソッドの宣言
getUserNameAndEmpNo: function() {
//sys_userテーブルからabel.tuterのレコードをクエリ
var gr = new GlideRecord('sys_user');
gr.addQuery('user_name', 'abel.tuter');
gr.query();
gr.next();
//取得したレコードからsysidを取得
var sys = gr.getUniqueValue();
if (sys) { //存在するか確認してから呼び出し元に値を返す
return sys;
}
return ''; //存在しない場合は空文字を返す
},
type: 'GetAbelTuter'
});
Catalog Client Script
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
//Type appropriate comment here, and begin script below
var ajax = new GlideAjax('GetAbelTuter');
//サーバスクリプト'GetUserInfo'内の'getUserNameAndEmpNo'メソッドを呼び出す
ajax.addParam('sysparm_name', 'getUserNameAndEmpNo'); //呼び出すメソッド名を指定
ajax.getXMLAnswer(function(answer) { //Ajax呼び出し
if (answer.length > 0) { //返り値を取得できたかチェック
g_form.setValue('user', answer, 'Abel.Tuner'); // 結果を参照レコードに設定する
}
});
}