Apex 中的 DataWeave

Apex 中的 DataWeave 使用 Mulesoft DataWeave 库从一个库读取和解析数据 格式化、转换并以其他格式导出。您可以创建 DataWeave 脚本 作为元数据,并直接从 Apex 调用它们。与 Apex 一样,DataWeave 脚本在 Salesforce 应用程序服务器,在执行时强制执行相同的堆和 CPU 限制 法典。

企业应用程序通常需要在 CSV 等格式之间转换数据、 JSON、XML 和 Apex 对象。Apex 中的 DataWeave 补充了 Apex 对 JSON 的原生支持 和 XML 处理,使数据转换更易于编码、更具可扩展性,以及 有效。Apex 开发人员可以更专注于解决业务问题,而不是 解决文件格式的细节。

DataWeave 是用于访问、解析和转换的 MuleSoft 表达式语言 通过 Mule 应用程序传输的数据。有关详细信息,请参阅 DataWeave 概述。

注意

您不必是 MuleSoft 客户或拥有任何特定的 Salesforce 许可证即可 在 Apex 中使用 DataWeave。

以下是 Apex 中 DataWeave 的一些用例。

  • 使用自定义日期格式序列化 Apex 对象
  • 使用 Apex 保留关键字序列化和反序列化 JSON
  • 执行自定义转换,例如删除或添加命名空间或删除后缀__c
  • 解析和转换符合 RFC 4180 的 CSV(逗号分隔值)数据

您可以为组织中的 DataWeave 资源创建列表视图,并查看已部署的 DataWeave 命名空间中的脚本。在“设置”的“快速查找”框中,输入 ,然后选择“DataWeave” 资源。选择要监视的字段,例如 DataWeave 资源 ID、名称、命名空间前缀和 API 版本。DataWeave

  • 在 Apex 中实现 DataWeave 将 DataWeave 脚本创建为元数据,并直接从 Apex
    调用它们。使用 DataWeave 命名空间中的类方法和异常来加载和执行脚本。
  • Apex
    中的 DataWeave 示例 以下是演示 Apex 中 DataWeave 的代码示例。
  • Apex
    中 DataWeave 的局限性 Apex 中的 DataWeave 具有这些局限性。

在 Apex 中实施 DataWeave

将 DataWeave 脚本创建为元数据,并直接从 Apex 调用它们。使用类 DataWeave 命名空间中的方法和异常来加载和执行脚本。

DataWeave 命名空间

DataWeave 命名空间提供类和 支持从 Apex 调用 DataWeave 脚本的方法。该类包含从已部署到 组织。然后,可以使用该方法与有效负载一起运行生成的脚本,以获取对象中的脚本输出。该类包含用于检索脚本的方法 使用类方法输出。查看更多 有关这些类和方法的信息,请参阅 DataWeave 命名空间。ScriptcreateScript().dwlexecute()DataWeave.ResultResultScript

对于每个 DataWeave 脚本,都会生成一个内部类型的类。内部类 扩展类。你可以使用 生成的类,而不是通过方法使用实际的脚本名称。当前正在使用的 DataWeave 脚本 无法删除通过此内部类引用的内容。要使生成的 DataWeaveScriptResource 类全局,在元数据对象中设置字段。DataWeaveScriptResource.ScriptNameDataWeave.ScriptDataWeaveScriptResource.ScriptNamecreateScript()isGlobalDataWeaveResource

<?xml version="1.0" encoding="UTF-8"?>
<DataWeaveResource xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>58.0</apiVersion>
<isGlobal>true</isGlobal>
</DataWeaveResource>

可捕获的异常可用于错误 处理。DataWeave 中发生的运行时脚本异常会向 Apex 公开 具有此异常类型。System.DataWeaveScriptException

DataWeave 脚本支持使用该函数进行日志记录。记录以下消息 源自 DataWeave 在 Apex 调试日志中作为事件反映在 Apex 代码日志下 类别。log(string, value)DATAWEAVE_USER_DEBUG

支持信息

Apex 支持 DataWeave 2.4 脚本语法, 除了这些限制:DataWeave 在 Apex 中的局限性。

这些工具 支持 DataWeave 脚本的开发。

  • 数据编织 互动学习是一个在线互动游乐场,您可以 用于测试 DataWeave 脚本。
  • DataWeave 2.0 VSCode 市场 扩展添加了代码突出显示和其他功能支持 编辑 DataWeave 脚本。

Apex 中的 DataWeave 示例

以下是演示 Apex 中 DataWeave 的代码示例。

