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