Salesforce的CDC是做什么的?

​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是做什么的?


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

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

#实例 #

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

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

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

由于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之间的不同。有时候面试会遇到这些问题。

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

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

参考文献:

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考试'公众号

发布了6 篇原创文章 · 获赞 0 · 访问量 11

猜你喜欢

转载自blog.csdn.net/weixin_44035410/article/details/105448066