ConnectApi 类、DataWeave、Data 360 与平台特性

ConnectApi/DataWeave/Data 360平台特性:ConnectApi输入输出类(18字符ID)、限制(DML/API计入/RateLimitException/Test.startTest重置)、打包(Chatter依赖NoAccessException)、序列化(JSON/REST/RemoteAction、仅输出可序列化)、版本管理(getBuildVersion/版本匹配属性/构建版本不等)、casting(instanceof/default分支)、通配符(*/?)、测试(setTest注册数据/不支持runAs/SeeAllData=true)、与其他类差异(忽略sharing/异步操作/无XML/无VARIABLE_ASSIGNMENT/无webservice)、Chatter私信审核(before insert/5字段/addError)、Data 360 DMO SOQL(静态SOQL=callout/仅对象级权限/describeSObjects)、Mock SOQL测试(SoqlStubProvider/createStubQueryRow/Stub限制)、DataWeave(.dwl脚本/createScript/execute/ScriptName内部类/DataWeaveScriptException/3版本支持/7条限制)、FeedItem审核(PendingReview)和External Services(注册API规范→强类型调用)。...

📅 2026/7/16 ✍️ ponybai 🏷️ apex, salesforce

ConnectApi 类、DataWeave、Data 360 与平台特性

综合平台特性

本章涵盖 ConnectApi 输入/输出类的使用、限制、打包、序列化、版本管理和测试,以及 Chatter 私信审核、Data 360 SOQL 查询与 Mock 测试、DataWeave 数据转换和 Feed 项审核等平台特性。

ConnectApi 输入/输出、限制与更多

ConnectApi类

输入/输出类:ConnectApi 方法接受简单类型(原始类型)或复杂类型(ConnectApi 输入对象)。成功执行返回输出对象——输出对象可由其他输出对象组成。18 字符 ID:ConnectApi 输出对象中所有 Salesforce ID 为 18 字符——输入对象可使用 15 或 18 字符。

限制:每个 ConnectApi 写操作 = 1 DML 语句。大多数调用计入 24 小时 API 请求。需要 Chatter 的方法受每小时每用户每命名空间速率限制——超出抛 ConnectApi.RateLimitException 需捕获处理。测试时 Test.startTest() 启动新速率计数——stopTest() 恢复原计数。

打包:ConnectApi 类依赖 Chatter 的代码可在未启用 Chatter 的 org 中编译安装——但运行时抛 System.NoAccessException。每个方法文档标明是否支持 Chatter。

序列化/反序列化:JSON 结构与 Connect REST API 一致。支持 JSON/JSONParser 类、@RestResource Apex REST 和 @RemoteAction JS Remoting。仅输出对象可序列化——仅顶级输入对象可反序列化。枚举和异常不可序列化。

版本管理:ConnectApi 调用在执行类的版本上下文中运行——类比 Connect REST API 的 /vXX.X。输出对象暴露 getBuildVersion() 方法。输入对象只能访问执行类版本支持的非 null 属性——包含版本不匹配属性则抛异常。JSON 序列化/反序列化仅包括/接受版本匹配的属性。枚举不进行版本管理——所有 API 版本中返回所有枚举值。

相等性检查:输入对象比较属性;输出对象比较属性和 build 版本(相同属性值但不同 build 版本的对象不相等)。

类型转换(Casting):下转型到具体子类型——对 MessageSegment(→MentionSegment/HashtagSegment)、FeedItemCapability 和 AbstractRecordField 尤其有用。使用 instanceof 检查然后安全转换——必须包含 default 分支处理未知子类(Feed 组成在发布间可能变化)。

通配符搜索:* 匹配零或多个字符(中/尾部)——? 仅匹配一个字符。转义用 \。搜索越聚焦结果越快——prospect*prosp* 更好。标点符号被索引——搜索 *? 用引号包围并转义。

测试:Connect in Apex 在上下文用户模式下运行——不支持 runAs 方法。大多数需要真实 org 数据——测试方法需标记 @IsTest(SeeAllData=true)getFeedElementsFromFeed 等方法不允许在测试中访问 org 数据——需使用 setTest 方法注册输出对象(不同重载有不同 setTest 签名)。构建数据→注册(调用 setTest 方法)→运行常规方法→验证返回注册数据。

与其他 Apex 类的差异:忽略 with/without sharing 关键字(上下文用户控制所有安全);某些操作异步(添加 Feed 项/照片不会立即可用);Apex REST 不支持 Connect in Apex 对象 XML 序列化;日志中无 VARIABLE_ASSIGNMENT;不可用 webservice 关键字。

Data 360、DataWeave 与审核

Data 360与DataWeave

Chatter 私信审核:对 ChatterMessage 编写 before insert 触发器——审核消息正文和发件人信息。调用 addError() 阻止违规消息。ChatterMessage 字段:Id、Body(正文)、SenderId(发件人)、SentDate、SendingNetworkId(Experience Cloud 站点)。所需权限:Author Apex + Manage Chatter Messages and Direct Messages。

Data 360 in Apex:静态 SOQL 支持 DMO(Data 360 数据模型对象)。在 FOR 循环或 QueryLocator 中使用时 API 61.0+ 支持完整结果(更早版本仅返回前 201 条)。对 DMO 的静态 SOQL视为 callout——受与 HTTP callout 相同的限制(未提交 DML 时调用失败)。安全考量:所有数据空间中的 DMO 以系统模式访问——仅支持对象级读取检查(WITH USER_MODE/WITH SECURITY_ENFORCED 仅检查对象级)。使用 Schema.describeSObjects 而非 getGlobalDescribe() 发现 DMO。

Mock SOQL 测试(Data 360 DMO):扩展 System.SoqlStubProvider 重写 handleSoqlQuery()。使用 Test.createStubQueryRow/StubQueryRows 创建 DMO 实例。通过 Test.createSoqlStub 注册。Stub 实现中不允许 SOQL/SOSL/Callout/Future/Queueable/Batch/DML/Platform Events。Governor Limit 适用于 Stub 记录。

DataWeave in Apex:MuleSoft DataWeave 库——读取、转换、导出不同格式(CSV/JSON/XML/Apex 对象)。创建 .dwl 脚本作为元数据部署。使用 DataWeave.Script.createScript() 加载——execute() 返回 DataWeave.Result。每个脚本生成 DataWeaveScriptResource.ScriptName 内部类。异常类型:System.DataWeaveScriptException。日志:log(string, value) → Apex debug log 中 DATAWEAVE_USER_DEBUG 事件。脚本版本支持:API 61−/62/63+ → DataWeave 2.5/2.8/2.9。限制:Java 桥禁用、不支持模块导入、不支持 Flat File/Excel/Avro、最多 50 脚本/org、单脚本最大 100K 字符、无 XML Entity Expansion 防护。

Feed 项审核:对 FeedItem 编写 before insert 触发器——检查帖子正文是否包含不当短语。addError() 或设置 status 为 PendingReview。所需权限:Author Apex。

External Services:注册外部服务的 API 规范→操作变为 ExternalService 命名空间中强类型的 Apex 类和方法——无需使用 Http 类或手动 JSON 转换。

从 ConnectApi 的版本管理和测试到 DataWeave 数据转换和 Chatter 内容审核,这些平台特性为构建高级 Salesforce 应用提供了强大的工具链。