Esempio n. 1
0
  public void getFields(
      RowMetaInterface row,
      String origin,
      RowMetaInterface[] info,
      StepMeta nextStep,
      VariableSpace space)
      throws KettleStepException {
    row.clear(); // TODO: add an option to also include the input data...

    for (SapOutputField field : outputFields) {

      ValueMetaInterface valueMeta = new ValueMeta(field.getNewName(), field.getTargetType());
      valueMeta.setOrigin(origin);
      row.addValueMeta(valueMeta);
    }
  }
Esempio n. 2
0
  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();
  }
Esempio n. 3
0
  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;
  }