我可以使用tMemorizeRows解決它,使用tJavaFlex將整個映射表保存到內存中,然後使用例程讀取它們。
我所做的是,記住整個表格,我只有一個表格,有三列,第一個表示我必須做的映射類型,第二個表示原始代碼,第三個表示替換碼。
一旦記住數據,我使用tJavaFlex創建三個列表,每列一列,然後將這些列表移動到全局變量映射。
然後,我創建了一個例程,接收所有三個列表加上兩個代碼,第一個是映射名稱(第一列過濾器),第二個是原始代碼(第二列過濾器)。使用這兩個我可以精確定位替換代碼的位置,並返回它。
最後,在讀取數據主流時,使用tMap,我爲第一列的每個不同值創建了一個變量(即每種映射類型都有一個變量),然後調用我使用oriinal代碼+映射名稱。
i。在tMemorizeRows使用的代碼是:
START CODE
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);
ROUTINE CODE
/*
* 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允許人們回答他們自己的問題。 – 2013-10-23 09:19:06
完成了,花了我足夠長的時間:) – 2014-03-13 17:02:48