スクリプトで参照項目へ値の反映をする方法

Yuki21
Tera Expert

インポートセットテーブルに添付されたCSVファイルをカスタムテーブルへインポートするスクリプトを実装しましたが、テーブルのカラム属性が異なるため、値が反映されまない状況です。

 

スキームID、システムID、性能情報種別IDは
属性がインポートセットテーブルでは文字列、カスタムテーブルは参照(※)となっています。
※スキームマスタ、システムマスタ、性能情報種別マスタの値を参照

参照項目への値の反映をする方法について、ご教示いただければと思います。

1 ACCEPTED SOLUTION

iwai
Giga Sage

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

View solution in original post

11 REPLIES 11

すみません、確認したところ、性能情報明細テーブル画面から入力した場合でもスキームIDに値が反映されないことが分かりました。
フォームで入力する際のマスタ参照はできておりますが、更新ボタンを押しても値が反映されていません。
スキームマスタとの参照設定に問題があると思われますので、そちらの線で確認を進めています。

すみません、確認したところ、性能情報明細テーブル画面から入力した場合でもスキームIDに値が反映されないことが分かりました。
フォームで入力する際のマスタ参照はできておりますが、更新ボタンを押しても値が反映されていません。
スキームマスタとの参照設定に問題があると思われますので、そちらの線で確認を進めています。

  • Table設定を見たところ、誤りがあります。参照項目(Reference項目)の最大長が3文字や10文字、5文字になっています。正しくは32文字必要です。参照項目の内部値 SYSIDの32文字を格納します。表示する文字の長さは関係ありません。表示値は内部に格納していないためです。(Reference項目の最大長の初期値は32文字なので、32ではない場合、手動で値を変更した可能性があります)

find_real_file.png

  • ”u_scheme_master” Tableの”u_scheme_id”は表示項目として正しく設定されています。

find_real_file.png

  • 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

ご確認いただきありがとうございます。

ご指摘の通り、桁数を32文字に変更しましたら値の設定ができました。

この度はご丁寧にご対応いただき誠にありがとうございました。

今後ともどうぞよろしくお願いいたします。

Tetu
Tera Contributor

クライアントスクリプトで似たような困りごとがあって探していたので貼っておきます。

 

setValue() reference fields/variables, use the value AND displayValue parameter - Developer Communit...

 

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'); //   結果を参照レコードに設定する
        }       
    }); 
}