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コントローラコード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
];
}
}
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 ]; } }
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の場合は不要です。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import { LightningElement, api, wire, track } from 'lwc';
import getTableData from '@salesforce/apex/LwcSampleCtrl.getTableData';
import { LightningElement, api, wire, track } from 'lwc'; import getTableData from '@salesforce/apex/LwcSampleCtrl.getTableData';
import { LightningElement, api, wire, track } from 'lwc';
import getTableData from '@salesforce/apex/LwcSampleCtrl.getTableData';

プロパティにはオブジェクトが代入されます。Apexの戻り値は代入されたオブジェクトのdataプロパティに
設定されます。読込中は空のオブジェクトが代入されます。

3.プロパティに接続

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
export default class ConfirmSuccessFee extends LightningElement {
@api recordId;
@wire(getTableData, { orderId: '$recordId' })
tableData;
}
export default class ConfirmSuccessFee extends LightningElement { @api recordId; @wire(getTableData, { orderId: '$recordId' }) tableData; }
export default class ConfirmSuccessFee extends LightningElement {
    @api recordId;

    @wire(getTableData, { orderId: '$recordId' })
    tableData;
}

4.Apexメソッドをメソッドに接続する

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
export default class ConfirmSuccessFee extends LightningElement {
@api recordId;
@track data;
@wire(getTableData, { orderId: '$recordId'})
getTableData({ error, data }) {
if (data) {
this.data = data;
}
}
}
export default class ConfirmSuccessFee extends LightningElement { @api recordId; @track data; @wire(getTableData, { orderId: '$recordId'}) getTableData({ error, data }) { if (data) { this.data = data; } } }
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プロパティの中に格納されます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<template if:true={tableData.data}>
<lightning-datatable
key-field="Id"
data={tableData.data}
columns={columns}>
</lightning-datatable>
</template>
<template if:true={tableData.data}> <lightning-datatable key-field="Id" data={tableData.data} columns={columns}> </lightning-datatable> </template>
 <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>

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<!--
戻り値がBooleanの場合、javascriptで下記を定義
get canDisp() { return this.value.data !== undefined; }
-->
<!-- 戻り値がBooleanの場合、javascriptで下記を定義 get canDisp() { return this.value.data !== undefined; } -->
<!--
戻り値がBooleanの場合、javascriptで下記を定義
get canDisp() { return this.value.data !== undefined; }
-->

 

IT

Posted by arkgame