ドメインセパレーションを使用してリストビューでsys_choiceがどのように機能するかの理解Summary<!-- /*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: ; } } 多くの場合、選択肢がセッションドメインと同じドメインに存在しないフィールドのリストビューに特定の選択肢ラベルが表示される理由について問題が提起されます。sys_choiceテーブルは、ドメインセパレーションに関しては特別なテーブルです。セッションドメインに基づいてラベルを評価するメカニズムは、リストとフォームで異なります。この記事は、リストビューでsys_choiceがどのように機能するかを理解するのに役立ちます。 1.最初に覚えておくべきことは、リストビューでは、正しい選択肢ラベルを評価または検索するための開始点と見なされるのはセッションドメインであるということです。動作は期待どおりです。設計上、リストは常にユーザーセッションのドメインを使用します。たとえば、インシデントが異なるドメインにある場合など、リスト上の各レコードの選択に従おうとすると混乱を招く可能性がありますが、ここでは複数行のセル編集を使用しています。これは、以下の KB の「追加情報」セクションに記載されています。 2.これを念頭に置いて、ユースケースから始めて、選択肢ラベルがシステムによってどのように評価されるかを理解しましょう。 想像する sc_taskテーブルのリストビューが表示されています。要素「状態(state)」はその中に存在します。セッションドメインは TOP/XYZ として設定されます。リストに存在するレコードは 1 つだけで、ステータスフィールドの値は -5 ですインスタンスの言語設定は英語 (en) の 1 つだけです。sys_choiceテーブルの XYZ ドメインのステータスフィールドに、sc_taskテーブル、タスクテーブルのエントリが存在しません。また、同じテーブルにsc_taskテーブルのエントリが存在せず、グローバルドメインのタスクテーブルも同様です。ただし、値が -5 でドメインがグローバルであるインシデントテーブルに対してエントリーが存在します。ラベルが「インシデントステータス 5」であるとします。 このシナリオでは、ステータス列sc_taskセッションドメインを TOP/XYZ としてテーブルリストビューを開くと、ステータス値が -5 のレコードにはラベルが「インシデントステータス 5」として表示されます。 次に、システムがこのラベルを表示している理由を深く掘り下げます。 ステップ 1:特にsys_choiceテーブルのドメインセパレーションアーキテクチャに従って、まず以下に基づいてsys_choiceテーブルで利用可能な選択肢を検索しようとします。 (a) セッションドメインと同じドメインで、 (b) リストビュー内の正確なテーブルの名前 (c) 要素の名前 (d) 選択肢がアクティブである (非アクティブ = false) (e) ログインしたユーザーのセッションに基づく言語 フィールドの値は考慮されていないことに注意してください。重要なことは、最初にデータを取得するための選択肢のセットを見つけることです。 ステップ 2:上記の条件で、このシナリオでは、システムが以下の条件で TOP/XYZ ドメインの選択肢ラベルを取得しようとしたときに、アクティブと同じドメイン内で値が -5 のラベルが見つかりませんでした。SELECT ... FROM sys_choice sys_choice0 WHERE sys_choice0.`name` = 'sc_task' AND sys_choice0.`element` = 'state' AND sys_choice0.`language` = 'en' AND sys_choice0.`sys_domain` = '12345678901234567890123456789012' AND (sys_choice0.`inactive` = 0 OR sys_choice0.`inactive` IS NULL ) ORDER BY sys_choice0.`sequence`,sys_choice0.`label`,sys_choice0.`dependent_value ステップ 3:システムによってこれを含むレコードが見つからない場合 (このユースケースでも同様)、sc_task の親テーブル に選択肢が存在するかどうかを確認します (言語、ドメイン TOP/XYZ、フィールドなどの同じ条件で)。SELECT ... FROM sys_choice sys_choice0 WHERE sys_choice0.`name` = 'task' AND sys_choice0.`element` = 'state' AND sys_choice0.`language` = 'en' AND sys_choice0.`sys_domain` = '12345678901234567890123456789012' ステップ 4:これを含むレコードが見つからない場合 (このユースケースでも)、システムは同じ条件でチェックしますが、テーブルをタスクとして Paren't Domain (TOP) でチェックします。 SELECT ... FROM sys_choice sys_choice0 WHERE sys_choice0.`name` = 'task' AND sys_choice0.`element` = 'state' AND sys_choice0.`language` = 'en' AND sys_choice0.`sys_domain` = '774190f01f1310005a3637b8ec8b70ef' ステップ 5: システムでこれを含むレコードが見つからない場合 (このユースケースでも)、 グローバルドメインをチェックインします。 SELECT ... FROM sys_choice sys_choice0 WHERE sys_choice0.`name` = 'task' AND sys_choice0.`element` = 'state' AND sys_choice0.`language` = 'en' AND sys_choice0.`sys_domain` = 'global' ステップ 6:これを含むレコードが見つからなかった場合 (このユースケースも同様)、展開され 条件に一致する TOP/XYZ ドメイン内の子テーブルの選択肢が検索されます。 SELECT ... FROM sys_choice sys_choice0 WHERE sys_choice0.`element` = 'state' AND sys_choice0.`name` IN ('sn_ti_case' , 'u_sna_assumptions' , 'incident_task' , 'sa_error_handler_task' , 'sn_risk_response_task' , 'sn_risk_transfer_task' , 'sn_risk_avoidance_task' , 'sn_risk_acceptance_task' , 'sn_risk_mitigation_task' , 'std_change_proposal' , 'x_fstfs_service_ac_service_acceptance' .........<MULTIPLE CHILD TABLE OF TASKS>..............'sn_test_management_test_plan' , 'pm_project' , 'sn_audit_engagement' , 'sn_compliance_policy_exception' , 'rm_feature' , 'rm_doc' , 'rm_defect' , 'rm_test' , 'rm_enhancement' , 'rm_story' , 'sn_safe_story' , 'rm_epic' , 'sn_safe_epic' , 'sn_safe_feature' , 'itfm_dispute' , 'sc_req_item' , 'itfm_sb_stmt' , 'sn_customerservice_escalation') AND (sys_choice0.`sys_domain_path` = '/' OR sys_choice0.`sys_domain_path` LIKE '!!$/!!+/%' OR sys_choice0.`sys_domain_path` LIKE '!!$/!!1/!!W/!!./%' OR sys_choice0.`sys_domain_path` LIKE '!!$/!!$/!!&/!!!/%') GROUP BY sys_choice0.`name` ORDER BY sys_choice0.`name` ステップ 7 :子テーブルごとに、 システムはステップ 2、4、5 を繰り返します (つまり、XYZ ドメイン、TOP ドメイン、次にグローバルドメインで)、条件に一致するレコードがいくつか見つかりました。これまで、どのステップもフィールドの値をチェックしていません。レコードが存在するかどうかを選択します。値のチェックは後で行います。 前に仮定したように、グローバルドメインのこのフィールドのインシデントテーブルにエントリがあるため、以下のクエリが実行され、最後のレベルでデータが見つかります。 (TOP/XYZ domain) SELECT ... FROM sys_choice sys_choice0 WHERE sys_choice0.`name` = 'incident' AND sys_choice0.`element` = 'state' AND sys_choice0.`language` = 'en' AND sys_choice0.`sys_domain` = '12345678901234567890123456789012' (TOP domain) SELECT ... FROM sys_choice sys_choice0 WHERE sys_choice0.`name` = 'incident' AND sys_choice0.`element` = 'state' AND sys_choice0.`language` = 'en' AND sys_choice0.`sys_domain` = '774190f01f1310005a3637b8ec8b70ef' (global domain) SELECT ... FROM sys_choice sys_choice0 WHERE sys_choice0.`name` = 'incident' AND sys_choice0.`element` = 'state' AND sys_choice0.`language` = 'en' AND sys_choice0.`sys_domain` = 'global' この最後のクエリーでは、ステップ 1 で説明した条件に基づいて何らかの参照が検索され、値がチェックされます。値が見つかると、ラベルが表示されます。前に仮定したように、この条件に一致するラベルが「インシデントステータス 5」のエントリがあるため、ステータス値が -5 のレコードにはこの特定のラベルが表示されます。 ここでも失敗した場合、値は括弧で囲まれた青色で表示されます ( (-5)のように ) これは、リストビューの任意のフィールドのsys_choiceレコードに対してラベルの評価が行われる方法です。これを確認するには、SQL のデバッグを有効にし、セッションログを分析します。 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: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } https://hi.service-now.com/kb_view.do?sysparm_article=KB0685040