Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

ポータル上にRequest Itemのコピーボタン作成

chunn
Tera Expert

皆さん

お世話になっております。

ポータルについて質問させてください。

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

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

Clone Requested Items - ServiceNow Community

ポータル

chunn_0-1683283606926.png

コポーボタン押下後

chunn_1-1683283646343.png

問題点は開始時間と終了時間は9時間差があります。UTCを取得しました、カレントのタイムゾーンはJapanです。コードから見ると、Date/TimeのタイプはgetDisplayValue の設定がありません。

chunn_2-1683283729964.png

 

この問題ご存知したら、ご連絡いただければ助かります。

 

1 件の受理された解決策

iwai
Giga Sage

質問の内容を推測して、質問内容は「CatalogUtils を使って MultiRowを CopyするScriptを作成したときに、時間が日本時間の9時間ずれている、これを解決するScriptを作成して欲しい」だと考えました。

「この問題ご存知したら、ご連絡いただければ助かります。」となっていますが、問題を知っているだけでは質問した意味がなく、問題の解決方法を求めているのだと解釈しました。

CatalogUtils を使ったことはありませんが、Scriptを解析して問題であろう個所がわかりました。

MultiRowの値は、JSON文字列として一括で受け取っています(複数項目の複数行をひとつのJSON文字列として受け取る)。この時Server sideの内部値なのでUTCの時間を受け取っている。

これをClientScriptでJSONを設定するとUserのタイムゾーン(日本時間)で設定するため9時間ずれる。

 

解決方法で考えてみたのはCatalogUtils の MVRS の処理でJSONに含まれるUTCをJSTに変換する処理を入れる方法。

 

_arrResult.push({
  strType: 'MVRS',
  strName: _strKey,
  strQuestionText: _grRITM.variables[_strKey].getLabel(),
  strValue: _grRITM.variables[_strKey].toString().replace(/"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})"/g, function(match, datetime) {
    var gdt = new GlideDateTime(datetime);
    gdt.addSeconds(9 * 60 * 60);
    return '"' + gdt.toString() + '"';
  });
  strDisplayValue: null,
});

 

この方法を実際に組み込んでテストしたわけではないです。環境を構築してテストするのにさらに何時間もかかるため、まずはここまでで投稿しました。 実際の問題の解決の役に立てば幸いです。

元の投稿で解決策を見る

2件の返信2

iwai
Giga Sage

質問の内容を推測して、質問内容は「CatalogUtils を使って MultiRowを CopyするScriptを作成したときに、時間が日本時間の9時間ずれている、これを解決するScriptを作成して欲しい」だと考えました。

「この問題ご存知したら、ご連絡いただければ助かります。」となっていますが、問題を知っているだけでは質問した意味がなく、問題の解決方法を求めているのだと解釈しました。

CatalogUtils を使ったことはありませんが、Scriptを解析して問題であろう個所がわかりました。

MultiRowの値は、JSON文字列として一括で受け取っています(複数項目の複数行をひとつのJSON文字列として受け取る)。この時Server sideの内部値なのでUTCの時間を受け取っている。

これをClientScriptでJSONを設定するとUserのタイムゾーン(日本時間)で設定するため9時間ずれる。

 

解決方法で考えてみたのはCatalogUtils の MVRS の処理でJSONに含まれるUTCをJSTに変換する処理を入れる方法。

 

_arrResult.push({
  strType: 'MVRS',
  strName: _strKey,
  strQuestionText: _grRITM.variables[_strKey].getLabel(),
  strValue: _grRITM.variables[_strKey].toString().replace(/"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})"/g, function(match, datetime) {
    var gdt = new GlideDateTime(datetime);
    gdt.addSeconds(9 * 60 * 60);
    return '"' + gdt.toString() + '"';
  });
  strDisplayValue: null,
});

 

この方法を実際に組み込んでテストしたわけではないです。環境を構築してテストするのにさらに何時間もかかるため、まずはここまでで投稿しました。 実際の問題の解決の役に立てば幸いです。

@iwai さん、お疲れ様です。ご連絡・回答いただきありがとうございます。承知しました。上記の方法こちらはやってみます。