import ultra.SAP_JCO;
boolean receivedHeader;
beginBatch {
// Set receivedHeader = false.
receivedHeader = false;
}
consume {
// First record is the Header, so we will create HeaderUDR and map the value from input to it
if (receivedHeader == false) {
HeaderUDR header = udrCreate(HeaderUDR);
//Assign Filename to HeaderUDR, this is use as primary key for State
Handling
header.sourceFilename = (string) mimGet("Disk_1", "Source Filename");
//Translate Input record in HeaderUDR
getListOfBitField(header, input.value);
//Route HeaderUDR out and set receivedHeader = false
udrRoute(header);
receivedHeader = true;
} else {
//For every record after Header, it will be the actual data records
//Create RecordUDR and map values from input to it.
//This example, input fields are comma separated
RecordUDR record = udrCreate(RecordUDR);
record.listOfFields = strSplit(input.value, ",");
udrRoute(record);
}
}
endBatch {
debug("Response Time=" + mimGet("sap_jco_1", "Average Response Time"));
debug("NoOfExecutions=" + mimGet("sap_jco_1", "No of Executions"));
}
/*
This example function split the Header String into multiple BitFieldUDRs
The example's format has "Version" in Field 1, "RFC Name" in Field 2 and
the rest of the format description after that
*/
list<BitFieldUDR> getListOfBitField(HeaderUDR header, string data) {
list<BitFieldUDR> result = listCreate(BitFieldUDR);
if (data != null) {
//All fields are comma seperated
list <string> fields = strSplit(data, ",");
if (listSize(fields) > 3) {
header.version = listGet(fields,0);
header.rfcName = listGet(fields,1);
int i = 2;
//In this example, every bitFieldUDR has the format "FieldName:FieldType"
while (i < listSize(fields)) {
BitFieldUDR bitField = udrCreate(BitFieldUDR);
string value = listGet(fields,i);
list<string> nameAndType = strSplit(value, ":");
if (listSize(nameAndType) >= 2) {
bitField.fieldName = listGet(nameAndType, 0);
bitField.fieldType = listGet(nameAndType, 1);
} else {
bitField.fieldName = value;
}
listAdd(result, bitField);
i = i + 1;
}
//Add the entire bitFieldUDR list into HeaderUDR
header.listOfBitFields = result;
} else {
abort ("Header has less than 3 fields!");
}
}
return result;
} |