ServiceNowQA20210730

 Q1)メールクライアントを有効にして、To: フィールドを自動入力する方法は?

リクエストフォームでメールクライアントを有効にする方法と、「To」アドレスに「Requested For」のメールアドレスを入力する必要があります...。

image

Answer

テンプレートのToフィールドにフィールド名をブラケット内に入れずに追加してください。

例)caller_idを${caller_id}の代わりに使うこと。

(補足)sys_email_client_template で、Subjectはブラケットが必要になる。

例)${number}で${short_description}


Question1.2)ログインユーザーをCcに追加したい

ご参考までに、スクリーンショットをご覧ください......この件についてご協力いただけますか?


we3.PNG
Answer
javascript:gs.getUser().getRecord().getValue('email')
ログインしたユーザーのEメールを自動入力したいテンプレートのフィールドに追加します。


Q2)onLoadクライアントスクリプトからスクリプトインクルードに含まれる配列へのアクセス

私はスクリプトインクルードとクライアントスクリプトについて初歩的な理解をしているのでお詫びしておきます。 特定のビュー用のフォームに2つの参照フィールドを事前に入力しようとしており、次のようなスクリプトインクルードを持っています。
Client Callableにチェック
onLoadクライアントスクリプトでsetValuesしたいです。
My HR Profileフィールドは、hr_profileテーブルの参照フィールドで、sys_userを参照します。 
My HR Contactフィールドは、hr_profileテーブルに追加したカスタムフィールドで、これもsys_userを参照しています。 
私のhr_profileフィールドの値をオブジェクト配列のinfo.hr_profileに設定したい場合、正しい構文は何でしょうか?

Script Include:

var submit_hr_request = Class.create(); submit_hr_request.prototype = Object.extendsObject(global.AbstractAjaxProcessor, { hrRequest: function() { var gr = new GlideRecord('sn_hr_core_profile'); gr.addQuery('user', gs.getUserID()); gr.query(); var myInfo = []; if(gr.next()) { var info = {}; info.hr_profile = gr.getDisplayValue('user'); info.hr_contact = gr.getDisplayValue('x_dnf_hr_contact'); myInfo.push(info); } return myInfo; }, type: 'submit_hr_request' });
Client Script:

