レコードの「日付/時刻」をユーザータイムゾーンで取得取得する方法について

a_129
Mega Guru

現在、下記のクライアントスクリプトとスクリプトインクルードを使用してテーブルのレコードの内容をカタログアイテムを申請する際に反映させているのですが、「日付/時刻」がUTC時刻のまま反映されてしまいます

スクリプトインクルードの「getValue」を「getDisplayValue」に変更すると「日付/時刻」は、ユーザータイムゾーンで取得できることは確認していますが、この場合、その他の変数が取得できなくなります。

何かいい方法があればご教授いただけますと幸いです。

find_real_file.png

find_real_file.png

 

 

1 件の受理された解決策

例:

スクリプトインクルード

var ClientUtil = Class.create();
ClientUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getRecord: function() {
        var tableName = 'u_a0_sample_table';
        var fieldInfoDict = {};
		
		var str = this.getParameter('sysparm_key');
		
		var gr = new GlideRecord(tableName);
        if (gr.get('u_string_field', str)) {
            var fields = gr.getFields();
            for (var i = 0; i < fields.size(); i++) {
                var gElement = fields.get(i);
                var name = gElement.getName();
                var type = gElement.getED().getInternalType();
                if (type == 'glide_date_time' || type == 'glide_date') {
                    fieldInfoDict[name] = {
                        'type': type,
                        'value': gElement.getDisplayValue()
                    };
                } else {
                    fieldInfoDict[name] = {
                        'type': type,
                        'value': gElement.getValue()
                    };
                }
            }
			return JSON.stringify(fieldInfoDict);
        }
    },
    type: 'ClientUtil'
});

クライアントスクリプト

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '' || oldValue == newValue) {
        return;
    }
    var ajax = new GlideAjax('ClientUtil');
    ajax.addParam('sysparm_name', 'getRecord');
    ajax.addParam('sysparm_key', newValue);
    ajax.getXML(function(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        var fieldInfoDict = JSON.parse(answer);
        for (var name in fieldInfoDict) {
            var type = fieldInfoDict[name].type;
			//if (type == 'glide_date' || type == 'glide_date_time') {
				g_form.setValue(name, fieldInfoDict[name].value);
			//}
        }
    });
}

実行結果

find_real_file.png

元の投稿で解決策を見る

11件の返信11

forループではなく個々のフィールドをg_form.setValue()及びsetDisplayValue()で設定されてはどうでしょうか?

forループを利用するのであればスクリプトインクルードでフィールド型を取得してクライアントスクリプトに返す、クライアントスクリプトで型によるif, elseif, else文でsetValue()又はsetDisplayValue()を選択する。

 

ありがとうございます。

とても参考になりました。

Hitoshi Ozawa
Giga Sage
Giga Sage

質問とは無関係になりますが、ServiceNowフォーラムにコードを貼り付ける場合は次のようにします。

  1. 「Insert/Edit code sample」アイコンをクリックしてfind_real_file.png
  2. 「javaScript」を選択
    find_real_file.png

ご指摘ありがとうございます。

以後、参考にさせて頂きます。

例:

スクリプトインクルード

var ClientUtil = Class.create();
ClientUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getRecord: function() {
        var tableName = 'u_a0_sample_table';
        var fieldInfoDict = {};
		
		var str = this.getParameter('sysparm_key');
		
		var gr = new GlideRecord(tableName);
        if (gr.get('u_string_field', str)) {
            var fields = gr.getFields();
            for (var i = 0; i < fields.size(); i++) {
                var gElement = fields.get(i);
                var name = gElement.getName();
                var type = gElement.getED().getInternalType();
                if (type == 'glide_date_time' || type == 'glide_date') {
                    fieldInfoDict[name] = {
                        'type': type,
                        'value': gElement.getDisplayValue()
                    };
                } else {
                    fieldInfoDict[name] = {
                        'type': type,
                        'value': gElement.getValue()
                    };
                }
            }
			return JSON.stringify(fieldInfoDict);
        }
    },
    type: 'ClientUtil'
});

クライアントスクリプト

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '' || oldValue == newValue) {
        return;
    }
    var ajax = new GlideAjax('ClientUtil');
    ajax.addParam('sysparm_name', 'getRecord');
    ajax.addParam('sysparm_key', newValue);
    ajax.getXML(function(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        var fieldInfoDict = JSON.parse(answer);
        for (var name in fieldInfoDict) {
            var type = fieldInfoDict[name].type;
			//if (type == 'glide_date' || type == 'glide_date_time') {
				g_form.setValue(name, fieldInfoDict[name].value);
			//}
        }
    });
}

実行結果

find_real_file.png