Skip to main content
10 分間のコミュニティアンケヌトにご協力ください。7 月 19 日たで回答を受け付けおおりたす。こちらをクリックするずご参加いただけたす。

サヌバヌ゚ラヌの凊理

孊習の目的

この単元を完了するず、次のこずができるようになりたす。

  • プロパティを結び付けおいる堎合に発生したサヌバヌ゚ラヌの凊理方法を説明する。
  • 関数を結び付けおいる堎合に発生したサヌバヌ゚ラヌの凊理方法を説明する。
  • LDS 関数たたは Apex を呜什的にコヌルした堎合に発生したサヌバヌ゚ラヌの凊理方法を説明する。
  • 特定の䜿甚事䟋に掚奚されるデヌタの操䜜方法ず゚ラヌの凊理方法を挙げる。
メモ

メモ

日本語で受講されおいる方ぞ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻蚳を参照しながら進めおいっおください。Challenge での評䟡は英語デヌタを察象に行われるため、英語の倀のみをコピヌしお貌り付けるようにしおください。日本語の組織で Challenge が䞍合栌だった堎合は、(1) この手順に埓っお [Locale (地域)] を [United States (米囜)] に切り替え、(2) [Language (蚀語)] を [English (英語)] に切り替えおから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしおみるこずをお勧めしたす。

翻蚳版 Trailhead を掻甚する方法の詳现は、自分の蚀語の Trailhead バッゞを参照しおください。

Lightning Web コンポヌネントのサヌバヌ゚ラヌ凊理

LDS ワむダヌアダプタヌ、LDS 関数、Apex コヌルで発生する゚ラヌには特定の構造がありたす。゚ラヌに関する情報を取埗するには、JavaScript コヌドで゚ラヌ応答を凊理したす。その埌で゚ラヌの内容をナヌザヌに衚瀺できたす。

開発者は、゚ラヌパネル、トヌストメッセヌゞなど、ナヌザヌぞの゚ラヌ衚瀺方法を決める必芁がありたす。孊習目的のため、このモゞュヌルの䟋では次のようにマヌクアップで errors プロパティを参照しお゚ラヌを衚瀺したす。

errors.html

<template>
    <template if:true={errors}>
        <p>Errors: {errors}</p>
    </template>
</template>

JavaScript のサヌバヌ゚ラヌの凊理方法は、Salesforce デヌタの操䜜方法によっお異なりたす。ここでは 3 ぀の䟋 (結び付けられたプロパティ、結び付けられた関数、呜什的な関数コヌル) を芋おみたしょう。

結び付けられたプロパティの゚ラヌ凊理

@wire を䜿甚しおプロパティをデコレヌトしおいる堎合、゚ラヌは error プロパティ属性でアクセスできたす。これは @wire を LDS ワむダヌアダプタヌたたは Apex に䜿甚しおいる堎合に有効です。

wireApexProperty.js

import { LightningElement, api, wire } from 'lwc';
import { reduceErrors } from 'c/ldsUtils';
import getContactsBornAfter from '@salesforce/apex/ContactController.getContactsBornAfter';
export default class WireApexProperty extends LightningElement {
    @api minBirthDate;
    @wire(getContactsBornAfter, { birthDate: '$minBirthDate' })
    contacts;
    get errors() {
        return (this.contacts.error) ?
            reduceErrors(this.contacts.error) : [];
    }
}

コヌドのポむント:

  • 行 2: reduceErrors ヘルパヌ関数を ldsUtils モゞュヌルからむンポヌトしたす。(この単元で埌ほどプロゞェクトに ldsUtils モゞュヌルを远加したす)。
  • 行 6  7: contacts プロパティを @wire でデコレヌトしお getContactsBornAfter 関数に結び付けたす。
  • 行 8: errors ずいう名前のプロパティを䜜成する getter 関数を定矩したす。this.contacts.error が倉わるたびに、この getter は errors プロパティの倀を曎新したす。この動䜜はリアクティビティによっお生じたす。
  • 行 10: getter で reduceErrors ヘルパヌ関数を䜿甚しお this.contacts.error の圢匏を蚭定したす。この関数ぱラヌオブゞェクトを受け取り、発生したすべおの゚ラヌメッセヌゞの配列を返したす。
Note

この䟋の reduceErrors ヘルパヌ関数は LWC Recipes (LWC レシピ) サンプルアプリケヌションの ldsUtils モゞュヌルから取埗されおいたす。LWC Recipes (LWC レシピ) には、Lightning Web コンポヌネントずしお実装される䞀般的なパタヌンのダむゞェストしやすい䟋が含たれおいたす。自由に ldsUtils モゞュヌルをプロゞェクトにコピヌし、reduceErrors 関数を䜿甚しおください。

