wiki:programmersguide/architecture/web/core/semantics/Format

Version 10 (modified by raphael.costa, 9 years ago) (diff)

--

Format

As semanticas do TerraMA² estão definidas no arquivo semantics.json. O TerraMA² faz uso da biblioteca Angular Schema Form para geração dinâmicas de formularios. A documentação pode ser encontrada em Link

Tipos de campos (modelo - schema)

Esta seção descreve todos os tipos de campos que serão apresentados na interface na Aplicação Web do TerraMA². Alguns tipos de dados podem ser usados somente no desenho do campo, ou seja, no form. A tabela abaixo descreve todos os tipos suportados e onde podem ser utilizados:

TiposDescrição
stringDefine um campo do tipo texto.
numberDefine um campo do tipo numerico. Será aceito tanto numeros inteiros e numeros com ponto flutuante
integerDefine um campo do tipo inteiro.
booleanDefine um campo do tipo checkbox.
arrayDefine uma cadeia de conjunto de valores especificos. (TODO)

Tipos dos campos (renderizador - form)

Esta seção descreve todos os tipos de campos que serão desenhados na interface na Aplicação Web do TerraMA². A tabela abaixo descreve todas os possiveis formatos suportados:

TiposDescrição
stringDefine um campo do tipo texto.
numberDefine um campo do tipo numerico. Será aceito tanto numeros inteiros e numeros com ponto flutuante
integerDefine um campo do tipo inteiro.
booleanDefine um campo do tipo checkbox.
textareaDefine um campo do tipo texto de multiplas linhas.
submitDefine um botão que tem a propriedade de submeter o formulario
helpDefine um bloco que delimitará um helper. Você deve especificar a formatação manual utilizando a tag: helpvalue
selectDefine uma campo combobox. Você deve especificar os elementos através do atributo titleMap

Metadados

Interface e modelo de dados

A seção gui define a estrutura geral de dados conforme é apresentado abaixo:

"gui": {
  "schema": {
    "properties": {
      "table_name": {
        "type": "string",
        "title": "Table Name"
      }
    },
    "required": ["table_name"]
  },
  "form": ["*"]
}

Neste bloco, contém os seguintes elementos:

  • schema Define as regras gerais dos componentes. Basicamente, define-se a regra de negocio da semantica. Este bloco é composto dos seguintes elementos:
    • properties Define quais são os campos utilizados dessa semantica. Um exemplo pode ser visto abaixo:
        ..
        "properties": {
          "table_name": {
            "key": "string",
            "title": "Table Name"
          }
        }
      
      Dentro de cada campo (table_name) deve-se descrever obrigatoriamente o campo key que define o Tipo do Dado. Podemos inclusive adicionar outros elementos.
          "table_name": {
            "key": "string",
            "title": "Table Name",
            "placeholder": "It represents a description of field",
            "default": "It defines a default value to field. It must follow type value. If string, put it inside quotes. If boolean type true or false, etc."
          }
      
      Outras chaves permitidas:
      • pattern Permite especificar uma regex para qual o campo deve atender. Caso o valor informado pelo usuário não confere com a expressão, o campo ficará inválido até que o usuário preencha corretamente.
          "alias": {
            "key": "string",
            "title": "Alias",
            "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$" # Somente caracteres alfa-numericos e _ e não pode começar com numero;
          }
        
    • required Define quais campos serão obrigatórios na interface
  • form Define como os elementos serão desenhados na interface, bem como a ordem deles. Este bloco deve ser obrigatoriamente uma cadeia (array) de elementos. Podemos definir das seguintes maneiras:
    • Desenhe todos os campos na ordem definida pelo schema usando os mecanismos default. Não é muito recomendável, visto que os campos não terão uma formatação, resultando na ocupação inteira da linha.
      "form": ["*"]
      
    • Desenhe campos especificos com a formatação default:
      "form": ["field1", "field2"]
      
    • Desenha os campos com formatações customizadas. O examplo abaixo irá formatar dois campos table_name e column para se encaixarem na mesma linha:
      "form": [
        {
          "key": "table_name",
          "htmlClasses": "col-md-6"
        },
        {
          "key": "column",
          "htmlClasses": "col-md-6"
        }
      ]
      

Cada objeto refere-se a um campo. Podemos também acrescentar novas chaves:

  • onChange Define que toda iteração com o campo na interface será disparado uma função. Por padrão, o framework injeta dois parâmetros: form e modelValue que define a chave do campo e o valor respectivamente. Lembre-se que o TerraMA² disponibilizará funções disponíveis em [TODO]. Use o seguinte prefixo: "onChange": "SemanticsHelpers.methodo(parametros)"
    "form": [
      ... campos,
      {
        "key": "alias",
        "htmlClasses": "col-md-6",
        "onChange": "SemanticsHelpers.only(form.key, modelValue)" # Esse metodo pega o regex definido no campo e limita para somente permitir os valores que condizem com a regex. Qualquer outro valor será removido: "meuAlia's" => "meuAlias"
      },
    ] 
    
  • notitle Define se deve esconder o titulo do campo na interface. Default: false
  • validationMessage Define mensagens de erros customizadas. Por exemplo, utilizando o pattern coloca código 202. Logo se desejar alterar a mensagem padrão, faça o seguinte:
    "form": [
      ... campos,
      {
        "key": "alias",
        "htmlClasses": "col-md-6",
        "validationMessage": {
           "202": "Invalid alias value. Only alpha-numeric chars and _ are allowed."
        }
      },
    ] 
    

Criando uma nova semantica

TODO: