Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

Salesforce のモバイルオフラインアプリのプライミング問題に関するトラブルシューティング

公開日: Sep 20, 2024
説明

タイムアウト | ホスト名を解決できません | SalesforceSDKCore.RestClientError | リクエストに失敗しました

デバイスがオフラインの状態で、ホスト名エラーや SalesforceSDKCore.RestClientError などのネットワーク関連エラーを示す大きな赤いトーストメッセージが表示される場合があります。このエラーは通常、オフライン時に、すべてのコンポーネント、モジュール、レコードデータがキャッシュされているはずのページにアクセスした際に発生します。

 

赤いトーストメッセージ

 

解決策

テストハーネスを使用してデバッグする

LWC Offline Test Harness (以下、テストハーネス) は、軽量なテスト、デバッグ、および検証用のアプリケーションです。LWC Offline ベースのモバイルアプリで使用される Lightning Web コンポーネントのデバッグを可能にします。テストハーネスを使用すると、Salesforce 組織内の選択した SObject に対してクイックアクションを実行したり、コンポーネントの JavaScript をデバッグしたり、下書きや下書きキューの挙動を確認したりできます。

 

テストハーネスの使用方法の詳細については、「Develop Offline-Ready LWCs with the LWC Offline Test Harness」(LWC Offline Test Harness を使用したオフライン対応 LWC の開発)を参照してください。

 

テストハーネスアプリのダウンロードおよびインストール方法については、「Install the Test Harness App」(テストハーネスアプリのインストール) を参照してください。

 

テストハーネスアプリをインストールしたら、問題が発生しているクイックアクションを特定します。レコードに移動した際に赤いトーストメッセージが表示される場合、原因は .view クイックアクションである可能性が高くなります。

 

テストハーネスアプリのネットワークトレース機能を使用し、該当するクイックアクションをプライミングする際に発生するすべてのネットワークリクエストを記録してください。

 

  1. 次に、SObjects タブをタップし、問題のあるオブジェクトに移動します。

SObjects タブ

  1. レコードをタップします。
    1. クイックアクションを左にスワイプし、[Lightning Bolt] ボタンをタップします。

スワイプアクション

  1. 次の操作を実行します。
    1. [ネットワークリクエストをクリア] をタップします。
    2. [ロガーを開始] をタップします。
    3. [Prime](プライム) をタップします。
    4. ログエリアに完了が表示されるまで、プライミングが終了するのを待ちます。
    5. [ネットワークリクエストの表示] をタップします。
    6. リクエストの内容を記録するか、別の場所にコピーして保存してください。

ネットワークリクエスト

  1. 次の操作を実行します。
    1. [ネットワークリクエストをクリア] をタップします。
    2. [移動] をタップします。
    3. [デバッグ] タブをタップします。
    4. [ネットワークログ] セクションで [停止] をタップします。
    5. [表示] をタップします。
    6. リクエストの内容を記録するか、別の場所にコピーして保存してください。 

ネットワークログ

プライミング時とナビゲーション時のネットワークリクエストを比較します。ナビゲーション時にのみ発生し、プライミング時には発生していないネットワークリクエストがある場合、プリフェッチャーが想定どおりに LWC をプライミングできていないことを示しています。

 

以下は、この問題の原因となり得る代表的なシナリオと、その対処方法です。

 

プリフェッチ時に private の @track 変数を使用しない

@wire 関数には、public プロパティのみを渡していることを確認してください。このルールは、@wire を使用した Apex 関数にも同様に適用されます。private プロパティがパラメータとして渡されている場合、該当する wired 関数はプリフェッチ中に呼び出されません。この問題は静的解析ツールによって検出できます。

@wire 関数

  • 開発中に VS Code 上でこの問題を検出するには、Komaci Static Analyzer を使用します。
  • ベストプラクティスとして、private プロパティの代わりに getter を使用してください。

また、@track 変数に依存した lightning-record-form の条件付きレンダリングが行われていないことを確認してください。

lightning-record-form のデータプリフェッチが @track 変数に依存している場合、プライミング時には一切プリフェッチされません。

 

プリフェッチ中に GraphQL が実行されない

GraphQL wire アダプターは、LWC でデータを取得する一般的な方法です。しかし、プリフェッチ中に GraphQL が実行されない問題が発生することがあります。

  • query および variables は、getter メソッド内で定義する必要があります。)
  • query 内で参照されているすべてのフィールドは、ユーザーがアクセス可能である必要があります。
  • Delay Query Execution を使用する場合は、単一の return ステートメントを使用してください。()
  • query が正しく構成されていないか、大文字・小文字を区別するフィールド名に誤字が含まれている可能性があります (以下のツールを使用して検証してください)。

GraphQL のベストプラクティスに関するリソース。

クエリを実行するためのツール。

  • Web ベースのツール: 組織にログインし、ドメイン URL の末尾に「/qa/graphiql.jsp」を付加してアクセスします。
  • サードパーティツール:

サブコンポーネントがプリフェッチされない

この問題が発生する理由や解決方法の詳細については、「How to correctly prime different subcomponents depending on object data」 (オブジェクトデータに応じて異なるサブコンポーネントを正しくプライミングするには) の Quip ドキュメントを参照してください。

 

レコードタイプのデフォルト値を @wire で明示的に呼び出す

初期トリアージを実施した後に追加で発生しているネットワークリクエストが /ui-api/record-defaults のみである場合、<lightning-record-edit-form> によってプリフェッチされるデフォルト値が、実際にページ表示で使用されているレコードタイプと一致していないことが原因である可能性が高くなります。

// 注意:データグラフがプリフェッチ時に正しく解決されるように、リテラル値を使用します。
@wire(getRecordCreateDefaults, { objectApiName:STOREVISIT, recordTypeId:"0122M0000013L8FQAU" })
scheduledRecordDefaults;
ナレッジ記事番号

002370792

 
読み込み中
Salesforce Help | Article