我的流程是这样的:
我收到的有效载荷如下:
[' BobsFirstStatus',' BobsSecondStatus',' BobsEightStatus']
我的数据库中有一个查找表,如下所示:
ID_|_BobStatusName___|_InternalStatusName_____
1 | BobsFirstStatus | Internal_1stStatus
2 | BobsSecondStatus| Internal_2ndStatus
3 | BobsEighStatus | Internal_3rdStatus
我想从数据库中读取这些数据,并加载一个HashMap,如下所示:
{
"BobsFirstStatus": "Internal_1stStatus",
"BobsSecondStatus": "Internal_2ndStatus",
"BobsEighStatus": "Internal_3rdStatus"
}
这样,我可以在数据编织语句中做一个" flowVars.Lookup [payload.BobStatus]"检索我们的状态内部映射。
以前有人这么做过吗?看起来很有用......
答案 0 :(得分:1)
可靠的计划,虽然我不喜欢在流量变量中这样做。您只需创建一个查找流,然后从DWL like so中调用它。您可能希望使用Cache范围来避免每次都这样做。
我之前也在春天的豆子里做过,我对最终的结果感到满意。这仅适用于我希望仅在应用程序发布时或更少发生时更改的查找表。
创建Map类型的bean。您可以使用原生Spring <util:map
&gt;为了这。使用spring <entry>
元素
<util:map id="statusTable">
<entry key="BobsFirstStatus" value="Internal_1stStatus" />
<entry key="BobsSecondStatus" value="Internal_2ndStatus" />
<entry key="BobsEighStatus" value="Internal_3rdStatus" />
</util:map>
使用MEL app
上下文对象
#[app.registry.statusTable[flowVars.status]]
答案 1 :(得分:0)
我最后用脚本组件解决了我的问题,使用下面的groovy是我使用的groovy脚本(注意,我在调用数据库选择组件之前将有效负载放在名为“payload_cache”的变量中):
def lookup = [:]
for (item in payload) {
lookup[item['external_code']] = item['internal_code']
}
flowVars.NewResults = new ArrayList()
def ContainingDTO = flowVars.payload_cache.ContainingDTO
if (ContainingDTO){
def ExternalItemList = ContainingDTO.ExternalItemList
if (ExternalItemList){
for (item in ExternalItemList){
try{
flowVars.NewResults.add(lookup[item])
}catch(Exception){
flowVars.NewResults.add('UNKNOWN')
}
}
}
}