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

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

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

启用 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)可以将数据的订阅推送到其他的系统中,实现系统的整合和同步。

使用 empApi 组件实现 Change Data Capture 功能的更多相关文章

  1. SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑

    SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑 关键词:CDC   原文:http://www.cnblogs.com/chenxizhang/arc ...

  2. SQL Server审计功能入门:CDC(Change Data Capture)

    原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...

  3. SSIS CDC(Change Data Capture)组件在数据库中启用报错。 The error returned was 14234: 'The specified '@server' is invalid

    昨天实验CDC,在数据库中执行以下语句的时候出错. EXEC sys.sp_cdc_enable_table @source_schema = N'stg', @source_name = N'CDC ...

  4. ELT工具Kettle之CDC(Change Data Capture)实现实例

    ETL过程的第一步就是从不同的数据源抽取数据并把数据存储在数据的缓存区.这个过程的主要挑战就是初始加载数据量大和比较慢的网络延迟.在初始加载完成之后,不能再把所有数据重新加载一遍,我们需要的只是变化的 ...

  5. Oracle CDC (Change Data Capture)更新数据捕获——概述

    Change Data Capture能高效识别并捕获数据的插入.修改和删除,使更新数据供个人或应用使用. CDC从oracle 9i开始引入,//TODO 在11G R2之后的版本里将取消支持,被O ...

  6. salesforce零基础学习(一百零五)Change Data Capture

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.232.0.api_streaming.meta/api_streaming/using ...

  7. Oracle CDC (Change Data Capture)更新数据捕获——Asynchronous HotLog Mode(附带简单的kettle任务实现数据同步)

    Performing Asynchronous HotLog Publishing Step 1   Source Database DBA: Set the database initializat ...

  8. SqlServer Change Data Capture(CDC)数据变更捕获

    最近在使用SqlServer2008r2数据库做系统的时候,在某些重要的.经常涉及到修改的表上,想加上一些恢复机制,一开始想找找看看有没有类似Oracle数据库闪回那样的功能,后来发现CDC的功能可以 ...

  9. SQL数据同步到ELK(四)- 利用SQL SERVER Track Data相关功能同步数据(上)

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

随机推荐

  1. Java面试大纲-java面试该做哪些准备,java开发达到这样的水平可以涨工资

    Java培训结束,面临的就是毕业找工作.在找工作时,就要针对性地做充分的面试准备.准备不充分的面试,完全是浪费时间,更是对自己的不负责. 上海尚学堂Java培训整理出Java面试大纲,其中大部分都是面 ...

  2. Python必学Django框架,入门到精通学习视频教程全都在这可以领

    “人生苦短,我用python”,学python的小伙伴应该都了解这句话的含义.但是,学python,你真正了了解强大的Django框架吗!? 据说Django还是由吉普赛的一个吉他手的名字命名的呢,有 ...

  3. PHP 图片base64 互转

    <?php /* http://tool.css-js.com/base64.html 透明图片 <img src="data:image/jpg;base64,iVBORw0K ...

  4. Unable to preventDefault inside passive event listener due to target being treated as passive

    Unable to preventDefault inside passive event listener due to target being treated as passive 今天在做项目 ...

  5. FAutoTest-微信小程序 / 公众号H5 自动化利器

    X5内核H5自动化背景 近来有很多童靴咨询如何做微信小程序/公众号等H5页面来做自动化,之前写了一篇文章微信小程序自动化测试实践 https://www.cnblogs.com/yyoba/p/945 ...

  6. nvidia-docker+cuda8.0+ubuntu16.04

    nvidia-docker安装 如果之前安装过docker1.0版本,需要先删掉该版本和之前创建的容器 docker volume ls -q -f driver=nvidia-docker | xa ...

  7. ThinkPHP 数据库操作(三) : 查询方法、查询语法、链式操作

    查询方法 条件查询方法 where 方法 可以使用 where 方法进行 AND 条件查询: Db::table('think_user') ->where('name','like','%th ...

  8. C# 获取 ipv4的方法

    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adap ...

  9. java 文件过滤器

    创建文件过滤器 MyFilter ,实现 FileFilter 接口,实现 accept() 方法: package com.test.IODemo1; import java.io.File; im ...

  10. 深入浅出解读 Java 虚拟机的差别测试技术

    本文分享基于字节码种子生成有效.可执行的字节码文件变种,并用于 JVM 实现的差别测试.本文特别提出用于修改字节码语法的classfuzz技术和修改字节码语义的classming技术.上述变种技术系统 ...