我是Groovy的新手,而且一般都是编程的绿色。我正在使用一个POC,它使用Groovy来解析输入中的值,并准备将它们插入到下游的查询中。问题在于,如果需要提取1个值或多个值,则输入结构不同。我找到了一种在接收单个值或接收多个值时生成返回字符串的方法。但是,我正在尝试创建一个可以处理这两种用例的解决方案。
要处理records
的多个实例,这可以起作用:
def stringMap =[['Case_Plans__r':['queryLocator':null, 'done':'true', 'records':[['Plan__c':'a0Ic0000002JWCiEAO', 'Id':null, 'type':'Case_Plan__c'], ['Plan__c':'a0Ic0000001qRdtEAE','Id':null, 'type':'Case_Plan__c'], ['Plan__c':'a0Ic0000002JWCnEAO', 'Id':null, 'type':'Case_Plan__c']],'size':3],'Id':'500c0000002AJclAAG', 'type':'Case']]
stringMap=stringMap.Case_Plans__r.records.Plan__c
String returnValue = stringMap[0].collect{"'$it'"}.join(',')
println ("prepared string is $returnValue")
返回预期结果:
prepared string is 'a0Ic0000002JWCiEAO','a0Ic0000001qRdtEAE','a0Ic0000002JWCnEAO'
如果源数据只有records
的一个实例,则结构会更改为此,并且我不能使用[0]的索引,或者该值的每个字符将被分割为returnValue
:< / p>
def stringMap=[['Case_Plans__r':['queryLocator':null, 'done':'true', 'records':['Plan__c':'a0Ic0000002JWCiEAO', 'Id':null, 'type':'Case_Plan__c'],'size':1],'Id':'500c0000002AJclAAG', 'type':'Case']]
stringMap=stringMap.Case_Plans__r.records.Plan__c
String returnValue = stringMap.collect{"'$it'"}.join(',')
println ("prepared string is $returnValue")
这会返回预期结果, 准备好的字符串是'a0Ic0000002JWCiEAO'
我无法使用findAll收集值或评估records
Plan__c
的大小以确定要使用的分配。有没有办法收集Plan__c
的值,无论它嵌套在哪里?
答案 0 :(得分:0)
当您获得Plan__c
时,您可以展平结果列表:
stringMap=[
['Case_Plans__r':
[
'queryLocator':null,
'done':'true',
'records': ['Plan__c':'a0Ic0000002JWCiEAO', 'Id':null, 'type':'Case_Plan__c'],
'size':1
],
'Id':'500c0000002AJclAAG',
'type':'Case'
]
]
assert stringMap.Case_Plans__r.records.Plan__c
.flatten()
.collect{"'$it'"}
.join(',') == "'a0Ic0000002JWCiEAO'"
对于多个记录:
stringMap=[
['Case_Plans__r':
[
'queryLocator':null,
'done':'true',
'records':[
['Plan__c':'a0Ic0000002JWCiEAO', 'Id':null, 'type':'Case_Plan__c'],
['Plan__c':'a0Ic0000001qRdtEAE','Id':null, 'type':'Case_Plan__c'],
['Plan__c':'a0Ic0000002JWCnEAO', 'Id':null, 'type':'Case_Plan__c']
],
'size':3
],
'Id':'500c0000002AJclAAG',
'type':'Case'
]
]
assert stringMap.Case_Plans__r.records.Plan__c
.flatten()
.collect{"'$it'"}
.join(',') == "'a0Ic0000002JWCiEAO','a0Ic0000001qRdtEAE','a0Ic0000002JWCnEAO'"