Componentes básicos de IU do SDK do Conector¶
Visão Geral¶
Esses componentes básicos da interface do usuário estão disponíveis:
- Entrada de string com valor padrão
- Entrada de string sem valor padrão
- Entrada de string com entrada obscura (“Senha”)
- Entrada de string com entrada oculta (sem elemento visível da interface do usuário)
- Área de texto
- Entrada de número
- Entrada booleana (caixa de seleção)
- Escolha de Rádio
- Menu suspenso
Componentes de IU mais sofisticados estão disponíveis e são descritos como Componentes Complexos.
Componentes básicos da interface do usuário¶
Esta amostra mostra os componentes básicos disponíveis, com fragmentos de código detalhados nos exemplos a seguir:
Características comuns¶
Todos os componentes da interface do usuário podem ter um defaultValue
e validators
; veja o primeiro campo de string para um exemplo de ambos. Os validadores são descritos em Adicionando e criando validação.
Campos que mostram um ícone de variável são exemplos de componentes de interface do usuário que oferecem suporte à substituição de variáveis. Quando um usuário insere um colchete de abertura ([
), uma lista de possíveis conclusões de variáveis (Jitterbit, projeto e variáveis globais) será exibida. Atualmente, apenas um componente de interface do usuário String Entry oferece suporte à substituição de variável.
Recuperando valores¶
Os valores são recuperados das propriedades com base em seus nomes. Isso significa que os nomes precisam ser exclusivos para cada conexão e atividade.
O método de fábrica de conexão recebe uma instância das propriedades (props
) que pode ser usado para recuperar valores:
@Override
public Connection createConnection(Map<String, String> props) {
String accessToken = props.get(ACCESS_TOKEN);
String appKey = props.get(APP_KEY);
String locale = !props.containsKey(LOCALE) ? Locale.getDefault().toString() : "EN_US";
if (accessToken == null || accessToken.length() == 0) {
throw new RuntimeException("Access Token property cannot be empty. " +
"Specify the access token associated with the registered Dropbox application.");
}
if (appKey == null || appKey.length() == 0) {
throw new RuntimeException("App Key property cannot be empty. " +
"Specify the app key associated with the registered Dropbox application.");
}
return new DropboxConnection(appKey, accessToken, locale);
}
No exemplo acima, o accessToken
e appKey
os valores são recuperados das propriedades usando as palavras-chave apropriadas (ACCESS_TOKEN
, definido como "access-token"
e APP_KEY
, definido como "app-key"
).
Entrada de string com valor padrão¶
{
"name": "example_string_with_default",
"type": "string",
"defaultValue": "/",
"displayName": "Example string...required validator",
"validators": [
{
"name": "required"
}
]
}
Entrada de string sem valor padrão¶
{
"name": "example_string_without_default",
"type": "string",
"displayName": "Example string without a default value"
}
Entrada de string com entrada obscura (“Senha”)¶
{
"name": "example_password_string",
"type": "string",
"displayName": "Example password string",
"multiple": false,
"widgetHint": "password"
}
Entrada de string com entrada oculta (Sem elemento visível da interface do usuário)¶
Nesse caso, nenhum elemento visível da interface do usuário é exibido. Um valor está disponível para configuração, como um valor padrão ou programaticamente por outros componentes.
{
"name": "example_hidden_string",
"type": "string",
"displayName": "Example hidden string",
"defaultValue": "hidden_value",
"hidden": true,
"multiple": false
}
Área de texto¶
Projetado para várias linhas de texto.
{
"name": "example_textarea",
"type": "textarea",
"displayName": "Example text area",
"location": "last",
"multiple": false,
"widgetHint": "textarea"
}
Entrada de número¶
Para inserir números, com setas de incremento/decremento (visíveis ao passar o mouse ou quando o campo está em foco) e ativação de seta do teclado (teclas de seta para cima e para baixo aumentam e diminuem o valor).
{
"name": "example_number",
"type": "number",
"displayName": "Example number",
"multiple": false
}
Entrada booleana (Caixa de seleção)¶
{
"name": "example_boolean",
"type": "boolean",
"displayName": "Example boolean",
"defaultValue": true,
"multiple": false
}
Opção de rádio¶
Usado para criar grupos de botões de opção. O realValue
é o valor que será retornado quando recuperado das propriedades no conector. O enumValue
é exibido ao usuário.
{
"type": "string",
"multiple": false,
"name": "radio_choice_example",
"widgetHint": "radio-choice",
"displayName": "Example radio choice",
"enumValues": [
{
"enumValue": "Binary",
"realValue": "1"
},
{
"enumValue": "ASCII",
"realValue": "2"
},
{
"enumValue": "Other",
"realValue": "3"
}
],
"defaultValue": "2"
}
Menu suspenso¶
Usado para criar grupos de menus suspensos. O realValue
é o valor que será retornado quando recuperado das propriedades no conector. O enumValue
é exibido ao usuário.
{
"name": "enum_example",
"displayName": "Example menu using enum of values",
"enumValues": [
{
"enumValue": "First Item",
"realValue": "0"
},
{
"enumValue": "Second Item (default)",
"realValue": "1"
},
{
"enumValue": "Third Item",
"realValue": "2"
}
],
"defaultValue": "1"
}
Menus suspensos suportam edição e pesquisa. Isso é especificado pela configuração de uma propriedade adicional, enumOptions
, que suporta editable
e searchable
:
editable
: Setrue
, um usuário pode adicionar uma nova opção ao menu suspenso e selecionar essa nova opção. O padrão éfalse
.searchable
: Setrue
, um usuário pode digitar no menu suspenso para filtrar as opções existentes no menu suspenso. O padrão éfalse
.
As duas opções podem ser combinadas, se desejado. A presença de um não implica o outro. Por exemplo, uma seleção de versão pode ser:
{
"name": "version",
"displayName": "Version",
"enumValues": [
{
"enumValue": "v33.0",
"realValue": "v33.0"
},
{
"enumValue": "v33.1",
"realValue": "v33.1"
}
],
"enumOptions": {
"editable": true
},
"defaultValue": "v33.1"
}
Exemplo de menu suspenso da região da AWS¶
Este é um exemplo mais longo que mostra como as propriedades que um usuário precisará fornecer ao configurar uma conexão ou atividade podem ser codificadas para seleção. Nesta amostra, a região da AWS para conexão com o endpoint do Amazon S3 é algo que o usuário precisará fornecer. O realValue
é o valor que será retornado quando recuperado das propriedades no conector. O enumValue
é exibido ao usuário.
Para especificá-lo no adapter.json
e na interface do usuário, você pode fornecer uma seleção suspensa para especificar isso:
Este fragmento de código define o menu suspenso:
{
"name": "region",
"displayName": "AWS Region",
"type": "string",
"defaultValue": "us-east-1",
"enumValues": [
{"realValue": "us-gov-west-1", "enumValue": "AWS GovCloud (US)"},
{"realValue": "us-east-1", "enumValue": "US East (N. Virginia)"},
{"realValue": "us-east-2", "enumValue": "US East (Ohio)"},
{"realValue": "us-west-1", "enumValue": "US West (N. California)"},
{"realValue": "us-west-2", "enumValue": "US West (Oregon)"},
{"realValue": "eu-west-1", "enumValue": "EU (Ireland)"},
{"realValue": "eu-west-2", "enumValue": "EU (London)"},
{"realValue": "eu-west-3", "enumValue": "EU (Paris)"},
{"realValue": "eu-central-1", "enumValue": "EU (Frankfurt)"},
{"realValue": "eu-north-1", "enumValue": "EU (Stockholm)"},
{"realValue": "ap-south-1", "enumValue": "Asia Pacific (Mumbai)"},
{"realValue": "ap-southeast-1", "enumValue": "Asia Pacific (Singapore)"},
{"realValue": "ap-southeast-2", "enumValue": "Asia Pacific (Sydney)"},
{"realValue": "ap-northeast-1", "enumValue": "Asia Pacific (Tokyo)"},
{"realValue": "ap-northeast-2", "enumValue": "Asia Pacific (Seoul)"},
{"realValue": "cn-north-1", "enumValue": "China (Beijing)"},
{"realValue": "cn-northwest-1", "enumValue": "China (Ningxia)"},
{"realValue": "ca-central-1", "enumValue": "Canada (Central)"}
],
"validators": [{
"name": "required"
}]
}
Agrupamento¶
Os itens podem ser agrupados e ativados e desativados pelo usuário conforme mostrado abaixo. Neste exemplo, quando a caixa de seleção é falsa, os itens do grupo seguinte ficam inativos:
Observação
Embora o terceiro item no grupo acima (“Example Group Third Item”) pareça estar ativo, ele não permite a entrada do usuário e está, de fato, inativo.
Marcar a caixa de seleção ativa o grupo, permitindo a entrada no segundo e no terceiro itens:
O fragmento de código para isso:
{
"name": "example_group",
"type": "group",
"displayName": "Example Group",
"children": [
{
"name": "example_group_first_item",
"type": "boolean",
"multiple": false,
"displayName": "Example Group First Item",
"defaultValue": false
},
{
"name": "example_group_second_item",
"type": "string",
"multiple": false,
"displayName": "Example Group Second Item",
"location": "last",
"defaultValue": "1",
"enumValues": [
{
"enumValue": "Postal Code",
"realValue": "0"
},
{
"enumValue": "ZIP",
"realValue": "1"
}
],
"deps": {
"disabled": {
"op": "not",
"args": {
"op": "prop",
"args": "example_group_first_item"
}
}
}
},
{
"name": "example_group_third_item",
"type": "string",
"multiple": false,
"displayName": "Example Group Third Item",
"widgetHint": "password",
"defaultValue": "",
"deps": {
"disabled": {
"op": "not",
"args": {
"op": "prop",
"args": "example_group_first_item"
}
}
}
}
]
}
Validadores¶
Um campo pode incluir uma lista de um ou mais validadores que verificam uma entrada do usuário e confirmam sua correção. Se um validador falhar, uma mensagem de erro é apresentada ao usuário. Os validadores são acionados quando um usuário sai de um campo, geralmente usando a tecla aba:
Exemplos de validadores são exigir uma entrada, usando apenas dígitos, exigir um endereço e-mail ou inserir um código postal. Estão disponíveis validadores padrão para situações comuns, como comprimento de string e valor numérico, e validadores de padrão podem ser criados conforme necessário.
Os validadores são baseados nos Angular Validators, exceto para hasValue
e requiredExpr
validadores, que são validadores personalizados do Integration Studio.
Todos os validadores são chamados seguindo o padrão mostrado neste exemplo:
{
"displayName": "Number of columns",
"name": "noOfColumns",
"type": "number",
"validators": [
{
"name": "required"
},
{
"args": [
"^([1-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-6])$"
],
"errorMessage": "Only whole numbers 1 to 256 are allowed.",
"name": "pattern"
}
]
}
Aqui, dois validadores são mostrados para o noOfColumns
campo. O primeiro validador é um required
validator, que requer apenas que o nome seja especificado para invocá-lo. Isso significa que o campo deve ser preenchido (é obrigatório). Um asterisco vermelho na IU do Integration Studio indica que o campo é obrigatório.
O segundo validador é um pattern
validator, que procura uma string que corresponda ao padrão de expressão regular fornecido por ^([1-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-6])$
. Se este validador falhar, a mensagem de erro será mostrada ao usuário. Observe que o padrão real usado será ^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-6])$
, pois qualquer barra invertida no padrão deve ter escape.
Um validador é chamado pelo nome e quaisquer argumentos são passados como uma lista, conforme mostrado nos exemplos acima. Uma mensagem de erro a ser retornada pode opcionalmente ser especificada. Se não for especificado, uma mensagem de erro padrão será usada (conforme abordado para cada validador abaixo). Observe como a mensagem de erro pode acessar os atributos do campo, como displayName
e args
para criar validadores extensíveis e não frágeis a alterações de código.
Esses validadores estão disponíveis por nome:
-
required
- Não aceita argumentos
- Mensagem padrão:
${displayName} is required
-
requiredTrue
- Não aceita argumentos
- Mensagem padrão:
${displayName} is required
- Este validador é comumente usado para caixas de seleção obrigatórias
-
email
- Não aceita argumentos
- Mensagem padrão:
${displayName} must be a valid email address
-
hasValue
(validador personalizado do Integration Studio )- Não aceita argumentos
- Mensagem padrão:
${displayName} is required
-
min
- Leva um argumento: o valor numérico mínimo
- Mensagem padrão:
${displayName} must have a value of at least ${args[0]}
-
minlength
- Leva um argumento: o número mínimo de caracteres
- Mensagem padrão:
${displayName} must be at least ${args[0]} characters
-
max
- Leva um argumento: o valor numérico máximo
- Mensagem padrão:
${displayName} has a value greater than ${args[0]}
-
maxlength
- Leva um argumento: o número máximo de caracteres
- Mensagem padrão:
${displayName} exceeds ${args[0]} characters
-
pattern
- Leva um argumento: uma string padrão de expressão regular JavaScript que a entrada deve corresponder
- Qualquer barra invertida no padrão deve ter escape: o padrão
[^\s]+
deve ser inserido como[^\\s]+
- Mensagem padrão:
${displayName} is invalid
-
requiredExpr
(validador personalizado do Integration Studio )- Leva um argumento: uma expressão que deve ser satisfeita
- Mensagem padrão:
${displayName} is required
Padrões de exemplo¶
Padrão | Descrição |
---|---|
^[0-9]+$ | Somente números inteiros 1 ou maiores são permitidos. |
^[1-9][0-9]{0,6}$ | Formato de número inválido ou comprimento máximo excedido. |
^([1-9]|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-6])$ | Somente números inteiros de 1 a 256 são permitidos. |
[^\\s]+ | Uma string válida é necessária. |
Qualquer barra invertida no padrão deve ter escape: o padrão [^\s]+
deve ser inserido como [^\\s]+
Exemplo de trabalho¶
Veja o conector do Dropbox adapter.json
para obter um exemplo de trabalho usando muitos desses componentes de interface do usuário.