Árvore de páginas

Regras

Esta solução está destinada para customizações onde a necessidade é a inclusão de novos campos específicos na parte inferior das telas. Caso o cliente opte por não desenvolver e queira contratar esse desenvolvimento, será necessário abrir chamado para o suporte.

Outros pontos de customizações diferentes desse padrão pode ser consultados através do manual de customizações.

Caso o cliente queira customizar alguma tela que não conste na relação acima citada, será necessário abrir chamado para o suporte. Assim como se o cliente queira customizar outras partes da tela, será necessário abrir chamado para o suporte.

Objetivo

Este documento tem o objetivo de apresentar o padrão que deverá ser utilizado para customização de campos na parte inferior das telas po-ui.

Esse padrão contempla cadastros (CRUDS), conforme lista de programas publicada , nas seguintes situações:

  • Adição/edição de registros;
  • Detalhe de registros.


Local dos fontes específicos e padrão de nomenclatura

Para tratar os campos customizáveis, os fontes específicos do cliente deverão ser armazenados no caminho 'hgp/custom/<nome_da_tela>'. Como exemplo para este documento, vamos utilizar a tela Beneficiário X Fator Multiplicador (hfp.benefMultiplierFactor):


Padrão de nomenclatura para o diretório específico e nome dos programas:

  • O diretório onde são armazenados os fontes específicos deverá seguir o padrão '<módulo>.<nome técnico cadastrado no menu>'. Exemplo: hfp.benefMultiplierFactor, hvp.beneficiary, etc...;
  • Os nomes dos programas específicos deverão ser precedidos pelo nome da aplicação separado por hífen + o sufixo referente a função do programa. O sufixos possíveis são:
    • detail: programa chamado ao acessar a tela de detalhes do CRUD. Ele retornará os campos customizáveis com seus possíveis valores. Exemplo: benef-multiplier-factor-detail.p;
    • edit: programa chamado ao acessar a tela de adição ou edição do CRUD. Exemplo: benef-multiplier-factor-edit.p;
    • edit-validate: programa chamado para realizar a validação dos campos específicos do cliente. Exemplo: benef-multiplier-edit-validate.p;
    • edit-save: programa chamado para realizar a gravação na base de dados dos campos específicos do cliente. Exemplo: benef-multiplier-edit-save.p.


Fluxo para busca e gravação dos campos customizáveis

No padrão denominado Custom Fields, o processo funciona da seguinte maneira:

  • Ao abrir a tela de adição de registros, o sistema realiza uma chamada ao endpoint hgp/v1/customFields/<nome_da_tela>/<nome_programa_específico>/new/. Este endpoint será responsável por retornar os campos específicos do cliente. No exemplo utilizado neste documento, a chamada seria equivalente a hgp/v1/customFields/hfp.benefMultiplierFactor/benef-multiplier-factor-edit/new/;
  • Ao acessar a tela de edição de registros, o sistema realiza uma chamada ao endpoint hgp/v1/customFields/<nome_da_tela>/<nome_programa_específico>/edit. Este endpoint será responsável por retornar os campos específicos do cliente. Exemplo: hgp/v1/customFields/hfp.benefMultiplierFactor/benef-multiplier-factor-edit/edit/;
  • Ao acessar a tela de detalhes, o endpoint acessado será hgp/v1/customFields/<nome_da_tela>/<nome_programa_específico_detalhes>/. Este retornará os campos específicos bem como seus valores. Exemplo: hgp/v1/customFields/hfp.benefMultiplierFactor/benef-multiplier-factor-detail/
  • Ao salvar um registro, o sistema realiza os seguintes passos:
    • Realiza a chamada ao endpoint para validação dos campos customizáveis: hgp/v1/customFields/hfp.benefMultiplierFactor/benef-multiplier-factor-edit-validate/edit;
    • Caso a validação dos campos específicos ocorra com sucesso, então o CRUD irá disparar o método insert ou update do produto padrão para salvar o registro em questão;
    • Caso a gravação do registro padrão de produto ocorra com sucesso, então será disparado endpoint para gravação dos campos específicos:  hgp/v1/customFields/hfp.benefMultiplierFactor/benef-multiplier-factor-edit-save/edit.


Forma de utilização:

Deverá ser criado um programa progress no seguinte diretório, conforme explicado anteriormente:

hgp\custom\"nomedomenu"\"nomedoprogramahtml".p(.r)

Exemplo:

hgp\custom\portalempresa\edit-beneficiary.p

