Ir para o conteúdo

Componente Transfer List do Jitterbit Connector SDK

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 List Object em uma página (etapa) anterior da atividade para definir a lista de objetos. Este exemplo mostra uma lista de transferência sendo usada na atividade Adicionar Entrada do conector LDAP do Integration Studio:

Exemplo de Transfer List do conector LDAP do Integration Studio

JSON do Componente

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

No JSON que descreve a transfer-list, estas propriedades podem ser configuradas:

  • type: O tipo do componente de lista de transferência deve ser "transfer-list".
  • mainTitle: Título para a lista de transferência.
  • leftSubTitle: Subtítulo acima da lista da esquerda.
  • rightSubTitle: Subtítulo acima da lista da 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 que o componente seja válido. Pode ser [0], o que permite que nenhuma seleção seja válida e permite que o usuário continue para a etapa seguinte.

Descoberta do Componente

Espera-se que o conector forneça a lista de objetos. Isso é fornecido de uma maneira semelhante a como o componente List Object descobre sua lista de objetos e o mesmo método (getObjectList) na atividade é chamado. Para distinguir a chamada a este método quando chamado para uma lista de transferência que segue um objeto de lista, altere o valor de retorno com base no nome da página da etapa que é chamada. Como mostrado neste exemplo, o nome da página é resolvido e, em seguida, 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 ser utilizada. Isso é realizado no método execute() 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("\\\\", ""));
  }
  . . .