例として「ディスカバリー - センサー」を使用した ECC キューの処理とデバッグDescription外部通信チャネル (ECC) キューには、MID サーバーとの間の入出力メッセージが表示されます。ECC キューは、インスタンスと、連携する他のシステム (通常は MID サーバー) との間の標準の接続ポイントです。メッセージは、入力 (MID サーバーからインスタンスへ) または出力 (インスタンスから MID サーバーへ) に分類されます。 ECC キュー処理 ecc_queue 入力レコードは、ビジネスルール (BR) によって処理されます。ECC キュー入力を処理するすべてのビジネスルールが、入力を処理済みに設定するわけではありません。したがって、一部の ecc_queue 入力が準備完了ステータスのままになる場合があります。 たとえば、検出の入力を処理するためのビジネスルールは「ディスカバリー - センサー」です。 具体的には、この BR によって検出の入力ステータスが処理済みに設定されます。 ここで、AutomationEccSensorConditions スクリプトによって条件が決定されます。このスクリプトは、これが検出ペイロードかどうか、およびセンサーを介して処理するかどうかを決定するものです。 AutomationEccSensorConditions.discovery(current) ビジネスルールのスクリプトは次のとおりです (Paris リリースでは、問題のあるジョブを ECC キューまでさかのぼって追跡できるように、ジョブ名に追加情報が付加されています) var script = "var job = new DiscoverySensorJob();\njob.process();";var probe = current.name;var name = current.getValue('name');var source = current.getValue('source');var sys_id = current.getValue('sys_id');var jobName;if (gs.nil(probe) || probe.indexOf('MultiPage') == -1) jobName = 'ASYNC: Discovery - Sensors ' + name + ' (' + source + ') ' + sys_id;else jobName = 'ASYNC: Discovery - MultiPage Sensors ' + name + ' (' + source + ') ' + sys_id;var sched = new SchedulePriorityECCJob(jobName, current, script);sched.schedule(); 上記のスクリプトは、sys_trigger ジョブを作成するために SchedulePriorityECCJob を呼び出しています。ペイロードは、実際にはスケジュール済みジョブを介して処理されます。したがって、ペイロードは、ユーザーがログインしたものと同じセッション、または MID サーバーで使用される SOAP セマフォスレッドでは処理されません。ペイロードはスケジュール済みジョブによって処理され、セッションがユーザーがログインしたものとは同じでないため、通常、ペイロードを再処理し、スクリプトデバッガでセンサーをデバッグすることはできません。ただし、New York で追加された ECCQueue 入力レコードフォームの [再実行 (デバッグ)] 関連リンクでは、ユーザートランザクションでセンサーを再実行できるため、セッションデバッグを使用できます。 SchedulePriorityECCJob では、ジョブの優先度も決定します。 参考までに、この記事の執筆時点での SchedulePriorityECCJob のコードを次に示します。 gs.include("Schedule");var SchedulePriorityECCJob = Class.create();SchedulePriorityECCJob.prototype = Object.extendsObject(Schedule,{ initialize: function(label, document, script) { Schedule.prototype.initialize.call(this); this.time = new GlideDateTime(); this.setDocument(document); this.trigger_type = 0; this.script = script; this.label = label; this.priority = document.priority; this.runAsUser = GlideUser.getUserByID(document.sys_created_by).getID(); }, setTime: function(time) { this.time = time; }, schedule: function() { var t = this._getTrigger(); if (!gs.nil(this.document)) t.document = this.document; if (!gs.nil(this.script)) t.script = this.script; if (!gs.nil(this.label)) t.label = this.label; //現在から優先度を取得 if (!gs.nil(this.priority)) { if (this.priority == 0) //インタラクティブ t.priority = gs.getProperty('glide.ecc.async.priority.interactive', 50); if (this.priority == 1) //迅速化済み t.priority = gs.getProperty('glide.ecc.async.priority.expedited', 105); if (this.priority == 2) //標準 t.priority = gs.getProperty('glide.ecc.async.priority.standard', 110); } t.job_context = 'fcRunAs=' + this.runAsUser; t.trigger_type = this.trigger_type; t.next_action = this.time; gs.print("Scheduling: " + this.label + " for: " + t.next_action.getDisplayValue()); return t.insert(); }, type: 'SchedulePriorityECCJob'});トリガーレコードはキューに入れられ、ペイロードはワーカーに割り当てられると処理されます。 重要:インタラクティブな優先順位付け ecc_queue ジョブでは、 sys_trigger ジョブの優先度が非常に高くなるため、多数のジョブが存在し、実行時間が長くなる場合は、デフォルトの 100 までの優先度を使用して、一部の重要なインスタンスプラットフォームジョブの実行がブロックされることがあります。 次の画像はイベントの順序を示しています。 ECC キューレコード処理のデバッグ スクリプトデバッガを使用できるようにするには、デバッガと同じセッションでペイロードを処理します。該当する ECC キューレコードを処理するビジネスルールと、ペイロードを処理する実際のコードを確認します。検出の例として、ビジネスルールによって「SchedulePriorityECCJob」が呼び出され、「var job = new DiscoverySensorJob(); job.process();」がスクリプトとして渡されます。「DiscoverySensorJob.process()」を確認すると、SncSensorProcessor.process() がペイロードを処理していることがわかります。 注意 : センサーから呼び出されたスクリプトインクルードをデバッグするとき、次が機能します。センサーはデバッガを直接トリガーしません。 したがって、ビジネスルールとスクリプトインクルードを確認した後、次のようにペイロードが処理されると判断できます。 ecc_queue レコードの Sys ID を取得します[システム定義] > [スクリプト - バックグラウンド] に移動します次のスクリプトを実行し、 <ecc_queue_sys_id> を正しい Sys ID に置き換えます。 var eccRecord = new GlideRecord('ecc_queue'); eccRecord.get(‘<ecc_queue_sys_id>'); var sp = new SncSensorProcessor(eccRecord); sp.process(); 最新情報:New York バージョン以降は、ecc_queue 入力フォームの関連リンク [再実行(デバッグ)] があるためこのスクリプトを実行する必要はなくなります。同じことをワンクリックで完了できます。Additional Informationドキュメントのリンク: MID サーバーの ECC キューディスカバリーの ECC キュースクリプトデバッガとセッションログ ブレークポイントの設定または削除