Este programa deverá ter os métodos e parâmetros:

  • getCustomFields
    • Utilizado para buscar os campos que serão acrescentados no formulário e seus respectivos valores.
    • Parâmetros:

      define input        parameter pathParams as JsonArray no-undo. /* Array contendo parâmetros de entrada */
      define output       parameter table for ttCustomField. /*Definido no item Tabelas Temporárias Utilizadas (hgp\bosau\bosau-custom.i)*/
      define output       parameter table for ttCustomValue. /*Definido no item Tabelas Temporárias Utilizadas (hgp\bosau\bosau-custom.i)*/
      define input-output parameter table for rowErrors. /*Definida através da include (rtp\rtrowerror.i)*/

    • Exemplo:


      procedure getCustomFields:
       
          define input        parameter pathParams as JsonArray no-undo.
          define output       parameter table for ttCustomField.
          define output       parameter table for ttCustomValue.
          define input-output parameter table for rowErrors.
       
           
         define variable cd-modalidade-aux        as int          no-undo.
         define variable nr-proposta-aux          as int          no-undo.
         define variable cd-usuario-aux           as int          no-undo.
       
         assign
              cd-modalidade-aux = int(pathParams:getCharacter(3))
              nr-proposta-aux   = int(pathParams:getCharacter(4))
              cd-usuario-aux    = int(pathParams:getCharacter(5))
              no-error.
       
          find first usuario where usuario.cd-modalidade = cd-modalidade-aux and
              usuario.nr-proposta = nr-proposta-aux and
              usuario.cd-usuario-aux = cd-usuario-aux no-lock no-error.
       
           
          create ttCustomField.
          assign
              ttCustomField.ds-type = "boolean"
              ttCustomField.ds-boolean-false = "Campo específico"
              ttCustomField.ds-boolean-true  = "Campo específico"
              ttCustomField.lg-disabled = true
              ttCustomField.ds-property = "u_log_1".
       
          create ttCustomValue.
          assign ttCustomValue.ds-property = "u_log_1"
              ttCustomValue.lg-value = usuario.u-log-1.
      end.

Tabelas Temporárias Utilizadas:

define temp-table ttCustomField
    field ds-boolean-false as char serialize-name "booleanFalse" init ?     /*Texto exibido quando o valor do componente for false.*/
    field ds-boolean-true as char serialize-name "booleanTrue" init ?       /*Texto exibido quando o valor do componente for true.*/
    field ds-columns as char serialize-name "columns"  init ?               /*Não disponível*/
    field lg-disabled as logical serialize-name "disabled" init ?           /*Desabilita o campo caso informar o valor true.*/
    field ds-divider as char serialize-name "divider" init ?                /*Exibirá um divisor acima, utilizando o seu conteudo como título.*/
    field nr-grid as int serialize-name "gridColumns" init ?                /*Tamanho de exibição do campo em telas. Deve ser usado o sistema de grid do THF (1 ... 12 c
    field nr-grid-lg-columns as int serialize-name "gridLgColumns" init ?   /*Tamanho de exibição do campo em telas grandes (lg).*/
    field nr-grid-md-columns as int serialize-name "gridMdColumns" init ?   /*Tamanho de exibição do campo em telas médias (md)*/
    field nr-grid-sm-columns as int serialize-name "gridSmColumns" init ?   /*Tamanho de exibição do campo em telas menores (sm)*/
    field nr-grid-xl-columns as int serialize-name "gridXlColumns" init ?   /*Tamanho de exibição do campo em telas extra grandes (xl)*/
    field ds-help as char serialize-name "help" init ?                      /*Texto de ajuda*/
    field lg-key as logical serialize-name "key" init ?                     /*Identificador*/
    field ds-label as char serialize-name "label" init ?                    /*Rótulo*/
    field ds-mask as char serialize-name "mask" init ?                      /*Máscara*/
    field nr-max-length as int serialize-name "maxLength" init ?            /*Tamanho máximo de caracteres.*/
    field ds-max-value as char serialize-name "maxValue" init ?             /*Valor máximo*/
    field nr-min-length as int serialize-name "minLength" init ?            /*Tamanho mínimo*/
    field ds-min-value as char serialize-name "minValue" init ?             /*Valor mínimo*/
    field ds-options as char serialize-name "options" init ?                /*Não disponível*/
    field lg-options-multi as logical serialize-name "optionsMulti" init ?  /* Permite que o usuário faça múltipla seleção */
    field ds-options-service as char serialize-name "optionsService" init ? /* Serviço utilizado para buscar itens */
    field ds-pattern as char serialize-name "pattern" init ?                /*Regex para validação */
    field ds-property as char serialize-name "property" init ?              /*Nome de referência do campo */
    field lg-required as logical serialize-name "required" init ?           /*Indicador de obrigatoriedade*/
    field nr-rows as int serialize-name "rows" init ?                       /*Quantidade de linhas exibidas*/
    field ds-search-service as char serialize-name "searchService" init ?   /*Não disponível*/
    field lg-secret as logical serialize-name "secret" init ?               /*Esconde a informação estilo password, pode ser utilizado quando o tipo de dado for string*/
    field ds-type as char serialize-name "type" init ?.                     /*Tipo do valor do campo. Tipos Válidos: boolean, currency, date, dateTime, number, string e time.*/
 
define temp-table ttCustomValue
    field ds-property as char serialize-hidden /*Referente ao ds-property utilizado anteriormente para criar os campos em tela através da temp-table ttCustomFields*/
    field in-value as int serialize-hidden init ? /*Valor do campo caso seja inteiro*/
    field ds-value as char serialize-hidden init ? /*Valor do campo caso seja string*/
    field lg-value as log serialize-hidden init ? /* Valor do campo caso seja lógico*/
    field dc-value as dec serialize-hidden init ? /* Valor do campo caso seja decimal*/
    field dt-value as date serialize-hidden init ?. /*Valor do campo caso seja data*/



  • Sem rótulos