この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

エラーの処理

Lightning Data サービスは、サーバのリソース (レコード、オブジェクトなど) にアクセスできない場合にエラーを返します。

たとえば、フォームベースのコンポーネントへの入力が正しくない (例: レコード ID が不正、必須項目が欠落している) 場合には、エラーが発生します。レコードがキャッシュになく、サーバがオフラインである場合にもエラーが返されます。また、サーバ上でリソースが削除されたり、共有や表示の設定が更新されたりすることで、そのリソースにアクセスできなくなる場合もあります。

フォームベースのコンポーネントでのエラー処理

lightning:recordFormlightning:recordEditForm、および lightning:recordViewForm では、2 種類のエラー (項目レベルのエラーと Lightning データサービスのエラー) を処理します。項目検証エラーは、項目の下に表示され、カスタマイズすることはできません。たとえば、必須項目が空白である場合には、その下にエラーが表示されます。Lightning データサービスのエラーは、次のように処理されます。

lightning:recordForm
フォーム項目の上に自動的にエラーメッセージを表示します。onerror イベントハンドラを使用して、追加のエラー処理を定義できます。
lightning:recordEditForm
エラーメッセージを自動的にフォーム項目の上または下に表示するには、lightning:messageslightning:inputField コンポーネントの前または後に追加します。
onerror イベントハンドラを使用して、追加のエラー処理を定義できます。
lightning:recordViewForm
エラーメッセージを自動的にフォーム項目の上または下に表示するには、lightning:messageslightning:outputField コンポーネントの前または後に追加します。

エラーオブジェクトは次のようになります。

1{
2  "message": "Disconnected or Canceled",
3  "detail": "",
4  "output": {
5    
6  },
7  "error": {
8    "ok": false,
9    "status": 400,
10    "statusText": "Bad Request",
11    "body": {
12      "message": "Disconnected or Canceled"
13    }
14  }
15}

エラーオブジェクトは次の構文で取得します。

1handleError: function (cmp, event, helper) {
2    var error = event.getParams();
3
4    // Get the error message
5    var errorMessage = event.getParam("message");
6}

force:recordData のエラー処理

エラーの発生時に動作を実行するには、recordUpdated イベントを処理して、changeType が「ERROR」のケースを処理します。

コンポーネントで recordUpdated イベントを処理することを宣言します。
1<force:recordData aura:id="forceRecord"
2    recordId="{!v.recordId}"
3    layoutType="FULL"
4    targetRecord="{!v._record}"
5    targetFields="{!v.simpleRecord}"
6    targetError="{!v._error}"
7    recordUpdated="{!c.recordUpdated}" />
エラーを処理するアクションハンドラを実装します。
1({
2  recordUpdated: function(component, event, helper) {
3
4    var changeType = event.getParams().changeType;
5
6    if (changeType === "ERROR") { /* handle error; do this first! */ }
7    else if (changeType === "LOADED") { /* handle record load */ }
8    else if (changeType === "REMOVED") { /* handle record removal */ }
9    else if (changeType === "CHANGED") { /* handle record change */ }
10})
レコードの読み込み開始時にエラーが発生すると、targetError がローカライズされたエラーメッセージに設定されます。エラーが発生するのは次の場合です。
  • 属性値または属性値の組み合わせが無効なため、入力が無効の場合。たとえば、recordId が無効な場合、layoutType 属性と fields 属性の両方を省略した場合などです。
  • レコードがキャッシュになく、サーバにアクセスできない (オフライン) 場合

サーバ上でレコードがアクセス不能になると、changeType が「REMOVED」に設定された recordUpdated イベントが起動されます。レコードにアクセス不能になることが操作の予期される結果であることもあるため、targetError ではエラーが設定されません。たとえば、リードの取引開始後はリードレコードがアクセス不能になります。

次のことが原因でレコードがアクセス不能になることがあります。
  • レコードまたはエンティティの共有または表示設定によってアクセスが制限されている。
  • レコードまたはエンティティが削除されている。

サーバ上でレコードがアクセス不能になった場合、targetRecord に割り当てられているレコードの JavaScript オブジェクトは変更されません。