function onLoad() { var ga = new GlideAjax('submit_hr_request'); ga.addParam('sysparm_name', 'hrRequest'); ga.getXML(hrRequestParse); function hrRequestParse(response) { var answer = response.responseXML.documentElement.getAttribute("answer"); g_form.setValue('hr_profile', ???); } }
//Answer//ユーザーのシステムIDではなく、人事プロファイルのシステムIDを返す必要があります。
Script Include: var submit_hr_request = Class.create(); submit_hr_request.prototype = Object.extendsObject(global.AbstractAjaxProcessor, { hrRequest: function() { var myInfo = []; var gr = new GlideRecord('sn_hr_core_profile'); gr.addQuery('user', gs.getUserID()); gr.query(); if(gr.next()) {//ここのgetで人事プロファイルを取得している return gr.getValue('sys_id')+','+gr.getDisplayValue('x_dnf_hr_contact'); } }, type: 'submit_hr_request' }); Client Script: function onLoad() { var ga = new GlideAjax('submit_hr_request'); ga.addParam('sysparm_name', 'hrRequest'); ga.getXML(hrRequestParse); function hrRequestParse(response) { var answer = response.responseXML.documentElement.getAttribute("answer");//ここのセット方式に変更を加える var myObj = answer.split(','); alert(myObj[0]+' - '+myObj[1]); g_form.setValue('hr_profile', myObj[0]); } }

Question3)レポートをエクセル形式でエクスポート

ServiceNowはPDF形式でしかレポートをエクスポートできないようです。  チャートやグラフは好きなのですが、そこに何か他のものを追加したり、数値を変更したり、データを操作したりする必要があるので、いくつかのレポートをエクセルでエクスポートしたいと思っています。  どなたかエクセルにエクスポートできた方はいらっしゃいますか?

Anser
任意の列の見出しを右クリックして「Export」>「Excel」を選択すると、リストレポートをExcelスプレッドシートとしてエクスポートできます。
保存したリストレポートのエクスポートをスケジュールするには、「スケジュール」をクリックし、「タイプ」に「Excelスプレッドシート」を指定します。Excelでは、レポートの継続時間がx日y時間の形式ではなく、ミリ秒単位で表示されます。

Question4)キャンセルボタンを押した後のキャンセル確認画面

変更フォームのキャンセルボタンをクリックしたときに、確認のポップアップを設定するにはどうしたらよいでしょうか。ユーザーがキャンセルを押した場合、確認を求められ、OKを押した場合は変更をキャンセルし、キャンセルした場合は、レコードをキャンセルせずに変更フォームに戻らなければなりません。

Answer:
'client'チェックボックスをチェックし、'onlick'フィールドに関数を貼り付けます。
function cancelTicket(){
      var answer=confirm("Are you sure you want to cancel this record?");
      if (answer==true)
      {
          gsftSubmit(null, g_form.getFormElement(), 'cancel_change'); //MUST call the 'Action name' set in this UI Action
      }
      else
      {
          return false;
      }
}
if(typeof window == 'undefined')
      {
      current.state = 8;
      current.update();
      action.setRedirectURL(current);
      gs.addInfoMessage('The current change request has been cancelled.');
}

Question5)インシデントまたはリクエストアイテムへの直接リンクURL

番号に基づいてインシデントやリクエストアイテムに移動する単一のURLを使用する方法はありますか?
シナリオはこうです。私は、フィールド値をURLテンプレートにリンクすることができるアプリケーションを持っており、他のアプリケーション(ここではService-Now)に直接リンクすることができます。私が直面している問題は、IDがインシデントまたはリクエストアイテムである可能性があることです。URLは事前に定義しなければならないので、IDの種類に応じて変更することはできません。インシデントまたはリクエストアイテムの番号を受け取り、正しいアイテムを開くURLが必要です。

Answer
インシデントとRITMは共にTaskテーブルにロールアップされますので、以下のような一般的URLを作成します。
https://xxx.service-now.com/task.do?sys_id=<RITMまたはインシデントのsys_id>
もし、sys_idがない場合は
https://xxx.service-now.com/nav_to.do?uri=task.do?sysparm_query=number=
お役に立てれば幸いです。

(補足)上記だと動かない場合もありますので完全版です。

https://xxx.service-now.com/nav_to.do?uri=change_request.do?sysparm_query=number=<CHG number>

https://xxx.service-now.com/nav_to.do?uri=incident.do?sysparm_query=number=<INC number>

Question6)バックグラウンドスクリプトを用いた複数レコードの削除

複数のレコードを削除するために見つけたこのスクリプトを修正しましたが、今のところ失敗しています。
1回だけのイベントなので、スクリプトのバックグラウンド機能を使用するつもりです。レコードは4月1日以前のものなので、エンコードされたクエリを追加しました。これらのレコードをすべて手動で削除することはできないので、誰か私がどこで間違っているかわかりますか?

var gr = new GlideRecord('pa_scores');

gr.addQuery('breakdown','=', 'Model Category');

gr.addEncocdedQuery(sys_created_on<=javascript:gs.dateGenerate('2016-03-31','23:59:59'));

gr.query();

while (gr.next()) {

    //Delete each record in the query result set

  gr.deleteRecord();

}


Answer
皆さんのご協力に感謝します。皆さんのご指導のもと、少しずつ変更を加えて動作するようになりました。以下は、私が使用したものです。

var gr = new GlideRecord('pa_scores');

gr.addQuery('breakdown.name','=', 'Model Category'); // Pradeep Sharma update

gr.addEncodedQuery('sys_created_on<=' + gs.dateGenerate('2016-03-31','23:59:59')); // Chuck Tomasi update

gr.query();

while (gr.next()) {

  gr.deleteMultiple(); // Ken and Santosh update

}


これらのレコードを削除するのにはまだ時間がかかりましたが(Devのインスタンスが1回目)、これで動作することがわかったので、本番でも実行できるようになりました。
Next Post Previous Post
No Comment
Add Comment
comment url