欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Salesforce的CDC是做什么的?

程序员文章站 2022-05-19 13:48:13
...

​Salesforce早于DF17的时候,就发布了Change Data Capture,业内简称CDC

01CDC是做什么的?

Change Data Capture是Lightning Platform上的流产品(streaming product),使您可以有效地将Salesforce数据与外部系统集成。简单来说,CDC 能够其主要功能是追溯和捕捉数据库级别的数据变化。

借助CDC,您可以实时接收Salesforce记录的更改,并同步外部数据存储中的相应记录。CDC能够捕获数据库级的新建,更新,删除和取消删除操作,然后发布对应的事件。简单来说,如果你只知道Trigger能够捕捉insert,update的操作,你就Out了
下面这张图很形象地描述了Salesforce 的CDC是做什么的?

Salesforce的CDC是做什么的?
那么再具体来说,CDC是怎么实现数据的同步呢?

可以看看下面的例子,当有一个对象进行更新操作时候,会更新Salesforce的数据,然后通过Change Event 发布相关事件,而同时外部服务监听此事件,从而实现外部数据库和Salesforce数据库的同步。

Salesforce的CDC是做什么的?

#实例 #

那么如何通过Apex Trigger监听数据Change Event呢?可以参考下面的例子。

假设有一个Object为Employee__c,希望在每一次新增修改时候,都能新建一个Task。传统的做法是可以通过在对象下写一个after insert 的trigger,这里我们通过CDC来实现。

首先需要在Setup里面选择所需要使用Change Data Capture的对象。

Salesforce的CDC是做什么的?

由于CDC可以捕捉数据变化,可以通过在Employee__ChangeEvent里面写一个EmployeeChangeTrigger 的Trigger。值得注意的是,可以通过changetype来识别数据是Insert还是update。而通过event.Field Name, 可以轻松获得该数据的现在值。

trigger EmployeeChangeTrigger on Employee__ChangeEvent (after insert) {
  List<Task> tasks = new List<Task>();

  // Iterate through each event message.
  for (Employee__ChangeEvent event : Trigger.New) {
    // Get some event header fields
    EventBus.ChangeEventHeader header = event.ChangeEventHeader;
    System.debug('Received change event for ' +
      header.entityName +
      ' for the ' + header.changeType + ' operation.');
    // For update operations, we can get a list of changed fields
    if (header.changetype == 'UPDATE') {
        System.debug('List of all changed fields:');
        for (String field : header.changedFields) {
            if (null == event.get(field)) {
                System.debug('Deleted field value (set to null): ' + field);
            } else {
                System.debug('Changed field value: ' + field + '. New Value: '
                    + event.get(field));
            }
        }
    }
    // Get record fields and display only if not null.
    System.debug('Some Employee record field values from the change event:');
    if (event.First_Name__c != null) {
      System.debug('First Name: ' + event.First_Name__c);
    }
    if (event.Last_Name__c != null) {
      System.debug('Last Name: ' + event.Last_Name__c);
    }
    if (event.Name != null) {
      System.debug('Name: ' + event.Name);
    }
    if (event.Tenure__c != null) {
      System.debug('Tenure: ' + event.Tenure__c);
    }
    // Create a followup task
    Task tk = new Task();
    tk.Subject = 'Follow up on employee record(s): ' +
    header.recordIds;
    tk.OwnerId = header.CommitUser;
    tasks.add(tk);
  }
  // Insert all tasks in bulk.
  if (tasks.size() > 0) {
    insert tasks;
  }
}

#其他

那么什么时候可以用CDC?这里列了一些常见的例子:

  • 如果Salesforce记录的更改需要同步外部数据存储中的相应记录。

  • 接收Salesforce记录更改的通知,包括创建,更新,删除

  • 捕获所有记录的字段更改。

  • 取消删除操作(undelete operations)。

  • 监听大量更改

最后,这里附上CDC和Platform Event之间的不同。有时候面试会遇到这些问题。

Salesforce的CDC是做什么的?

也可以参考Trailhead里面CDC的模块,链接如下:

https://trailhead.salesforce.com/en/content/learn/modules/change-data-capture

Salesforce的CDC是做什么的?

参考文献:

Change Data Capture Developer Guide : https://developer.salesforce.com/docs/atlas.en-us.change_data_capture.meta/change_data_capture/cdc_intro.htm

https://developer.salesforce.com/blogs/2018/08/what-is-change-data-capture.html

https://trailhead.salesforce.com/en/content/learn/modules/change-data-capture/understand-change-data-capture

https://developer.salesforce.com/docs/atlas.en-us.change_data_capture.meta/change_data_capture/cdc_intro.htm

Salesforce的CDC是做什么的?