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

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 

 

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

 

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

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