Saltar al contenido

Componente de Lista de Transferencias

Descripción General

El componente Transfer List 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 anterior (paso) de la actividad para definir la lista de objetos. Este ejemplo muestra una lista de transferencia que se usa en el conector LDAP de Cloud Studio Actividad de agregar entrada:

Ejemplo de lista de transferencia del conector LDAP de Cloud Studio

Componente JSON

como el list-object componente que precede a esta lista de transferencia es una parte esencial de su operación, este fragmento JSON incluye tanto el list-object y el transfer-list componentes:

"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"
                     ],
                     "tableItems": [
                        "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 el transfer-list, estas propiedades se pueden configurar:

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

Descubrimiento de Componentes

Se espera que el conector proporcione la lista de objetos. Esto se proporciona de una manera similar a cómo el componente Objeto de lista descubre su lista de objetos y el mismo método (getObjectList) en la actividad se llama. 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 devuelto según el nombre de página del paso que se llama. Como se muestra en este ejemplo, el nombre de la página se resuelve y luego se usa 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 de Componente

La lista de transferencia devuelve al conector su salida en forma de cadena JSON. Esta cadena debe volver a convertirse en un objeto antes de que pueda usarse. Esto se logra en el execute() método 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("\\\\", ""));
  }
  . . .