Operational Decision Manager (ODM) stage fields and ruleset parameters mapping in DataStage
The Operational Decision Manager (ODM) stage converts the records available in the input link into Java™ objects. The connector must understand the mapping between the connector stage fields and the ruleset parameters to complete the conversion.
The mapping can also be identified automatically by using the configuration wizard. The following sections describe how the IBM® DataStage® fields are mapped to the ruleset parameters.
Java XOM
- The methods present in the ruleset parameter class
- The ruleset parameter name and data type (if it is of basic Java type).
For more information about basic Java types, refer to the topic Operational Decision Manager (ODM) stage basic Java types and methods in DataStage. If the ruleset parameter conforms to the conditions specified in the Automatic mapping section, then the mapping is done automatically based on the Column name attribute of the field. Otherwise, the mapping is done by using a mapping specification that is provided in the Description attribute of the field.
Automatic mapping
The ODM stage can automatically identify the mapping between the link fields and the ruleset parameter if any of the following conditions are met:
- If the ruleset parameter is of one of the basic Java types that are supported by the connector, then the Column name must correspond to the name of the ruleset parameter. The SQL Type of the field must be compatible with the basic Java type of the ruleset parameter. For more information about mapping or compatibility of data types, refer to topics DataStage type to Java type mapping with the Operational Decision Manager (ODM) stage and Java type to DataStage type mapping with the Operational Decision Manager (ODM) stage. In this case, the field is directly mapped to the ruleset parameter.
- If the ruleset parameter is not of a basic Java type and the link is an input link, then the ruleset parameter class must have a method that is named setFieldName(), where FieldName is the Column name of the field. The comparison of the Column name and the method name is not case-sensitive. The method must not have any return type and must have a single argument and the SQL type of the field on the input link must be compatible with the data type of the argument that is expected by the method. For example, the field firstName of type VarChar(10) on an input link maps to the first and only argument of the method void setFirstName(String name). In this case, the input field is mapped to the argument expected by the method.
- If the ruleset parameter is not of a basic Java type and the link is an output link, then the ruleset parameter class must have a method that is named getFieldName(), where FieldName is the Column name of the field. The comparison of the Column name and the method name is not case-sensitive. A special case is when the method is of boolean or java.lang.Boolean return type, and in that case the method is expected to be named isFieldName(). The return value from the method must be compatible with the SQL type of the field present on the output link. In this case, the field is mapped to the return value of the method.
If there is a field on the input link for which there is no method in the ruleset parameter class conforming to the second condition (and the Description attribute is empty) then the field values are not passed to the ODM stage. Similarly, if there is a field in the output link for which there is no method in the ruleset parameter class that conforms to the third condition (and the Description attribute is empty) then the field value is not set by the ODM stage.
Mapping by using Description specification
If the ruleset parameter does not follow the conditions for automatic mapping, then the ODM stage provides a mechanism to specify the method to be invoked for setting or getting each field value in the DataStage input and output records. This method is specified in the Description attribute of the schema fields on the Columns tab of the stage editor. For every field in the link schema, the Description carries information about the method to be invoked on the Java class associated with the link, to set, or get that field value. If no information is present in the Description attribute for any of the fields, then the ruleset parameter is assumed to conform to the specification mentioned in the Automatic mapping section.
For input link columns, the value of their Description attribute consists
of one more concatenated expression, where each expression is in the CC_JRules(methodName,
parameterIndex); format. The methodName specifies the name of the method
to be invoked on the ruleset parameter object for this column. The parameterIndex
value is an integer greater than or equal to 1, which specifies the index of the parameter (for the
method) to which the column maps to.
For example, a Java object has a method
setFullName(String firstName, String lastName) and the DataStage record contains two fields, firstName and
lastName. In this case, the Description attribute for
firstName is CC_JRules(setFullName,1); and that for
lastName is CC_JRules(setFullName,2);. The
firstName field value from a DataStage record is used for the first argument of
setFullName method and the lastName field value from the same
record is used for the second argument.
The methodName can also be a constructor. If the firstName
column in the example is also used for the first argument of the constructor for the class
Customer, then the Description attribute for the
firstName is
CC_JRules(setFullName,1);CC_JRules(Customer,1);.
For the output links, the method is called to get the value of the field from the Java object. Hence, the field does not expect any parameter. As a result, for
fields on the output links, the parameter index is not required. The syntax of the
Description attribute for the fields on the output link is:
CC_JRules(methodName);. For each field, there must be only one method that can be
called. If more than one method exists, then the ODM stage logs an error and the job fails.
When a single column on the link represents the entire ruleset parameter value, the
Description attribute for the column has the CC_JRules();
value. This situation occurs when the ruleset parameter is of one of the basic Java types that are supported by the connector.
Dynamic XOM
If a DataStage record field contains an XML document that is to be sent to the ruleset based on the Dynamic XOM, then the Description attribute for the field can contain theCC_JRules(); value. When there are multiple fields in the DataStage record, the value is necessary to specify
which of them contains the XML document.If there is a single field in the record, then that field is automatically assumed to be the field that contains the XML document and the Description attribute of the field can be left empty. The field that contains the XML document must be any of the DataStage character-based data types such as Char, NChar, VarChar, NVarChar, LongVarChar, or LongNVarChar.