我正在使用 Dell Boomi 将数据从一个系统映射到另一个系统。我可以在地图中使用 groovy,但没有经验。我尝试使用其他 Boomi 工具来执行此操作,但被告知我需要在脚本中使用 groovy。我的入站数据是:
132265,棕色
132265,金
132265,灰色
132265,绿色
我想输出:
132265,"棕色,金色,灰色,绿色"
希望这是有道理的!关于 groovy 代码的任何想法来完成这项工作?
@Grapes(
@Grab(group='org.apache.commons', module='commons-csv', version='1.2')
)
import org.apache.commons.csv.*
def csv = '''
132265,Brown
132265,Gold
132265,Gray
132265,Green
'''
def parsed = CSVParser.parse(csv, CSVFormat.DEFAULT.withHeader('code', 'color')
parsed.records.groupBy({ it.code }).each { k,v -> println "$k,\"${v*.color.join(',')}\"" }
以上打印:
132265,"Brown,Gold,Gray,Green"
好吧,我不知道您是如何获取数据的,但这是实现目标的一般方法。您可以使用一个库,例如下面的库来解析 csv。
https://github.com/xlson/groovycsv
您的数据示例是:
@Grab('com.xlson.groovycsv:groovycsv:1.1')
import static com.xlson.groovycsv.CsvParser.parseCsv
def csv = '''
132265,Brown
132265,Gold
132265,Gray
132265,Green
'''
def data = parseCsv(csv)
我相信您想将数字与各种颜色值相关联。因此,对于每一行,您可以创建一个数字和与该数字关联的颜色的映射,用“,”分割该行:
map = [:]
for(line in data) {
number = line.split(',')[0]
colour = line.split(',')[1]
if(!map[number])
map[number] = []
map[number].add(colour)
}
println map
所以地图应该包含:
[132265:["Brown","Gold","Gray","Green"]]
好吧,如果它不是你想要的,你可以提取一般的想法。
假设您的数据以逗号分隔的数据字符串形式出现,如下所示:
"132265,棕色132265,金色132265,灰色132265,绿色122222,红色122222,白色"
下面的 Groovy 脚本代码应该可以解决问题。
def csvString = "132265,Brown 132265,Gold 132265,Gray 132265,Green 122222,Red 122222,White"
LinkedHashMap.metaClass.multiPut << { key, value ->
delegate[key] = delegate[key] ?: []; delegate[key] += value
}
def map = [:]
def csv = csvString.split().collect{ entry -> entry.split(",") }
csv.each{ entry -> map.multiPut(entry[0], entry[1]) }
def result = map.collect{ k, v -> k + ',"' + v.join(",") + '"'}.join("\n")
println result
将打印:
132265,"棕色,金色,灰色,绿色"
122222,"红色,白色"
您是否出于某种原因必须使用脚本?这可以通过开箱即用的 Boomi 功能轻松实现。
创建一个映射函数,将 ID 字段添加到您选择的字符串(即 222_concat_fields)。然后使用该值设置具有该值的动态流程道具。
process prop 的值将包含连接名称字段的结果。只需将此功能添加到您的地图即可。然后使用最终值填充您的结果。
好吧,这取决于数据如何来。如果您在问题中发布的数据来自单个文档,那么您可以使用 groovy 脚本在地图中轻松处理。
如果您在问题中发布的数据进入多个文档,即
doc1:132265,Brown
doc2:132265,Gold
doc3:132265,Gray
doc4:132265,Green
在这种情况下它不能被处理到地图中。您将需要将数据处理步骤与自定义脚本一起使用。
对于您要求在 groovy 中创建的代码,取决于您获取数据的输入配置文件。请提供更多信息,即输入配置文件、字段等。