Я мог бы решить его с помощью tMemorizeRows, сохранив всю таблицу отображения в памяти с помощью tJavaFlex, а затем прочитав их с помощью процедуры.
Что я сделал, запомнил всю таблицу, у меня была только одна таблица с тремя столбцами, первая из которых указывала тип отображения, который я должен был сделать, второй - исходный код, а третий - замена код.
После запоминания данных я использовал tJavaFlex для создания трех списков, по одному для каждого столбца, а затем переместите эти списки на карту глобальных переменных.
Затем я создал процедуру, которая получает все три списка плюс два кода, первый из которых - это имя сопоставления (фильтр первого столбца), а второй - исходный код (фильтр второй колонки). Используя оба варианта, я мог бы определить положение кода замены и вернуть его.
Наконец, при чтении основного потока данных, используя tMap, я создал переменную для каждого отдельного значения первого столбца (то есть по одному для каждого типа отображения), а затем вызвал подпрограмму i, разработанную с использованием oriinal code + имя отображения.
Код я использовал в tMemorizeRows было:
СТАРТ КОД
java.util.Set<String> iLista;
java.util.List<String> lLOV=new java.util.ArrayList<String>();
java.util.List<String> lS6=new java.util.ArrayList<String>();
java.util.List<String> lS8=new java.util.ArrayList<String>();
основной код
lLOV.add(LOV_tMemorizeRows_1[icount]);
lS6.add(S6_NAME_tMemorizeRows_1[icount]);
lS8.add(S8_NAME_tMemorizeRows_1[icount]);
КОНЕЦ КОД
globalMap.put("lLOV",lLOV);
globalMap.put("lS6",lS6);
globalMap.put("lS8",lS8);
РЕГЛАМЕНТНОЕ КОД
/*
* Toma los valores generados de la LOV y matchea con S8, requiere la ejecucion del job
* Genericos\GeneradorLOV
*
* {talendTypes} String | String
*
* {Category} MigracionDatos
*
* {param} string(entrada.LOV) Identifica el tipo de LOV
*
* {param} string(entrada.S6_NAME) Indica el valor del campo en Siebel 6
*
* {param} ((java.util.List<String>) globalMap.get("lLOV"))
*
* {param} ((java.util.List<String>) globalMap.get("lS6"))
*
* {param} ((java.util.List<String>) globalMap.get("lS8"))
*
*/
public static String calculaLOV(String CampoLOV, String CampoS6, java.util.List<String> listaLOV, java.util.List<String> listaS6,java.util.List<String> listaS8 ) {
/*
* java.util.List<String> listaLOV = (java.util.List<String>) globalMap.get("lLOV");
* java.util.List<String> listaS6 = (java.util.List<String>) globalMap.get("lS6");
* java.util.List<String> listaS8 = (java.util.List<String>) globalMap.get("lS8");
*/
String C1 = CampoLOV;
String C2 = CampoS6;
int posicionC1 = listaLOV.indexOf(C1);
// encontró el LOV
if(posicionC1 >= 0) {
java.util.List<String> listaS6_Iterada = new java.util.ArrayList<String>();
// Genera la lista intermedia con los valores
for (int contador = posicionC1; contador < listaLOV.size() ; contador++) {
listaS6_Iterada.add(listaS6.get(contador));
if(!listaLOV.get(contador).toString().equals(C1)) {break;}
}
int posicionC2 = listaS6_Iterada.indexOf(C2);
if(posicionC2 >= 0) {
int posicionFinal = posicionC1 + posicionC2;
return listaS8.get(posicionFinal);
} else {
return "";
}
} else {
return "";
}
}
Было бы лучше поставить ваше решение в качестве ответа, чем отредактировать вопрос. SO позволяет людям отвечать на свой вопрос. –
сделал, взял меня достаточно долго :) –