Domain Separation - 高度な概念および設定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: ; } } 「Understanding Domain Separation - Basics - KB0715934」では、Domain Separation の基本概念、およびプラットフォーム内で Domain Separation がどのように機能するかについて説明しています。この記事では、さらに掘り下げて、インスタンス上で Domain Separation をどのように設定および管理できるかについて説明します。ここでは、Domain Separation を可能にするためにシステムがどのように設定されているかを理解し、その後、お客様が自身のインスタンスで機能するように Domain Separation を設定する方法について説明します。 KB0715934 では、データテーブルに sys_domain 列を追加することによって、データ分離がデータベースレベルで行われることを確認しました。ユーザーがドメインにログインすると、システムは、そのドメインおよびそのすべての子ドメインのデータをデータベースから検索して取得するために、バックグラウンドでクエリを構築します。その後、選択したドメイン分離テーブルにデータが表示されます。 Facts<!-- /*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: ; } } Domain Paths ドメインのデータを検索して取得するために、SQL は sys_domain_path の値に依存する「domain path」クエリ方式を使用します。このクエリは、glide.sys.domain.provider プロパティによってサポートされています。 domain path クエリ方式が機能するようにするため、Domain テーブルには Domain Code および Domain Path という 2 つの追加列があります。ドメイン分離テーブルには、「sys_domain」列に加えて Domain Path 列があります。プロセス分離テーブルには、これら両方の列に加えて sys_overrides 列があります。 Domain code は、特定の Domain レコードに対応する、システムによって生成された一連の 3 文字のコードです。domain path は、このコードの先頭に直接の親のパスのドメインコードを付加し、それらをスラッシュで区切ったものです。sys_domain_path の値は Domain テーブル内で一意です。特定のドメインのデータを検索するために、システムはその domain path 値を使用してクエリを実行します。Domain Paths を使用する場合、クエリはドメインから自動的に生成され、これらのクエリは常に再計算されます。 たとえば、ユーザーがインスタンスにログインしており、そのユーザープロファイルレコードが INITECH ドメインに割り当てられているとします。Task テーブルにアクセスすると、システムは、INITECH ドメインおよび階層内でその下にあるすべての子ドメインからデータをフィルタリングして取得するために、バックグラウンドで domain path クエリを構築します。このクエリは基本的に、「domain path が "!!!/!!#/!!!/" で始まるすべての Task を選択する」ようシステムに指示します。その後、システムは、Task テーブルにデータを入力するために、ドメインおよびサブドメイン内のすべてのレコードを検索します。 以下は、ドメイン階層および関連付けられたパスの図です。 domain path には最大 255 文字を使用できます。システムは、レベルごとに 216,000 個のドメイン、および階層内で 63 レベルの深さをサポートします。ただし、これらのシステム制限の上限に達すると、パフォーマンスに影響を与える可能性があります。 domain path が機能するためには、ドメイン分離テーブル内の domain path の値が、Domain(system)テーブルに記載されているそのパスの値と一致する必要があります。ドメインが設定されると、システムはパスを設定し、System Domain テーブル内の domain path 値に基づいて、ドメイン分離テーブル内の domain path に値を入力します。 特定のシナリオでは、現在ログインしているユーザーのドメインとは異なるドメインにレコードが作成されると、システムが誤った domain path をレコードに設定し、domain path の問題が発生する可能性があります。ユーザーが domain path を手動で変更した場合、またはパスに値が正しく入力されなかった場合にも、domain path エラーが発生する可能性があります。たとえば、ドメイン分離テーブルのデータ、または Domain テーブルのデータが、domain path の異なる別のインスタンスからインポートされた場合です。 Domain Validation domain path の問題の修正を容易にするために、システムには Domain Validation が用意されています。これにより、sys_domain path 内のエラーを確認する検証ジョブを実行できます。これにより、sys_domain path が正しい場所を指していることが保証され、ドメイン分離テーブルに保存されているドメインの sys_domain_path と、Domain テーブルの sys_domain_path の同期が維持されます。 インスタンス上の Domain Validation には、Domain Configuration ページからアクセスできます。 以前のバージョンの ServiceNow では、domain path のエラーを修正するために、リソースを大量に消費する夜間検証ジョブが実行されていました。 Kingston 以降、この夜間ジョブの機能は大幅に縮小され、夜間ジョブでは Domain テーブルの整合性、およびすべてのドメイン対応テーブルに sys_domain_path が存在することのみが確認されます。 Kingston 以降のリリースでは、実際の Domain Validation およびドメインエラーの修正は、Domain Configuration ページからお客様がオンデマンドでのみ実行できるようになりました。 影響: テーブル内に多数のレコードが存在する場合、ドメイン階層の検証に非常に長い時間がかかる可能性があります。パフォーマンスへの影響を最小限に抑えるため、必要に応じて営業時間外に実行してください。 ドメイン階層が変更されると、新しいパスが計算され、変更された domain path 値が、システム内のドメイン分離されたすべてのテーブルに伝播されます。 たとえば、階層内のドメインを削除すると、システムは削除されたドメインの子ドメインをその親へ自動的に再ペアレント化します。ただし、Domain Admin は必要に応じて子ドメインを再設定できます。このように階層内でドメインが再設定されると、domain path が自動的に再計算され、システムはすべてのレコードが正しいドメインを指すように、それらのレコードも更新します。 メインの Domain テーブルとドメイン分離テーブルの間で、domain path が常に同期しているとは限らないシナリオがあります。Domain Validation は、ドメイン階層が何らかの形で変更された場合に特に重要になります。 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: ; } } サポートされているすべてのリリース 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: ; } } Domain Scope: Session Scope と Record Scope domain path に加えて、レコードへの表示を制限するようにシステムを設定するもう 1 つの方法は、Domain Scoping を使用することです。 すべてのユーザーは、ドメイン分離インスタンスでセッションを確立する際に、2 つの Domain Scope を持ちます。Session Scope はユーザーの User レコードに記載されているドメインに設定されますが、ユーザーはログイン時に Domain Picker を使用して、自身の Session Domain Scope を手動で変更できます。Record Scope はレコードのドメインを使用し、任意のレコードのフォームを表示しているときにアクティブになります。異なるレコードおよびフォームの表示可否は、Record Scope および Session Scope によって決定されます。デフォルトでは、Record Scope が Session Scope より優先されます。 domain_expand_scope ロールを持つユーザーは、データフォーム上の Toggle Domain Scope UI Action を使用して Domain Scope を変更できます。Record Scope が有効である場合、UI Action をクリックして Session Scope に切り替え、ユーザーのドメインおよび子ドメインに基づいて利用可能なすべてのデータを表示します。 Session Scope が有効である場合、UI Action をクリックして Record Scope に変更し、現在のレコードのドメインに一致するデータのみを表示します。 Domain Separation - System Properties Domain Scope glide.sys.domain.use_record_domain_for_processes(true/false) プロセスを選択する際に使用するドメインを制御します。このプロパティを有効にすると、システムは任意のフォーム上で実行するプロセスを選択するために、レコードのドメインを使用します。リストの場合、システムはプロセスを選択するために、ユーザーの Session Domain を使用します。 glide.sys.domain.use_record_domain_for_data(true/false) データを選択する際に使用するドメインを制御します。このプロパティを有効にすると、システムはフォーム内のデータ表示を制限するために、レコードのドメインを使用します。適切なロールを持つユーザーには、レコードのドメインとユーザーの Session Domain の間で Domain Scope を切り替えるための Toggle Domain Scope UI Action が表示されます。 注意: glide.sys.domain.use_record_domain_for_processes または glide.sys.domain.use_record_domain_for_data プロパティのいずれかが TRUE に設定されている場合、以下のプロパティは、その設定に関係なく使用されません。 glide.sys.domain.use_record_domainglide.sys.domain.use_record_domain_for_client_scriptsglide.sys.domain.domain_change_notifyglide.sys.domain.no_change_roles Domain Picker glide.ui.domain_reference_picker.enabled(true/false) Type Ahead Reference Domain Picker を有効にします。 glide.ui.domain_picker.role デフォルトでは、itil ロールを持つユーザー、および itil ロールを含むロールを持つユーザーは、UI16 の Domain Picker にアクセスできます。このシステムプロパティで、アクセスを許可するロールをカンマ区切りのロール一覧として設定することにより、Domain Picker にアクセスできるロールを制限できます。 Domain Process Override glide.domain.strict_override(true/false) 子ドメインで Override が作成されていない場合でも、子ドメインが親からプロセスを継承することを防止します。このプロパティが ON の場合、Domain Framework は Policy Override に対してより厳格なルールを適用します。たとえば、子ドメインで Module が Override され、非アクティブとしてマークされている場合、このプロパティが ON であれば、親ドメインの Module は使用されません。 また、たとえば、Domain B にいて、親 Domain A のプロセスを一切使用しないものとします。Domain A のルールを Override しておらず、Domain B に Business Rule を作成していない場合、このプロパティが False である限り、システムは親 Domain A の Business Rule を実行します。ただし、このプロパティが有効である場合、Domain B は親 Domain A からいずれの Business Rule も取得しません。 Global Domain glide.sys.restrict_global_domain_processes(true/false) デフォルトでは true に設定されています。Global Domain のユーザーが sys_overrides 列を含むテーブルを表示すると、そのユーザーには Global Domain のレコードのみが表示されます。このプロパティにより、Admin ユーザーは表示範囲を Global Domain のみからすべてのドメインへ拡張できます。このプロパティが有効である場合、Expand/Collapse Domain Scope リンクを使用して表示範囲を拡張または縮小します。 Business Rules glide.sys.domain.skip_domain_insert_businessrules(true/false) Domain テーブルで実行される Business Rule の Domain Scope を指定します。Domain Separation を新規に有効化した場合、このプロパティのデフォルト値は true で、Business Rule は Session Domain によって決定されます。既存の実装では、このプロパティのデフォルト値は false で、Business Rule は新しく作成されたドメインの階層によって決定されます。 Domain Separation - User Preferences glide.domain.session_scope(true/false) デフォルトを Session Scope に設定します。true の場合、デフォルトの Scope はレコードのドメインではなく、ユーザーの Session Domain に設定されます。false の場合、デフォルトの Scope はレコードのドメインです。domain_expand_scope ユーザーロールを持つユーザーは、必要に応じて引き続き Domain Scope を変更できます。 glide.domain.session_scope_notification(true/false) true の場合、レコード値に拡張された Domain Scope が含まれていることを示す視覚的な手掛かりが表示されます。false の場合、この通知は非表示になります。 Related Links<!-- /*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: ; } } KB0715934: Understanding Domain Separation - BasicsUnderstanding Domain SeparationVisibility and Contains DomainsCreate contains relationships between domainsChange domain visibilityDomain separation setup and basic administrationDelegated administrationTroubleshoot domain separation errorsEnable verbose domain logging and debug messagesApplication support for domain separation