getRecords

レコードのデータを一括で一度に取得するには、このワイヤアダプタを使用します。複数のオブジェクトまたは異なるレコードタイプを要求できます。

構文 

1import { LightningElement, wire } from 'lwc';
2import { getRecords } from 'lightning/uiRecordApi';
3
4@wire(getRecords, { records: [ { recordIds: string[], fields: string[] } ] })
5propertyOrFunction
6
7@wire(getRecords, { records: [ { recordIds: string[], fields: string[], optionalFields?: string[] } ] })
8propertyOrFunction

ユーザインターフェース API リソース 

1GET /ui-api/records/batch/{recordIds}

getRecords ワイヤアダプタでは、このユーザインターフェース API リソースが使用されますが、そのすべてのパラメータはサポートされません。

パラメータ 

  • records — 複数のオブジェクトまたはレコードタイプにわたる可能性があるレコードデータの配列。
  • recordIds — (少なくとも 1 つが必須) サポートされているオブジェクトから取得するレコードの ID。
  • fields — 返される項目の配列。コンテキストユーザに項目へのアクセス権がない場合、エラーが返されます。コンテキストユーザに項目へのアクセス権があるかどうかがわからず、ない場合に要求を失敗させないようにする場合は、optionalFields パラメータを使用します。

ObjectApiName.FieldName または ObjectApiName.JunctionIdListName 形式で項目名を指定します。

多態的な項目はサポートされていません。fields に多態的な項目を含めると、無効な項目のエラーが発生することがあります。

Note

  • optionalFields — (省略可能) 省略可能項目名の配列。コンテキストユーザに項目へのアクセス権がある場合、その項目は応答に含まれます。コンテキストユーザに項目へのアクセス権がない場合、その項目は応答に含まれませんが、エラーも発生しません。ObjectApiName.FieldName または ObjectApiName.JunctionIdListName 形式で項目名を指定します。

  • propertyOrFunction — ワイヤサービスからデータのストリームを受信する非公開のプロパティまたは関数。プロパティが @wire でデコレートされている場合、結果はそのプロパティの data プロパティまたは error プロパティに返されます。関数が @wire でデコレートされている場合、結果は data プロパティと error プロパティを持つオブジェクトで返されます。

戻り値 

  • resultsバッチの結果
  • hasErrors — 結果セットに HTTP 状況コードが 400 番台または 500 番台の結果が 1 つ以上ある場合は true、それ以外の場合は false

使用方法 

1 つのレコードのデータを取得するには、getRecord を使用します。

条件による絞り込みや、動的なレコード ID の操作を容易にするには、代わりに GraphQL ワイヤアダプタの使用について検討してください。

Tip

次の例では、レコード ID を使用して複数のレコードを読み込んでいます。recordId の値を適切な値に置き換えます。

1import { LightningElement, wire } from "lwc";
2import { getRecords } from "lightning/uiRecordApi";
3import NAME_FIELD from "@salesforce/schema/User.Name";
4import EMAIL_FIELD from "@salesforce/schema/User.Email";
5
6export default class GetRecordsExample extends LightningElement {
7  @wire(getRecords, {
8    records: [
9      {
10        recordIds: ["005XXXXXXXXXXXXXXX", "005XXXXXXXXXXXXXXX"],
11        fields: [NAME_FIELD],
12        optionalFields: [EMAIL_FIELD],
13      },
14    ],
15  })
16  wiredRecords;
17}

代わりに、複数のオブジェクトにわたるレコードを要求できます。

1import { LightningElement, wire } from "lwc";
2import { getRecords } from "lightning/uiRecordApi";
3import USER_NAME_FIELD from "@salesforce/schema/User.Name";
4import USER_EMAIL_FIELD from "@salesforce/schema/User.Email";
5import ACCOUNT_NAME_FIELD from "@salesforce/schema/Account.Name";
6
7export default class GetRecordsExample extends LightningElement {
8  @wire(getRecords, {
9    records: [
10      {
11        recordIds: ["005XXXXXXXXXXXXXXX"],
12        fields: [USER_NAME_FIELD],
13        optionalFields: [USER_EMAIL_FIELD],
14      },
15      {
16        recordIds: ["001XXXXXXXXXXXXXXX"],
17        fields: [ACCOUNT_NAME_FIELD],
18      },
19    ],
20  })
21  wiredRecords;
22}

