本主题介绍用于使用公共 Connect 的类和方法 Apex 功能。
也可以直接转到 ConnectApi 命名空间参考内容。
- 使用操作链接 操作链接
是源元素上的按钮。单击操作链接可以将用户带到网页、启动文件下载或调用对 Salesforce 或外部服务器的 API 调用。操作链接包括 URL 和 HTTP 方法,并且可以包含请求正文和标头信息,例如用于身份验证的 OAuth 令牌。使用操作链接将 Salesforce 和第三方服务集成到源中,以便用户可以提高工作效率并加速创新。 - 使用摘要和摘要元素
Chatter 摘要是摘要元素的容器。抽象类是类的父类,表示源帖子,类表示源中的捆绑包和建议。ConnectApi.FeedElementConnectApi.FeedItemConnectApi.GenericFeedElement - 在 Experience Cloud 站点中访问 ConnectApi 数据 许多方法在单个 Experience Cloud 站点
的上下文中工作。ConnectApi - 可供 Experience Cloud 访客用户
使用的方法 如果您的 Experience Cloud 站点允许在不登录的情况下进行访问,则访客用户可以访问许多 Apex 方法。这些方法返回来宾用户有权访问的信息。 - DBT 段支持的验证 创建或更新段
时,ConnectApi.CdpSegmentInput 类需要接受一些 SQL 验证。
使用操作链接
操作链接是源元素上的按钮。单击操作链接可以将用户 到网页,启动文件下载,或调用对 Salesforce 或外部的 API 调用 服务器。操作链接包括 URL 和 HTTP 方法,并且可以包含请求正文和 标头信息,例如用于身份验证的 OAuth 令牌。使用操作链接进行集成 将 Salesforce 和第三方服务添加到源中,以便用户可以提高生产力和 加速创新。
工作流程
此源项包含一个操作链接组,其中包含一个 可见操作链接,加入。

使用 Feed 元素创建和发布操作链接的工作流:
- (可选)创建操作链接 模板。
- 调用 ConnectApi.ActionLinks.createActionLinkGroupDefinition(communityId, actionLinkGroup) 来定义一个操作链接组,该操作链接组至少包含 一个操作链接。
- 调用 ConnectApi.ChatterFeeds.postFeedElement(communityId, feedElement) 以 发布 Feed 元素并将操作链接与其关联。
使用这些方法处理操作链接。
ConnectApi 方法 | 任务 |
---|---|
ActionLinks.createActionLinkGroupDefinition(communityId, actionLinkGroup)ActionLinks.deleteActionLinkGroupDefinition(communityId, actionLinkGroupId)ActionLinks.getActionLinkGroupDefinition(communityId, actionLinkGroupId) | 创建操作链接组定义。将操作链接组与 源元素,首先创建操作链接组定义。然后发布提要 元素。 |
ChatterFeeds.postFeedElement(communityId, feedElement) | 发布具有关联操作功能的源元素。关联多达 10 个 带有 Feed 元素的操作链接组。 |
ActionLinks.getActionLink(communityId, actionLinkId) | 获取有关操作链接的信息,包括上下文的状态 用户。 |
ActionLinks.getActionLinkGroup(communityId, actionLinkGroupId) | 获取有关操作链接组的信息,包括上下文的状态 用户。 |
ActionLinks.getActionLinkDiagnosticInfo(communityId, actionLinkId) | 获取执行操作链接时返回的诊断信息。诊断 仅向可以访问操作链接的用户提供信息。 |
ChatterFeeds.getFeedElementsFromFeed() | 从指定的源类型获取源元素。如果 Feed 元素具有操作 链接,则操作链接数据将返回到 Feed 元素的 关联的操作功能。 |
- 操作链接概述、身份验证和安全性
了解 Apex 操作链接安全性、身份验证、标签和错误。 - 操作链接用例
使用操作链接将 Salesforce 和第三方服务与源集成。操作链接可以向 Salesforce 或第三方 API 发出 HTTP 请求。操作链接还可以下载文件或打开网页。本主题包含一个示例用例。
操作链接概述、身份验证和安全性
了解 Apex 操作链接安全性、身份验证、标签和错误。
工作流程
此源项包含一个操作链接组 带有一个可见的操作链接,即加入。

