Open topic with navigation

# _JPO

The `_JPO` element runs custom code to retrieve metadata and objects from the repository.

Using the `_JPO` element constructs a Java Program Object (JPO) and calls a method of the new object. For more information about Java Program Objects, refer to the Enovia documentation.

The method takes a `matrix.db.Context` object and a String array. The String array can be unpacked using the method `matrix.db.JPO.unpackArgs`, which returns a `java.util.Map`.

The unpacked map contains the following keys and values:

Key | Type | Value
--- | --- | ---
`connector_task` | String | The name of the connector task.
`document_name` | String | The document_name as specified by the `DOCUMENT` element.
`top_level_object_id` | String | The ID of the current object being processed from the initial query.
`include_map` | java.util.Map | The replacement values from previous `_INCLUDE`, `_INCLUDE_CHILDREN` or `_JPO` elements in the `DocumentsXML` hierarchy.
`relationship_id` | String | The relationship ID if the current object is a relationship.
`object_id` | String | The object ID if the current object is a business object.
`element_attributes` | java.util.Map | Any additional attributes of the `_JPO` element.

The method must return a `java.util.Map`. The map can define the following keys and values:

Key | Type | Value
--- | --- | ---
`metadata` | `java.util.Map` | The field names and values. The map entry value is either a String or a `java.util.List` of String (for multi-value fields).
`object_ids` | A `java.util.List o`f object IDs, or a single object ID as a `String`. | The objects to process when child elements are added following the `_JPO` element in the `DocumentsXML` hierarchy.
`relationship_ids` | A `java.util.List` of relationship IDs or a single relationship ID as a `String`. | The relationships to process when child elements are added following the `_JPO` element in the `DocumentsXML` hierarchy.
`include_map` | `java.util.Map` | New replacement values to override those from previous `_INCLUDE`, `_INCLUDE_CHILDREN` or `_JPO` elements in the `DocumentsXML` hierarchy.
`include_xpath` | `String` | An XPath expression to include an XML fragment. The XML fragment replaces the child elements in the `DocumentsXML` hierarchy.

## _JPO Element Attributes

Attribute | Description
--- | ---
`node_name` | The name of the metadata field created to contain the metadata retrieved by your custom code. If `node_name` is not specified the child metadata is added at the current depth in the document metadata. `node_name` only adds structure to the metadata and does not affect the metadata itself. When `name_attr` is specified, `node_name` instead specifies the field name to be generated. No parent field is generated in this case. The metadata field names from the repository are stored as field attribute values. If `node_name` is not specified, but `name_attr` is specified, the default field name `attr` is used.
`name_attr` | The name of the XML metadata attribute to contain the name of metadata fields retrieved from the repository.
`jpo_name` | The name of the Java Program Object (JPO) that is instantiated. The constructor of the JPO takes a `matrix.db.Context` object and a String array of additional arguments - this array is empty.
`jpo_method` | The name of the method to call. The method must return a `java.util.Map`.

## Example

The following code could be used in the Java Program Object:

    import matrix.db.*;
    import java.util.*;

    public class ${CLASSNAME}
    {
       // JPO constructor.
       // The String[] argument will always be called by the
       // connector with an empty array.

       public ${CLASSNAME} (Context context, String[] args)
       {
       }

       // JPO method.
       // The String[] argument contains a java.util.Map
       // Use matrix.db.JPO.unpackArgs to extract the Map.
       // Return java.util.Map containing any metadata
       // and IDs in the required structure.

       public Map doSomething(Context context, String[] args)
       {
          Map input = (Map)JPO.unpackArgs(args);
          Map output = new HashMap();

          // This example just passes the input object or relationship
          // ID straight through. As a result the method has no effect
          // and the connector will continue processing the
          // child elements of _JPO.

          if (input.containsKey("object_id"))
             output.put("object_ids", input.get("object_id"));

          if (input.containsKey("relationship_id"))
             output.put("relationship_ids", input.get("relationship_id"));

          return output;
       }
    }

© 2018 Micro Focus or one of its affiliates | Send documentation feedback to Micro Focus Close Send documentation feedback To open the configured email client on this computer, open an email window. Otherwise, copy the information below to a web mail client, and send this email to swpdl.idoldocsfeedback@microfocus.com. We appreciate your feedback! Product: Topic Title: Help Topic: Feedback:

_FT_HTML5_bannerTitle.htm