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; }
-->

 

IT

Posted by arkgame