Search code examples
etltalend

Talend: Save variable for later use


I´m trying to save a value in spreadsheet's header for later use as a new column value.

This is the reduced version with value (XYZ) in header:

original report

The value in header must be used for new column CODE: enter image description here

This is my design:

enter image description here

tFilterRow_1 is used to reject rows without values in A, B, C columns. There is a conditional in tJavaRow_1 to set a global variable:

if(String.valueOf(row1.col_a).equals("CODE:")){
  globalMap.putIfAbsent("code", row1.col_b);
}

The Var expression in tMap_1 to get the global variable is:

(String)globalMap.get("code")  

The Var "code" is mapped to column "code" but I'm getting this output:

a1|b1|c1|
a2|b2|c2|
a3|b3|c3|

What is missed or there is a better approach to accomplish this escenario ? Thanks in advance.


Solution

  • Short answer: I tJavaRow use the input_row or the actual rowN in this case row4.

    Longer answer, how I'd do it.

    I'd do is let the excel flow in AS-IS. By using some Java tricks we can simply skip the first few rows then let the rest of the flow go through. So the filter + tjavarow combo can be replaced with a tJavaFlex.

    tJavaFlex I'd do:

    begin:

    boolean contentFound = false;
    

    main

    if(input_row.col1 != null && input_row.col1.equalsIgnoreCase("Code:") ) {
       globalMap.put("code",input_row.col2);
    }
    if(input_row.col1 != null && input_row.col1.equalsIgnoreCase("Column A:") ) {
       contentFound = true;
    } else {
       if(false == contentFound) continue;
    }
    

    This way you'll simply skip the first few records (i.e header) and only care about the actual data.