You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apex中使用DataWeave:动态指定SObject类的问题

解决DataWeave动态指定Apex对象类名的问题

我有一段在Apex类中运行正常的DataWeave脚本,原本硬编码了Salesforce对象类名Requirement__c,现在想通过objectProperties输入的ObjectName变量动态指定类名,但直接替换后DataWeave将变量名当作字符串字面量处理,导致转换报错。

原脚本与输入数据

原DataWeave脚本

%dw 2.0
input csvData application/csv
input fieldMappings application/json
input objectProperties application/json
var objectName = objectProperties.ObjectName

output application/apex
---

csvData map ((row) ->
    (
        (
        fieldMappings map (fieldMapping) ->
        (fieldMapping.target) : if(row[fieldMapping.source] != "") row[fieldMapping.source] else fieldMapping."defaultValue"
        )
        reduce ($$ ++ $)
    ) as Object {class: "Requirement__c"}
)

输入数据

  • csvData内容:
First Name,Last Name,Title,Height,Color
Jane, Austin, CEO,7,blue
Bob, Smith, COO, 6,red
  • fieldMappings内容:
[
  {
    "source": "First Name",
    "target": "FirstName"
  },
  {
    "source": "Last Name",
    "target": "LastName"
  },
  {
    "source": "Title",
    "target": "Title"
  },
  {
    "source": "Height",
    "target": "Height__c"
  },
  {
    "source": "Importance",
    "target": "Priority__c"
  },
  {
    "source": "Interests",
    "target": "Hobbies__c"
  }
]
  • objectProperties内容:
{
    "ObjectName":"Contact"
}

解决方案

问题出在类型强制转换的class属性赋值逻辑上:默认情况下Object {class: "xxx"}里的内容属于字符串字面量上下文,直接写变量名会被当作字符串处理。只需用括号包裹变量,切换到表达式上下文即可让DataWeave解析变量的实际值。

修改后的核心代码

将硬编码的类名替换为带括号的变量:

) as Object {class: (objectName)}

完整修改后的脚本

%dw 2.0
input csvData application/csv
input fieldMappings application/json
input objectProperties application/json
var objectName = objectProperties.ObjectName

output application/apex
---

csvData map ((row) ->
    (
        (
        fieldMappings map (fieldMapping) ->
        (fieldMapping.target) : if(row[fieldMapping.source] != "") row[fieldMapping.source] else fieldMapping."defaultValue"
        )
        reduce ($$ ++ $)
    ) as Object {class: (objectName)}
)

原理说明

在DataWeave的类型注解中,括号()用于切换到表达式执行上下文,让引擎优先解析变量的实际值,而非将变量名直接作为字符串字面量使用,这样就能动态传入objectName对应的Salesforce对象类名,正确生成目标Apex对象。

内容的提问来源于stack exchange,提问作者caleb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:12:35