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.

過去のレコードの中から特定のレコードの値を取得したい

sirou
Tera Contributor

こんにちは皆様

 

私は受信アクションでレコードの起票を行っております。

そこで過去のレコードの中から特定のレコードの値を取得したいと考えております。

過去に起票されたレコードに紐づいたメールが受信された際に、作業メモにメールの本文を自動投稿する

機能を実装したいと考えております。

しかし、現状過去のレコードの値を取得することが出来ず新しくレコードが起票されてしまう状況になっております。

この機能は実装することは出来ますでしょうか?

写真は私が書いたコードです。

赤枠の箇所が上手く機能しておりません。

スクリーンショット 2023-01-13 120951.jpg

 

1 ACCEPTED SOLUTION

newhand
Mega Sage

こんにちは @sirou 

私もよく把握できてないので、一部内容が推測になり、情報共有と意味合いで回答しています。

 

Inbound Action の例(Create Incident と Update Incident )を勉強しまして、Snowが既存のレコード(更新)として識別されるためには、以下の二つの条件があります。この場合、新規/更新の判断ロジックはScriptの中に実装不要で、単純にcurrent.work_notes に値を設定すればと思います。

 

This inbound email action is triggered when an email is sent to ServiceNow and:

1. The email is a reply.
2. The email being replied to was sent by ServiceNow due to an update or creation of an Incident.

 

今回の場合は、おそらく、「更新」に自動判定されないと推測しています。

この場合は、「新規」のスクリプトの中に、

1.currentを使わすに、新しいGlideRecordを発行し過去のレコードを検索してから更新行います。

2.currentは新規起票用なので、これをキャンセルさせる(setAbortAction)。

※要テスト。。。。

 

Please mark my answer as correct and helpful based on Impact.

View solution in original post

4 REPLIES 4

newhand
Mega Sage

こんにちは @sirou 

私もよく把握できてないので、一部内容が推測になり、情報共有と意味合いで回答しています。

 

Inbound Action の例(Create Incident と Update Incident )を勉強しまして、Snowが既存のレコード(更新)として識別されるためには、以下の二つの条件があります。この場合、新規/更新の判断ロジックはScriptの中に実装不要で、単純にcurrent.work_notes に値を設定すればと思います。

 

This inbound email action is triggered when an email is sent to ServiceNow and:

1. The email is a reply.
2. The email being replied to was sent by ServiceNow due to an update or creation of an Incident.

 

今回の場合は、おそらく、「更新」に自動判定されないと推測しています。

この場合は、「新規」のスクリプトの中に、

1.currentを使わすに、新しいGlideRecordを発行し過去のレコードを検索してから更新行います。

2.currentは新規起票用なので、これをキャンセルさせる(setAbortAction)。

※要テスト。。。。

 

Please mark my answer as correct and helpful based on Impact.

sirou
Tera Contributor

こんにちは @newhand 

 

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

また、情報共有不足申し訳ございません。

 

いただいたアドバイスを元に今後のスクリプトは、

1.写真赤枠箇所はwork_notes = subject + body;だけで問題ない

2.新規レコード作成を止めるために、新しく受信アクションを作成する

という認識で間違いないでしょうか?

 

また、新しいGlideRecordを発行し過去のレコードを検索ですが、

var gr = new GlideRecord("sn_customerservice_case");

gr.addQuery("u_outer_numberLIKE"+result.toString());
gr.query();

このようなコードでしょうか?

 

@sirou 

 

受信したメールが以下の2条件を満たされる場合は 写真赤枠箇所はwork_notes = subject + body;だけで問題ないと思います。

1. The email is a reply.
2. The email being replied to was sent by ServiceNow due to an update or creation of an Record.

 

 

>2.新規レコード作成を止めるために、新しく受信アクションを作成する

>という認識で間違いないでしょうか?

⇒受信アクションで「更新」と判定されない場合(「新規」と判定される場合)、

current は新規作成用のオブジェクトになる、この場合、ディフォルトでは新しいレコードが作成されます。この動作を制御しないと、過去のレコードが更新されたうえ、新しいレコードも作成されてします。なので、新しいレコードを作成しないように制御する必要があります。

 

>また、新しいGlideRecordを発行し過去のレコードを検索ですが、

>var gr = new GlideRecord("sn_customerservice_case");

>gr.addQuery("u_outer_numberLIKE"+result.toString());
>gr.query();

>このようなコードでしょうか?

⇒はい、過去のレコードをクエリーして「work_notes」を更新する。

 

 

受信されるメールがどんなメールなのか把握できてないため、今回の問題のポイントはSNOWで更新・新規の判定が自動できるできないかと思います。もしうまく判定できず一律新規になってしまった場合は、私が提案したその面倒な2ステップを考慮する必要があると思っています。

 

 

 

 

Please mark my answer as correct and helpful based on Impact.

sirou
Tera Contributor

@newhand 

 

貴重なアドバイスありがとうございます。

 

「更新」に自動判定されてないことを確認出来たので、新規のスクリプトを作成しようと思います。

コードに対する知識が乏しいため至らぬ点があったかと存じますが、ありがとうございました。