要在 Apex 中使用 DataWeave,请按照以下说明和相关示例进行操作。

  • 创建 DataWeave 脚本源文件。例如:。csvToContacts.dwl%dw 2.0 input records application/csv output application/apex --- records map(record) -> { FirstName: record.first_name, LastName: record.last_name, Email: record.email } as Object {class: "Contact"}
  • 创建关联的元数据文件。例如:。csvToContacts.dwl-meta.xml<?xml version="1.0" encoding="UTF-8"?> <DataWeaveResource xmlns="http://soap.sforce.com/2006/04/metadata"> <apiVersion>58.0</apiVersion> <isGlobal>false</isGlobal> </DataWeaveResource>
  • 使用 Salesforce CLI 版本 v7.151.9 将源代码推送到临时组织,或者 高等。请参阅 Salesforce CLI 版本 笔记。
  • 从 Apex 调用 DataWeave 脚本并检查来自 anonymous 的结果 顶点。此示例调用脚本。csvToContacts.dwl// CSV data for Contacts String inputCsv = 'first_name,last_name,email\nCodey,"The Bear",codey@salesforce.com'; DataWeave.Script dwscript = new DataWeaveScriptResource.csvToContacts(); DataWeave.Result dwresult = dwscript.execute(new Map<String, Object>{'records' => inputCsv}); List<Contact> results = (List<Contact>)dwresult.getValue(); Assert.areEqual(1, results.size()); Contact codeyContact = results[0]; Assert.areEqual('Codey',codeyContact.FirstName); Assert.areEqual('The Bear',codeyContact.LastName);

注意

演示 Apex 中的 DataWeave 功能的大量代码示例包括 在 Developerforce 上可用。

DataWeave 在 Apex 中的局限性

Apex 中的 DataWeave 具有这些限制。

  • DataWeave Java 桥接,即绑定到静态 Java 方法的能力是 禁用。参见 Mule 简介 4. 与环境交互的功能(如 和 功能)也被禁用。这些检查是在脚本创建时完成的 的运行时。readURLenvVar
  • 必须为要强制转换为字符串的二进制输入 (Apex Blob) 指定编码:。binaryVariable as String {encoding: ‘utf8’ }”
  • DataWeave 受到限制,不允许加载其他库。因此 脚本必须是独立的。
  • 不支持 DataWeave 模块和导入其他脚本。例如,根据使用映射 不支持 DataWeave 脚本中的文件。import modules::MyMapping注意该功能支持 内置模块。请参阅 DataWeave 参考。
  • Apex 中的 DataWeave 不支持这些内容类型。
    • 平面文件格式 (application/flatfile)
    • 胜过 (application/xlsx)
    • 阿尔沃 (application/avro)
  • Apex 类必须为 API 版本 53.0 或更高版本才能访问 DataWeave 集成 方法。
  • 每个组织最多有 50 个 DataWeave 脚本。
  • 一个 DataWeave 脚本的最大正文大小为 100,000(十万) 字符。

注意

目前或将来都不支持 XML 实体扩展作为保护 防止拒绝服务攻击。

使用触发器审核 Feed 项

为 FeedItem 编写触发器以自动审核 组织或 Experience Cloud 站点。使用触发器确保帖子符合贵公司的 沟通策略,并且不包含不需要的字词或短语。

在插入触发器之前编写一个 Apex 以查看源项正文并更改 Feed 项的状态(如果其中包含列入黑名单的短语)。为源创建触发器 设置中的项目,输入快速 “查找”框,然后选择“FeedItem 触发器”。或者 您可以从开发者控制台创建触发器,方法是单击“文件”|”新品 |顶点触发器,然后从 sObject 下拉列表中选择 FeedItem 列表。FeedItem Triggers

此示例演示 FeedItem 上的“插入前”触发器,该触发器用于查看每个 新帖子。如果帖子包含不需要的短语,则触发器还会设置 发布到 .PendingReview

trigger ReviewFeedItem on FeedItem (before insert) {
    for (Integer i = 0; i<trigger.new.size(); i++) {

        // We don't want to leak "test phrase" information.

        if (trigger.new[i].body.containsIgnoreCase('test phrase')) {
            trigger.new[i].status = 'PendingReview'; 
            System.debug('caught one for pendingReview');
        }
    }
}

Experience Cloud 站点

Experience Cloud 站点是供您的员工、客户和合作伙伴使用的品牌空间 连接。您可以自定义和创建网站以满足您的业务需求,然后进行转换 它们之间无缝衔接。

使用该类与 Apex 中的 Experience Cloud 站点进行交互,并在命名空间的 Apex 类中使用 Connect。NetworkConnectApi

Connect in Apex 有一个类 返回有关网站信息的方法。许多 Apex 中的 Connect 方法采用参数,而某些 Apex 中的 Connect 方法采用参数ConnectApi.CommunitiescommunityIdsiteId