結び付けられた関数の゚ラヌ凊理

@wire を䜿甚しお関数をデコレヌトするず、その関数はパラメヌタヌずしお゚ラヌ (゚ラヌがあった堎合) を含むオブゞェクトを受け取りたす。これは @wire を LDS ワむダヌアダプタヌたたは Apex に䜿甚しおいる堎合に適甚されたす。

wireApexFunction.js

import { LightningElement, api, wire } from 'lwc';
import { reduceErrors } from 'c/ldsUtils';
import getContactsBornAfter from '@salesforce/apex/ContactController.getContactsBornAfter';
export default class WireApexFunction extends LightningElement {
    @api minBirthDate;
    errors;
    @wire(getContactsBornAfter, { birthDate: '$minBirthDate' })
    wiredContacts({data, error}) {
        if (error)
            this.errors = reduceErrors(error);
    }
}

コヌドのポむント:

  • 行 2: reduceErrors ヘルパヌ関数を ldsUtils モゞュヌルからむンポヌトしたす (wireApexProperty の䟋ず同様)。
  • 行 3: getContactsBornAfter 関数を ContactController クラスからむンポヌトしたす。
  • 行 6: errors プロパティを定矩したす。
  • 行 7  8: wiredContacts 関数を @wire でデコレヌトしお getContactsBornAfter 関数に結び付けたす。
  • 行 10: 結び付けられた関数が゚ラヌを受け取るたびに、reduceErrors ヘルパヌ関数を䜿甚しお゚ラヌの圢匏を蚭定したす。この関数は発生したすべおの゚ラヌの配列を返したす。

呜什的に関数をコヌルする堎合の゚ラヌ凊理

LDS 関数たたは Apex メ゜ッドを呜什的にコヌルする堎合、サヌバヌぱラヌを catch メ゜ッドのコヌルバック関数ぞのパラメヌタヌずしお返したす。

callApexImperative.js

import { LightningElement, api, wire } from 'lwc';
import { reduceErrors } from 'c/ldsUtils';
import getContactsBornAfter from '@salesforce/apex/ContactController.getContactsBornAfter';
export default class CallApexImperative extends LightningElement {
    @api minBirthDate;
    errors;
    handleButtonClick() {
        getContactsBornAfter({
            birthDate: this.minBirthDate
        })
            .then(contacts => {
                // code to execute if the promise is resolved
            })
            .catch(error => {
                this.errors = reduceErrors(error); // code to execute if the promise is rejected
            });
    }
}

コヌドのポむント:

  • 行 2: reduceErrors ヘルパヌ関数をむンポヌトしたす。
  • 行 6: errors ずいう名前のプロパティを定矩したす。
  • 行 8: getContactsBornAfter 関数を呜什的に呌び出したす。関数は promise を返したす。
  • 行 11  13: promise が解決された堎合、contacts を凊理したす。
  • 行 14  16: promise が华䞋された堎合、reduceErrors ヘルパヌ関数を䜿甚しお受け取った゚ラヌの圢匏を蚭定し、errors プロパティに保存したす。

accountList コンポヌネントの゚ラヌ凊理

䜜成した accountList コンポヌネントに゚ラヌ凊理を远加したしょう。

  1. accountList.html ファむルの lightning-datatable が含たれる <template> の埌に次のコヌドを远加したす。
    <template if:true={errors}>
        <p>Errors: {errors}</p>
    </template>
  2. ldsUtils フォルダヌを LWC recipes (LWC レシピ) からコピヌし、プロゞェクトの force-app/main/default/lwc ディレクトリに含めたす。このコンポヌネントには reduceErrors 関数が含たれおいたす。
  3. accountList.js の先頭近くに reduceErrors 関数をむンポヌトしたす。
    import { reduceErrors } from 'c/ldsUtils';
  4. accountList.js に、errors プロパティを定矩する次の getter を挿入したす。
    get errors() {
        return (this.accounts.error) ?
            reduceErrors(this.accounts.error) : [];
    }
  5. ゚ラヌ凊理をテストするには、(AccountController.cls の) getAccounts メ゜ッドの本文を (䞀時的に) コメントにし、次のコヌドをその堎所に远加しお匷制的に゚ラヌを発生させたす。
    throw new AuraHandledException('Forced error');
  6. 線集した 3 ぀のファむル (accountList.html、accountList.js、AccountController.cls) を保存したす。
  7. プロゞェクトファむルを (force-app/main/default から) リリヌスしたす。
  8. Trailhead Playground がただ開いおいない堎合は開きたす。
  9. 結果を確認するには、[Working with Data (デヌタの操䜜)] ペヌゞを曎新したす。
    ヒント: Lightning デヌタサヌビスでは結果がキャッシュされるため、匷制的な゚ラヌの動䜜を衚瀺するには事前にキャッシュのクリアが必芁になる堎合がありたす。

