カタログクライアントスクリプト - 一般的な問題と解決方法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: ; } } Issue 1:document.getElementById() を使用するとカタログクライアントスクリプトが機能しない場合がある 症状 スクリプト内で document.getElementById() を使用すると、カタログクライアントスクリプトが機能しないか、予期しない動作をする場合があります。 対象リリース すべてのリリース 原因 document.getElementById() メソッドは DOM を直接操作するもので、ServiceNow プラットフォームではサポートされていません。この方法で DOM に依存すると、ブラウザやブラウザのバージョンによって動作が一貫しなくなる可能性があります。 解決策 DOM に直接アクセスする代わりに、g_form オブジェクトを使用してください。DOM への直接アクセスは、ブラウザやブラウザバージョン間での互換性の問題を引き起こす可能性があります。また、ServiceNow はプラットフォームのバージョン間で要素名を変更する場合があるため、DOM への直接参照は信頼性が低くなります。 使用しない方法: document.getElementById('elementId').value 代わりに使用する方法: g_form.getValue('variable_name') 補足情報 ServiceNow Docs: Unsupported Client Scripts Issue 2:サービスポータルでカタログクライアントスクリプトが機能しない 症状 変数を対象とする onChange カタログクライアントスクリプトが、Service Portal からアクセスした場合にトリガーされないか、正常に機能しません。 原因 スクリプトの以下の設定ミスが根本原因として特定されました。 [UI Type] が [All] ではなく [Desktop] に設定されていた。スクリプトの [Variable Name] フィールドが空白のため、onChange トリガーがリッスンする変数が指定されていなかった。 解決策 カタログクライアントスクリプトレコードで以下を修正してください。 [UI Type] を [All] に設定して、標準 UI と Service Portal の両方でスクリプトが実行されるようにします。[Variable Name] に、変更時にスクリプトをトリガーする変数の正確な内部名を設定します。スクリプトのロジックを確認して修正します。boolean 変数の値をチェックする場合、比較には文字列を使用する必要があります。 誤った例: if (newValue == true) 正しい例: if (newValue == 'true') カタログクライアントスクリプトでの boolean 変数の値は文字列として渡されるため、Boolean の true ではなく、文字列の 'true' と比較する必要があります。 Issue 3:onChange カタログクライアントスクリプトが参照変数から非表示変数への入力を一貫して実行しない 症状 変数セットに onChange カタログクライアントスクリプトが定義されており、参照変数 employee_name で選択された値に基づいて、非表示変数 employee_first_name および employee_last_name に値を入力します。このスクリプトは断続的にしか機能しません。非表示変数が正しく入力される場合もあれば、employee_name に値があるにもかかわらず空白のままになる場合もあります。 原因 sys_user テーブルの ACL(アクセス制御リスト)の制限が原因です。具体的には、次の標準 (OOB) ACL が一部のユーザーに対して失敗しています。 /sys_security_acl.do?sys_id=7df70f39c0a801661fb9e679f553c760 この ACL は、sys_user レコードを読み取るために、ログインユーザーが少なくとも 1 つのロールを持っていることを要求します。要求元のユーザーにロールが割り当てられていない場合、ACL によって読み取りアクセスが拒否され、クライアントスクリプトが従業員の名前と姓の値を取得できず、変数が空白のままになります。 解決策 この動作はユーザーによって異なります。ロールが割り当てられていないユーザーは OOB ACL チェックに失敗し、sys_user から読み取ることができないため、クライアントスクリプトはエラーなく失敗します。この問題を修正するには、次のいずれかの方法を選択してください。 カタログリクエストを送信する可能性のあるすべてのユーザーに適切なロールを割り当てて、既存の ACL チェックを通過できるようにします。ロールを持たないユーザーに対して読み取りアクセスを明示的に付与するカスタム ACL を sys_user テーブルに作成します。組織のセキュリティ要件に合わせて適切にスコープを設定してください。 Issue 4:カタログクライアントスクリプトがルックアップセレクトボックス変数を自動入力できない 症状 カタログアイテムに、cmn_cost_center テーブルを参照するルックアップセレクトボックス変数が含まれています。ログインユーザーのコストセンターに基づいてこの変数を自動入力するために、カタログクライアントスクリプトが使用されています。カタログアイテムを開いても、変数が入力されません。 再現手順 sc_cat_item.do を使用してカタログアイテムを開くか、新規作成します。cmn_cost_center テーブルを参照するルックアップセレクトボックスタイプの変数を追加します。変数名を cost_center とします。setValues を使用して cost_center 変数に cmn_cost_center レコードを入力するカタログクライアントスクリプトを作成します。カタログアイテムを開きます。cost_center 変数が自動入力されないことを確認します。 原因 cmn_cost_center テーブルへのアクセス制御の制限が原因です。ユーザーがそのテーブルへの読み取りアクセス権を持っていない場合、ルックアップセレクトボックス変数の選択肢がロードされません。選択肢が存在しないため、スクリプトが正常に実行されても、カタログクライアントスクリプトは値を設定できません。 解決策 この問題を解決するには、次の 2 つの方法があります。 影響を受けるユーザーに cmn_cost_center テーブルへの読み取りアクセスを付与します。テーブルにアクセスできるようになると、選択肢が正しくロードされ、クライアントスクリプトが変数の値を設定できるようになります。変数のタイプをルックアップセレクトボックスからシングルラインテキストに変更します。これにより、選択肢のロードへの依存がなくなり、ACL の制限が自動入力ロジックをブロックしなくなります。 関連確認事項 カタログクライアントスクリプトで使用されている変数の内部名が、変数レコードで定義されている内部名と完全に一致していることを確認します。選択肢によって値を設定する場合は、スクリプトでラベルではなく選択肢の内部値が使用されていることを確認します。 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: ; } } 上記の各 Issue の解決策をそれぞれご参照ください。 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: ; } }