Histórico da Página
Objetivo
Este documento tem o objetivo de apresentar o padrão que deverá ser utilizado para customização de campos em telas po-ui.
Esse padrão contempla cadastros (CRUDS), conforme lista publicada, nas seguintes situações:
- Adição/edição de registros;
- Detalhe de registros.
...
- 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
Os endpoints descritos acima devem ser do tipo POST para receberem as informações da interface (por exemplo PoDynamicFormLoad, PoDynamicFormField). As propriedades enviadas no formato JSON estão descritas na documentação das interfaces de cada componente ou template.
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.i)*/define output parameter tableforttCustomValue./*Definido no item Tabelas Temporárias Utilizadas (hgp\bosau\bosau-custom.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:
|