Toru Inoue
ServiceNow Employee

※本記事は、ServiceNowのパートナー様より寄稿いただいたものをServiceNow社員が代理で投稿しています

 

===

find_real_file.png

株式会社システムサポートと申します。

2015年にパートナー契約を締結するとともに、技術者のトレーニングやお客様の導入支援を進めて参りました。Sales, Service, Technologyの3プログラムでServiceNow社のパートナーとなり、

2017年にはServiceNowパートナープログラムにおいて、日本企業初のBronzeパートナーとして認定されました。多くの有資格者・技術者を抱え、それに伴い多くのプロジェクト実績を有しています。

現在では、プロジェクト実績や技術力等が評価され、ServiceNow Eliteパートナーに認定されております。

 

今回は、弊社技術者による開発環境のメール改善事例をご紹介致します。

開発環境のメール通知には、通知OFFにするか、1つのメールアドレスに送信機能を使って運用しているところが多いと思います。

しかし、その運用ではやりたいことができないケースがありました。そこで、ServiceNowのメールデータを転送するやり方でなら、理想的な解決ができたので事例紹介します。もう数か月間利用していますが、思った以上に良い効果を実感しています。

 

*開発環境のメール運用で困っていた事
*困った1「1つのメールアドレスに送信」の設定でも困る

find_real_file.png

  • パターンテストなどのいらないメールも含めて1つのアドレスに大量に送られてくる。
  • 複数の開発チームやメンバーが多くなるごとに、知らないメールやConnect chatの連絡通知も増えてきてメール自体を見なくなる。
  • 開発環境で個別に相手に通知したいとき(Connect Chatなど)の連絡に、他のテストメールに埋もれて見てもらえなくなる。

 

*困った2「メール通知OFF」の設定でも困る

find_real_file.png

  • メール通知OFFにすると、本当にメールを受け取るテスト、メールからの操作テストにならない。ServiceNow上で確認はできるけれど、実際にメールアプリで受け取ってみるとServiceNow上では確認できていなかった点が多々ある事に気づきます。
  • 開発環境からのメール連絡ができない。

 

*「メールデータを転送してから送信する」で解決

find_real_file.png

*この方法で解決した事一覧

*解決した=>「パターンテストとかいらないメールが大量に送られてくる。」

解決:明示的に自分宛のメール以外は送られてこない。

 

*解決した=>「複数の開発チームやメンバーが多くなるごとに、知らないメールやConnect Chatの連絡通知も増えてきてメール自体を見なくなる。」

解決:明示的に自分宛のメール以外は送られてこないので、自分の要件だけなのでわかりやすい。

 

*解決した=>「開発環境で個別に相手に通知したいとき(Connect Chatとか)の連絡に、他のテストメールに埋もれて見てもらえなくなる。」

解決:特定のユーザーのメールだけ送信許可できる、それ以外のメールは送信しません。

 

*解決した=>「メール通知OFFにすると、本当にメールを受け取るテストにならない。開発環境でのメール連絡ができない。」

解決:開発環境のメール通知はOFFで、自分宛のメールだけ、許可したユーザーだけに送られてきます。

 

*さらにうれしい効果=>開発環境を変更しないのでUpdateSet不要! 基本機能だけで実現できます

この方法は、開発環境側に設定変更がいらないので、リリースやUpdateSetに何の影響も与えません。設定するのはもうひとつのインスタンス側に設定します。

データ転送やメール送信はServiceNowの基本機能です。

ーーーーーーーーーー

*「メールデータを転送する」設定方法

開発環境はメール通知OFFにします。開発環境は何も設定変更いりません。

(※ただし通信機能を利用するので、特別なセキュリティ制限があるなら解除が必要です。意図的に設定していないなら変更や追加設定は不要です。)

必要なのはメール送信が可能な、別のインスタンスです。

メール送信が可能な、ServiceNow インスタンスをひとつ決めます(なんなら本番環境でも、個人インスタンスでも)。特別なサブスクリプションは不要です。インポートとメール機能は標準機能です。

以下、メール送信するインスタンス側に設定をしていきます。

 

