Community社区云

面向社区的Rich Publisher Apps -使用Apex触发器扩展可能性

学习目标

完成本单元后,您将能够:

  • 命名使用触发器与Rich Publisher Apps一起使用的用例。
  • 使用触发器构建智能的Rich Publisher App。
  • 描述Rich Publisher Apps API。

使用您的Apex触发技能

您不仅可以设置点击添加Rich Publisher Apps,还可以设置可以智能地预测成员所需信息的应用程序。例如,您的应用可以使用有用的数据或Rich Publisher App选择来回复成员帖子。成员不要单击应用程序图标。相反,Salesforce会在成员的帖子中自动包括相关的Rich Publisher App。

您可以使用针对Chatter对象的Apex触发器的功能来实现此目的。借助Apex触发器,您可以在更改Salesforce记录(如插入,更新或删除)之前或之后设置自定义操作。您可以添加一个插入后 FeedItem触发以收听成员帖子的内容并智能地插入Rich Publisher App。例如,您还可以添加触发器,以响应对其他对象(如评论或答案)的更改来更新应用程序。

让我们看一个 插入后 触发行动。

梦幻之梦

想象一下,您在Dreamforce上,并且正在寻找一些很棒的课程。在社区中输入问题作为您的问题,Looking for some DF sessions. 然后Looking for some cool DF sessions使用#标签添加详细信息#lookingForSessions。

Chatter发布者中的详细问题和主题

您单击“ 询问”,发布者将在发布的帖子中自动包含一个Rich Publisher App(Dreamforce校园地图)。

通过插入后触发器将Google Map附加到帖子

我们在这里做了什么?要获得此结果,您需要创建两件事。

  • Rich Publisher App,用于根据某些上下文将地图附加到提要项
  • 自动插入应用程序的触发器

梦想地图

首先,创建与第2单元中的支持案例应用类似的Rich Publisher App,但是这次使用Google Maps API。

用户无需点击图标,而是通过在Feed中输入特定主题来触发我们的地图应用。但是Rich Publisher App平台需要一个图标,那么您该怎么办?在这种情况下,您可以为该图标添加空白图像和一个空白的合成组件。

或者,您可以创建常规的点击添加应用并添加 插入后 触发附加体验。

这是为…编写基本触发器的一种方法 FeedItem。

trigger dreamforceMapInsertion on FeedItem (after insert) {
  // This is where we look for content in the post or topics. Based on our result, we can insert
  // a Rich Publisher App. Alternatively, we can continue adding a Rich Publisher App for each
  // post without the filtering. 
    
  // Get FeedItem Id & the body.
  String id = null;
  String body = “”;
  for(FeedItem f : Trigger.new) {
       id = f.id;
       body = f.body;
      }
  }
    
  if (id == null && !f.body.contains('#lookingForSessions’)) {
      return;
  }
  String communityId = Network.getNetworkId();
  String feedElementId = id;
  ConnectApi.FeedEntityIsEditable isEditable = 
    ConnectApi.ChatterFeeds.isFeedElementEditableByMe(communityId, feedElementId);
  
  // Make sure the post is user-editable before inserting the Rich Publisher App.
  if (isEditable.isEditableByMe == true) {

        // This is the setup for Rich Publisher App insertion. 
        ConnectApi.FeedItemInput feedItemInput = new ConnectApi.FeedItemInput();
        ConnectApi.FeedElementCapabilitiesInput feedElementCapabilitiesInput = 
          new ConnectApi.FeedElementCapabilitiesInput();
        feedItemInput.capabilities = feedElementCapabilitiesInput;
        feedItemInput.capabilities.extensions = new ConnectApi.ExtensionsCapabilityInput();
        feedItemInput.capabilities.extensions.itemsToAdd = new List<ConnectApi.ExtensionInput>();
        ConnectApi.ExtensionInput ext = new ConnectApi.ExtensionInput();
        
        // This is the id for your Rich Publisher App.     
        ext.extensionId = '<Insert your extensionId>'; // This would be something you get from 
          //Workbench which is the id for extension entity for example ‘0MYB00000001234567’
        
        // This is the payload associated with this instance of the app.
        ext.payload = '<Insert your payload>'; // This would be your JSON blob for example: 
          //‘{\”feedItemId\":\"'+id+’\”}’
        
        // This can change if you want to use multiple payload versions with different versions of
        // your app. Or you can just use 1 version. This is Optional.                	
        ext.payloadVersion = '<Insert your payloadVersion>'; // This can be anything like ‘1.0’

        // The following fields add metadata to your Rich Publisher App.
        // This is similar to our actions in Unit 2 when we added metadata to the lightning event.
	 alt.textRepresentation = '<Insert your text representation here>'; 
	 ConnectApi.AlternativeInput alt = new ConnectApi.AlternativeInput();
        ext.alternativeRepresentation = alt;
        
        // Add a Rich Publisher App to FeedItem capabilities.
        // Here you can add multiple Rich Publisher App instances in the itemsToAdd Array.
        feedItemInput.capabilities.extensions.itemsToAdd.add(ext);
    
        // Finally, edit the FeedItem to insert the Rich Publisher App.
        ConnectApi.FeedElement editedFeedElement = 
          ConnectApi.ChatterFeeds.updateFeedElement(communityId, feedElementId, feedItemInput);
  } 
}

