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