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

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
Giga Sage
Giga Sage

.getValue()はUTCで取得し.getDisplayValue()はユーザの日付設定に基づいて取得します。

具体的に「この場合、その他の変数が取得できなくなります」とはどの変数でしょうか?

質問に具体的に何を期待しているのに何になるの記述があると分かりやすくなります。

ご返答ありがとうございます。

具体例がなく申し訳ございません。

find_real_file.png

上の画像での例なのですが、一番上の変数でレコードを参照してsys_idをクライアントスクリプトへ渡し、レコードの内容を取得しています。

getDisplayValue()に変更すると、上の画像のように「日付/時刻」しか反映されません。

「日付/時刻」の欄をユーザーの時刻設定に基づいて取得しつつ、他の変数も反映させるにはどうすれば良いでしょうか。

「申請者」、「場所」、「端末」が反映されないと言うことでしょうか?画面から選択ボックスのように見えます。

日付をgetDisplayValue()で取得しないと設定されるのでしょうか?それとも質問は選択ボックスをどのように設定するかでしょうか?

そうです。「申請者」、「場所」、「端末」が反映されません。

「申請者」、「場所」、「端末」は.getDisplayValue()でなく.getValue()ですと自動で入力されます。

ですがその場合「日付/時刻」の欄がUTC時刻で入力されてしまいます。

なのでスクリプトをどのように書き直せば、「日付/時刻」の欄をユーザーの時刻設定に基づいて取得しつつ、その他の変数も反映させられるかということです。伝わりにくく申し訳ございません。