在我们的代码示例中,我们介绍了许多有关如何编写 插入后 FeedItem 触发器以及如何使用Rich Publisher Apps API。

要将Rich Publisher App实例添加到您的供稿项,平台会编辑 FeedItem 在它创建之后 插入后触发。然后,它将Rich Publisher App实例作为FeedItem触发器中的表示形式。您可以在进行编辑之前进行过滤,以确定是否要进行插入。

在我们的示例中,触发器#lookingForSessions在提要主体中寻找主题。然后,它传递有效负载以向Rich Publisher App提供上下文。通过上下文,Rich Publisher App知道要显示Dreamforce校园的地图。您可以做各种事情来从帖子正文或其附件中获取上下文。有了上下文时,可以将其作为有效负载传递给Rich Publisher App,以便它可以呈现某些内容作为响应。您还可以向第三方服务提出请求。例如,您可以请求访问机器学习资源或其他智能API。这些代理可以在您的Rich Publisher Apps中提供智能响应。

颤振扩展

在我们的公共API中,Rich Publisher Apps API被称为 ChatterExtension。您只能通过Workbench使用SOAP API创建Chatter扩展。但是您可以使用Chatter Extensions Connect API (或Apex中的ConnectAPI)来获取它。创建Rich Publisher App时,基本上是ChatterExtension对象,如我们在单元2,第3步中介绍的那样。Salesforce将Rich Publisher Apps作为Feed的附件插入,类似于附加文件。这就是为什么您使用 扩展功能输入(或 Apex中的ConnectAPI)插入带有提要项的Rich Publisher实例的原因。

让我们回到我们的例子。有人看到您的问题,然后回复How to build Rich Publisher Apps at Moscone North。

更新的Google Map

即时,地图在Moscone North位置上用图钉更新。

另一个答案建议在洲际酒店举行会议。地图再次更新,这一次是在酒店位置使用图钉。

更新的Google Map

在这里,连同 FeedItem 触发,我们有一个 FeedComment触发正在监听评论。成员插入评论后,您的应用程序会将评论的内容主体与Dreamforce会话列表进行匹配。然后触发器编辑FeedItem 用上面提到的位置上的引脚更新有效负载。或者,您可以让Rich Publisher App收听外部第三方服务以获取要固定的位置列表。在这种情况下,FeedComment 触发器可以更新该第三方服务,而无需编辑 FeedItem。这样,您可以获得在地图上更新图钉的动态体验。

你可能也会喜欢...