The data from SAP is returned as a JCo.Table. However, we don't want to display ALL the columns in the VIEW. So, what we have done is, we have created a file called display.xml which has the JCO.Table columns to be displayed. The display.xml is converted to a List and each field is verified if it is present in the display list(see the code below) which is redundant from second row onwards.
final Table outputTable = jcoFunction.getTableParameterList().
getTable("OUTPUT_TABLE");
final int numRows = outputTable.getNumRows();
for (int i = 0; i < numRows; i++) {
final FieldIterator fields = outputTable.fields();
while (fields.hasNextFields()) {
final JCO.Field recordField = fields.nextField();
final String sapFieldName = recordField.getName();
final DisplayFieldDto key = new DisplayFieldDto(sapFieldName);
if (displayFields.contains(key)) {
System.out.println("recordField.getName() = "
+ recordField.getName());
final String sapFiel开发者_如何转开发dName = (String)recordField.getValue();
} else {
// ignore the field.
}
}
}
What is the better way to filter the fields in JCo? Can I iterate column wise? Thank you :)
Instead of getting all fields of the table record and checking them against fields present in displayFields, you could take only the fields of the record that are in displayFields. The following code suppose that displayFields is a List of String
for (int i = 0; i < ouputTable.getNumRows(); i++) {
outputTable.setRow(i);
Iterator it = displayField.iterator();
// get fields of current record
while(it.hasNext()){
String fieldName = (String)it.next();
String value = outputTable.getString(fieldName);
// do what you need to do with the field and value
}
}
hope this helps,
Regards,
Guillaume
精彩评论