カタログ変数が削除されると予期しない結果が生じる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: #7057C7; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: block; max-width: ; width: auto; height: auto; } } カタログアイテムが変更された場合、開発者の目的は、多くの場合、新しい要件に対応するために既存の変数を削除または置換することです。 開発者にとって予想外かもしれませんが、カタログ変数がフォームから削除されると、変数がフォームから目に見えて削除されるだけでなく、その変数の以前にインスタンス化されたすべてのインスタンスとその変数に関連付けられたすべてのデータも削除されます。 これにより、開発作業が簡単になり、サービスカタログ全体の履歴データが大幅に失われます。 注意:サービスカタログ変数に関するドキュメントは、次の ServiceNow ドキュメントで確認できます。 https://docs.servicenow.com/csh?topicname=c_ServiceCatalogVariables.html&version=latest. データの削除は、既存の要求アイテム (RITM) またはカタログタスクに関する変数や質問を表示できなくなったユーザーに気付くことがよくあります。通常、削除が本番環境に昇格されるまで気付かれません。 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: #7057C7; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: block; max-width: ; width: auto; height: auto; } } 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: #7057C7; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: block; max-width: ; width: auto; height: auto; } } サービスカタログ変数が変更されたときに履歴データを削除しないように、次の推奨事項を考慮してください。 削除しない:変数を非アクティブにします。 フォームから変数を削除する代わりに、「アクティブ」フラグのチェックを外して、変数を非アクティブにします。無効にすると、変数はカタログユーザーに表示されなくなり、すべての履歴データがデータベース内で変更されずに残ります。 開発者と管理者が、データを削除するのではなく、アクティブ/非アクティブを切り替えるという観点から考えるように準備することで、プラットフォーム全体で壊滅的な削除イベントを回避できます。データが接続される(したがって削除される)方法をすべて予測することは困難ですが、アクティブフラグのチェックを外して(必要に応じて再チェックして)、古い項目をユーザーのビューから削除するのは簡単です。 アクティブ/非アクティブの観点から考えることは、修正スクリプトまたはアドホックスクリプト (sys.scripts.do を使用) を記述できるユーザーにとって特に重要です。UI では、警告でユーザーの注意を引くことができません。 注:一般的に言えば、UIまたはスクリプトのどちらを使用しても、プラットフォームからデータを削除しないことが最善のポリシーです。アクティブフラグを使用します。 警告を認識する。 ServiceNow プラットフォームでは、多くの場合、レコードを削除すると、参照しているすべてのレコードも削除されます。これは「カスケード削除」です。たとえば、構成アイテムレコードが削除されると、その CI を参照するすべてのタスクも削除されます。 カスケード削除が実行されることをユーザーが理解できるようにするために、次の警告!ユーザーが削除---を続行する前に、メッセージが表示されます このようなメッセージが表示されると、現在のレコード以上のものが削除されます。この場合、質問の選択肢テーブルの 3 行も削除されます。データが削除されるすべてのテーブルが、このメッセージに一覧表示されます。 アドミニストレーターと開発者は、このメッセージが表示される削除の影響を認識し、理解できる必要があります。メッセージに 2,523 個の質問の選択肢が削除されると報告されている場合は、このレコードとこのアイテムを参照するすべてのレコードを削除する前に、ユーザーは停止して影響を検討するようにトレーニングする必要があります。 開発者は、削除アクティビティが更新セットに追加されて本番環境に昇格され、削除基準に一致するすべてのレコードが削除されることに注意してください。 これらのメッセージに注意することで、誤ってデータが削除されるのを防ぐことができます。 カスケード削除ルールの構成 上記のカスケード削除機能は、[システム定義] >ディクショナリの各参照フィールドの設定によって制御されます。参照カスケードルールフィールドの値は、削除するアイテムを参照するレコードの処理方法をカスケード削除機能に指示します。 カスケード削除ルールを構成するときは、削除されるレコードを保持するテーブルを構成するのではなく、削除されるレコードを参照する (つまり、ポイントする) レコードの処理方法を構成します。その結果、「User」のカスケード削除ルールを検索する場合、辞書でtable = sys_userを検索しません...代わりに、Reference = User を検索します。 たとえば、Navigate to System Definition > Dictionary、歯車をクリックしてリストに表示されるフィールドを設定し、ReferenceおよびReference Cascade Ruleを選択してリストに表示されるようにします。 「Reference = Question」を検索します。結果のリストには質問テーブルを参照するすべてのフィールドが表示され、[参照カスケードルール] 列には削除するレコードを参照しているレコードがどうなるかが表示されます。 参照カスケードルールの設定にはいくつかの選択肢がありますが、この記事では制限に焦点を当てます。 参照カスケードルールが [制限] に設定されている場合、プラットフォームは、削除するアイテムと一致する [制限] とマークされた参照列のレコードがある限り、元のアイテムの削除を許可しません。 この例では、質問に対して [削除] ボタンが押されたときに、question_answer.question と question_choice.question の参照カスケードルールが [制限] に設定されます。 [質問の選択肢] および [質問回答] テーブルに「このサービスカテゴリは部門用ですか、それともグループ用ですか?」という質問を指すレコードがあるため、レコードは削除されませんでした。 注意: カスケード削除ルールのドキュメントは、次の ServiceNow 標準ドキュメントで確認できます https://docs.servicenow.com/csh?topicname=t_CascadeDeleteRules.html&version=latest Related Links<!-- /*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: #7057C7; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: block; max-width: ; width: auto; height: auto; } } 要約すると、開発サイクル中にフォームからカタログ変数を削除すると、変数とともに過去に収集されたすべてのユーザーデータも削除されます。プラットフォームがデータ削除を処理する方法を認識しておくと、カタログ変数データなどの意図しないデータ損失を回避できます。 意図しない削除を避けるため、次のガイドラインに従ってください。 削除オプションの代わりに、プラットフォーム全体でアクティブフラグを使用します。 アクティブフラグはユーザーに対してレコードを非表示にしますが、実際にはデータは削除されません。アクティブフラグをオフにすると、参照されるすべてのデータは履歴レポート用に変更されません。アクティブフラグは、将来データをユーザーに表示する必要があるときはいつでも簡単に再確認できます。 警告!ダイアログとその意味を認識する このメッセージは、CASCADE 削除が実行されることを開発者に通知しますメッセージには、各テーブルと、テーブルから削除されるレコードの数が一覧表示されます[キャンセル] ボタンをクリックすると、続行する前に削除を停止して再検討するオプションが表示されます。[削除] ボタンを押すと、メッセージに要約されたすべてのデータが削除されます。カスケード削除が本番環境に昇格されると、削除基準に一致するすべての本番データが削除されます。 カスケード削除ルールの理解 元のレコードを参照しているデータがある場合に、そのレコードの削除を禁止するには [制限] を使用します辞書で「参照」=<削除するテーブルを検索して、カスケード削除ルールを確認します>