Streaming API参考链接:
https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming
https://resources.docs.salesforce.com/210/latest/en-us/sfdc/pdf/api_streaming.pdf
配景:事情中我们有可能会有这样相关的需求:某些数据很重要,需要实时监控是否有变革,或者某些数据在其他的平台有集成。如果有变革,不刷新页面或者做其他trigger等操纵便可以收到相关变动的推送通知(不管是salesforce平台还是其他外部处事,好比java端等,可以通过此种方法进行实时同步),报告当前的需要监控的记录已经产生了变革。这种场景往往更会呈此刻数据不止存储在salesforce端,还有其他平台有数据的存储或者访谒。这种情况下可以使用Streaming API。
一.Stream API简单介绍
Streaming API供给了两种成果,一种为基于Salesforce数据转变,对订阅的客户端进行通知推送,另一种是不基于Salesforce数据转变,对订阅的客户端进行通知推送,接下来大部分内容基于Salesforce数据转变后,对订阅的客户端进行推送,此外一种感兴趣的可以自行检察。通知推送不止可以应用于salesforce系统,其他系统等也可以通过oauth等连接后接收到通知推送,感兴趣的可以检察API供给的内容。
Streaming API用于制定一套你想要接收的数据的条件,并且指定哪些事件(create/update/delete/undelete)情况下切合的数据推送一条通知到客户端,一条通知就是事件触发的功效发送到渠道的动静。通知的格局为JSON的格局。使用Streaming API可以减少不须要的API请求。
Streaming API使用的推送技术,即处事器端会主动给订阅的客户端发送通知信息,而不是客户端去挪用处事器端返回动静,使用Bayeux协议和CometD用于长轮询。
cometd 参考链接: https://docs.cometd.org/
如果想使用Streaming API,需要enable api的权限以及streaming api的权限
想要接受通知(notifications),当前登录的user必需针对StreamingChannel表拥有read权限
想要创建和打点通知,当前登录的user必需对StreamingChannel拥有Create权限
二.Streaming API 使用法式
针对开发者来说,更存眷的是这个对象如何使用。使用Streaming API实现订阅者接收切合条件的推送动静可以三步走:
1.创建PushTopic
去除一下PushTopic神奇的面纱,简单的来说,PushTopic是一个标准的sObject,封装了以下的字段:
ApiVersion:用于指定盘问的SQL的版本,37以后系统可以存储24小时以内的事件,必填字段;
Description:PushTopic的描述信息,限定在400个字符以内;
ID:指定一笔记录的全局独一的标识;
isActive:是否可用,关系到PushTopic的限制计数(系统对PushTopic有limitation size);
IsDeleted:指定此PushTopic是否移动到回收站;
Name:PushTopic的名字,界说了渠道的名字,并且此名称必需是独一的,后期订阅者订阅时,使用的就是这个名字;
NotifyForFields:指定哪些字段被评估生成通知;
NotifyForOperations:指定数据哪种事件操纵会生成通知,在api version 29以后,此字段为只读字段;
NotifyForOperationCreate:Create操纵是否会生成通知,api29以后可用;
NotifyForOperationDelete:Delete操纵是否会生成通知,api29以后可用;
NotifyForOperationUndelete:UnDelete操纵是否会生成通知,api29以后可用;
NotifyForOperationUpdate:Update操纵是否会生成通知,api29以后可用;
Query:SOQL语句决定了哪些数据切合触发的事件后会发送到渠道。
恩,新建一个PushTopic,设置了必填字段的值insert以后,一个PushTopic就创建完了。这些字段有几个需要详细的描述一下:
Query:Query在PushTopic的感化不言而喻,界说了哪些数据可以满足条件进行推送。Query语法和SOQL基真不异,但是有一些情况不撑持。限制如下:
select字段无ID;
子连接盘问Semi-joins and anti-joins;
聚合类的盘问,好比SUM,AVG等;
COUNT;
LIMIT;
关系型盘问不撑持,只可以盘问到ID,不能通过“.”的方法盘问到父的其他信息;
盘问中包孕Text Area字段;
ORDER BY;
GROUP BY;
WHERE部分使用了formula类型字段;
NOT Example : SELECT Id FROM Account WHERE NOT Name = ‘Salesforce.com‘
OFFSET
TYPEOF
NotifyForFields:推送的message包罗一项sObject字段值的信息,会推送哪些字段值取决于NotifyForFields的赋值,NotifyForFields赋值及感化如下:
All :推送所有的字段
Referenced (default) : 推送select以及where部分字段的并集调集,如果不指定此字段值,默认值为Referenced
Select :只推送select部分的字段;
Where;只推送where部分的字段。