文档章节

使用 empApi 组件实现 Change Data Capture 功能

o
 osc_fmg49rzg
发布于 2019/03/21 22:02
字数 829
阅读 8
收藏 0

精选30+云产品,助力企业轻松上云!>>>

Change Data Capture 功能是从 Winter ’19 版本开始正式启用的功能。

它是基于“发布-订阅”模式设计,可以将 Salesforce 中记录的改变自动推送给订阅者所在的系统,比如 Salesforce 内部的功能模块或外部的数据库。

在 Lightning 框架中,lightning:empApi 组件可以实现“订阅者”的角色。在本文中,我们将演示如何使用 lightning:empApi 组件来实时得到记录的更新信息。

启用 Change Data Capture 功能

Change Data Capture 功能是基于对象的,所以我们首先要设置想要订阅的对象类型。

在“设置”界面中搜索“更改数据捕获”,可以进入 Change Data Capture 的设置界面。我们可以设定哪些对象的更新会被记录。

设置 Change Data Capture

建立 Lightning 组件

新建 Lightning 组件,命名为 CDCDemo.cmp,代码如下:

<aura:component implements="flexipage:availableForRecordHome,force:hasRecordId,force:hasSObjectName">
	<aura:attribute name="recordId" type="String" />
    <aura:attribute name="sObjectName" type="String" />
    <aura:attribute name="changeList" type="Object[]" description="存储更新信息,显示在用户界面中" />
    
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>

    <lightning:empApi aura:id="empApi"/>
    
    <lightning:card footer="" title="更新记录">
        <aura:iteration items="{!v.changeList}" var="item">
            <p class="slds-p-horizontal_large">
                <a href="#"><span onclick="{!c.gotoUser}" data-user-id="{!item.userId}">用户</span></a>于 {!item.modifiedDate} 更新了此记录。
            </p>
        </aura:iteration>
    </lightning:card>
    
</aura:component>

其 JavaScript 控制器代码如下:

({
    doInit : function(component, event, helper) {
        var empApi = component.find("empApi");

        // 设定 channel 值。Change Data Capture 功能使用 channel 值来追踪数据更新
        var channel = '/data/';

        // 得到 SObject 对象类型,从而补全 channel 值。标准对象和自定义对象的 channel 值构建方法不同
        var sObjectName = component.get('v.sObjectName');
        if (sObjectName.endsWith('__c')) {
            channel = channel + sObjectName.substring('0', sObjectName.length - 3) + '__ChangeEvent';
        } else {
            channel = channel + sObjectName + 'ChangeEvent';
        }
        
        // 设定 replayId 为-1,表示得到最新的更新事件
        var replayId = '-1';
        
        // 设定数据改变之后的 callback 逻辑,message 中包含了数据更新的详细信息
        var callback = function (message) {
            var modifiedRecords = message.data.payload.ChangeEventHeader.recordIds; // 得到更新的数据的 Id 值
            var commitUser = message.data.payload.ChangeEventHeader.commitUser; // 得到进行更新的用户的 Id 值
            
            var currentRecordId = component.get('v.recordId');
            var userId = $A.get("$SObjectType.CurrentUser.Id");

            // 如果当前记录被更改,并且更改的用户不是当前用户,则将更改的信息放入 changeList 属性中,显示在用户界面上
            if (modifiedRecords.includes(currentRecordId) && commitUser != userId) {
    			var changeList = component.get('v.changeList');
    			
                var changeItem = {};
    			changeItem.userId = commitUser;
    			var modifiedDate = new Date(message.data.payload.LastModifiedDate);
    			changeItem.modifiedDate = modifiedDate.toString();
    			
    			changeList.push(changeItem);

    			component.set('v.changeList', changeList);
            }
        }.bind(this);

        // 开始订阅
        empApi.subscribe(channel, replayId, callback).then(function(value) {
            // 订阅成功,可以在这里显示成功信息
        });
        
        // 错误处理
        var errorHandler = function (message) {
            // 显示错误信息
        }.bind(this);

        // 将错误处理函数连接到 empApi 组件中
        empApi.onError(errorHandler);
    },
    
    gotoUser : function(component, event, helper) {
        var userId = event.currentTarget.dataset.userId;
        
        // 重定向到用户界面
        var navEvt = $A.get("e.force:navigateToSObject");
        navEvt.setParams({
            "recordId": userId
        });
        navEvt.fire();
    },
})