1.メール送信するインスタンスに、インポート設定を作ります。

  • Menu> System Import Sets> Administration> Data Sources
  • Data Sourceを新規作成します。
  • “Name”は自由に決めて入力してください。例:”my Import DevMail”
  • “Import set table name”はインポートセットテーブルとなる名前を自由に決めてください。例:”u_imp_devmail”
  • “Format”は”XML”、 XML形式のインポートになります。
  • ”File retrieval method”は”HTTPS”、 HTTPSでシステム間通信します。
  • ”Server”は開発環境のインスタンスの名前、例:”MyInstanceName***.service-now.com”、
  • ”File path”は「/sys_email.do?XML&sysparm_query =」+検索条件。
    検索条件にはQuery文字列を使う。検索条件としてメールボックス”outbox”を指定する、送りたい相手のメールアドレスを全員分指定する、メール抽出する範囲として作成日を直近1時間に指定する。
    例:”/sys_email.do?XML&sysparm_query=mailbox=outbox^recipientsINuser1@sts-inc.co.jp,user2@sts-inc.co.jp,user3@sts-inc.co.jp^sys_created_on>=javascript:gs.beginningOfLastHour()”
    長いファイルパス100文字以上になるようならFieldのMax lengthを増やしてください。私は100から4000に増やしています。
  • “XPath”は、「//sys_email」としています、『相対パスはパフォーマンスに影響あるからお勧めしない』とメッセージが出るけれど、ほかに方法が思いつかない…
  • “Username”と”Password”は、開発環境の管理者の情報を入力します。
  • 以上の設定で開発環境のメールが、インポートセットテーブルに入ります。
    要注意:標準のインポート方法では、インポートテーブルで自動生成されたColumnのMax lengthが開発環境のMailテーブルと一致しません。
    手動ですべてのColumnのMax lengthを必ず一致させてください。
    標準動作では適当な最小限の長さになるので、後でインポートするとデータ文字列が途中までしか取り込まれない不具合が多発します。
    1回は必ず取り込みテストして、インポートセットテーブルにテーブルが取り込まれることを確認します。開発環境に取り込まれるべきメールが用意されていることも忘れずに準備してください。
    取り込みが成功してから次に進んでください。

find_real_file.png

2.インポート後のトランスフォームを作ります。

  • Data Sources (Foam View) Related Lists > Transforms
    (インポート設定画面の下にあります)
  • Transformを新規作成します。
  • Related Links > Auto Map Matching Fieldsなど使ってField Mapsの状態を作ります。あらかじめインポートセットテーブルにフィールドやデータがある必要があります。
  • Fieldの設定ができたら、Transformで既に存在するメール(SYSIDの重複)なら取り込まない設定をします。
    “Field Maps”の“Target field” “sys_id”の”Coalesce”だけを”True”に設定します。
  • それと、”Transform Script”を新規作成します。設定は”when”を“onBefore”にして、
    ”Script”に下記を追加

if(action == 'insert'){

       target.setNewGuidValue(source.u_sys_id);

}else{

       ignore = true;

}

これはMail RecordをinsertするときのSysIDを開発環境のSysIDと同じ値にするための方法です。通常SysIDは自動発番されて開発環境のSysIDと重複判定ができません、そこでこのScriptで同じ値にして重複判定を実現しています。

  • ほかのTransformはそのまま、右から左に受け流すだけでも、概ね問題ないです。
  • 余力があれば、メール本文にURL相対パスになっている場合、開発環境のURLパスにならないので、そこだけ文字列変換してあげると、完璧なメール転送になります。正規表現置換で、すぐできる程度です。
    Script例(Transform Script: when onBefore)(先ほどのScriptの下に追加する方法で良いです。)

//相対パスを絶対パスに変換

if(source.u_body){

       source.u_body = (''+source.u_body).replace(/(<\s*a\s+[^>]*href\s*=\s*['"])(?!http|['"])(\.*\/)*/g, '$1https://myInstanceName.service-now.com/');

}

//返信先を固定mail addressに変換

if(!source.u_user){

       //標準だと254byteしかない必要に応じて増やす sys_email.user[String]:Max length:256

       source.u_user = '"myDevMail" <myInstanceName@service-now.com>';

}

 

find_real_file.png

3、最後にスケジュールインポートを作ります。

  • Menu> System Import Sets> Administration> Scheduled Imports
  • Scheduled Importを新規作成します。この設定で定期的にメールを収集します。
  • “Name”は自由に決めて入力してください。例:”Import DevMail”
  • “Deta source”は先ほど作成したインポート設定を指定します。例:”my Import DevMail”
  • “Repeat Interval”は50分。今回はインポートを50分間隔にして、インポート設定側の検索条件の1時間としました。ここは運用に合わせて調整してください。時間差があるのは検索範囲が少し広くしないと時間の区切りで取り込み漏れが発生する可能性があるからです。
  • これで完成です。

find_real_file.png

これで開発環境の特定のユーザーあてのメールが、50分間隔でメール送信インスタンスを経由してメール通知されます。

是非お試しください。