public String getXML() { StringBuffer retval = new StringBuffer(); retval.append( " " + XMLHandler.addTagValue( "connection", databaseMeta == null ? "" : databaseMeta.getName())); retval.append(" ").append(XMLHandler.openTag(XML_TAG_FUNCTION)).append(Const.CR); if (function != null && !Const.isEmpty(function.getName())) { retval.append(" " + XMLHandler.addTagValue("name", function.getName())); retval.append(" " + XMLHandler.addTagValue("description", function.getDescription())); retval.append(" " + XMLHandler.addTagValue("group", function.getGroup())); retval.append(" " + XMLHandler.addTagValue("application", function.getApplication())); retval.append(" " + XMLHandler.addTagValue("host", function.getHost())); } retval.append(" ").append(XMLHandler.closeTag(XML_TAG_FUNCTION)).append(Const.CR); retval.append(" ").append(XMLHandler.openTag(XML_TAG_PARAMETERS)).append(Const.CR); for (SapParameter parameter : parameters) { retval.append(" ").append(XMLHandler.openTag(XML_TAG_PARAMETER)); retval.append(XMLHandler.addTagValue("field_name", parameter.getFieldName(), false)); retval.append(XMLHandler.addTagValue("sap_type", parameter.getSapType().getCode(), false)); retval.append(XMLHandler.addTagValue("table_name", parameter.getTableName(), false)); retval.append(XMLHandler.addTagValue("parameter_name", parameter.getParameterName(), false)); retval.append( XMLHandler.addTagValue( "target_type", ValueMeta.getTypeDesc(parameter.getTargetType()), false)); retval.append(" ").append(XMLHandler.closeTag(XML_TAG_PARAMETER)).append(Const.CR); } retval.append(" ").append(XMLHandler.closeTag(XML_TAG_PARAMETERS)).append(Const.CR); retval.append(" ").append(XMLHandler.openTag(XML_TAG_FIELDS)).append(Const.CR); for (SapOutputField parameter : outputFields) { retval.append(" ").append(XMLHandler.openTag(XML_TAG_FIELD)); retval.append(XMLHandler.addTagValue("field_name", parameter.getSapFieldName(), false)); retval.append(XMLHandler.addTagValue("sap_type", parameter.getSapType().getCode(), false)); retval.append(XMLHandler.addTagValue("table_name", parameter.getTableName(), false)); retval.append(XMLHandler.addTagValue("new_name", parameter.getNewName(), false)); retval.append( XMLHandler.addTagValue( "target_type", ValueMeta.getTypeDesc(parameter.getTargetType()), false)); retval.append(" ").append(XMLHandler.closeTag(XML_TAG_FIELD)).append(Const.CR); } retval.append(" ").append(XMLHandler.closeTag(XML_TAG_FIELDS)).append(Const.CR); return retval.toString(); }
public void saveRep(Repository rep, ObjectId id_transformation, ObjectId id_step) throws KettleException { try { rep.saveDatabaseMetaStepAttribute(id_transformation, id_step, "id_connection", databaseMeta); if (function != null && !Const.isEmpty(function.getName())) { rep.saveStepAttribute(id_transformation, id_step, "function_name", function.getName()); rep.saveStepAttribute( id_transformation, id_step, "function_description", function.getDescription()); rep.saveStepAttribute(id_transformation, id_step, "function_group", function.getGroup()); rep.saveStepAttribute( id_transformation, id_step, "function_application", function.getApplication()); rep.saveStepAttribute(id_transformation, id_step, "function_host", function.getHost()); } for (int i = 0; i < parameters.size(); i++) { SapParameter parameter = parameters.get(i); rep.saveStepAttribute( id_transformation, id_step, i, "parameter_field_name", parameter.getFieldName()); rep.saveStepAttribute( id_transformation, id_step, i, "parameter_sap_type", parameter.getSapType() == null ? null : parameter.getSapType().getCode()); rep.saveStepAttribute( id_transformation, id_step, i, "parameter_table_name", parameter.getTableName()); rep.saveStepAttribute( id_transformation, id_step, i, "parameter_name", parameter.getParameterName()); rep.saveStepAttribute( id_transformation, id_step, i, "parameter_target_type", ValueMeta.getTypeDesc(parameter.getTargetType())); } for (int i = 0; i < outputFields.size(); i++) { SapOutputField field = outputFields.get(i); rep.saveStepAttribute( id_transformation, id_step, i, "field_sap_field_name", field.getSapFieldName()); rep.saveStepAttribute( id_transformation, id_step, i, "field_sap_type", field.getSapType() == null ? null : field.getSapType().getCode()); rep.saveStepAttribute( id_transformation, id_step, i, "field_table_name", field.getTableName()); rep.saveStepAttribute( id_transformation, id_step, i, "field_target_type", ValueMeta.getTypeDesc(field.getTargetType())); rep.saveStepAttribute(id_transformation, id_step, i, "field_new_name", field.getNewName()); } } catch (Exception e) { throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e); } }
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { Object[] r = getRow(); if (r == null) // no more input to be expected... { setOutputDone(); return false; } if (first) { first = false; // Determine the output row metadata of this step // data.outputRowMeta = new RowMeta(); meta.getFields(data.outputRowMeta, getStepname(), null, null, this); // Pre-calculate the indexes of the parameters for performance reasons... // data.parameterIndexes = new ArrayList<Integer>(); for (SapParameter parameter : meta.getParameters()) { int index = getInputRowMeta().indexOfValue(parameter.getFieldName()); if (index < 0) { throw new KettleException("Unable to find field '" + parameter.getFieldName() + "'"); } data.parameterIndexes.add(index); } // Pre-calculate the output fields // data.output = new ArrayList<SAPField>(); for (SapOutputField outputField : meta.getOutputFields()) { SAPField field = new SAPField( outputField.getSapFieldName(), outputField.getTableName(), "output_" + outputField.getSapType().getDescription()); data.output.add(field); } } // Assemble the list of input fields for the SAP function execution... // ArrayList<SAPField> input = new ArrayList<SAPField>(); for (int i = 0; i < meta.getParameters().size(); i++) { SapParameter parameter = meta.getParameters().get(i); int fieldIndex = data.parameterIndexes.get(i); ValueMetaInterface valueMeta = getInputRowMeta().getValueMeta(fieldIndex); Object value = valueMeta.convertToNormalStorageType(r[fieldIndex]); // TODO: figure out if the executeFunction needs the data to be in a specific data type or // format!! // If so, value needs to be converted to the appropriate data type here. SAPField field = new SAPField( parameter.getParameterName(), parameter.getTableName(), "input_" + parameter.getSapType().getDescription(), value); input.add(field); } // Get the output... // SAPRowIterator resultSet; try { resultSet = data.sapConnection.executeFunctionCursored(meta.getFunction(), input, data.output); } catch (SAPException e) { throw new KettleException(e); } while (resultSet.hasNext()) { SAPRow sapRow = resultSet.next(); Object[] outputRowData = RowDataUtil.allocateRowData(data.outputRowMeta.size()); int outputIndex = 0; // Makes it easier to add all sorts of fields later on, like row number, input fields, // etc. for (SAPField field : sapRow.getFields()) { // TODO: Here we should check as well whether or not the correct data types are delivered // from SAP. // Make sure that we don't pass the appropriate data types : String, long, double, Date, // BigDecimal, Boolean, byte[] ONLY!! // outputRowData[outputIndex++] = field.getValue(); } // Pass the row along: row metadata and data need to correspond!! // putRow(data.outputRowMeta, outputRowData); if (getTrans().isStopped()) break; } return true; }