Salesforce Wire Service でApexメソッドを使用する方法
環境
Salesforce Apex
概要
ワイヤーサービスを利用して、Apexメソッドから返されたデータをプロパティ、またはメソッドに割り当てます。
Apexメソッドから返されるデータはdataとerrorのプロパティをもつオブジェクトです。
特徴
Apexを使用する
データの参照のみ可能。DML不可。
明示的にメソッドを呼び出す処理をJSに記述しなくてもデータが取得される。
Wireサービスで使用するApexには下記が必要です。
static
publicまたはglobal
@AuraEnabled(cacheable=true)
サポートされる引数、戻り値は下記になります。
引数をApexメソッドに渡すには、キー(Apexメソッドの仮引数とおなじもの)と値のペアのオブジェクトが必要です。
プリミティブ型: Boolean, Date, DateTime, Decimal, Double, Integer, Long, String.
SObject型: 標準オブジェクト、カスタムオブジェクト
Apexクラス(引数に使用する場合、publicなコンストラクタが必要)
コレクション
1.apexコントローラコード
public with sharing class LwcTestCtrl {
@AuraEnabled(cacheable=true)
public static List<OrderItem> getTableData(Id orderId) {
return [
SELECT
Id,
ProductName__c, // 商品名
TotalPrice, // 合計金額
SortOrder__c // 表示順
FROM
OrderItem
WHERE
OrderId = :orderId
];
}
}
2.javascriptを作成コード
作成したApexメソッドとwireデコレータをJSファイルにインポートします。
記述はimport apexMethod from '@salesforce/apex/Namespace.Classname.apexMethod’;の
ようになり、Namespaceがcの場合は不要です。
import { LightningElement, api, wire, track } from 'lwc';
import getTableData from '@salesforce/apex/LwcSampleCtrl.getTableData';
プロパティにはオブジェクトが代入されます。Apexの戻り値は代入されたオブジェクトのdataプロパティに
設定されます。読込中は空のオブジェクトが代入されます。
3.プロパティに接続
export default class ConfirmSuccessFee extends LightningElement {
@api recordId;
@wire(getTableData, { orderId: '$recordId' })
tableData;
}
4.Apexメソッドをメソッドに接続する
export default class ConfirmSuccessFee extends LightningElement {
@api recordId;
@track data;
@wire(getTableData, { orderId: '$recordId'})
getTableData({ error, data }) {
if (data) {
this.data = data;
}
}
}
5.htmlの作成 Apexメソッドから渡された戻り値はdataプロパティの中に格納されます。
Apexメソッドから渡された戻り値はdataプロパティの中に格納されます。
<template if:true={tableData.data}>
<lightning-datatable
key-field="Id"
data={tableData.data}
columns={columns}>
</lightning-datatable>
</template>
読込中は画面に表示させたくない場合は、if:true=を使用します。
<template if:true={value.data}></template>
<template if:true={canDisp}></template>
<!--
戻り値がBooleanの場合、javascriptで下記を定義
get canDisp() { return this.value.data !== undefined; }
-->