Skip to content

academiadocodigo/Bind4D

Repository files navigation

bind4d


Bind4D

Framework para realização de Bind via notação de Atributos nos componentes do formulário.

O Bind4D tem o objetivo de facilitar a transição de dados entre a camada de visão e as demais camadas do seu sistema, realizando de forma automatica mediante notação a conversão dos dados de um formulário para JSON, atribuindo estilos a componentes, realizando validação de campos, configuração de exibição de dados do dataset em um DbGrid e muito mais.


Instalação

Basta registrar no Library Path do seu Delphi o caminho da pasta SRC da Biblioteca ou utilizar o Boss (https://github.com/HashLoad/boss) para facilitar ainda mais, executando o comando

boss install https://github.com/bittencourtthulio/Bind4D

Pré-Requisitos:

aws4d - Biblioteca para Envio de Arquivos para a AWS S3
localcache4d - Mini Banco de Dados Chave-Valor para Cache local
translator4d - Biblioteca para Tradução com Google API
restrequest4delphi - Biblioteca para Requisições REST

Primeiros Passos - Tutorial

Para utilizar o Bind4D você deve adicionar as uses:

Bind4D,
Bind4D.Attributes,
Bind4D.Types;

Atributos do Formulário

Existem 2 atributos para o formulário que permitem que você deixe pré-configurados informações para recuperar em momentos distintos.

[FormRest(EndPoint, Key, Sort, Order)]

O atributo FormRest permite que você deixe configurado a qual endpoint rest as ações de crud deste formulario devem responder

Os parametros deste atributo são:

EndPoint = EndPoint da requisição rest;
Key = Chave das Requisições para Put e Delete;
Sort = Campos default da ordenação do Get podendo ser passado mais de um campo separado por virgula;
Order = Ordem da Listagem asc ou desc;

Exemplo

[FormRest('/users', 'guuid', 'name', 'asc')]
TPageTemplate = class(TForm)
private
public
end;

Para recuperar esses dados, você pode a qualquer momento no seu projeto chamar a função abaixo, passando o Form como parametro e as variaveis as quais você deseja armazenar o retorno

TBind4D.New.Form(Self).BindFormRest(FEndPoint,FPK,FSort,FOrder);

[FormDefault(Title)]

O atributo FormDefault permite que você deixe configurado o Titulo para o Formulário.

Os parametros destre atributo são:

Title = Titulo do Formulários

Exemplo

[FormDefault('Cadastro de Usuários')]
TPageTemplate = class(TForm)
private
public
end;

Atributos do Componentes

Os atributos dos componentes permitem que você adicione funcionalidades e determine configurações que podem ser adicionadas em lote a todos os componentes do formulário, além de prover configurações para as demais funções de bind.

[FieldJsonBind(FieldName)]

O atributo FieldJsonBind permite que você deixe configurado a qual Field do Json o componente irá corresponder na hora do bind do formulário para Json;

Os parametros destre atributo são:

FieldName = Nome do Campo que você deseja que ele se transforme no JSON

Exemplo

[FieldJsonBind('guuid')]
edtCodigo: TEdit;

Você ainda pode passar alguns atributos especiais para determinar em quais tipos de requisição aquele campo de ser ignorado ou não.

Os atributos especiais são:

FbIgnorePut = O campo será ignorado se o parametro de Put for enviado na hora do bind para json
FbIgnorePost = O campo será ignorado se o parametro de Post for enviado na hora do bind para json
FbIgnoreDelete = O campo será ignorado se o parametro de Delete for enviado na hora do bind para json
FbIgnoreGet = O campo será ignorado se o parametro de Put Get enviado na hora do bind para json

Exemplo

[FieldJsonBind('guuid'), FbIgnorePut, FbIgnorePost]
edtCodigo: TEdit;

Converter o Formulário para JSON

Uma vez tendo configurado todos os componentes desejados com o atributo FieldJsonBind, basta executar o comando abaixo passando qual o tipo de json você quer gerar para obter o Json com os valores presentes nos componentes.

Os Parametros deste atributo são:

fbGet, fbPost, fbPut, fbDelete

var
  aJson: TJSONObject;
begin
  aJson := TBind4D.New.Form(FForm).FormToJson(fbPost);
  try
    //Seu Código
  finally
    aJson.Free;
  end;

[ComponentBindStyle(COLOR, FONTSIZE, FONTCOLOR, FONTNAME, ESPECIALTYPE)]

O atributo ComponentBindStyle permite que você determine as configurações visuais do componente para elas serem aplicadas de forma automatica, incluindo formatação de Edits e outros

Os parametros destre atributo são:

COLOR = Cor do componentes
FONTSIZE = Tamanho da Fonte do Componente
FONTCOLOR = Cor da Fonte do Componente
FONTNAME = Nome da Fonte do Componente
ESPECIALTYPE = Tipo Especial usado para formatação.

Os Tipos especiais de formatação disponíveis são:

teNull = Não aplica nenhuma configuração
teCoin = Formatação para Moeda
teCell = Formatação para Número de Celular com 9 digitos
teDate = Formatação para Data
teDateTime = Formatação para Data e Hora
teCPF = Formatação para CPF
teCNPJ = Formatação para CNPJ

Exemplo

[ComponentBindStyle(COLOR_BACKGROUND, FONT_H5, FONT_COLOR3, FONT_NAME, teCell)]
edtCodigo: TEdit;

Para que os estilos e formatações sejam aplicados você deve executar o comando abaixo

Exemplo

TBind4D.New.Form(Self).SetStyleComponents;

[FieldDataSetBind(Field, Type, Visible, DisplayWidh_Percent, DisplayName, MaskEdit, Alignment, LimitWidth)]

O atributo FieldDataSetBind permite você configurar o componente tanto para sua exibição no DBGrid quanto para o Bind automatico entre o DataSet e o Componente na Tela

Os parametros destre atributo são:

Key = Nome do Field no DataSet
Type = Tipo de Dado do Campo
DisplayWidh_Percent = Tamanho da Coluna no DBGrid em Porcentagem
DisplayName = Nome da Coluna a ser Exibido no DBGrid
MaskEdit = Mascara para exibição do valor
Alignment = Posicionamento na Exibição no DBGrid
LimitWidth = Determina qual o tamanho limite de exibição da Coluna no DBGrid, se o formulario for menor que o tamanho informado a coluna é automaticamente oculta

Exemplo

[FieldDataSetBind('balance', ftCurrency, True, 8, 'Saldo', 'R$ ###,###,##0.00', taLeftJustify, 600)]
edtSaldo: TEdit;

Para que as configurações sejam aplicadas nos FieldsDataSet você deve executar o comando abaixo informando o Form, o DataSet que esta com os dados e o DBGrid de Exibição

Exemplo

TBind4D.New.Form(Self).BindFormatListDataSet(FDataSet, DBGrid1);

Para que os dados do DataSet sejam automaticamente preenchidos nos componentes da tela simulando o que acontece com os componentes DBEdit e outros, você deve executar o comando abaixo.

Exemplo

TBind4D.New.Form(Self).BindDataSetToForm(FDataSet);

[fvNotNull(Message)]

O atributo fvNotNull valida automaticamente se o valor no componente é nulo e apresenta a mensagem informada caso ele esteja vazio, esse processo ocorre durante o processo de bind do form para json.

Os parametros destre atributo são:

Message = Mensagem de Erro apresentada

Exemplo

[fvNotNull('Campo Nome não pode ser Nulo')]
edtName: TEdit;

Tradução com Google API Translator

O Bind4D executa a tradução automática dos componentes utilizando o framework Translator4D (https://github.com/bittencourtthulio/translator4d).

Para realizar a tradução é necessário configurar préviamente o Bind4D com os parametros do Google API.

TBind4D
    .New
      .Translator
        .Google
          .Credential
            .Key('SUA APIKEY DO GOOGLE API TRANSLATOR')
          .&End
          .Options
            .Cache(True) //Permite que o Bind4d faça o cache automatico das traduções para não refazer as consultas que ele já fez.
          .&End
          .Params
            .Source(TranslateSource) //Código da Linguagem origem que você está usando
            .Target(TranslateTarget); //Código da Linguagem de destino que você deseja traduzir.

Os código das linguagem do Google você pode ver aqui: https://cloud.google.com/translate/docs/languages?hl=pt-br

O Bind4D trabalha com o padrão Singleton, sendo assim você pode realizar essa configuração a qualquer momento no seu sistema, com a configuração feita você pode adicionar os atributos de tradução nos seus componentes.

[Translation('Nome')]
Label1: TLabel;

Dessa forma ao chamar o método abaixo ele automaticamente atribuirá a tradução da palavra "Nome" no idioma que você configurou no Target ao Label1.

 TBind4D
    .New
      .Form(Self)
      .SetStyleComponents;