ポータル上に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 さん、お疲れ様です。ご連絡・回答いただきありがとうございます。承知しました。上記の方法こちらはやってみます。