hello
i want to split my input in two different out put and also reformat it.
how to get this done.
currently i have try by reformating but its not working
reformat class generate exception out of index for target[1]
if i remove all line with target[1] then graph shows Fatal_Error in outout2
here is sales.txt
<Record name="sales" type="delimited">
<Field name="customer_id" type="long" delimiter="," format="#"/>
<Field name="date" type="date" delimiter="," format="yyyy-MM-dd" />
<Field name="doc_no" type="string" delimiter="," />
<Field name="version" type="integer" delimiter="," />
<Field name="sales_representative" type="string" delimiter="," />
<Field name="item_id" type="long" delimiter="," />
<Field name="qty" type="long" delimiter="," />
<Field name="price" type="numeric" delimiter="," />
<Field name="discount1" type="numeric" delimiter="," />
<Field name="discount2" type="numeric" delimiter="," />
</Record>
here is time.txt
<Record name="time" type="delimited">
<Field name="time_id" type="numeric" delimiter="," format="#"/>
<Field name="day" type="integer" delimiter="," format="#"/>
<Field name="month" type="integer" delimiter="," format="#"/>
<Field name="month_name" type="string" delimiter="," format="#" />
<Field name="quarter" type="string" delimiter="," format="#" />
<Field name="year" type="integer" delimiter="," format="#"/>
</Record>
here is salesout.txt
<Record name="sales" type="delimited">
<Field name="id" type="integer" delimiter="," format="#"/>
<Field name="customer_id" type="integer" delimiter="," format="#"/>
<Field name="time_id" type="integer" delimiter="," format="#"/>
<Field name="doc_no" type="string" delimiter="," />
<Field name="version" type="integer" delimiter="," />
<Field name="sales_representative" type="string" delimiter="," />
<Field name="item_id" type="integer" delimiter="," />
<Field name="unit" type="string" delimiter="," />
<Field name="qty" type="numeric" delimiter="," />
<Field name="price" type="numeric" delimiter="," />
<Field name="discount1" type="numeric" delimiter="," />
<Field name="discount2" type="numeric" delimiter="," />
</Record>
here is graph file.
<?xml version="1.0" encoding="UTF-8"?>
<Graph name="Testing Reformat">
<Global>
<Metadata id="InMetadata" fileURL="metadata/sales.txt"/>
<Metadata id="OutMetadata" fileURL="metadata/time.txt"/>
<Metadata id="OutMetadata1" fileURL="metadata/salesout.txt"/>
<DBConnection id="InterbaseDB" dbConfig="Postgress.cfg"/>
<DBConnection id="InterbaseDB1" dbConfig="Postgress1.cfg"/>
</Global>
<Phase number="0">
<Node id="INPUT" type="DB_INPUT_TABLE" dbConnection="InterbaseDB" sqlQuery="select customer_id,"date",prefix || ' ' || doc_no as doc_no,version,pm.person_first_name || ' ' || pm.person_last_name as sales_representative,item_id,qty,price,discount1,discount2 from sv_master as sv,employee_master as em,person_master as pm,sv_detail as sd where sv.id <> 0 and sv.current_version and sv.sales_representativ=em.id and em.person_master_id=pm.id and sd.sv_id=sv.id"/>
<Node id="REF" type="REFORMAT" >
import org.jetel.component.DataRecordTransform;
import org.jetel.data.*;
import java.util.Date;
public class reformatOrders extends DataRecordTransform{
int counter=1;
int field=0;
public boolean transform(DataRecord source[], DataRecord[] target){
try{
// mapping among source + target fields
// some fields get assigned directly from source fields, some
// are assigned from internall variables
Date saleDate=GetVal.getDate(source[0],"date");
SetVal.setInt(target[0],"time_id",counter);
SetVal.setInt(target[0],"day",saleDate.getDate());
SetVal.setInt(target[0],"month",saleDate.getMonth()+1);
switch(saleDate.getMonth()+1)
{
case 1:
SetVal.setString(target[0],"month_name","January");
SetVal.setString(target[0],"quarter","Q1");
break;
case 2:
SetVal.setString(target[0],"month_name","Fabruary");
SetVal.setString(target[0],"quarter","Q1");
break;
case 3:
SetVal.setString(target[0],"month_name","March");
SetVal.setString(target[0],"quarter","Q1");
break;
case 4:
SetVal.setString(target[0],"month_name","April");
SetVal.setString(target[0],"quarter","Q2");
break;
case 5:
SetVal.setString(target[0],"month_name","May");
SetVal.setString(target[0],"quarter","Q2");
break;
case 6:
SetVal.setString(target[0],"month_name","June");
SetVal.setString(target[0],"quarter","Q2");
break;
case 7:
SetVal.setString(target[0],"month_name","July");
SetVal.setString(target[0],"quarter","Q3");
break;
case 8:
SetVal.setString(target[0],"month_name","August");
SetVal.setString(target[0],"quarter","Q3");
break;
case 9:
SetVal.setString(target[0],"month_name","September");
SetVal.setString(target[0],"quarter","Q3");
break;
case 10:
SetVal.setString(target[0],"month_name","October");
SetVal.setString(target[0],"quarter","Q4");
break;
case 11:
SetVal.setString(target[0],"month_name","November");
SetVal.setString(target[0],"quarter","Q4");
break;
case 12:
System.out.println("case 12:"+saleDate.getMonth());
SetVal.setString(target[0],"month_name","December");
SetVal.setString(target[0],"quarter","Q4");
}
SetVal.setInt(target[0],"year",saleDate.getYear()+1900);
SetVal.setInt(target[1],"id",200);
SetVal.setInt(target[1],"customer_id",GetVal.getInt(source[0],"customer_id"));
SetVal.setInt(target[1],"time_id",counter);
SetVal.setString(target[1],"doc_no",GetVal.getString(source[0],"doc_no"));
SetVal.setInt(target[1],"version",GetVal.getInt(source[0],"version"));
SetVal.setString(target[1],"sales_representative",GetVal.getString(source[0],"sales_representative"));
SetVal.setInt(target[1],"item_id",GetVal.getInt(source[0],"item_id"));
SetVal.setString(target[1],"unit","MM");
SetVal.setInt(target[1],"qty",GetVal.getInt(source[0],"qty"));
SetVal.setDouble(target[1],"price",GetVal.getDouble(source[0],"price"));
SetVal.setDouble(target[1],"discount1",GetVal.getDouble(source[0],"discount1"));
SetVal.setDouble(target[1],"discount2",GetVal.getDouble(source[0],"discount2"));
}catch(Exception ex){
errorMessage=ex.getMessage()+" ->occured with record :"+counter;
System.out.println(errorMessage);
ex.printStackTrace();
return false;
}
counter++;
return true;
}
}
</Node>
<Node id="OUTPUT" type="DB_OUTPUT_TABLE" dbConnection="InterbaseDB1" dbTable="time"/>
<Node id="OUTPUT1" type="DB_OUTPUT_TABLE" dbConnection="InterbaseDB1" dbTable="sales"/>
<Edge id="INEDGE" fromNode="INPUT:0" toNode="REF:0" metadata="InMetadata"/>
<Edge id="OUTEDGE" fromNode="REF:0" toNode="OUTPUT:0" metadata="OutMetadata"/>
<Edge id="OUTEDGE1" fromNode="REF:1" toNode="OUTPUT1:0" metadata="OutMetadata1"/>
</Phase>
</Graph>
i want to split my input in two different out put and also reformat it.
how to get this done.
currently i have try by reformating but its not working
reformat class generate exception out of index for target[1]
if i remove all line with target[1] then graph shows Fatal_Error in outout2
here is sales.txt
<Record name="sales" type="delimited">
<Field name="customer_id" type="long" delimiter="," format="#"/>
<Field name="date" type="date" delimiter="," format="yyyy-MM-dd" />
<Field name="doc_no" type="string" delimiter="," />
<Field name="version" type="integer" delimiter="," />
<Field name="sales_representative" type="string" delimiter="," />
<Field name="item_id" type="long" delimiter="," />
<Field name="qty" type="long" delimiter="," />
<Field name="price" type="numeric" delimiter="," />
<Field name="discount1" type="numeric" delimiter="," />
<Field name="discount2" type="numeric" delimiter="," />
</Record>
here is time.txt
<Record name="time" type="delimited">
<Field name="time_id" type="numeric" delimiter="," format="#"/>
<Field name="day" type="integer" delimiter="," format="#"/>
<Field name="month" type="integer" delimiter="," format="#"/>
<Field name="month_name" type="string" delimiter="," format="#" />
<Field name="quarter" type="string" delimiter="," format="#" />
<Field name="year" type="integer" delimiter="," format="#"/>
</Record>
here is salesout.txt
<Record name="sales" type="delimited">
<Field name="id" type="integer" delimiter="," format="#"/>
<Field name="customer_id" type="integer" delimiter="," format="#"/>
<Field name="time_id" type="integer" delimiter="," format="#"/>
<Field name="doc_no" type="string" delimiter="," />
<Field name="version" type="integer" delimiter="," />
<Field name="sales_representative" type="string" delimiter="," />
<Field name="item_id" type="integer" delimiter="," />
<Field name="unit" type="string" delimiter="," />
<Field name="qty" type="numeric" delimiter="," />
<Field name="price" type="numeric" delimiter="," />
<Field name="discount1" type="numeric" delimiter="," />
<Field name="discount2" type="numeric" delimiter="," />
</Record>
here is graph file.
<?xml version="1.0" encoding="UTF-8"?>
<Graph name="Testing Reformat">
<Global>
<Metadata id="InMetadata" fileURL="metadata/sales.txt"/>
<Metadata id="OutMetadata" fileURL="metadata/time.txt"/>
<Metadata id="OutMetadata1" fileURL="metadata/salesout.txt"/>
<DBConnection id="InterbaseDB" dbConfig="Postgress.cfg"/>
<DBConnection id="InterbaseDB1" dbConfig="Postgress1.cfg"/>
</Global>
<Phase number="0">
<Node id="INPUT" type="DB_INPUT_TABLE" dbConnection="InterbaseDB" sqlQuery="select customer_id,"date",prefix || ' ' || doc_no as doc_no,version,pm.person_first_name || ' ' || pm.person_last_name as sales_representative,item_id,qty,price,discount1,discount2 from sv_master as sv,employee_master as em,person_master as pm,sv_detail as sd where sv.id <> 0 and sv.current_version and sv.sales_representativ=em.id and em.person_master_id=pm.id and sd.sv_id=sv.id"/>
<Node id="REF" type="REFORMAT" >
import org.jetel.component.DataRecordTransform;
import org.jetel.data.*;
import java.util.Date;
public class reformatOrders extends DataRecordTransform{
int counter=1;
int field=0;
public boolean transform(DataRecord source[], DataRecord[] target){
try{
// mapping among source + target fields
// some fields get assigned directly from source fields, some
// are assigned from internall variables
Date saleDate=GetVal.getDate(source[0],"date");
SetVal.setInt(target[0],"time_id",counter);
SetVal.setInt(target[0],"day",saleDate.getDate());
SetVal.setInt(target[0],"month",saleDate.getMonth()+1);
switch(saleDate.getMonth()+1)
{
case 1:
SetVal.setString(target[0],"month_name","January");
SetVal.setString(target[0],"quarter","Q1");
break;
case 2:
SetVal.setString(target[0],"month_name","Fabruary");
SetVal.setString(target[0],"quarter","Q1");
break;
case 3:
SetVal.setString(target[0],"month_name","March");
SetVal.setString(target[0],"quarter","Q1");
break;
case 4:
SetVal.setString(target[0],"month_name","April");
SetVal.setString(target[0],"quarter","Q2");
break;
case 5:
SetVal.setString(target[0],"month_name","May");
SetVal.setString(target[0],"quarter","Q2");
break;
case 6:
SetVal.setString(target[0],"month_name","June");
SetVal.setString(target[0],"quarter","Q2");
break;
case 7:
SetVal.setString(target[0],"month_name","July");
SetVal.setString(target[0],"quarter","Q3");
break;
case 8:
SetVal.setString(target[0],"month_name","August");
SetVal.setString(target[0],"quarter","Q3");
break;
case 9:
SetVal.setString(target[0],"month_name","September");
SetVal.setString(target[0],"quarter","Q3");
break;
case 10:
SetVal.setString(target[0],"month_name","October");
SetVal.setString(target[0],"quarter","Q4");
break;
case 11:
SetVal.setString(target[0],"month_name","November");
SetVal.setString(target[0],"quarter","Q4");
break;
case 12:
System.out.println("case 12:"+saleDate.getMonth());
SetVal.setString(target[0],"month_name","December");
SetVal.setString(target[0],"quarter","Q4");
}
SetVal.setInt(target[0],"year",saleDate.getYear()+1900);
SetVal.setInt(target[1],"id",200);
SetVal.setInt(target[1],"customer_id",GetVal.getInt(source[0],"customer_id"));
SetVal.setInt(target[1],"time_id",counter);
SetVal.setString(target[1],"doc_no",GetVal.getString(source[0],"doc_no"));
SetVal.setInt(target[1],"version",GetVal.getInt(source[0],"version"));
SetVal.setString(target[1],"sales_representative",GetVal.getString(source[0],"sales_representative"));
SetVal.setInt(target[1],"item_id",GetVal.getInt(source[0],"item_id"));
SetVal.setString(target[1],"unit","MM");
SetVal.setInt(target[1],"qty",GetVal.getInt(source[0],"qty"));
SetVal.setDouble(target[1],"price",GetVal.getDouble(source[0],"price"));
SetVal.setDouble(target[1],"discount1",GetVal.getDouble(source[0],"discount1"));
SetVal.setDouble(target[1],"discount2",GetVal.getDouble(source[0],"discount2"));
}catch(Exception ex){
errorMessage=ex.getMessage()+" ->occured with record :"+counter;
System.out.println(errorMessage);
ex.printStackTrace();
return false;
}
counter++;
return true;
}
}
</Node>
<Node id="OUTPUT" type="DB_OUTPUT_TABLE" dbConnection="InterbaseDB1" dbTable="time"/>
<Node id="OUTPUT1" type="DB_OUTPUT_TABLE" dbConnection="InterbaseDB1" dbTable="sales"/>
<Edge id="INEDGE" fromNode="INPUT:0" toNode="REF:0" metadata="InMetadata"/>
<Edge id="OUTEDGE" fromNode="REF:0" toNode="OUTPUT:0" metadata="OutMetadata"/>
<Edge id="OUTEDGE1" fromNode="REF:1" toNode="OUTPUT1:0" metadata="OutMetadata1"/>
</Phase>
</Graph>
-
hello david
when next version will out? -
Hello !
Your reformat does not work because current version of Reformat (as of Clover release 1.1.6) does
not support more than 1 intput and 1 output ports.
This is going to be changed in the next release (1.1.7) where reformat component will be able to support 1 input and multiple output ports.
Please sign in to leave a comment.
Comments 2