サービスカタログで遅いルックアップ選択ボックス変数の識別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: ; } } サービスカタログの「選択ボックスをルックアップ」変数は、返されるレコードの数が多すぎると、速度が低下する原因となることがあります。 この速度低下は、次の領域で観察される可能性があります。 - カタログアイテムの初期ロード- フォームに変数エディターフォーマッターが含まれているサービスカタログタスク (「sc_request」、「sc_req_item」、「sc_task」など) を表示する- サービスカタログタスクのテキストインデックス作成 次の行を含むスタックトレースは、この問題を示しています。 ``` com.glideapp.questionset.LookupSelectQuestion.loadChoiceList(LookupSelectQuestion.java:102)com.glideapp.questionset.LookupSelectQuestion.getChoiceList(LookupSelectQuestion.java:46)com.glideapp.questionset.AbstractChoiceListQuestion.getDisplayValue(AbstractChoiceListQuestion.java:35)com.glideapp.questionset.AbstractChoiceListQuestion.getDisplayValue(AbstractChoiceListQuestion.java:26)com.glideapp.questionset.LookupSelectQuestion.getDisplayValue(LookupSelectQuestion.java:58) ``` 「LookupSelectQuestion」キーワードは、問題に **Lookup Select Box** タイプの変数が含まれていることを確認します。 これらの変数のパフォーマンスを向上させるためのオプションがいくつかあります。 - 変数を **Lookup Select Box** タイプから **Reference** タイプ変数に変換します。これにより、ユーザーエクスペリエンスがリストボックスからリストを使用したルックアップに変わります。- 変数の参照修飾子に、より選択的なフィルターを追加します。- 適切なソース参照テーブルを使用します。不適切なソース参照テーブルは、「task」または「incident」です。適切なソース参照テーブルは、選択肢「sys_choice」テーブルです。たとえば、インシデントレコードプロデューサーに「category」という名前の変数がある場合、インシデントテーブル全体をクエリしてすべてのカテゴリ値を取得することは不適切です。代わりに、参照テーブルを **sys_choice** に設定し、テーブルとフィールドを指定する参照修飾子を定義します (**name=incident^element=category** など)。 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: ; } } **[システムメンテナンス]** > **スクリプト - バックグラウンド** に移動し、次の JavaScript スニペットを **[スクリプトを実行 (サーバー上で実行される JavaScript)]** フィールドにコピーし、**スクリプトを実行** を選択します。 System Maintenance > Scripts - Background に移動し、以下の JavaScript スニペットを Run script (JavaScript executed on server) フィールドにコピーして、Run Script を選択します。 ``` var MAX_LOOKUP_RECORDS = 1000;var gsuri = gs.getProperty('glide.servlet.uri');var stdout = ['\n'];// Query the Variables table for var gr = new GlideRecord('item_option_new');gr.addQuery('type', '=', 18);gr.query();while (gr.next()) { try { // Check to make sure the lookup_table is defined if (gr.lookup_table) { // Determine how many records the Lookup Select Box will return var count = new GlideAggregate(gr.lookup_table); if (count.isValid()) { if (gr.reference_qual) { var encoded_query = null; if (gr.reference_qual.startsWith('javascript')) { if (gr.reference_qual.includes('current.variables')) { continue; } var evaluator = new GlideScopedEvaluator(); encoded_query = evaluator.evaluateScript(gr, 'reference_qual', null); } else { encoded_query = gr.reference_qual; } if (!encoded_query) { continue; } count.addEncodedQuery(encoded_query); } count.addAggregate('COUNT'); count.query(); var lookupRecords = 0; if (count.next()) { lookupRecords = count.getAggregate('COUNT'); } // Report a warning if the number of matching records exceeds the MAX LOOKUP RECORDS if (lookupRecords > MAX_LOOKUP_RECORDS) { stdout.push('Variable: ' + gr.name + '\n' + gsuri + 'item_option_new.do?sys_id=' + gr.sys_id + '\n'); stdout.push('\tLookup Table: ' + gr.lookup_table); stdout.push('\tReference Qualifier: ' + count.getEncodedQuery() + '\n'); stdout.push('\tThere are ' + lookupRecords + ' matching records\n' + '\tLIST URL = ' + gsuri + gr.lookup_table + '_list.do?sysparm_query=' + count.getEncodedQuery() + '\n'); } } else { // not a valid table stdout.push('Variable - ' + gr.name + '\n' + gsuri + 'item_option_new.do?sys_id=' + gr.sys_id + '\n'); stdout.push('\t*** Invalid Variable: The lookup_table value for this variable ( ' + gr.lookup_table + ' ) does not match not a valid table.\n '); } } else { stdout.push('Variable - ' + gr.name + '\n' + gsuri + 'item_option_new.do?sys_id=' + gr.sys_id + '\n'); stdout.push('\t*** Invalid Variable: The lookup_table value for this variable IS NULL.\n '); } } catch (err) { // An error occurred; report something helpful var st = err.getStackTrace(); stdout.push('Variable - ' + gr.name + '\n' + gsuri + 'item_option_new.do?sys_id=' + gr.sys_id + '\n' + 'Stack Trace:\n'); for (var i = 0; i < st.length; i++) { stdout.push(st[i].toString()); } stdout.push('\n\n'); }}gs.print(stdout.join('\n'));``` スクリプト内の **MAX_LOOKUP_RECORDS** の値は、必要に応じて調整できます。一般的なガイドラインとして、**選択ボックスをルックアップ** は **100** を超えるレコードを返さないようにしてください。 出力例 このスクリプトは、次のような出力を生成します。 ```*** Script: Variable - departmenthttps://<instance-name>.service-now.com/item_option_new.do?sys_id=e70ec99e53032200eb7c0a1806dc3449 There are 100002 matching records LIST URL = https://<instance-name>.service-now.com/sys_user_list.do?sysparm_query= Variable - tablehttps://<instance-name>.service-now.com/item_option_new.do?sys_id=e849da79471102003db6d7527c9a7128 There are 3189 matching records LIST URL = https://<instance-name>.service-now.com/sys_db_object_list.do?sysparm_query= Variable - broccolihttps://<instance-name>.service-now.com/item_option_new.do?sys_id=e849da79471102003db6d7527c9a7128 Invalid Variable: The lookup_table value for this variable IS NULL. Variable - meowmeowhttps://<instance-name>.service-now.com/item_option_new.do?sys_id=e849da79471102003db6d7527c9a7128 Invalid Variable: The lookup_table value for this variable (meownow ) does not match not a valid table.``` 出力には、変数名と変数定義へのリンク、ルックアップが返す行数、および変数が使用するデータのリストへのリンクが表示されます。LIST URL は、最初の 1 行から 20 行のみが表示されるため、すぐにレンダリングされる可能性があります。ただし、変数ルックアップはページネーションを行うのではなく、すべてのレコードを取得します。ルックアップテーブルが空であるか無効であるか、別の理由で行数を取得できない場合にも、出力はエラーを報告します。 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: ; } } サービスカタログ変数の作成 サービスカタログ変数属性 サービスカタログ変数のタイプ