LWCからApexメソッドに、レコード情報をJSONで受け渡す

train by trees against blue sky Lightning Web Component
Photo by RAJAT JAIN on Pexels.com

実装例

LWC側では、JSON.stringify() で JSON化してApexクラスのメソッドに引数として渡します。

import { LightningElement } from 'lwc';
import createAccount from '@salesforce/apex/SampleClass.createAccount';

export default class Sample extends LightningElement {
    createdAccountId;

    handleSubmit(){
        const recordInput = {
            "Name": "Test",
            "Industry": "Biotechnology",
            "NumberOfEmployees": 100,
        }
        createAccount({recordInfoJson: JSON.stringify(recordInput)})
        .then(createdRecord => {
            this.createdAccountId = createdRecord.Id;
        });
    }
}

Apexメソッド側では String として受け取り、JSON.deserialize() で各オブジェクト型に変換します。

public with sharing class SampleClass {
    @AuraEnabled
    public static Account createAccount(String recordInfoJson){
        try {
            Account acc = (Account)JSON.deserialize(recordInfoJson, Account.class);
            insert acc;
            return acc;
        } catch (Exception e) {
            throw new AuraHandledException(e.getMessage());
        }
    }
}

おまけ(これをやりたかった背景)

基本的にLWCでレコード作成を行いたい場合は uiRecordApi の createRecord を使います。
ただし今回はレコード作成の後、Slack 通知処理(これもApexメソッド)を呼び出したかったという背景がありました。

createRecord を使うと Promise が返ってくるので、その間にブラウザを閉じられたりすると通知処理が行われない可能性があります。

なのでサーバ側でレコード作成 → Slack 通知を連続して行う処理にしようと思いこれを調べることになりました。

コメント

タイトルとURLをコピーしました