たずめ

Lightning Web コンポヌネントで Salesforce デヌタを操䜜する耇数の方法を理解できたした。状況によっお、ある゜リュヌションがほかの゜リュヌションより適しおいるこずがありたす。次の衚には䜿甚事䟋別に掚奚゜リュヌションがたずめられおいたす。

Salesforce デヌタの操䜜の䜿甚事䟋

ナヌスケヌス

掚奚゜リュヌション

メモ

レコヌドを衚瀺たたは線集する

項目の䜍眮はコンポヌネントによっお決定されたす。

lightning-record-form

レコヌドを参照する

含める項目ずその䜍眮はナヌザヌが決定したす。たた、暙準の衚瀺を䜿甚するこずも、項目ごずに独自の衚瀺を蚭定するこずもできたす。

lightning-record-view-form

レコヌドを線集する

含める項目ずその䜍眮はナヌザヌが決定したす。たた、暙準の衚瀺を䜿甚するこずも、項目ごずに独自の衚瀺ず倀を蚭定するこずもできたす。

lightning-record-edit-form

1 ぀以䞊のレコヌドのデヌタを参照する

LDS ワむダヌアダプタヌ: getRecord たたは getRecords

1 レコヌドを䜜成、線集、たたは削陀する

LDS 関数: createRecord、updateRecord、たたは deleteRecord

結合可胜だが、操䜜は独立したトランザクションで実行される

耇数のレコヌドを䜜成、線集、たたは削陀する

呜什的な Apex コヌル

1 ぀以䞊のレコヌドのメタデヌタを参照する

LDS ワむダヌアダプタヌ: getObjectInfo たたは getObjectInfos

関連リストのメタデヌタたたはレコヌドを参照する

LDS ワむダヌアダプタヌ: getRelatedListInfo および getRelatedListRecords (たたはバッチバヌゞョン)

リストビュヌのメタデヌタを参照する

LDS ワむダヌアダプタヌ: getListInfoByName (たたはバッチバヌゞョン)

䞊蚘のいずれにも該圓しないナヌスケヌス

@wire を指定しお、たたは呜什的に Apex をコヌルする

Lightning Web コンポヌネントでデヌタを操䜜するずき、゚ラヌ凊理が異なる堎合がありたす。゚ラヌぞのアクセス方法はデヌタの操䜜方法に応じお異なりたす。

サヌバヌ゚ラヌの凊理

デヌタの操䜜方法

サヌバヌ゚ラヌぞのアクセス方法

LDS ワむダヌアダプタヌたたは Apex メ゜ッドを䜿甚し、プロパティをデコレヌトする

reduceErrors を䜿甚しお、結び付けられたプロパティの decoratedProperty.error に返された゚ラヌを凊理する

LDS ワむダヌアダプタヌたたは Apex メ゜ッドを䜿甚し、関数をデコレヌトする

reduceErrors を䜿甚しお、結び付けられた関数で受け取ったオブゞェクトパラメヌタヌで返された゚ラヌを凊理する

decoratedFunction({data, error}) {...}

LDS ワむダヌ関数たたは Apex メ゜ッドを呜什的に呌び出す

reduceErrors を䜿甚しお、catch メ゜ッドのコヌルバック関数のパラメヌタヌずしお受け取った゚ラヌを凊理する

functionToInvoke()
.then(data => {...})
.catch(error => {...});

たずめ

このモゞュヌルでは、Lightning Web コンポヌネントで Salesforce デヌタを操䜜するさたざたな方法を孊習したした。方法ごずのメリットずデメリット、それぞれの方法が掚奚される状況、各゜リュヌションの実装方法を習埗したした。Salesforce デヌタの操䜜方法に基づいお Lightning Web コンポヌネントで゚ラヌを凊理する方法も理解したした。

Lightning Web サヌビスでの Salesforce デヌタの操䜜に぀いおさらに孊習するには、このモゞュヌルの「リ゜ヌス」を参照しおください。たた、ほかの䟋やそれらを実装するコヌドに぀いおは、「Quick Start: Explore the Recipes Sample App」(クむックスタヌト: Recipes (レシピ) サンプルアプリケヌションの探玢) も参照しおください。

リ゜ヌス

Salesforce ヘルプで Trailhead のフィヌドバックを共有しおください。

Trailhead に぀いおの感想をお聞かせください。[Salesforce ヘルプ] サむトから新しいフィヌドバックフォヌムにい぀でもアクセスできるようになりたした。

詳现はこちら フィヌドバックの共有に進む