使用 Feed 元素创建和发布操作链接的工作流:
- (可选)创建操作链接 模板。
- 调用 ConnectApi.ActionLinks.createActionLinkGroupDefinition(communityId, actionLinkGroup) 来定义一个操作链接组,该操作链接组至少包含 一个操作链接。
- 调用 ConnectApi.ChatterFeeds.postFeedElement(communityId, feedElement) 以 发布 Feed 元素并将操作链接与其关联。
操作链接模板
在安装程序中创建操作链接模板,以实例化具有通用的操作链接组 性能。您可以打包模板并将其分发给其他 Salesforce 组织。
在模板中指定绑定变量,并在以下情况下设置变量的值 实例化操作链接组。例如,对 API 版本使用绑定变量 number、用户 ID 或 OAuth 令牌。
您还可以在模板中指定上下文变量。当用户执行操作时 link,Salesforce 为这些变量提供值,例如谁执行了链接和 哪个组织。
若要实例化操作链接组,请调用 ConnectApi.ActionLinks.createActionLinkGroupDefinition(communityId, actionLinkGroup) 方法。指定模板 ID 和任何值 模板中定义的绑定变量。
请参阅设计操作链接模板。
操作链接的类型
定义操作链接时,在属性中指定操作链接类型。actionType
有四种类型的操作链接:
- Api– 操作链接调用同步 操作 URL 中的 API。Salesforce 将状态设置为或基于您返回的 HTTP 状态代码 服务器。SuccessfulStatusFailedStatus
- ApiAsync– 操作链接调用 异步 API 位于操作 URL。该操作将保持该状态,直到第三方做出 请求将 异步操作的状态或异步操作为 完成。PendingStatus/connect/action-links/actionLinkIdSuccessfulStatusFailedStatus
- Download– 操作链接下载文件 从操作 URL。
- Ui– 操作链接将用户带到 操作 URL 中的网页。
认证
定义操作链接时,请指定 URL () 和 HTTP 标头 () 需要向该 URL 发出请求。actionUrlheaders
如果外部资源需要身份验证,请在 资源需要。
如果 Salesforce 资源需要身份验证,您可以在 HTTP 标头,或者可以在 URL 中包含持有者令牌。
Salesforce 会自动对这些资源进行身份验证。
- 模板中的相对 URL
- 从 Apex 实例化操作链接组时开始的相对 URL/services/apexrest
请勿将这些资源用于敏感操作。
安全
HTTPS协议操作链接中的操作 URL 必须以 https:// 开头,或者是 与上一“身份验证”部分中的规则之一匹配的相对 URL。加密API 详细信息以加密方式存储,并为客户端进行模糊处理。的 、 和 数据 未从模板实例化的操作链接使用 组织的加密密钥。操作 URL、HTTP 标头和操作链接的 HTTP 请求正文 模板未加密。实例化操作链接时使用的绑定值 模板中的组使用组织的加密密钥进行加密。actionURLheadersrequestBody操作链接模板只有具有“自定义应用程序”用户权限的用户才能创建、编辑、删除和 安装程序中的包操作链接模板。不要在模板中存储敏感信息。使用绑定变量添加敏感变量 实例化操作链接组时的信息。操作链接组是 实例化后,值以加密格式存储。请参阅定义绑定变量 in 设计 操作链接模板。连接的应用程序通过连接的应用程序创建操作链接时,最好使用 使用使用者密钥连接的应用 这永远不会离开你的控制。连接的应用程序用于 服务器到服务器通信,并且不会编译到可能 反编译。有效期定义操作链接组时,请指定到期日期 ()。在该日期之后,操作链接在 组无法执行并从源中消失。如果操作链接组 定义包括一个 OAuth 令牌,将组的到期日期设置为与 OAuth 令牌的到期日期。expirationDate操作链接模板使用略有不同的机制来排除用户。请参阅设置 设计中的操作链接组过期时间 操作链接模板。排除用户或指定用户使用操作链接的属性 定义输入,以排除单个用户执行操作。excludeUserId使用操作链接的属性 定义输入,用于指定只有该用户才能执行操作的用户的 ID。如果你 不要指定属性,或者如果传递,则任何用户都可以执行该操作。你不能 为操作链接指定 和userIduserIdnullexcludeUserIduserId操作链接模板使用略有不同的机制来排除用户。请参阅设置 谁可以看到设计中的操作链接 操作链接模板。读取、修改或删除操作链接组定义操作链接和 操作链接组:定义和上下文用户的视图。定义 包括潜在的敏感信息,例如身份验证信息。这 上下文用户的视图按可见性选项进行筛选,这些值反映 上下文用户的状态。操作链接组定义可以包含敏感信息(例如 OAuth 令牌)。因此,要读取、修改或删除定义,用户必须具有 创建了定义或具有“查看所有数据”权限。此外,在 Connect REST 中 API,则必须通过创建定义的同一连接应用发出请求。在 Apex,则必须从创建定义的同一命名空间进行调用。
上下文变量
使用上下文变量传递有关 执行操作链接的用户以及调用该链接的上下文 通过调用操作链接发出的 HTTP 请求。您可以在操作链接定义输入请求正文或对象的 、 和 属性中使用上下文变量。你 还可以在操作链接模板的“操作 URL”、“HTTP 请求正文”和“HTTP 标头”字段中使用上下文变量。您可以编辑这些字段,包括添加和 在发布模板后删除上下文变量。actionUrlheadersrequestBodyConnectApi.ActionLinkDefinitionInput
上下文变量包括:
上下文变量 | 描述 |
---|---|
{!actionLinkId} | 用户执行的操作链接的 ID。 |
{!actionLinkGroupId} | 包含用户操作链接的操作链接组的 ID 执行。 |
{!communityId} | 用户在其中执行操作链接的站点的 ID。的值 您的内部组织是空键。“000000000000000000” |
{!communityUrl} | 用户在其中执行操作链接的网站的 URL。的值 您的内部组织是空字符串。“” |
{!orgId} | 用户在其中执行操作链接的组织 ID。 |
{!userId} | 执行操作链接的用户的 ID。 |
版本控制
为避免由于 API 中的升级或功能更改而导致的问题,我们建议使用 定义操作链接时的版本控制。例如,ConnectApi.ActionLinkDefinitionInput中的属性类似于 https://www.example.com/api/v1/exampleResource。actionUrl
可以使用模板更改 、 或 属性的值,即使在分发模板之后也是如此 在包中。假设您发布了需要新输入的新 API 版本。管理员可以 更改安装程序中操作链接模板中的输入,甚至更改操作链接 与源元素关联,使用新输入。但是,不能添加新绑定 变量添加到已发布的操作链接模板。actionUrlheadersrequestBody
如果 API 未进行版本控制,则可以使用 ConnectApi.ActionLinkGroupDefinitionInput 的属性来避免由于以下原因导致的问题 升级或更改 API 中的功能。请参阅设置操作链接组过期 设计操作中的时间 链接模板。expirationDate
错误
使用操作链接诊断信息方法 (ConnectApi.ActionLinks.getActionLinkDiagnosticInfo(communityId, actionLinkId)) 返回执行操作链接时的状态代码和错误。诊断信息仅提供给以下用户 可以访问操作链接。Api
本地化标签
操作链接使用在 ConnectApi.ActionLinkDefinitionInput 请求正文的属性和操作链接模板的 Label 字段中指定的一组预定义的本地化标签。labelKey
有关标签的列表,请参阅操作链接标签。
注意
如果标签键值对操作链接没有意义,请指定自定义标签 在操作链接模板的“标签”字段中,将“标签”设置为“标签” 键到无。但是,自定义标签未本地化。
操作链接用例
使用操作链接将 Salesforce 和第三方服务与源集成。一 操作链接可以向 Salesforce 或第三方 API 发出 HTTP 请求。操作链接还可以 下载文件或打开网页。本主题包含一个示例用例。
从源开始视频聊天
假设您在一家拥有 Salesforce 组织的公司担任 Salesforce 开发人员,并且 一家名为“VideoChat”的虚构公司的帐户。用户一直在说他们想要 通过移动设备执行更多操作。系统会要求你创建一个应用,让用户创建和 直接从他们的移动设备加入视频聊天。当用户在 Salesforce 中打开 VideoChat 应用程序时,系统会要求他们为视频聊天命名 聊天室,并邀请组或个人用户加入视频聊天室。当用户 单击确定,VideoChat 应用程序启动视频聊天室并发布 将项目提要给选定的组或用户,要求他们加入视频 通过单击标记为“加入”的操作链接进行聊天。当 被邀请者单击“加入”,操作链接将打开一个包含 视频聊天室。

作为考虑如何创建操作链接 URL 的开发人员,您会想到这些 要求:
- 当用户单击“加入”时,操作链接 URL 必须打开 他们被邀请到视频聊天室。
- 操作链接 URL 必须告诉视频聊天室谁正在加入。
若要动态创建操作链接 URL,请在 设置。
对于第一个要求,在“操作 URL 模板”字段中创建一个绑定变量。当用户单击“确定”以创建视频聊天时 room,您的 Apex 代码会生成一个唯一的房间 ID。Apex 代码使用该唯一房间 ID 作为 绑定变量值,当它实例化操作链接组时,将其与 源项,并发布源项。{!Bindings.roomId}
对于第二个要求,操作链接必须包含用户 ID。 操作链接支持 一组预定义的上下文变量。调用操作链接时,Salesforce 将变量替换为值。上下文变量包括有关人员的信息 单击操作链接以及在什么上下文中调用该链接。您决定在操作中包含上下文变量 URL,以便当用户单击源中的操作链接时,Salesforce 替换用户的 ID,视频聊天室知道谁在进入。{!userId}
这是“加入”操作链接的操作链接模板。

