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

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

すみません。

わざわざありがとうございます。

本当に助かりました。

@Hitoshi Ozawa さん、お疲れ様です。

勝手にメンションすみませんが、下記問題があります、教えていただけますでしょうか。

要はService PortalのRequest Itemのコピーボタンを追加して、ボタンを押下してService Portalの申請画面を戻りたいです。Portalの申請画面に遷移したときに、コピー前の申請内容が入った状態で遷移できるイメージです。

現在は下記のCommunityリンクを参考しました、Service PortalにWidgetを作成しました。

Clone Requested Items - ServiceNow Community

Portal 

コピーボタンを押下

chunn_0-1683194140780.png

申請画面、問題点開始時間と終了時間は9時間差があります。UTCを取得しました、カレントのタイムゾーンはJapanです。この問題ご存知したら、ご連絡いただければ助かります。

chunn_1-1683194182207.png