getRecord
レコードのデータを取得するには、このワイヤアダプタを使用します。
構文
1import { LightningElement, wire } from 'lwc';
2import { getRecord } from 'lightning/uiRecordApi';
3
4@wire(getRecord, { recordId: string, fields: string|string[], optionalFields?: string|string[] })
5propertyOrFunction
6
7@wire(getRecord, { recordId: string, layoutTypes: string|string[],
8 modes?: string|string[], optionalFields?: string|string[] })
9propertyOrFunction
ユーザインターフェース API リソース
1GET /ui-api/records/{recordId}
getRecord ワイヤアダプタでは、このユーザインターフェース API リソースが使用されますが、そのすべてのパラメータはサポートされません。
パラメータ
recordId — (必須) サポートされているオブジェクトのレコードの ID。
fields — (fields または layoutTypes のいずれかが必須) 返される項目または項目の配列。コンテキストユーザに項目へのアクセス権がない場合、エラーが返されます。コンテキストユーザに項目へのアクセス権があるかどうかがわからず、ない場合に要求を失敗させないようにする場合は、optionalFields パラメータを使用します。
ObjectApiName.FieldName または ObjectApiName.JunctionIdListName 形式で項目名を指定します。
多態的な項目はサポートされていません。fields に多態的な項目を含めると、無効な項目のエラーが発生することがあります。
パフォーマンスが向上するように、できる限りレイアウトではなく項目を指定します。プロビジョニングされた項目をコンポーネントではなくシステム管理者が制御する場合にのみレイアウトを指定します。コンテキストユーザのレイアウトに割り当てられているすべての項目の受信をコンポーネントで制御する必要があります。
:::
-
modes — (layoutTypes が指定されている場合は省略可能。layoutTypes が指定されていない場合、このパラメータは無視されます。)レコードのアクセスモード。この値によって、レイアウトから取得する項目が決まります。レイアウトには作成、編集、表示の各モードで異なる項目が含まれます。
Create — レコードをユーザが作成できる UI の構築を目的とする場合、このモードを使用します。
Edit — レコードをユーザが編集できる UI の構築を目的とする場合、このモードを使用します。
View — (デフォルト) レコードを表示する UI の構築を目的とする場合、このモードを使用します。
-
optionalFields — (省略可能) 省略可能項目名または省略可能項目名の配列。コンテキストユーザに項目へのアクセス権がある場合、その項目は応答に含まれます。コンテキストユーザに項目へのアクセス権がない場合、その項目は応答に含まれませんが、エラーも発生しません。ObjectApiName.FieldName または ObjectApiName.JunctionIdListName 形式で項目名を指定します。
-
propertyOrFunction — ワイヤサービスからデータのストリームを受信する非公開のプロパティまたは関数。プロパティが @wire でデコレートされている場合、結果はそのプロパティの data プロパティまたは error プロパティに返されます。関数が @wire でデコレートされている場合、結果は data プロパティと error プロパティを持つオブジェクトで返されます。
戻り値
レコード応答では recordTypeInfo プロパティは使用しないでください。代わりに、すべてのレコードで返される recordTypeId プロパティを使用してください。
使用方法
条件による絞り込みや、動的なレコード ID の操作を容易にするには、代わりに GraphQL ワイヤアダプタの使用について検討してください。
次の例では、必須および省略可能の項目を含むレコードを読み込んでいます。getRecord と getFieldValue を使用して、レコードを取得し、その項目値を表示します。recordId の値を適切な値に置き換えます。
1import { LightningElement, wire } from "lwc";
2import { getRecord, getFieldValue } from "lightning/uiRecordApi";
3import NAME_FIELD from "@salesforce/schema/Account.Name";
4import OWNER_NAME_FIELD from "@salesforce/schema/Account.Owner.Name";
5import PHONE_FIELD from "@salesforce/schema/Account.Phone";
6import INDUSTRY_FIELD from "@salesforce/schema/Account.Industry";
7
8export default class Example extends LightningElement {
9 @wire(getRecord, {
10 recordId: "001456789012345678",
11 fields: [NAME_FIELD, INDUSTRY_FIELD],
12 optionalFields: [PHONE_FIELD, OWNER_NAME_FIELD],
13 })
14 account;
15
16 get name() {
17 return getFieldValue(this.account.data, NAME_FIELD);
18 }
19
20 get phone() {
21 return getFieldValue(this.account.data, PHONE_FIELD);
22 }
23
24 get industry() {
25 return getFieldValue(this.account.data, INDUSTRY_FIELD);
26 }
27
28 get owner() {
29 return getFieldValue(this.account.data, OWNER_NAME_FIELD);
30 }
31}
カスタムユーザインターフェースで項目値を読み込みます。
1<template lwc:if={account.data}>
2 <div class="slds-m-around_medium">
3 <p>Account Name: {name}</p>
4 <p>Industry: {industry}</p>
5 <p>Phone: {phone}</p>
6 <p>Owner: {owner}</p>
7 </div>
8</template>
次の例では、レイアウトでレコードを読み込んでいます。recordId の値を適切な値に置き換えます。前の例と同様に、getFieldValue ワイヤアダプタを使用して項目値を表示できます。
1import { LightningElement, wire } from "lwc";
2import { getRecord } from "lightning/uiRecordApi";
3
4export default class Example extends LightningElement {
5 @wire(getRecord, { recordId: "001456789012345678", layoutTypes: ["Full"], modes: ["View"] })
6 accountRecord;
7}
getRecord とカスタム UI の使用例については、「レコードデータの取得」を参照してください。
エラー処理
then() および catch() ブロックで Promise を使用します。エラーを表示するには、lightning/platformShowToastEvent モジュールで提供されるトーストを使用します。
1import { LightningElement, api, wire } from "lwc";
2import { ShowToastEvent } from "lightning/platformShowToastEvent";
3import { getRecord } from "lightning/uiRecordApi";
4
5const FIELDS = ["Contact.Name", "Contact.Phone"];
6
7export default class LoadContact extends LightningElement {
8 @api recordId;
9 contact;
10 name;
11 phone;
12 @wire(getRecord, { recordId: "$recordId", fields: FIELDS })
13 wiredRecord({ error, data }) {
14 if (error) {
15 let message = "Unknown error";
16 if (Array.isArray(error.body)) {
17 message = error.body.map((e) => e.message).join(", ");
18 } else if (typeof error.body.message === "string") {
19 message = error.body.message;
20 }
21 this.dispatchEvent(
22 new ShowToastEvent({
23 title: "Error loading contact",
24 message,
25 variant: "error",
26 }),
27 );
28 } else if (data) {
29 this.contact = data;
30 this.name = this.contact.fields.Name.value;
31 this.phone = this.contact.fields.Phone.value;
32 }
33 }
34}
関連トピック