スタックトレースをキャプチャするデバッグビジネスルールの作成方法Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } スタックトレースをキャプチャするデバッグビジネスルールを作成します。これは、予期せずレコードを挿入、更新、または削除しているコードを特定してトラブルシューティングするのに役立ちます。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } サポートされているすべてのリリース Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 開始する前に デバッグビジネスルールを作成する前に、デバッグで検証したい仮説を定義します。すべてをログに記録すると、パフォーマンスが低下し、ログデータが過剰に生成されます。効果的なデバッグビジネスルールは、適切な制限条件を設定することが重要です 制限条件の例: シナリオテーブル操作条件特定のユーザーによって作成された多数の新規レコードu_testinsert作成者 = アベル・テューター特定のユーザーによって行われた多数の更新u_testupdate更新者 = David Loo特定の値で作成された多数のレコードu_testinsert名前 = ABCDE 解決 デバッグビジネスルールの作成 (グローバルスコープ) 次のスクリプトは、グローバルスコープ内でのみ機能します。トラブルシューティングの仮説に基づいて条件をカスタマイズします。 (function executeRule(current, previous /*null when async*/) {// ここにコードを追加gs.log('***** DEBUG - op:'+ current.operation() + ", sess:" + gs.getSessionID() + ", time:" + new Date().getTime() + ', sys_id:' + current.sys_id + ' - \n' + GlideLog.getStackTrace(new Packages.java.lang.Throwable()), 'Stacktrace Debug');})(current, previous); ログに記録された情報: フィールド説明操作データベース操作:挿入、更新、または削除sessionIDトランザクションログまたはノードログを検索するときに便利です時刻ビジネスルールが呼び出された時点のタイムスタンプsys_idシステムログでビジネスルール出力を検索するときに便利ですスタックトレースビジネスルールが呼び出されたときのフルスタックトレース ログを表示 デバッグ出力を表示するには、ソースが「Stacktrace Debug」であるシステムログ [syslog] テーブルを照会します。例: https://<instance_name>.service-now.com/syslog_list.do?sysparm_query=source%3DStacktrace%20Debug 追加の検索オプション : メッセージにレコードのsys_idが含まれているログを検索できます。複数のスタックトレースがログに記録されている場合、sys_idで検索すると、特定のエントリを見つけるのに役立ちます。 注意:削除されたレコードのスタックトレースを見つけるには、レコードを削除する前にsys_idを保存します。 デバッグビジネスルールの作成 (スコープ対象アプリケーション) スコープ対象のアプリケーション内ではパッケージコールを使用できないため、グローバルスコープスクリプトはスコープ対象のアプリケーションでは機能しません。この制限を回避するには、スコープ対象のビジネスルールが呼び出すことができるグローバルスクリプトインクルードを作成します。 ステップ 1:グローバルスクリプトインクルードを作成する。 StackTrace のアクセス可能を「すべてのスコープから」に設定して、スクリプトインクルードを作成します。 var StackTrace = Class.create();StackTrace.get = function() { return GlideLog.getStackTrace(new Packages.java.lang.Throwable());}; ステップ 2:スコープ対象のビジネスルールを作成する。 gs.log はグローバルスコープでのみ使用できるため、代わりに gs.info を使用してください (function executeRule(current, previous /*null when async*/) {// ここにコードを追加gs.info('***** DEBUG - op:'+ current.operation() + ", sess:" + gs.getSessionID() + ", time:" + new Date().getTime() + ', sys_id:' + current.sys_id + ' - \n' + global.StackTrace.get(), 'Stacktrace Debug');})(current, previous);