每个操作链接都必须与一个操作链接组相关联。该组定义 与其关联的所有操作链接共享的属性。即使您使用的是单个 操作链接(如本示例所示),它必须与组相关联。第一个字段 操作链接模板是操作链接组模板,在本例中为 是视频聊天,这是动作链接组模板的动作 链接模板与。

使用源和源元素
Chatter 摘要是摘要元素的容器。摘要 class 是 的父类 表示源的类 帖子和班级, 表示 Feed 中的捆绑包和建议。ConnectApi.FeedElementConnectApi.FeedItemConnectApi.GenericFeedElement
注意
Salesforce 帮助将源项目称为帖子,将捆绑包称为捆绑帖子。
能力
作为使饲料多样化的努力的一部分,饲料中的一些功能 元素已分解为功能。功能提供一致的方式 与源进行交互。请勿检查源元素类型以确定哪个 功能可用于 Feed 元素。检查功能,它会告诉你 明确说明什么是可用的。检查是否存在某种功能,以确定 客户端可以对 Feed 元素执行操作。
ConnectApi.FeedElement.capabilities 属性包含一组 能力。
功能既包括指示功能是可能的,也包括关联的数据 具有该功能。如果源元素上存在功能属性,则该功能为 可用,即使尚无与该功能关联的任何数据。例如 如果 capability 属性存在 在源元素上,上下文用户可以喜欢该源元素。如果能力 属性在 Feed 元素上不存在,因此不可能喜欢该 Feed 元素。chatterLikes
发布源元素时,请在 ConnectApi.FeedElementInput.capabilities 属性中指定其特征。
Salesforce UI 如何显示源项
客户端可以使用该属性 以确定它可以对 Feed 元素执行哪些操作以及如何呈现 Feed 元素。为 除 之外的所有源元素子类,客户端不必知道子类类型。 相反,客户端可以查看功能。源项确实具有功能,但 它们也有一些属性,例如 , 这些功能未公开为功能。因此,客户端必须处理 Feed 项 与其他 Feed 元素略有不同。ConnectApi.FeedElement.capabilitiesConnectApi.FeedItemactor
Salesforce UI 使用一种布局来 显示每个 Feed 项。这种单一布局为客户提供了一致的 Feed 视图 项目,并为开发人员提供了一种创建 UI 的简单方法。布局始终包含相同的 碎片和碎片始终处于同一位置。仅布局的内容 件数变化。

