ãµãŒããŒãšã©ãŒã®åŠç
åŠç¿ã®ç®ç
ãã®åå ãå®äºãããšã次ã®ããšãã§ããããã«ãªããŸãã
- ããããã£ãçµã³ä»ããŠããå Žåã«çºçãããµãŒããŒãšã©ãŒã®åŠçæ¹æ³ã説æããã
- 颿°ãçµã³ä»ããŠããå Žåã«çºçãããµãŒããŒãšã©ãŒã®åŠçæ¹æ³ã説æããã
- LDS 颿°ãŸã㯠Apex ãåœä»€çã«ã³ãŒã«ããå Žåã«çºçãããµãŒããŒãšã©ãŒã®åŠçæ¹æ³ã説æããã
- ç¹å®ã®äœ¿çšäºäŸã«æšå¥šãããããŒã¿ã®æäœæ¹æ³ãšãšã©ãŒã®åŠçæ¹æ³ãæããã
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ã®åœ¢åŒãèšå®ããŸãããã®é¢æ°ã¯ãšã©ãŒãªããžã§ã¯ããåãåããçºçãããã¹ãŠã®ãšã©ãŒã¡ãã»ãŒãžã®é åãè¿ããŸãã
çµã³ä»ãããã颿°ã®ãšã©ãŒåŠç
@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 ã³ã³ããŒãã³ãã«ãšã©ãŒåŠçã远å ããŸãããã
- accountList.html ãã¡ã€ã«ã®
lightning-datatableãå«ãŸãã<template>ã®åŸã«æ¬¡ã®ã³ãŒãã远å ããŸãã<template if:true={errors}> <p>Errors: {errors}</p> </template> ldsUtilsãã©ã«ããŒã LWC recipes (LWC ã¬ã·ã) ããã³ããŒãããããžã§ã¯ãã® force-app/main/default/lwc ãã£ã¬ã¯ããªã«å«ããŸãããã®ã³ã³ããŒãã³ãã«ã¯reduceErrors颿°ãå«ãŸããŠããŸãã- accountList.js ã®å
é è¿ãã«
reduceErrors颿°ãã€ã³ããŒãããŸããimport { reduceErrors } from 'c/ldsUtils'; - accountList.js ã«ã
errorsããããã£ãå®çŸ©ããæ¬¡ã® getter ãæ¿å ¥ããŸããget errors() { return (this.accounts.error) ? reduceErrors(this.accounts.error) : []; } - ãšã©ãŒåŠçããã¹ãããã«ã¯ã(AccountController.cls ã®)
getAccountsã¡ãœããã®æ¬æã (äžæçã«) ã³ã¡ã³ãã«ããæ¬¡ã®ã³ãŒãããã®å Žæã«è¿œå ããŠåŒ·å¶çã«ãšã©ãŒãçºçãããŸããthrow new AuraHandledException('Forced error'); - ç·šéãã 3 ã€ã®ãã¡ã€ã« (accountList.htmlãaccountList.jsãAccountController.cls) ãä¿åããŸãã
- ãããžã§ã¯ããã¡ã€ã«ã (
force-app/main/defaultãã) ãªãªãŒã¹ããŸãã - Trailhead Playground ããŸã éããŠããªãå Žåã¯éããŸãã
- çµæã確èªããã«ã¯ã[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 (ãŸãã¯ãããããŒãžã§ã³) | |
äžèšã®ãããã«ã該åœããªããŠãŒã¹ã±ãŒã¹ |
|
Lightning Web ã³ã³ããŒãã³ãã§ããŒã¿ãæäœãããšãããšã©ãŒåŠçãç°ãªãå ŽåããããŸãããšã©ãŒãžã®ã¢ã¯ã»ã¹æ¹æ³ã¯ããŒã¿ã®æäœæ¹æ³ã«å¿ããŠç°ãªããŸãã
ãµãŒããŒãšã©ãŒã®åŠç
ããŒã¿ã®æäœæ¹æ³ | ãµãŒããŒãšã©ãŒãžã®ã¢ã¯ã»ã¹æ¹æ³ |
|---|---|
LDS ã¯ã€ã€ãŒã¢ããã¿ãŒãŸã㯠Apex ã¡ãœããã䜿çšããããããã£ããã³ã¬ãŒããã |
|
LDS ã¯ã€ã€ãŒã¢ããã¿ãŒãŸã㯠Apex ã¡ãœããã䜿çšãã颿°ããã³ã¬ãŒããã |
decoratedFunction({data, error}) {...} |
LDS ã¯ã€ã€ãŒé¢æ°ãŸã㯠Apex ã¡ãœãããåœä»€çã«åŒã³åºã |
functionToInvoke()
.then(data => {...})
.catch(error => {...}); |
ãŸãšã
ãã®ã¢ãžã¥ãŒã«ã§ã¯ãLightning Web ã³ã³ããŒãã³ãã§ Salesforce ããŒã¿ãæäœããããŸããŸãªæ¹æ³ãåŠç¿ããŸãããæ¹æ³ããšã®ã¡ãªãããšãã¡ãªãããããããã®æ¹æ³ãæšå¥šãããç¶æ³ãåãœãªã¥ãŒã·ã§ã³ã®å®è£ æ¹æ³ãç¿åŸããŸãããSalesforce ããŒã¿ã®æäœæ¹æ³ã«åºã¥ã㊠Lightning Web ã³ã³ããŒãã³ãã§ãšã©ãŒãåŠçããæ¹æ³ãçè§£ããŸããã
Lightning Web ãµãŒãã¹ã§ã® Salesforce ããŒã¿ã®æäœã«ã€ããŠããã«åŠç¿ããã«ã¯ããã®ã¢ãžã¥ãŒã«ã®ããªãœãŒã¹ããåç §ããŠãã ããããŸããã»ãã®äŸãããããå®è£ ããã³ãŒãã«ã€ããŠã¯ããQuick Start: Explore the Recipes Sample Appã(ã¯ã€ãã¯ã¹ã¿ãŒã: Recipes (ã¬ã·ã) ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã®æ¢çŽ¢) ãåç §ããŠãã ããã
ãªãœãŒã¹
- Lightning Web Components Developer Guide (Lightning Web ã³ã³ããŒãã³ãéçºè ã¬ã€ã): Handle Errors in Lightning Data Service (Lightning ããŒã¿ãµãŒãã¹ã§ã®ãšã©ãŒåŠç)
- ããã°: Error Handling Best Practices for Lightning Web Components (Lightning Web ã³ã³ããŒãã³ãã®ãšã©ãŒåŠçã®ãã¹ããã©ã¯ãã£ã¹)
