Ir para o conteúdo

Componente da Lista de Transferência

Visão geral

O componente Transfer List pode gerar dinamicamente, em tempo de design, uma lista de objetos e permitir que um usuário selecione um ou mais objetos. Ele é usado em conjunto com um Componente de lista de objetos em uma página anterior (etapa) da atividade para definir a lista de objetos. Este exemplo mostra uma lista de transferência sendo usada no conector LDAP do Cloud Studio Adicionar atividade de entrada:

Exemplo de lista de transferência do conector LDAP do Cloud Studio

Componente JSON

Enquanto o list-object componente que precede esta lista de transferência é uma parte essencial de sua operação, este fragmento JSON inclui tanto o list-object e a 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
                     ]
                  }
               ]
            }
         ]
      }
   ]
}

No JSON que descreve o transfer-list, essas propriedades podem ser configuradas:

  • type: O tipo de componente da lista de transferência deve ser "transfer-list".
  • mainTitle: Título para a lista de transferência.
  • leftSubTitle: Legenda acima da lista à esquerda.
  • rightSubTitle: Legenda acima da lista à direita.
  • showDefaultTypeIcons: Se true, os ícones de tipo de objeto LDAP são exibidos.
  • args: Define o número mínimo de campos que devem ser selecionados para tornar o componente válido. Pode ser [0] que permite que nenhuma seleção seja válida e permite que o usuário continue na etapa seguinte.

Descoberta de componentes

Espera-se que o conector forneça a lista de objetos. Isso é fornecido de maneira semelhante à forma como o componente List Object descobre sua lista de objetos e o mesmo método (getObjectList) na atividade é chamada. Para distinguir a chamada para esse método quando chamada para uma lista de transferência que segue um objeto de lista, alterne o valor de retorno com base no nome da página da etapa chamada. Conforme mostrado neste exemplo, o nome da página é resolvido e usado para alternar a formação da 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;
}

Saída do componente

A lista de transferência retorna ao conector sua saída na forma de uma string JSON. Essa string deve ser convertida de volta em um objeto antes de poder ser usada. Isso é realizado no execute() método da atividade:

@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("\\\\", ""));
  }
  . . .