実装例
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 通知を連続して行う処理にしようと思いこれを調べることになりました。
コメント