こんにちは!
最近、lwcの開発しています。
画面から登録して、登録完了したらトーストを表示するのはできるんだけど、オブジェクト自体に更新かかったときに画面と同期がとれていないなと思い、オブジェクトの更新を取得する方法がないかと調べてみました。
どうやら、変更データキャプチャとかプラットフォームイベントを使用すると可能らしい。
ということで、変更データキャプチャを実践!!!
設定>インテグレーション>変更データキャプチャで、対象のオブジェクトをチャネル登録すればいいらしいです。
取引先をイベントチャネルへ登録。
イベントチャネルに登録すると、作成、更新、削除、復元時に変更イベントを通知するそうです。
LWCでこの通知を受信するには、lightning:empApiをインポートして、subscribeでチャネルを指定して、受信します。
チャネルの指定方法は以下の通りで可能とのこと。
- /data/ChangeEvents ・・・ すべてのオブジェクト
- /data/<標準オブジェクト名>ChangeEvent ・・・標準オブジェクト
- /data/<カスタムオブジェクト名>__ChangeEvent ・・・カスタムオブジェクト
LWC作成
以下のとおりで、作成しました。
html
1 2 3 4 5 6 7 8 |
<template> <lightning-card title="AccountEvent" icon-name="custom:custom1"> <button onclick={handleSubscribe}>開始</button> <div class="slds-card__body_inner"> <Lightning-textarea name="event" value={event}></Lightning-textarea> </div> </lightning-card> </template> |
javascript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import { LightningElement } from 'lwc'; import { subscribe } from 'lightning/empApi'; export default class AccountEvent extends LightningElement { event; subscription; channelName = '/data/AccountChangeEvent'; handleSubscribe() { const callback = function(response) { console.log('New message received : ', JSON.stringify(response)); this.event = JSON.stringify(response) }; subscribe(this.channelName, -1, callback.bind(this)).then(response => { console.log('Successfully subscribed to : ', JSON.stringify(response.channel)); this.subscription = response; }); } } |
動作確認
開始ボタンを押下して、通知を受信待ち状態とします。
別ウィンドウから、対象のオブジェクトを更新してみます。
変更イベントを受信し、画面上に内容が表示されました。
画面を開いていて、別の人がレコードを更新した際などに、通知を表示したり、いろいろできそうです!
コメント