源项 (ConnectApi.FeedItem) 布局元素包括:
- 执行组件 ()- A 源项创建者的照片或图标。(您可以在 Feed 商品类型级别。例如,仪表板快照源项类型显示 仪表板作为创建者。ConnectApi.FeedItem.actor
- 标头 () – 源项的上下文。一样 Feed 项可以具有不同的标题,具体取决于发布者及其位置 张贴。例如,Ted 将此源项发布到一个组。ConnectApi.FeedElement.header时间戳 () – 日期和时间 Feed 项的发布时间。如果源项的存续时间少于两天,则 日期和时间的格式为相对的本地化字符串,例如“17M 前”。否则,日期和时间的格式将设置为绝对的本地化 字符串。ConnectApi.FeedElement.relativeCreatedDate
- 正文 () – 所有源项都有一个正文。正文 可以是 ,这是当用户 不为源项提供文本。因为 body 可以是 ,所以不能将其用作默认情况 用于呈现文本。请改用该属性,该属性始终包含 价值。ConnectApi.FeedElement.bodynullnullConnectApi.FeedElement.header.text
- 辅助主体 () – 可视化 能力。请参阅功能。ConnectApi.FeedElement.capabilities
Salesforce 如何显示源项以外的源元素
一个 客户端可以使用该属性来确定它可以执行的操作 替换为 Feed 元素以及如何呈现 Feed 元素。本部分使用捆绑包作为 如何呈现源元素的示例,但这些属性可用于每个 feed 元素。通过这些功能,您可以处理源中的所有内容 一贯。ConnectApi.FeedElement.capabilities
注意
捆绑的帖子包含源跟踪的更改,并记录在案 仅限 Feed。
为了给客户提供干净、有条理的提要,Salesforce 聚合了 将 Feed 跟踪的更改整合到捆绑包中。要查看各个 Feed 元素,请点击 捆。

丛是具有 的对象(它是 的具体子类)。捆绑包布局 元素包括:ConnectApi.GenericFeedElementConnectApi.FeedElementConenctApi.BundleCapability
- 标头 () – 对于源跟踪的更改捆绑包,此 文本为“更新此记录”。ConnectApi.FeedElement.headerUser Name
- 时间戳 () – 日期和时间 Feed 项的发布时间。如果 Feed 项的发布时间不足 2 天,则日期 和 time 的格式为相对的本地化字符串,例如“17m 前”。否则,日期和时间的格式将设置为绝对的本地化 字符串。ConnectApi.FeedElement.relativeCreatedDate
- 辅助主体 () – 束 显示 和 和 属性,用于 捆。如果 Feed 跟踪的更改超过两个,则捆绑包会显示 “显示所有更新”链接。ConnectApi.FeedElement.capabilities.bundle.changesfieldNameoldValuenewValue
Feed 元素可见性
用户看到的 Feed 元素取决于管理员配置 Feed 的方式 跟踪、共享规则和字段级安全性。例如,如果用户不这样做 有权访问记录,但他们看不到该记录的更新。如果用户可以 查看 Feed 元素的父元素,用户可以看到 Feed 元素。通常,用户 查看以下各项的 Feed 更新:
- @mention用户的源元素(如果用户可以访问 Feed) 元素的父元素)
- @mention用户所属组的 Feed 元素
- 其父级记录是用户可以查看的记录的记录上的记录字段更改,包括 用户、组和文件记录
- 发布给用户的 Feed 元素
- 发布到用户所属或所属群组的 Feed 元素
- 标准记录和自定义记录的源元素,例如任务、事件、潜在顾客、 帐户、文件
饲料类型
Feed 有很多种类型。每种 Feed 类型都定义了 Feed 元素的集合。
重要
Feed 元素的集合可能会在版本之间更改。除收藏夹之外的所有源类型都在枚举中公开,并传递给其中一个方法。此示例从上下文用户的新闻源中获取源元素 和主题 饲料。
ConnectApi.FeedTypeConnectApi.ChatterFeeds.getFeedElementsFromFeed
ConnectApi.FeedElementPage newsFeedElementPage =
ConnectApi.ChatterFeeds.getFeedElementsFromFeed(null,
ConnectApi.FeedType.News, 'me');
ConnectApi.FeedElementPage topicsFeedElementPage =
ConnectApi.ChatterFeeds.getFeedElementsFromFeed(null,
ConnectApi.FeedType.Topics, '0TOD00000000cld');
若要获取筛选器源,请调用其中一个方法。要获取 收藏夹源,请调用其中一个方法。ConnectApi.ChatterFeeds.getFeedElementsFromFilterFeedConnectApi.ChatterFavorites.getFeedElements
Feed 类型及其说明如下:
- Bookmarks—包含保存为书签的所有源项 上下文用户。
- Company—包含除 类型的 Feed 项之外的所有 Feed 项。要查看 Feed 项,请执行以下操作: 用户必须具有对其父级的共享访问权限。TrackedChange
- DirectMessageModeration—包含标记为 适度。私信审核源仅适用于具有以下条件的用户 审核体验 Chatter 消息权限。
- DirectMessages—包含上下文的所有源项 用户的直接消息。
- Draft– 包含所有源项 上下文用户起草的。
- Files—包含包含已发布文件的所有源项 按上下文用户关注的人员或组。
- Filter– 包含新闻源 筛选以包含其父级为指定对象类型的源项。
- Groups—包含来自所有组的所有源项 上下文用户拥有或属于其成员。
- Home– 包含所有源项 与 Experience Cloud 站点中的任何托管主题相关联。
- Landing—包含 在请求 Feed 时最能提高用户参与度的所有 Feed 项。允许 客户端,以避免在个性化源不多时出现空源 项目。
- Moderation—包含标记为要审核的所有 Feed 项, 除了直接消息。审核源仅适用于 “审核体验源”权限。
- Mute– 包含所有 上下文用户静音的源项。
- News—包含上下文用户人员的所有更新 关注用户所属的组,并记录用户所属的组 以后。包含其父级为上下文的记录的所有更新 用户。
- PendingReview—包含所有 Feed 项和注释 正在等待审查。
- People—包含所有人发布的所有提要项 上下文用户关注。
- Record—包含其父级为 指定的记录,可以是组、用户、对象、文件或任何其他 标准或自定义对象。当记录为组时,源还包含源 提及该组的项目。当记录是用户时,源仅包含 该用户的源项目。您可以获取其他用户的记录 Feed。
- Streams—包含最多 25 个启用源的实体的任意组合的所有源项 上下文用户在流中订阅的。启用 Feed 的实体示例 包括人员、组和记录,
- To—包含提及上下文用户的所有源项。包含源项 上下文用户注释的 Context 用户和 Feed 项目由 Context 用户创建,这些项目是 评论。
- Topics—包含包含指定 主题。
- UserProfile– 包含源项 在用户更改可在源中跟踪的记录时创建。包含饲料 父级为用户的项目和@mention用户的源项目。此提要是 与新闻源不同,后者返回更多源项,包括组更新。 您可以获取其他用户的用户个人资料 Feed。
- Favorites– 包含保存者 上下文用户。收藏夹包括源搜索、列表视图和主题。
使用 postFeedElement 发布源项
提示
方法有 发布提要项目的最简单、最有效的方法,因为与这些方法不同,它们不需要您 传递源类型。Feed 项是您可以发布的唯一 Feed 元素类型。postFeedElementpostFeedItem
使用这些方法发布源项。postFeedElement(communityId, subjectId, feedElementType, text)发布纯文本 Feed 元素。postFeedElement(communityId, feedElement, feedElementFileUpload)(版本 35.0 及更早版本)发布富文本 Feed 元素。包括提及和主题标签主题,附加文件 添加到源元素,并将操作链接组与源元素相关联。您可以 还可以使用此方法共享 Feed 元素并添加注释。postFeedElement(communityId, feedElement) (版本 36.0 和 稍后)发布富文本 Feed 元素。包括提及和主题标签主题,附上 已将文件上传到 Feed 元素,并将操作链接组与 feed 元素。您还可以使用此方法共享 Feed 元素并添加 评论。
发布源项时,将创建标准对象或自定义对象的子对象。指定 参数中的父对象或在参数中传递的对象的属性中的父对象。这 该参数的值决定了在其中显示源项的源。返回对象中的属性包含以下信息 父对象。subjectIdsubjectIdConnectApi.FeedElementInputfeedElementsubjectIdparentConnectApi.FeedItem
使用这些方法可以完成这些任务。发给自己此代码将源项发布到上下文用户。指定 ,这是上下文的别名 用户的 ID。它还可以指定上下文用户的 同上。subjectIdme
ConnectApi.FeedElement feedElement = ConnectApi.ChatterFeeds.postFeedElement(null, 'me', ConnectApi.FeedElementType.FeedItem, 'Working from home today.');
新发布的属性 源项包含上下文用户的parentConnectApi.UserSummary发布给其他用户此代码将源项发布到上下文用户以外的用户。指定用户 目标的 ID 用户。subjectId
ConnectApi.FeedElement feedElement = ConnectApi.ChatterFeeds.postFeedElement(null, '005D00000016Qxp', ConnectApi.FeedElementType.FeedItem, 'Kevin, do you have information about the new categories?');
新发布的属性 源项包含目标用户的parentConnectApi.UserSummary发帖到小组此代码将源项发布到组。指定组 同上。subjectId
ConnectApi.FeedItemInput feedItemInput = new ConnectApi.FeedItemInput();
ConnectApi.MentionSegmentInput mentionSegmentInput = new ConnectApi.MentionSegmentInput();
ConnectApi.MessageBodyInput messageBodyInput = new ConnectApi.MessageBodyInput();
ConnectApi.TextSegmentInput textSegmentInput = new ConnectApi.TextSegmentInput();
messageBodyInput.messageSegments = new List<ConnectApi.MessageSegmentInput>();
mentionSegmentInput.id = '005RR000000Dme9';
messageBodyInput.messageSegments.add(mentionSegmentInput);
textSegmentInput.text = 'Could you take a look?';
messageBodyInput.messageSegments.add(textSegmentInput);
feedItemInput.body = messageBodyInput;
feedItemInput.feedElementType = ConnectApi.FeedElementType.FeedItem;
feedItemInput.subjectId = '0F9RR0000004CPw';
ConnectApi.FeedElement feedElement = ConnectApi.ChatterFeeds.postFeedElement(Network.getNetworkId(), feedItemInput);
新发布的属性 Feed 项包含指定组的 。parentConnectApi.ChatterGroupSummary发布到记录(如文件或帐户)此代码将源项发布到记录并提及组。指定 记录 同上。subjectId
ConnectApi.FeedItemInput feedItemInput = new ConnectApi.FeedItemInput();
ConnectApi.MentionSegmentInput mentionSegmentInput = new ConnectApi.MentionSegmentInput();
ConnectApi.MessageBodyInput messageBodyInput = new ConnectApi.MessageBodyInput();
ConnectApi.TextSegmentInput textSegmentInput = new ConnectApi.TextSegmentInput();
messageBodyInput.messageSegments = new List<ConnectApi.MessageSegmentInput>();
textSegmentInput.text = 'Does anyone know anyone with contacts here?';
messageBodyInput.messageSegments.add(textSegmentInput);
// Mention a group.
mentionSegmentInput.id = '0F9D00000000oOT';
messageBodyInput.messageSegments.add(mentionSegmentInput);
feedItemInput.body = messageBodyInput;
feedItemInput.feedElementType = ConnectApi.FeedElementType.FeedItem;
// Use a record ID for the subject ID.
feedItemInput.subjectId = '001D000000JVwL9';
ConnectApi.FeedElement feedElement = ConnectApi.ChatterFeeds.postFeedElement(null, feedItemInput);
新源项的属性 取决于 中指定的记录类型。如果记录类型为 File,则 父级是 。如果 记录类型为 Group,父类型为 。如果记录类型为 User,则 父级是 。对于所有人 其他记录类型,如本使用 Account 的示例中所示,父记录类型为 。parentsubjectIdConnectApi.FileSummaryConnectApi.ChatterGroupSummaryConnectApi.UserSummaryConnectApi.RecordSummary
从 Feed 中获取 Feed 元素
提示
若要返回包含源元素的源,请调用这些方法。饲料 元素类型包括 Feed Item、Bundle 和 Recommendation。
对于每种 Feed 类型,从 Feed 中获取 Feed 项的方式相似,但不完全相同。从 、 、 、 和 源中获取源元素CompanyDirectMessageModerationDirectMessagesHomeModerationPendingReview若要从这些源中获取源元素,请使用这些不需要 .subjectId
- getFeedElementsFromFeed(communityId, feedType)
- getFeedElementsFromFeed(communityId, feedType, pageParam, pageSize, sortParam)
- getFeedElementsFromFeed(communityId, feedType, recentCommentCount, density, pageParam, pageSize, sortParam)
- getFeedElementsFromFeed(communityId, feedType, recentCommentCount, density, pageParam, pageSize, sortParam, filter)
- getFeedElementsFromFeed(communityId, feedType, recentCommentCount, density, pageParam, pageSize, sortParam, filter, threadedCommentsCollapsed)
从源中获取源元素Favorites若要从收藏夹源中获取源元素,请指定 .对于这些 Feed,必须 上下文用户的 ID 或别名。favoriteIdsubjectIdme
- getFeedElements(communityId, subjectId, favoriteId)
- getFeedElements(communityId, subjectId, favoriteId, pageParam, pageSize, sortParam)
- getFeedElements(communityId, subjectId, favoriteId, recentCommentCount, elementsPerBundle, pageParam, pageSize, sortParam)
从源中获取源元素Filter若要从筛选器源中获取源元素,请指定 .指示对象 type 和 是对象 ID 的前三个字符。必须是 上下文用户或别名 。keyPrefixkeyPrefixsubjectIdme
- getFeedElementsFromFilterFeed(communityId, subjectId, keyPrefix)
- getFeedElementsFromFilterFeed(communityId, subjectId, keyPrefix, pageParam, pageSize, sortParam)
- getFeedElementsFromFilterFeed(communityId, subjectId, keyPrefix, recentCommentCount, elementsPerBundle, density, pageParam, pageSize, sortParam)
从 、 、 、 、 、 、 和 源 中获取源元素BookmarksFilesGroupsMuteNewsPeopleRecordStreamsToTopicsUserProfile要从这些 Feed 类型中获取 Feed 元素,请指定主题 ID。如果是,则可以是任何记录 ID,包括组 ID。如果是,则必须是流 ID。如果是,则必须是主题 ID。如果是,则可以是任何用户 ID。如果 是任何其他值,则必须是上下文用户的 ID 或别名。feedTypeRecordsubjectIdfeedTypeStreamssubjectIdfeedTypeTopicssubjectIdfeedTypeUserProfilesubjectIdfeedTypesubjectIdme
- getFeedElementsFromFeed(communityId, feedType, subjectId)
- getFeedElementsFromFeed(communityId, feedType, subjectId, pageParam, pageSize, sortParam)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, density, pageParam, pageSize, sortParam)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, density, pageParam, pageSize, sortParam, filter)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, density, pageParam, pageSize, sortParam, filter, threadedCommentsCollapsed)
从 Feed 中获取 Feed 元素Record对于 ,请指定 记录 ID。subjectId
提示
记录可以是支持源的任何类型的记录, 包括组。Salesforce UI 中组页面上的源是一条记录 饲料。
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, density, pageParam, pageSize, sortParam, showInternalOnly)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, density, pageParam, pageSize, sortParam, customFilter)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, elementsPerBundle, density, pageParam, pageSize, sortParam, showInternalOnly)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, elementsPerBundle, density, pageParam, pageSize, sortParam, showInternalOnly, filter)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, elementsPerBundle, density, pageParam, pageSize, sortParam, showInternalOnly, customFilter)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, elementsPerBundle, density, pageParam, pageSize, sortParam, showInternalOnly, filter, threadedCommentsCollapsed)
- getFeedElementsFromFeed(communityId, feedType, subjectId, recentCommentCount, elementsPerBundle, density, pageParam, pageSize, sortParam, showInternalOnly, customFilter, threadedCommentsCollapsed)
在 Experience Cloud 中访问 ConnectApi 数据 网站
许多方法在上下文中工作 单个 Experience Cloud 站点。
ConnectApi
许多方法都包含作为第一个参数。如果 您没有启用、使用或用于此目的的数字体验 论点。ConnectApicommunityIdinternalnull
如果启用了数字体验,则参数 指定是否在默认 Experience Cloud 站点的上下文中执行方法 (通过指定 或 ) 或在特定站点的上下文中 (通过 指定 ID)。其他实体引用的任何实体,例如评论或提要项 方法中的参数必须位于指定的站点中。该 ID 包含在返回的 URL 中 在输出中。communityIdinternalnull
某些方法包括作为参数。不像 ,如果你没有 启用数字体验后,您不能使用这些方法。站点 ID 包含在 URL 中 在输出中返回。ConnectApisiteIdcommunityId
输出对象中返回的大多数 URL 是 连接 REST API 资源。ConnectApi如果指定 ID,则输出中返回的 URL 将使用以下命令 格式:
/connect/communities/communityId/resource
如果 指定 ,输出中返回的 URL 使用相同的 格式:
internal
/connect/communities/internal/resource
如果指定 ,则输出中返回的 URL 使用其中之一 格式:
null
/chatter/resource
/connect/resource
可供 Experience Cloud 访客用户使用的方法
如果您的 Experience Cloud 站点允许在不登录的情况下进行访问,则访客用户有权访问 到许多 Apex 方法。这些方法返回来宾用户有权访问的信息 自。这些方法的所有重载都可供来宾用户使用。
重要
如果 此处列出的方法的重载表示 Chatter 是必需的,您还必须启用 public 访问您的 Experience Cloud 站点,使该方法可用于 来宾用户。如果未启用公共访问,则通过以下方法检索的数据 require Chatter 无法在公共站点页面上正确加载。
- Announcements方法:
- getAnnouncements()
- ChatterFeeds方法:
- getComment()
- getCommentInContext()
- getCommentsForFeedElement()
- getExtensions()
- getFeed()
- getFeedElement()
- getFeedElementBatch()
- getFeedElementPoll()
- getFeedElementsFromFeed()
- getFeedElementsUpdatedSince()
- getFeedKWithFeedElements()
- getLike()
- getLikeKsForComment()
- getLikesForFeedElement()
- getLinkMetadata()
- getPinnedFeedElementsFromFeed()
- getRelatedPosts()
- getThreadsForFeedComment()
- getVotesForComment()
- getVotesForFeedElement()
- searchFeedElements()
- searchFeedElementsInFeed()
- updatePinnedFeedElements()
- ChatterGroups方法:
- getGroup()
- getGroups()
- getMembers()
- searchGroups()
- ChatterUsers方法:
- getFollowers()
- getFollowings()
- getReputation()
- getUser()
- getUserBatch()
- getUserGroups()
- getUsers()
- searchUserGroupDetails()
- searchUsers()
- CommerceCart methods:
- addItemsToCart()
- addItemToCart()
- applyCartCoupon()
- copyCartToWishlist()
- createCart()
- deleteCart()
- deleteCartCoupon()
- deleteCartItem()
- deleteInventoryReservation() (developer preview)
- getCartCoupons()
- getCartItems()
- getCartSummary()
- getOrCreateActiveCartSummary()
- makeCartPrimary()
- setCartMessagesVisibility()
- updateCartItem()
- upsertInventoryReservation() (developer preview)
- CommerceCatalog methods:
- getProduct()
- getProductCategory()
- getProductCategoryChildren()
- getProductCategoryPath()
- getProductChildCollection()
- CommercePromotions methods:
- decreaseRedemption()
- evaluate()
- increaseRedemption()
- CommerceSearch methods:
- getSortRules()
- getSuggestions()
- searchProducts()
- CommerceStorePricing methods:
- getProductPrice()
- getProductPrices()
- Communities methods:
- getCommunity()
- EmployeeProfiles methods:
- getPhoto()
- Knowledge methods:
- getTopViewedArticlesForTopic()
- getTrendingArticles()
- getTrendingArticlesForTopic()
- ManagedContent methods:
- getAllContent()
- getAllDeliveryChannels()
- getAllManagedContent()
- getContentByContentKeys()
- getContentByIds()
- getManagedContentByContentKeys()
- getManagedContentByIds()
- getManagedContentByTopics()
- getManagedContentByTopicsAndContentKeys()
- getManagedContentByTopicsAndIds()
- ManagedContentDelivery methods:
- getCollectionItemsForChannel()
- getCollectionItemsForSite()
- getManagedContentChannel()
- getManagedContentForChannel()
- getManagedContentForSite()
- getManagedContentsForChannel()
- getManagedContentsForSite()
- ManagedTopics methods:
- getManagedTopic()
- getManagedTopics()
- MarketingIntegration methods:
- submitForm()
- NavigationMenu methods:
- getCommunityNavigationMenu()
- NextBestActions methods:
- executeStrategy()
- setRecommendationReaction()
- Personalization methods:
- getAudience()
- getAudienceBatch()
- getAudiences()
- getTarget()
- getTargetBatch()
- getTargets()
- Recommendations方法:
- getRecommendationsForUser()注意客人只能使用文章和文件推荐 用户。
- Sites方法:
- searchSite()
- Topics方法:
- getGroupsRecentlyTalkingAboutTopic()
- getRecentlyTalkingAboutTopicsForGroup()
- getRecentlyTalkingAboutTopicsForUser()
- getRelatedTopics()
- getTopic()
- getTopics()
- getTrendingTopics()
- UserProfiles方法:
- getPhoto()
DBT 段支持的验证
创建或更新区段时,ConnectApi.CdpSegmentInput 类受 一些 SQL 验证。
您可以使用带有类的 createSegment(input) 方法创建区段。同样,您可以使用具有相同输入类的 updateSegment(segmentApiName, input) 方法更新区段。 嵌套在类中的 ConnectApi.CdpSegmentDbtModelInput 输入类提供 验证 SQL。ConnectApi.CdpSegmentInputConnectApi.CdpSegmentInput
的财产受以下条款的约束 验证。sqlConnectApi.CdpSegmentDbtModelInput
- select 语句中只允许使用 SegmentOn DMO 的主键。第一张桌子 在 JOIN 子句中必须是配置文件表。
- 顶层不允许聚合(最小值、最大值、平均值、计数) 选择。
---FAIL select max(Individual_dense_viv__dlm.age__c) from Individual_dense_viv__dlm ---FAIL select count(Individual_dense_viv__dlm.individualid__c) from Individual_dense_viv__dlm ---
- 顶层不允许全选 (*) 表达式 选择。
---FAIL select * from Individual_dense_viv__dlm
- 只有 table 上段的主键(sql 的 from 子句中的第一个表 语句)被允许选择。
---PASS select Individual_dense_viv__dlm.individualid__c from Individual_dense_viv__dlm
- 无法选择多个列,即使其中一个列是 桌子。
---FAIL select Individual_dense_viv__dlm.individualid__c, Individual_dense_viv__dlm.age__c from Individual_dense_viv__dlm
- 主数据中不允许有大小写语句 选择。
---FAIL select case when Individual_dense_viv__dlm.individualid__c > 10 then Individual_dense_viv__dlm.individualid__c else null end from Individual_dense_viv__dlm
- 如果 segmentOn 实体的主键具有键限定符,则必须投影该键 限定符,以及在初选中。首先投影主键,然后投影 限定 符。分组依据还必须包含密钥 限定 符。
---PASS select Individual__dlm.id__c, Individual__dlm.fq__id__c from Individual__dlm
- 如果 segmentOn 实体的主键具有键限定符,则可以提供 加入条件中的附加条件。
---PASS select Individual__dlm.id__c from Individual__dlm left join Sales__dlm on Individual__dlm.id__c = Sales__dlm.soldToCustomerId__c and Individual__dlm.kq__id__c is not distinct from Sales__dlm.kq__soldToCustomerId__c
- 顶层不允许聚合(最小值、最大值、平均值、计数) 选择。
- 所有列都必须在查询和子选择中由 tablename 完全限定 查询。
---FAIL select individualid__c from Individual_dense_viv__dlm
- 子查询仅在 where 子句中受支持,并且只能发出一个子查询 列。
---FAIL select Individual_dense_viv__dlm.individualid__c from (select * from Individual_dense_viv__dlm)
- 比较相同数据类型的列。若要比较不同数据类型的列,请强制转换一个 或两个操作数,以便它们具有相同的 类型。
---PASS select t.id__c from Individual__dlm as t where cast(t.id__c as varchar(100)) = t1.name
- 支持限制和偏移。
---FAIL select Individual_dense_viv__dlm.individualid__c from Individual_dense_viv__dlm limit 10
- 除 select 语句以外的任何 sql 语句都不是 允许。
---FAIL update Individual_dense_viv__dlm set Individual_dense_viv__dlm.individualid__c = 'aa'
- 只有查询的 from 块中的 DMO 才支持别名。列不能是 锯齿。
---PASS select t.id__c from Individual__dlm as t
- 要加入两个 DMO,DMO 之间必须存在关系,并且必须使用 它们在 join on 条件中的相关 join 键。join on 条件只能包含一个 连接键之间的相等性比较和用于比较的可选附加条件 FQK 字段。
---PASS select Individual__dlm.id__c from Individual__dlm left join Sales__dlm on Individual__dlm.id__c = Sales__dlm.soldToCustomerId__c
--PASS Individual__dlm left join Sales__dlm on Individual__dlm.id__c = Sales__dlm.soldToCustomerId__c and Individual__dlm.kq__id__c is not distinct from Sales__dlm.kq__soldToCustomerId__c
使用 ConnectApi 输入和输出类
命名空间中的某些类包含 访问 Connect REST API 数据的静态方法。命名空间还包含要传递的输入类 调用静态方法返回的参数和输出类。
ConnectApiConnectApi
ConnectApi方法采取 简单类型或复杂类型。简单类型是原始的 Apex 数据,如整数和字符串。复杂类型是输入对象。ConnectApi
成功执行方法可以 从命名空间返回输出对象。 输出对象可以由其他输出组成 对象。例如,ConnectApi.ActorWithId 输出对象 包含属性,例如 和 ,这些属性包含基元 数据类型。它还包含一个属性,该属性包含一个对象。ConnectApiConnectApiConnectApiidurlmySubscriptionConnectApi.Reference
注意
输出对象中的所有 Salesforce ID 均为 18 个字符 ID。输入对象可以使用 15 个字符的 ID 或 18 个字符的 ID。ConnectApi
了解 ConnectApi 类的限制
命名空间中方法的限制与其他 Apex 类的限制不同。
ConnectApi
对于命名空间中的类, 每个写入操作都会根据 Apex 调控器限制花费一个 DML 语句。 方法调用也是主题 到速率限制。 速率限制 匹配 Connect REST API 速率限制。两者都具有每个用户、每个命名空间、每小时 速率限制。当超过速率限制时,将引发 a。您的 Apex 代码必须捕获和 处理此异常。ConnectApiConnectApiConnectApiConnectApi.RateLimitException
测试代码时,将开始调用 Apex 方法 新的速率限制计数。调用该方法会将速率限制计数设置为该值 那是在你打电话之前.Test.startTestTest.stopTestTest.startTest
打包 ConnectApi 类
如果将类包含在 软件包中,请注意 Chatter 依赖关系。
ConnectApi如果一个类依赖于 Chatter,代码可以编译并安装在未启用 Chatter 的组织中。 但是,如果未启用 Chatter,则代码会在运行时抛出错误 时间。
ConnectApi
System.NoAccessException: Insufficient Privileges: This feature is not currently enabled for this user.
在其参考文档中,每个方法都指示它是否支持 Chatter。ConnectApi
序列化和反序列化 ConnectApi 对象
序列化输出对象时 转换为 JSON,其结构类似于从 Connect REST API 返回的 JSON。当输入对象从 JSON 反序列化时, 格式也类似于 Connect REST API。
ConnectApiConnectApi
Apex 中的 Connect 支持这些 Apex 上下文中的序列化和反序列化。
- JSON和类 – 将 Apex 输出中的 Connect 序列化为 JSON 并从 JSON 反序列化 Apex 输入中的 Connect。JSONParser
- Apex REST,将 Apex 输出中的 Connect 序列化为 JSON 作为返回值 值并将 JSON 中的 Apex 输入中的 Connect 反序列化为参数。@RestResource
- JavaScript Remoting with —serialize 将 Apex 输出中的 Connect 作为返回值转换为 JSON 值并将 JSON 中的 Apex 输入中的 Connect 反序列化为参数。@RemoteAction
Apex 中的 Connect 遵循这些序列化和反序列化规则。
- 只能序列化输出对象。
- 只能对顶级输入对象进行反序列化。
- 枚举值和异常不能序列化或反序列化。
连接Api版本控制和相等性 检查
类中的版本控制如下 与其他 Apex 类的规则不同的特定规则。
ConnectApi
- 方法调用在 包含方法调用的类版本的上下文。用途 版本类似于 Connect 的部分 REST API URL。ConnectApi/vXX.X
- 每个输出对象都公开一个方法。此方法 返回创建输出对象的方法所使用的版本 调用。ConnectApigetBuildVersion
- 与输入对象交互时,Apex 只能访问 封闭的 Apex 类的版本。
- 传递给方法的输入对象 可能仅包含 Apex 版本支持的非 null 属性 执行方法的类。如果输入对象包含版本不合适的内容 属性,则抛出异常。ConnectApi
- 仅方法的输出 返回与交互的代码版本中支持的属性 对象。对于输出对象,返回的属性也必须在 内部版本。toString
- Apex REST、 和序列化仅包括 适合版本的属性。JSON.serialize@RemoteAction
- Apex REST、和反序列化拒绝属性 版本不合适。JSON.deserialize@RemoteAction
- 枚举不受版本控制。枚举值在所有 API 版本中都返回。客户 应该优雅地处理他们不理解的值。
以下为类的相等性检查 这些规则。ConnectApi
- 输入对象 – 比较属性。
- 输出对象 – 比较属性和生成版本。例如,如果 两个对象具有相同的属性和相同的值,但具有不同的构建 版本,则对象不相等。要获取内部版本,请调用 。getBuildVersion
强制转换 ConnectApi 对象
将某些输出对象向下转换为更多可能很有用 特定类型。
ConnectApi
此技术对于消息段、源项功能和记录特别有用 领域。源项中的消息段是 键入为 。饲料 项目功能类型为 。记录字段的类型为 。这些类 都是抽象的,并且有几个具体的子类。在运行时,您可以使用它来检查具体类型 然后安全地进行相应的下沉。当你 向下,您必须具有处理未知子类的默认大小写。ConnectApi.MessageSegmentConnectApi.FeedItemCapabilityConnectApi.AbstractRecordFieldinstanceof以下示例将 a 向下转换为 :
ConnectApi.MessageSegmentConnectApi.MentionSegment
if(segment instanceof ConnectApi.MentionSegment) {
ConnectApi.MentionSegment = (ConnectApi.MentionSegment)segment;
}
重要
饲料的成分可以在 释放。编写代码以处理未知子类的实例。
通配符
使用通配符匹配 Connect REST API 和 Connect in Apex 中的文本模式 搜索。通配符的常见用途是搜索源。在参数中传递搜索字符串和通配符。此示例是 Connect REST API 请求:
q
/chatter/feed-elements?q=chat*
此示例是 Connect in Apex 方法 叫:
ConnectApi.ChatterFeeds.searchFeedElements(null, 'chat*');
您可以指定以下通配符来匹配搜索中的文本模式:
通配符 | 描述 |
---|---|
* | 星号与搜索词中间或末尾的零个或多个字符匹配。例如,搜索 john* 会查找以 john 开头的项目, 例如,John、Johnson 或 Johnny。搜索 mi* meyers 会找到带有 mike meyers 或 michael meyers 的项目。如果要在单词或短语中搜索字面上的星号,请转义星号(在星号前面加上字符)。\ |
? | 问号仅匹配搜索词中间或末尾的一个字符。例如,搜索 jo?n 会查找术语为 john 或 joan 的项目,但不会查找 jon 或 johan 的项目。您不能使用 ?在查找搜索中。 |
使用通配符时,请考虑以下注意事项:
- 通配符搜索越集中,搜索结果返回的速度就越快,结果就越有可能反映您的意图。例如,要搜索所有 出现单词(或复数形式)时,在搜索字符串中指定比指定限制性较小的通配符搜索(例如 )更有效,后者可以 返回无关的匹配项(如 )。prospectprospectsprospect*prosp*prosperity
- 定制搜索以查找单词的所有变体。例如,要查找 和 ,则 将指定 .propertypropertiespropert*
- 标点符号已编入索引。若要查找短语或在短语中查找,必须将搜索字符串括在引号中 你必须逃脱特殊字符。例如,找到短语 。 转义字符 () 是必需的,以便此搜索正常工作。*?“where are you\?”where are you?\
测试 ConnectApi 代码
与所有 Apex 代码一样,Connect in Apex 代码需要测试覆盖率。
Connect in Apex 方法不会在系统模式下运行,而是在 当前用户(也称为上下文用户)的上下文。方法 有权访问上下文用户有权访问的任何内容。Apex 中的 Connect 不会 支持系统方法。runAs
大多数 Connect in Apex 方法都需要访问真实的组织数据,除非在 标记为 的测试方法。@IsTest(SeeAllData=true)
但是,不允许某些 Connect in Apex 方法(例如 )访问 tests,并且必须与特殊的测试方法一起使用,这些方法注册要返回的输出 测试上下文。如果某个方法需要某个方法,则该要求在该方法的“用法”部分中说明。getFeedElementsFromFeedsetTest
测试方法名称是带有前缀的常规方法名称。测试方法签名(参数组合) 匹配常规方法的签名。例如,如果常规方法有三个 过载,测试方法有三个过载。setTest
在 Apex 测试方法中使用 Connect 类似于在 Apex 中测试 Web 服务。首先,构建 您希望方法返回的数据。要构建数据,请创建输出对象并设置其 性能。若要创建对象,可以对任何非抽象对象使用无参数构造函数 输出类。
生成数据后,调用测试方法注册数据。调用测试方法 与正在测试的常规方法具有相同的签名。
注册测试数据后,运行常规方法。当您运行常规方法时, 返回已注册的数据。
重要
使用与常规方法签名匹配的测试方法签名。如果 调用常规时,数据未注册到匹配的参数集 方法,则会收到异常。此示例显示了一个测试,该测试构造并注册它,以便在使用特定 参数组合。
ConnectApi.FeedElementPagegetFeedElementsFromFeed
global class NewsFeedClass {
global static Integer getNewsFeedCount() {
ConnectApi.FeedElementPage elements =
ConnectApi.ChatterFeeds.getFeedElementsFromFeed(null,
ConnectApi.FeedType.News, 'me');
return elements.elements.size();
}
}
@isTest
private class NewsFeedClassTest {
@IsTest
static void doTest() {
// Build a simple feed item
ConnectApi.FeedElementPage testPage = new ConnectApi.FeedElementPage();
List<ConnectApi.FeedItem> testItemList = new List<ConnectApi.FeedItem>();
testItemList.add(new ConnectApi.FeedItem());
testItemList.add(new ConnectApi.FeedItem());
testPage.elements = testItemList;
// Set the test data
ConnectApi.ChatterFeeds.setTestGetFeedElementsFromFeed(null,
ConnectApi.FeedType.News, 'me', testPage);
// The method returns the test page, which we know has two items in it.
Test.startTest();
System.assertEquals(2, NewsFeedClass.getNewsFeedCount());
Test.stopTest();
}
}
ConnectApi 类与其他 Apex 之间的差异 类
请注意类和其他 Apex 类之间的这些附加差异。
ConnectApi系统模式和上下文用户Connect in Apex 方法不会在系统模式下运行,而是在 当前用户(也称为上下文用户)的上下文。方法 有权访问上下文用户有权访问的任何内容。Apex 中的 Connect 不会 支持系统方法。runAs当 方法采用subjectId论点 通常,该主题必须是上下文用户。在这些情况下,您可以使用字符串来指定上下文用户,而不是 同上。me默认情况下,Apex 中的 Connect 对 Automated Process 用户不可用。在 Apex 中连接 可供以下用户使用:
- 仅限 Chatter 的用户
- 来宾用户
- 门户用户
- 标准用户
with sharing和without sharingApex 中的 Connect 会忽略 和 关键字。相反,上下文用户控制所有安全性、字段级共享和 能见度。例如,如果上下文用户是专用组的成员,则类可以发布到该组。如果 上下文用户不是专用组的成员,代码无法查看 该群组,但无法发布到该群组。with sharingwithout sharingConnectApi异步操作Apex 中的某些 Connect 操作是异步的,也就是说,它们不是 立即发生。例如,如果代码为用户添加了源项,则不会 立即在新闻提要中可用。另一个例子:当你添加一张照片时,它是 不能立即使用。对于测试,如果您添加照片,则无法检索 它立即。Apex 中不支持 XML 休息Apex REST 不支持 XML 序列化和反序列化 在 Apex 对象中连接。Apex REST支持JSON序列化和反序列化 在 Apex 对象中连接。空日志条目有关 Apex 对象中 Connect 的信息不会显示在日志事件中。VARIABLE_ASSIGNMENT没有 Apex SOAP Web 服务 支持Apex 对象中的 Connect 不能在 Apex SOAP Web 服务中使用 用关键字 表示。webservice