エラーの処理
たとえば、フォームベースのコンポーネントへの入力が正しくない (例: レコード ID が不正、必須項目が欠落している) 場合には、エラーが発生します。レコードがキャッシュになく、サーバがオフラインである場合にもエラーが返されます。また、サーバ上でリソースが削除されたり、共有や表示の設定が更新されたりすることで、そのリソースにアクセスできなくなる場合もあります。
フォームベースのコンポーネントでのエラー処理
lightning:recordForm、lightning:recordEditForm、および lightning:recordViewForm では、2 種類のエラー (項目レベルのエラーと Lightning データサービスのエラー) を処理します。項目検証エラーは、項目の下に表示され、カスタマイズすることはできません。たとえば、必須項目が空白である場合には、その下にエラーが表示されます。Lightning データサービスのエラーは、次のように処理されます。
- lightning:recordForm
- フォーム項目の上に自動的にエラーメッセージを表示します。onerror イベントハンドラを使用して、追加のエラー処理を定義できます。
- lightning:recordEditForm
- エラーメッセージを自動的にフォーム項目の上または下に表示するには、lightning:messages を lightning:inputField コンポーネントの前または後に追加します。
- onerror イベントハンドラを使用して、追加のエラー処理を定義できます。
- lightning:recordViewForm
- エラーメッセージを自動的にフォーム項目の上または下に表示するには、lightning:messages を lightning: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」のケースを処理します。
例
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})- 属性値または属性値の組み合わせが無効なため、入力が無効の場合。たとえば、recordId が無効な場合、layoutType 属性と fields 属性の両方を省略した場合などです。
- レコードがキャッシュになく、サーバにアクセスできない (オフライン) 場合
サーバ上でレコードがアクセス不能になると、changeType が「REMOVED」に設定された recordUpdated イベントが起動されます。レコードにアクセス不能になることが操作の予期される結果であることもあるため、targetError ではエラーが設定されません。たとえば、リードの取引開始後はリードレコードがアクセス不能になります。
- レコードまたはエンティティの共有または表示設定によってアクセスが制限されている。
- レコードまたはエンティティが削除されている。
サーバ上でレコードがアクセス不能になった場合、targetRecord に割り当てられているレコードの JavaScript オブジェクトは変更されません。