ウィジェットトラブルシューティングガイド
次のツールを使用して、カスタム サービスポータル ウィジェットの予期しない動作を調査して解決します。
- 複雑さの軽減
- トラブルシューティングしているウィジェットとは無関係なウィジェットを非アクティブ化して、エラーや予期しない動作の原因となっている可能性のあるページ部分を切り分けます。ウィジェットレコードのアクティブフィールドを false に設定すると、ページ上のウィジェットが非表示になり、関連するスクリプトが実行されなくなります。
- ブラウザ開発者コンソールを使用する
サポートされているすべてのデスクトップブラウザーには、開発者ツールが組み込まれています。ブラウザー開発者ツールにアクセスして、クライアント側の JavaScript によってスローされたコンソールメッセージとエラーを表示します。以下で詳しく説明するログ記録ツールの多くは、このコンソールに情報を出力します。
パフォーマンスの問題が発生した場合は、JavaScript コンソールをチェックして、エラー、多数の HTTP 要求、または解決に時間がかかる HTTP 要求がないか確認します。コンソールを使用して、ロードに時間がかかるウィジェットを特定できます。詳細については、Now Support ナレッジベースの記事「How to identify a low widget on a page [KB0744521] (ページ [] で遅いウィジェットを識別する方法 ) を参照してください。
- パフォーマンスの問題の原因の特定
次のヒントは、ポータルのパフォーマンスの問題の原因を特定するのに役立ちます。
- 両方のインターフェイスの機能を比較して、問題がポータルに、またはプラットフォーム全体に関連しているかどうかを判断します。プラットフォームのパフォーマンスの問題の詳細については、「 Platform performance」を参照してください。
- 問題がポータル全体に影響するか、特定のページに影響するかを確認します。ポータル内のすべてのページが遅い場合は、ヘッダーメニューのスクリプト化されたメニューアイテムや、大きなフォントファイルや画像ファイルを含むテーマが原因であるかどうかを確認してください。特定のページが遅い場合は、ブラウザー開発者コンソールを使用して、どのウィジェットが原因であるかを特定します。
- ログ [syslog] テーブルで、速度低下の原因となっている大きな JSON オブジェクトに関連する警告を確認してください。速度低下の原因となるアクションでこれらの警告が表示される場合は、ウィジェットが大量のデータを使用していることを示しています。
詳細については、Now Support ナレッジベースの記事「 サービスポータルの 6 つの一般的なパフォーマンスの落とし穴とその回避方法 [KB0634588] 」を参照してください。
- ウィジェットのコンテキストメニューを使用して情報とオプションにアクセスします
- CTRL+右クリック ウィジェットの構成オプションにアクセスします。スコープとスコープデータオブジェクトをブラウザコンソールに出力するオプションもあります。このメニューの詳細については、「 ポータルウィジェットの使用」を参照してください。
- スクリプトメソッドを使用してデバッグ出力をキャプチャする
サーバーおよびクライアント側のコード内にデバッグ情報を出力するためのメソッドがいくつか用意されています。
表 : 1. スクリプト化されたデバッグ方法 メソッド 可用性 説明 console.log() サーバーとクライアント 出力をブラウザ開発者コンソールに記録します。 $sp.log() サーバー ログインしているユーザーが sp_adminまたはadminロールを持っている場合に、サービスポータルのログエントリ [sp_log] テーブルへのログ出力を記録します。gs.log() サーバー ログ出力をログ [syslog] テーブルに記録します。 注:gs.logは syslog テーブルにレコードを作成します。過度に使用すると、パフォーマンスに悪影響を与える可能性があります。gs.warn() サーバー ログ [syslog] テーブルに警告レベルの出力を生成します。 gs.error() サーバー ログ [syslog] テーブルにエラーレベルの出力を生成します。 gs.addInfoMessage() サーバー ブラウザーウィンドウの上部に緑色の情報メッセージを表示します。 gs.addErrorMessage() サーバー ブラウザーウィンドウの上部に赤色のエラーメッセージを表示します。 spUtil.addErrorMessage() クライアント ブラウザーウィンドウ内にエラーメッセージを表示します。 spUtil.addInfoMessage() クライアント ブラウザーウィンドウ内に情報メッセージを表示します。 spUtil.addTrivialMessage() クライアント しばらくすると自動的に消えるメッセージを表示します。 デバッガ クライアント Chrome および Firefox ブラウザにブレークポイントを設定し、ブラウザ開発者コンソールでスクリプトを 1 行ずつステップ実行できるようにします。 {{データ|json}} HTML このコードをページの HTML コードに追加して、データオブジェクトを JSON 形式でポータルページに出力できます。 - セキュリティ制限の確認
多くの場合、ウィジェット表示の問題は、ウィジェットスクリプトではなく、アクセスルールまたはユーザー基準によって発生します。レコードのユーザー基準を確認し、ウィジェット内でアクセスできないレコードにプラットフォーム UI を使用してアクセスできることを確認します。ACL デバッガーを使用して、ウィジェットで使用されるレコードにユーザーが予期されるアクセス権を持っていることを確認します。デバッガーの詳細については、「 ACL デバッグツール」を参照してください。
サービスカタログ アイテムを サービスポータルに表示しないように制限することもできます。サービスカタログ ウィジェットに対して「権限がないか、レコードが有効ではありません」というエラーメッセージが表示された場合は、アイテムがサービスポータルで非表示になっていないことを確認してください。
- 関連する Angular プロバイダーを確認する
- 必要な Angular プロバイダーがウィジェットに関連付けられていることを確認します。ベースシステムウィジェットに関連付けられているデフォルトの Angular プロバイダーを削除すると、予期しない動作が発生する可能性があります。たとえば、scToggleData または scBindHtmlCompile Angular プロバイダーを SC カタログアイテムウィジェットから削除します。
- コンソールでのウィジェットスコープへの参照の作成
- ウィジェットへの参照を使用してスコープデータを操作するか、ウィジェットのクライアントおよびサーバースクリプトを手動で実行します。参照を作成するには、次の手順を使用します。
- 1. ウィジェットを右クリックし、「 検査」を選択します。
- 2. 開発ツールの [要素] タブで、属性 widget=
widgetを持つ要素をクリックしてハイライト表示します。現在検査されている要素の上にいくつかの要素があります。この要素は、$0 スクリプティングツールをウィジェットにポイントします。 - Javascript コンソールで、次のコードを実行します。
var scopeRef = angular.element($0).scope();
AngularJS $apply()を実行することを忘れないでください。scopeRef.data.prop1 = "Pear"; scopeRef.$apply();以下の構文を使用して、参照からウィジェットクライアントコントローラーで定義されている関数を実行します。scopeRef.exampleFunction();ウィジェットサーバースクリプトを手動で実行するには、refresh コマンドを使用します。
scopeRef.server.refresh();