Employee Center Widgets - トラブルシューティングガイド<!-- /*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: ; } } この記事では、Employee Center (ESC) ポータル上の Widgets に関する問題をトラブルシューティングするための基本的な手順について説明します。 目次 Employee Center のバージョンを確認するすべての Employee Center アプリは同じバージョンですか?RCA を確認代理操作どのウィジェットが使用されていますか?ページルートマップテーマと CSSWidget のカスタマイズ、依存関係、Angular プロバイダー、および Angular ng-templates を確認するWidgets の Server Script コードをデバッグする方法一般的なエラー Employee Center のバージョンを確認する 最初に行うべきことは、次のアプリのバージョンを確認することです。 Employee CenterEmployee Center CoreEmployee Center Pro(インストールされている場合)Content ExperiencesContent Publishing これらのアプリが最新バージョンでない場合は、アップグレードすることを推奨します(報告された特定の問題が最新バージョンに含まれる PRB/STRY のいずれかで修正されているかどうかに関係なく)。最新バージョンを使用することで、他の既知の問題を防止できる可能性があります。 ヒント: Employee Center Pro(インストールされている場合)をアップグレードすると、依存関係として上記のすべてのアプリがアップグレードされます。 現在使用されているバージョンを確認する最も簡単な方法は、Script Includes リストに移動し、Application Name starts with Employee を検索することです。 次に、Employee Center レコードを新しいタブで開き、Version 値を確認します。 上記のリストビューでは、Employee Center Pro がインストールされているかどうかもすぐに確認できます(EC Pro は Employee Center とは別のアプリです。詳細については Employee Service Center is moving to the ServiceNow Store in Rome を参照してください)。 Widgets または Script Includes リストを使用する利点は、カスタマイズの有無もすばやく確認できることです。これについては後ほど説明します。 アプリの最新バージョンは ServiceNow Store で確認できます。 Employee Center アプリの最新リリース版は、次のドキュメントでも確認できます。Store - Employee Service Management release notes 問題が sub-prod 環境で再現できる場合は、これらのアプリをアップグレードして再テストしてください。 すべての Employee Center アプリは同じバージョンですか? すべての Employee Center アプリが同じバージョンであることを再確認することが重要です。そうでない場合、予期しない動作が発生する可能性があります。 System Definition > Plugins に移動し、次のアプリの現在のバージョンを確認します(アクティブな場合)。 Employee CenterEmployee Center CoreEmployee Center ProContent PublishingContent Experiences RCA を確認する Employee Center のほとんどの項目(Widgets や Script Includes など)は、Caller Access が Caller Restriction に設定されています。これは、項目をソースまたはターゲットとする Caller Restricted Access (RCA) レコードが存在する可能性があることを意味します。 関連する RCA レコードのいずれかが Allowed ステータスではない場合、予期しない動作が発生する可能性があります。 System Administration > Application Restricted Caller Access に移動し、Status NOT Allowed でフィルタリングします。 https://instance_name.service-now.com/sys_restricted_caller_access_list.do?sysparm_query=status!%3D2&sysparm_view= この RCA の一覧を確認し、現在調査中の Widget / Script Include / ACL に関連するものに注目してください。 sub-prod 環境では、それらが原因かどうかを切り分けるために Allowed 状態へ変更することもできます。これは 1 件ずつ行うことも、Scripts Background から Global スコープで次のスクリプトを実行して一括実行することもできます。 var gr = new GlideRecord('sys_restricted_caller_access');gr.addQuery('status', '!=', 2);gr.query();while (gr.next()) { gr.status = 2; gr.update();} トラブルシューティング後に元の状態へ手動で戻す準備ができていない限り、更新前に必ず承認を取得してください。 RCA レコードは削除しないでください。RCA を削除すると、異なるスコープの項目間のアクセスに必要なため、さらに問題が発生する可能性があります。 代理操作 Employee Center の機能の大部分は、現在の persona に依存しています。 再現手順に従う場合は、必ずユーザーを Impersonate してください。ほとんどの場合、Maint ユーザーには適切なアクセス権がありません。 異なる persona は異なる情報を参照できるため、異なるユーザーを Impersonate すると異なるデータが表示される可能性があります。 sub-prod 環境でトラブルシューティングを行う場合は、影響を受けているユーザーに admin ロールを付与して再テストしてください。 問題が発生しない場合、その原因はアクセス権設定である可能性が高く、特に ACL や Query Business Rules が疑われます。 テスト後は、できるだけ早く admin ロールを削除してください。 どのウィジェットが使用されていますか? admin ロールを持つユーザーを Impersonate している場合は、Control + Right-Click を実行し、コンテキストメニューから Show Widget Customizations を選択できます。 カスタマイズ済み Widget は赤色でハイライト表示されます。 admin ロールを持たないユーザーを Impersonate している場合は、次の手順を実行します。 Browser Console / Developer Tools を開きます。未選択の場合は Select an element をクリックします。調査対象の要素を選択します。可能であれば最も内側の要素を選択します。Developer Tools の Elements セクションで、widget="widget" パラメーターを持つ <div> 要素が見つかるまで上方向へスクロールします。 <div class="v34a149f0531130107eb7ddeeff7b1271 ng-scope" data="data" options="options" widget="widget" server="server" sn-atf-area="Todos Approval Actions"> 「class」パラメータには、レンダリングされるウィジェットの sys_id が含まれ、その先頭には文字「v」が付加されます。この例では、ウィジェットの sys_id は「34a149f0531130107eb7ddeeff7b1271」です。 「sn-atf-area」パラメータには、ウィジェットの「name」が含まれます。この例では「Todos Approval Actions」です。 Developer Tools の Elements セクションを上下にスクロールし、widget パラメーターを持つ他の <div> 要素を探すことで、表示されている他の Widget も確認できます。 これは、正しい Widget をトラブルシューティングしていることを確認するために非常に有効です。 たとえば、Todos Approval Actions が Todos Approval Widget の中に埋め込まれ、さらにそれが To-dos task Line Item Widget の中に埋め込まれていることを確認できます。 ページルートマップ 使用されている Widgets を確認している間に、それらが URL に表示されているページに含まれている Widgets と一致していないことに気付く場合があります。 例えば、次の URL では、id パラメーターで定義されているページは ticket です。 https://instance_name.service-now.com/esc?sys_id=a9e9c33dc61122760072455df62663d2&view=sp&id=ticket&table=change_request 上記のスクリーンショットによると、使用されている Widgets は Standard Ticket Tab および Standard Ticket Conversations です。 ただし、ticket ページの Portal Page 定義を開くと、そこに含まれている Widgets は異なります。 これは、ESC Page Route Map の Standard Ticket Page Route が ticket ページから standard_ticket ページへルーティングするためです。したがって、使用される Widgets は standard_ticket ページ上のものです。 混乱を避けるために、現在のページおよびポータルに対して Page Route Map が設定されているかどうかを常に再確認するとよいでしょう。 https://instance_name.service-now.com/sp_page_route_map_list.do 場合によっては、特定の Page Route Map を有効化または無効化してみることも、問題を特定の Widget に絞り込んだり、回避策を提供したりするために有用です。 上記の例を使用して、上記 URL にアクセスした際に Attachments タブが表示されないと仮定します。既存の Page Route Map を無効化してタブが表示されるようになった場合、問題を ticket ページではなく standard_ticket ページ上の Widget に絞り込むことができます。同時に、さらなる調査を進めている間、一時的な回避策として Page Route Map を無効化することもできます。 テーマと CSS UI の問題(アクセシビリティの問題、テキストの重なり、テキストカラーなど)をトラブルシューティングする場合、最初に行うべきことは、/esc ポータル定義が out-of-box (OOB) Theme を使用しているかどうかを確認することです。 Service Portal > Portals > Employee Center に移動し、EC Theme が使用されているかどうかを確認します。使用されていない場合は、Portal の Theme を一時的に OOB EC Theme に設定して再テストします。 また、EC Theme 自体、またはその CSS Includes / JS Includes がカスタマイズされているかどうかを再確認することも推奨されます。何かがカスタマイズされている場合は、各項目を OOB に戻して再テストしてください。 問題が別のポータルでも発生するか確認する 問題が他のポータルでも使用可能なページで発生している場合は、常に他のポータルで同じページを開いてみてください。 例えば、報告された問題が /esc?id=kb_article で発生している場合、kb_article/sp?id=kb_article または /kb?id=kb_article に置き換えてみてください。 他のポータルでも問題が継続する場合、その問題はページ自体、またはそのページの Widget に固有である可能性が高く、それらは別のプラグインの一部である可能性があります。その場合、その問題は ESC 固有ではありません。 NOTE: 特定のポータルに対する Page Route Map を再確認してください。 Widget のカスタマイズ、依存関係、Angular プロバイダー、および Angular ng-templates を確認する Widget がカスタマイズされている場合、または完全にカスタムである場合(OOB Widget のクローンなど)、Dependencies、Angular Providers、および Angular ng-templates の関連リストも比較してください。これらのいずれかがカスタマイズされている可能性があり、またクローン Widget の場合はクローン側にまったく存在しない可能性もあります。 ページ上の HTML を調査していて、Widget 自体の Body HTML template 内に特定のコードセクションが見つからないとします。その場合、そのコードは関連する Angular Providers または Angular ng-templates のいずれかで定義されている可能性があります。 Widgets の Server Script コードをデバッグする方法 Widget の Server Script 内のコードは、ロジックの大部分が定義されている場所であり、通常はポータルに表示されるエラーメッセージに記録されるものです。 これをデバッグする最も簡単な方法は、確認したい変数を出力する gs.info ステートメントを追加することです。 注意: gs.print または gs.log は scoped app では動作しないため使用しないでください。 注意: デバッグステートメントを追加した後、RCA を確認し、無効化された可能性のある RCA を Allowed ステータスに戻してください。 一般的なエラー これらは、通常アップグレード後に Employee Center で報告される最も一般的なエラーの一部です。 Error: Cannot find function <function_name> in object アップグレード後によく報告されるエラーの 1 つは、/esc ポータル内の一部ページへ移動した際に発生する "Cannot find function <function_name> in object" エラーです。 上記の例では、エラーは次のとおりです。 Server JavaScript error Cannot find function _getDueDateWarning in object [object Object].Line number 66 (sp_widget.bdc676957317130030f331d7caf6a74d.script)Script source code logged to browser consoleFailing widget: 'HRM Todos Summary' (bdc676957317130030f331d7caf6a74d) これらのエラーは、Widget HRM Todos Summary(sys_id=bdc676957317130030f331d7caf6a74d)の Server Script セクションの 66 行目を指しています。 これは、さらにトラブルシューティングを行う際の開始点です。 66 行目は次のとおりです。 data.todosToShow = util.getMyTodos(data.queryLimit, [], input.includeTodo,undefined,undefined,input.selectedFiltersFromTodoPage.finalFilterConditions,input.selectedFiltersFromTodoPage.applyFilters); ここで util は数行上の 30 行目で定義されています。 var util = new sn_hr_sp.todoPageUtils(); 上記から分かるように、エラーメッセージに記載されている関数(_getDueDateWarning)は Widget によって直接呼び出されていません。Widget は Script Include の odoPageUtils 内の getMyTodos 関数を呼び出しているため、次の手順はこの Script Include を確認することです。 最初に行うべきことは、その Script Include がカスタマイズされているかどうかを確認することです。通常、エラーメッセージに記載されている関数は、Script Include の最新バージョンで導入された新しい関数です。SI がカスタマイズされている場合、その関数は定義されていません。Script Include を標準に戻すことで、この問題は解決するはずです。 注意: エラーメッセージに記載された関数が、Widget によって呼び出された Script Include(この例では todoPageUtils)内ではなく、todoPageUtils 内から呼び出される別の Script Include(例: hr_PortalUtil)の一部である場合もあります。 特定の関数がどこで定義されているかを確認する最も簡単な方法は(最新バージョンの標準インスタンスにアクセスできる場合)、Script Includes [sys_script_include] で Keywords = <function_name> を検索することです。 例: https://instance_name.service-now.com/sys_script_include_list.do?sysparm_query=123TEXTQUERY321%3D_getDueDateWarning この検索は顧客インスタンスでは実行しないでください。Script Include がカスタマイズされている場合、その関数がまったく存在しない可能性があります。 Error: Execute operation on <item_type> <item_name> from scope 'Employee Center' was denied もう 1 つの非常によく見られるエラーは、/esc ポータル内の一部のページに移動した際に発生する次のエラーです。 上記の例では、エラーは次のとおりです。 Execute operation on script include 'todoPageUtils' from scope 'Employee Center' was denied. The application 'Employee Center' must declare a cross scope access privilege. Please contact the application admin to update their access requests.Server JavaScript error undefined is not a function.Line number 21 (sp_widget.d0009941eb103010ed7966d6475228c1.script)Script source code logged to browser consoleFailing widget: 'Employee Center Header' (d0009941eb103010ed7966d6475228c1) 前の例と同じ手順に従って Widget から調査を開始することも可能ですが、この種の Error メッセージは非常に分かりやすいものです。Operation = Execute API かつ target = todoPageUtils の RCA が 1 つ以上 Allowed ステータスではありません。 その RCA は Invalidated または Requested ステータスであるか、あるいはインスタンス上に存在していません。 この問題を解決するには、上記の RCA を確認 セクションに記載されている手順に従ってください。 Error: Failing widget: 'Relevant for you' (6cc836d0dbf700500c209493db961914) Employee Center ホームページに移動した際に、次のエラーが表示される場合があります。 Server JavaScript error undefined is not a function.Line number 78 (sys_script_include.35dfe52797e50110ecc47e0e6253af29.script)Script source code logged to browser consoleFailing widget: 'Relevant for you' (6cc836d0dbf700500c209493db961914) これらのエラーは、Employee Center と Employee Center Core が v27 である一方で、Employee Center Pro がまだ v23 である場合など、Employee Center / Employee Center Core アプリのバージョン不一致によって発生します。