Histórico da Página
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.
...
- 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...;
- O nome Os nomes dos programas específicos deverá deverão ser precedido 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.
...
- 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.
Customização com eventos no back-end utilizando componentes e templates dinâmicos
O uso dos componentes e templates dinâmicos permite a customização das páginas sem interferência no código-fonte do front-end, com eventos gerenciado pelo backend nas APIs utilizadas pela aplicação.
Pré-requisitos do back-end
API
Além da API para retorno e tratamento dos dados (como inclusão, alteração, exclusão) será necessário endpoints que possibilitem:
- Retorno das informações da página, conhecido como metadado, contendo campos e ações
- Validar os dados informados pelo usuário
- Opcionalmente retornar separado as informações customizadas
...
- .
...
Estes endpoints podem ser implementados de diversas formas, como abaixo (sendo o endpoint de dados http://localhost:8080/api/v1/people):
Extensão do endpoint de dados:
...
...
Formato JSON
O endpoint de retorno e tratamento de dados deve seguir o padrão definido no Guia de Construção de API da TOTVS:
Para os endpoints de metadado e validação verifique a documentação de cada componente ou template do PO UI, como por exemplo para carga do metadado veja a documentação da interface descrita na propriedade p-load, que deve ser retornada como JSON (o mesmo vale para outras interfaces descritas na documentação):
|
Forma de utilização:
Deverá ser criado um programa progress no seguinte diretório, conforme explicado anteriormente:
...
- 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 tableforttCustomField./*Definido no item Tabelas Temporárias Utilizadas (hgp\bosau\bosau-custom-field.i)*/define output parameter tableforttCustomValue./*Definido no item Tabelas Temporárias Utilizadas (hgp\bosau\bosau-custom-field.i)*/define input-output parameter tableforrowErrors./*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.
assigncd-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 andusuario.nr-proposta = nr-proposta-aux andusuario.cd-usuario-aux = cd-usuario-aux no-lock no-error.
create ttCustomField.assignttCustomField.ds-type = "boolean"ttCustomField.ds-boolean-false = "Campo específico"ttCustomField.ds-boolean-true = "Campo específico"ttCustomField.lg-disabled = truettCustomField.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:
|