動的なレコード ID を操作するには、代わりに GraphQL ワイヤアダプタを使用してください。

動的なレコード ID を使用して getRecords ワイヤアダプタを使用する場合は、レコードパラメータを単一のプロパティとして転送できる parameterObject 配列を作成することをお勧めします。配列を使用すれば、複数のオブジェクトのレコード ID と項目を定義できます。

たとえば、Apex コントローラで取引先ごとに取引先責任者 ID を取得し、それを parameterObject 配列に渡すことができます。配列は connectedCallback または renderedCallback で作成できます。また、親コンポーネントから、配列を初期化する子コンポーネントにレコードパラメータを渡すこともできます。

この例は、parameterObject 配列の設定方法を示しています。IDs オブジェクトには、getRecords ワイヤアダプタを使用して取得する連絡先レコードの ID が含まれています。

1import { LightningElement, api, wire } from "lwc";
2import { getRecords } from "lightning/uiRecordApi";
3// Import field references here for optionalFields
4
5export default class DynamicIDExample extends LightningElement {
6  parameterObject;
7
8  connectedCallback() {
9    this.parameterObject = [];
10
11    // Set the parameterObject with record IDs and optional fields.
12    // The IDs object contains records you retrieved
13    // from another wire adapter or Apex controller.
14    if (this.IDs.length > 0) {
15      this.IDs.forEach((contact) => {
16        this.parameterObject.push({
17          recordIds: [contact.Id],
18          optionalFields: [CONTACT_NAME_FIELD, CONTACT_PHONE_FIELD],
19        });
20      });
21      // Push additional recordIDs and optionalFields for other objects
22    }
23  }
24
25  @wire(getRecords, { records: "$parameterObject" })
26  wiredRecords({ error, data }) {
27    if (data) {
28      console.log("data", JSON.parse(JSON.stringify(data)));
29      data.results.forEach((record) => {
30        // Do something with the results
31      });
32      this.error = undefined;
33    } else if (error) {
34      this.error = error;
35    }
36  }
37}

ワイヤアダプタをコールすると、ユーザインターフェース API によって要求の SOQL クエリが作成されます。この SOQL クエリには 10 万文字の制限があります。この制限を超えることが予想される場合は、クエリを複数のクエリに分割してバッチで実行することをお勧めします。

Note

エラー処理 

getRecordserror プロパティでエラーを返します。エラーを表示するには、then() ブロックと catch() ブロックが含まれる Promise を使用して lightning/platformShowToastEvent モジュールで提供されるトーストを使用できます。

1import { LightningElement, api, wire } from "lwc";
2import { ShowToastEvent } from "lightning/platformShowToastEvent";
3import { getRecords } from "lightning/uiRecordApi";
4
5const FIELDS = ["Contact.Name", "Contact.Phone"];
6
7export default class LoadContact extends LightningElement {
8  @api recordId;
9  contacts;
10  name;
11  phone;
12  @wire(getRecords, {
13    records: [
14      {
15        recordIds: ["005XXXXXXXXXXXXXXX", "005XXXXXXXXXXXXXXX"],
16        fields: FIELDS,
17      },
18    ],
19  })
20  wiredRecord({ error, data }) {
21    if (error) {
22      let message = "Unknown error";
23      if (Array.isArray(error.body)) {
24        message = error.body.map((e) => e.message).join(", ");
25      } else if (typeof error.body.message === "string") {
26        message = error.body.message;
27      }
28      this.dispatchEvent(
29        new ShowToastEvent({
30          title: "Error loading contacts",
31          message,
32          variant: "error",
33        }),
34      );
35    } else if (data) {
36      this.contacts = data;
37      this.name = this.contacts.results[1].result.fields.Name.value;
38      this.phone = this.contacts.results[1].result.fields.Phone.value;
39    }
40  }
41}

The Japanese Summer '24 guide is now live

日本語の Summer '24 ガイドが公開されました! 「Component Reference (コンポーネントリファレンス)」は、以前と同様にコンポーネントライブラリにあります。