資産または CI レコードのskip_syncフィールドとは何か、およびこれにより資産と CI の同期がどのように中断されるかIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } これは、これから発生するレコードの更新 () の一部として、CI から資産へ、または資産から CI に同期しないように資産 - CI 同期コードに指示するために使用されます。 skip_syncフラグは、ビジネスルールの同じサイクル内での再帰を防止するために使用され、資産 - CI の同期中に次のサイクルでリセットされます。 資産および CMDB CI レコードの skip_sync フィールドは、フィールドというよりはフラグに近いですが、実際のフィールド/列であることに変わりはありません。通常の方法で、コード内の資産および CMDB CI GlideRecords のフィールドであるかのように設定できますが、ビジネスルールは現在のトランザクション/更新中に実行されるため、通常はレコードの GlideRecord オブジェクトのメモリ内にのみ存在します。 skip_syncフラグはデフォルトで false に設定されています。データベース内の保存レコードでは、これを false に設定する必要があります。レコードで true に設定されている場合、そのレコードの次回の更新時に資産 - CI 同期ビジネスルールは実行されません。しかし レコードで実際のフィールドが True に設定されている場合は、何か問題が発生しているに違いありません。 CI または資産の更新に関係する OOB スクリプトインクルードとビジネスルールがあります。 AssetAndCISynchronizer: /sys_script_include.do?sys_id=9ec37b411b012000e49bfbcd2c071380変更時に資産フィールドを更新: /sys_script.do?sys_id=31e93aaf1b3210002502fbcd2c0713d8変更時に CI フィールドを更新 /sys_script.do?sys_id=4d15855c1b0310002502fbcd2c071399 skip_syncフラグがないと、上記の 2 つのビジネスルールは資産 - CI の同期中に 2 回トリガーされ、プラットフォームの再帰防止コードがなければ実際には制御不能にループします。 同期後にskip_syncフラグを再度 false に設定する必要があります。何らかの理由でskip_syncフラグが true に設定されている場合は、資産/CI を更新するとフラグを false に戻すことができます。 また、次の場所でも使用できます。 ビジネスルール。「変更時に資産フィールドを更新」/「変更時に CI フィールドを更新」が、このメインユーザーで元のユーザーです。たとえば、CI の更新では、BR にリンクされた資産の更新が必要ですが、その資産の更新に対して実行されている BR が CI を再度更新することは望ましくありません。すぐに利用可能なものが設定する前に順序で実行されるビジネスルールで、実行されないようにするビジネスルール。スクリプト内の GlideRecords で、.update() を作成する前に。スケジュール設定済みスクリプトなどからレコードを更新したいが、ビジネスルール/エンジンを実行する必要はあるものの、「変更時に資産フィールドを更新」/「変更時に CI フィールドを更新」ビジネスルールを実行しないため、.setWorkflow(false) は使用できません。IRE 入力ペイロード内。ドキュメントには、ペイロード JSON で使用されている "skip_sync": "0" の例がいくつかあります。これにより、挿入/更新がデフォルトの skip_sync=false で開始されることが保証されます。 Symptoms<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } skip_sync「true」に変更され、トランザクションが終了した後もレコード内でその状態が維持されます。これにより、次のレコード更新時に資産と CI の同期が中断されます。 レコードに別の更新が行われるまで、予想される false 値に戻ることはありません。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } すべて Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 通常、挿入/更新/削除の前後に、current.update() コマンドを使用するカスタムビジネスルールが見られます。これは悪い習慣であるだけでなく、プラットフォームでは禁止されています。既に行われている更新内で更新を起こすことはできません。 それが行われると、すべての賭けは外れます。同じレコードに対する複数の GlideRecord オブジェクトが、異なるフィールド値を持つメモリ内に同時に存在します。どのオブジェクトが「勝ち」、トランザクションの最後にレコードに格納されるかは、その状況ではわかるものではなく、通常はランダムに表示されます。 Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 更新を行うビジネスルールの一般的なルールは次のとおりです。 更新される同じレコードのフィールドを変更する場合は、「前」のビジネスルールで行われ、既にそのルールの一部であるため、追加の update() は必要ありません。現時点ではデータベースレコードの更新はまだ行われていないため、同じレコードの他のフィールドへの更新を、既に行われている更新に便乗できます。同じテーブルまたは別のテーブル内の別のレコードを変更する場合は、「後」ビジネスルールで、関連のない他の gliderecord に対して .update() を使用します。 資産レコードと CI レコードには追加の制限があります。これは、上記のすぐに使えるビジネスルールが既に「他の」レコード (CI 更新資産/資産更新 CI) を更新しているということです。そのため、同じトランザクション内のリンクされたレコードを更新する追加のビジネスルールは、前後に、いずれにせよ再帰を引き起こす可能性があります。 それを行い、その事実を回避しようとしてcurrent.update()を使用すると、常に何かが壊れます。 CI/資産操作でトリガーされるビジネスルールは、直接、または追加のテーブル/レコードのビジネスルールを介して、関連する資産/CI レコードを更新することになります。必要に応じて、非同期ビジネスルールを使用して、更新が別のトランザクションで行われるようにすることが最善の方法です。