在“客户”页面上使用组件

在“客户”的页面上,进入“编辑页面”界面。然后,将刚才建立的 CDCDemo 组件拖动到页面的“活动”部分。

将组件拖到页面中

然后,如果在我们浏览“客户”记录页面的同时,其他用户修改了此条记录,在“活动”部分会动态地给出通知。

组件效果

小结

在这个示例中,我们主要使用了 Lightning 中的 empApi 组件来动态订阅数据的更新,然后自动推送到用户界面中。

使用其他的工具(比如 Salesforce 推荐的 EMP-Connector)可以将数据的订阅推送到其他的系统中,实现系统的整合和同步。

下一篇: Scyther
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
基于koa的h5视频录制异步上传

需求 h5 录制视频, 异步上传到 node 服务器端 文件保存在服务器端。 技术选型 前端 jquery 后端 koa 技术坑点 h5 录制视频 主要依赖 属性 和 属性 accept(限制可用文件类型) accept 属性:...

bosscheng
04/23
5
0
SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑

SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑 关键词:CDC,数据库审计 详细参考:微软官网,大神总结 详细参考:https://www.cnblogs.com/Joe-T/p/4312806.html 原文:http:...

osc_1zw3bob0
2019/04/23
5
0
[Input-number]数字输入框组件

需求 加、减按钮 初始值 最大、最小值 数值改变时,触发一个自定义事件来通知父组件 目录文件 index.html 入口页 input-number.js 数字输入框组件 index.js 根实例 实现关键 Vue组件是单向数...

osc_1t8zhli7
2019/11/22
7
0
Debezium SQL Server Source Connector+Kafka+Spark+MySQL 实时数据处理

写在前面 <font color=#00cc66 size=4 face="黑体">前段时间在实时获取SQLServer数据库变化时候,整个过程可谓是坎坷。然后就想在这里记录一下。 </font> 本文的技术栈: Debezium SQL Serve...

osc_8gtzj75i
04/16
16
0
SQL数据同步到ELK(四)- 利用SQL SERVER Track Data相关功能同步数据(上)

一、相关文档 老规矩,为了避免我的解释误导大家,请大家务必通过官网了解一波SQL SERVER的相关功能。 文档地址: 整体介绍文档:https://docs.microsoft.com/en-us/sql/relational-databas...

osc_n2abpzfo
2019/08/16
1
0

没有更多内容

加载失败,请刷新页面

加载更多

macz技巧分享—macOS高端使用技巧

Macos 的占有量不如 Windows,两者之间当操作方式也有很大的不同,当很多人熱悉 Windows 的操作之后,再接触 macos,觉得难上手,其实是习惯问题。如果你学习一些技巧,会觉得 macos 其实也不...

mac小叮当
34分钟前
11
0
手把手教你如何用黑白显示器显示彩色!

来源:大数据文摘 本文约1000字,建议阅读6分钟。 本文为你介绍如何通过黑白显示器上也能显示出彩色。 原来在黑白显示器上也能显示出彩色啊!通过在监视器上覆盖拜耳滤色镜,并拼接彩色图像,...

osc_jklrr90y
34分钟前
18
0
key-value结构排序:给定一个字符串,统计每个字符出现频率,先按value降序,再按key升序

对于key-value结构的排序 第一种:lambda表达式 第二种:函数 第三种:类对()的重载,仿函数形式 #include <iostream>#include <vector>#include <unordered_map>#include <string>#in......

osc_gwtkg2dc
35分钟前
0
0
BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球区块链创新50强》

BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球区块链创新50强》 目录 世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛——2020全球...

osc_vew1u0h0
36分钟前
0
0
BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》(三)

BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》(三) 目录 2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》 演讲嘉宾 演讲内容 ...

osc_8o71811p
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部