2016-04-21 5 views
0

Моего потока идет что-то вроде этого:Dataweave значение ключа устанавливается из базы данных в HashMap

я получаю полезную нагрузку с сказать следующее:

[ '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

я нашел еще один способ сделать это с помощью метода MapData в выражении для передачи данных. –

ответ

1

Твердый план, хотя мне не нравится делать это в переменной потока. Вы можете просто сделать поток поиска и вызвать его из своего DWL like so. Вероятно, вы захотите использовать область Cache, чтобы не делать этого каждый раз.

Я тоже делал это в фасоли весны, и я доволен окончательным результатом. Это только для таблиц поиска, которые я ожидаю изменить только тогда, когда приложение будет выпущено или реже.

  1. Создать фасоль типа Карта. Вы можете использовать родную Spring <util:map> для этого. Настройка ключей и подстановки значений с помощью пружины <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>

  2. Обратитесь к фасоли используя MEL app объект контекста

    #[app.registry.statusTable[flowVars.status]]

+0

Это действительно интересно! Мне нужно, чтобы поиск был управляемым db (пользователи-администраторы будут изменять сопоставления на основе интеграции). Я также опубликую свой ответ. Спасибо Райан! –

0

Я кончался решением моей проблемы с компонентом сценария с помощью заводных ниже Отлич- сценарий я использовал (заметьте, я положил полезную нагрузку в переменном с именем «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') 
      } 
     } 
    } 
} 

Database component in cache component followed by a script component

 Смежные вопросы

  • Нет связанных вопросов^_^