Saltar al contenido

Componente de Lista de Transferencia del SDK del Conector Jitterbit

Descripción general

El componente de Lista de Transferencia puede generar dinámicamente, en tiempo de diseño, una lista de objetos y permitir que un usuario seleccione uno o más objetos. Se utiliza junto con un componente de Objeto de Lista en una página (paso) anterior de la actividad para definir la lista de objetos. Este ejemplo muestra una lista de transferencia utilizada en la actividad Agregar Entrada del conector LDAP de Integration Studio:

Ejemplo de lista de transferencia del conector LDAP de Integration Studio

JSON del componente

Dado que el componente list-object que precede a esta lista de transferencia es una parte esencial de su funcionamiento, este fragmento JSON incluye tanto los componentes list-object como transfer-list:

"addEntry": {
   "displayName": "Add Entry",
   "properties": [
      {
         "name": "list-object-page",
         "type": "pagination",
         "children": [
            {
               "name": "list-object",
               "displayName": "Select Structural Class",
               "type": "list-object",
               "use": {
                  "ui": {
                     "selectObjectLabel": "Selected Structural Class: ",
                     "tableHeaders": [
                        "Name"
                     ]
                  },
                  "discoveryType": "provided",
                  "orientation": "output",
                  "documentIdPath": "this"
               }
            },
            {
               "name": "continue",
               "displayName": "Continue on error",
               "type": "boolean",
               "defaultValue": false,
               "validators": [
                  {
                     "name": "required"
                  }
               ]
            }
         ]
      },
      {
         "name": "transfer-list-page",
         "type": "pagination",
         "children": [
            {
               "name": "transfer-list",
               "displayName": "Select Auxiliary Class",
               "type": "transfer-list",
               "widgetHint": "component:connector/transfer-list",
               "use": {
                  "ui": {
                     "mainTitle": "Object Classes",
                     "leftSubTitle": "Available Auxiliary Classes",
                     "rightSubTitle": "Selected Auxiliary Classes",
                     "showDefaultTypeIcons": false
                  }
               },
               "validators": [
                  {
                     "name": "min",
                     "args": [
                        0
                     ]
                  }
               ]
            }
         ]
      }
   ]
}

En el JSON que describe la transfer-list, se pueden configurar estas propiedades:

  • type: El tipo de componente de lista de transferencia debe ser "transfer-list".
  • mainTitle: Título para la lista de transferencia.
  • leftSubTitle: Subtítulo sobre la lista izquierda.
  • rightSubTitle: Subtítulo sobre la lista derecha.
  • showDefaultTypeIcons: Si es true, se muestran los íconos de tipo de objeto LDAP.
  • args: Define el número mínimo de campos que deben seleccionarse para que el componente sea válido. Puede ser [0], lo que permite que no haya selección válida y permite al usuario continuar al siguiente paso.

Descubrimiento del componente

Se espera que el conector proporcione la lista de objetos. Esto se proporciona de manera similar a cómo el componente de Objeto de Lista descubre su lista de objetos y se llama al mismo método (getObjectList) en la actividad. Para distinguir la llamada a este método cuando se llama para una lista de transferencia que sigue a un objeto de lista, cambie el valor de retorno según el nombre de la página del paso que se llama. Como se muestra en este ejemplo, el nombre de la página se resuelve y luego se utiliza para cambiar la formación de la lista de objetos:

@Override
public List<DiscoverableObject> getObjectList(
    DiscoverContextRequest<DiscoverableObjectRequest> objectListRequest) throws DiscoveryException {
  logger.info("Getting objectList for Activity: " + getName());
  List<DiscoverableObject> objectList = new ArrayList<DiscoverableObject>();
  try {
    LdapConnection ldapConnection = (LdapConnection) objectListRequest.getConnection();
    List<Properties> properties = objectListRequest.getRequest().getSelectionPath();
    String page = null;
    for (Properties property : properties) {
      if (property.getKey().equalsIgnoreCase(PROPERTY_NAME)) {
        page = property.getValue().toString();
        break;
      }
    }

    switch (page) {
      case LIST_OBJECT:
        objectList = ldapConnection.getObjectList(ObjectClassTypeEnum.STRUCTURAL);
        break;
      case TRANSFER_LIST:
        objectList = ldapConnection.getObjectList(ObjectClassTypeEnum.AUXILIARY);
        break;
    }
  } catch (Exception ex) {
    ex.printStackTrace();
    String msg = Messages.getMessage(Messages.LDAP_CODE06_MSG,
        new Object[] {getName(), ex.getLocalizedMessage()});
    throw new DiscoveryException(Messages.LDAP_CODE06, msg, ex);
  }
  return objectList;
}

Salida del componente

La lista de transferencia devuelve al conector su salida en forma de una cadena JSON. Esta cadena debe convertirse nuevamente en un objeto antes de que se pueda utilizar. Esto se logra en el método execute() de la actividad:

@Override
public void execute(ExecutionContext context) throws Exception {
  Map<String, String> functionalParam = context.getFunctionParameters();
  String transferList = functionalParam.get(TRANSFER_LIST);
  JSONObject transferListJsonObject;
  JSONArray selectedNameJsonArray;
  . . .
  try {
    transferListJsonObject = new JSONObject(transferList);
    selectedNameJsonArray = transferListJsonObject.getJSONArray(SELECTED_NAMES);
  } catch (JSONException e) {
    transferList = transferList.substring(transferList.indexOf('['), (transferList.indexOf(']') + 1));
    selectedNameJsonArray = new JSONArray(transferList.replaceAll("\\\\", ""));
  }
  . . .