Histórico da Página
...
- Visão Geral
- Pré-requisitos
- Menu
- Rotinas
- Cadastro das Rotinas Customizadas
- Exemplo de Rotina MVC + Publicação do Fonte
- Consulta da Rotina Cadastrada
- Browser - Grid de consulta
- Tela de Consulta
- Cadastro das Rotinas Customizadas
- Restrições
- Tabelas utilizadasExemplo de Rotina MVC + Publicação do Fonte
01. VISÃO GERAL
O Cadastro de Rotinas customizadas tem por objetivo permitir que o usuário cadastre Rotinas Customizadas em MVC no formato do PagPFS (em PO-UI).
...
No campo Rotina MVC o usuário deve informar o nome da Rotina que será invocada na Consulta da rotina. A rotina obrigatoriamente tem de ser MVC (Model View Controller).
Os campos apresentados no Campo Chave também serão validados, verificando se existem no modelo apresentado.
Logo abaixo é apresentado uma tabela que será preenchida por Campos que serão utilizados no Filtro da Consulta da Rotina. Esses campos obrigatoriamente tem de ser da Rotina indicada no campo Rotina MVC.
Os campos apresentados no Campo Chave também serão validados, verificando se existem no modelo apresentado.
A Rotina MVC obrigatoriamente tem de ter um Modelo com o pós fixo "MASTER" conforme exemplo abaixo. Se a rotina não tiver um modelo MASTER o sistema não irá encontrar a estrutura.
Obs: A rotina precisa estar publicada e disponível para consultas REST apontando para a Classe JPagPfsModel. Para disponibilizar o modelo siga a documentação do FWRestModel.
Orientação para o cadastro das rotinas customizadas:
Rotina MVC: RSB001 > Nome do programa prw do modelo criado.
Título da rotina: Contatos Clientes > Descrição do modelo, carregado de forma automática ao informar a rotina.
Descrição: Cadastro dos contatos dos clientes > Descrição da rotina cadastrada, visualizada na tela de consulta.
Ações da rotina:
a. Somente Visualização > Rotina cadastrada somente para consulta.
b. Cadastro Completo > Rotina cadastrada para Visualização/Inclusão/Alteração/Exclusão dos registros.
Tipo de cadastro: Cadastro básico > Manutenção do conteúdo da rotina estará disponível na própria tela de Rotinas Customizadas.
Filtro: Campos tabela customizada que poderão ser utilizados como filtros ao acessar a rotina customizada.
- Tipo de cadastro: Rotina
b. Consulta da Rotina Cadastrada
i. Browser - Grid de consulta
Na consulta da Rotina o usuário irá visualizar todos os registros da rotina. Para controle das colunas no Grid só serão demonstradas as colunas que estão marcadas como Browse igual a "Sim".
ii. Tela de Cadastro
Na tela de Cadastro da Rotina MVC o sistema irá interpretar a Estrutura MVC obedecendo os seguintes critérios:
- Campos virtuais: Nenhum campo virtual será demonstrado em tela.
- Campos F3: Campos com consulta padrão serão disponibilizados em Combos. Os combos irão reproduzir a consulta original e retorna os 10 primeiros resultados. Para filtrar melhor a busca o usuário terá de digitar no campo.
- Campos com CBOX: Campos com combo pré-definido (X3_CBOX) serão disponibilizados em Bullets (RadioButtons) com as opções abertas no Formulário.
O botão de Salvar somente será habilitado após os campos obrigatórios serem preenchidos.
Ao clicar em Salvar o sistema irá rodar todas as validações do modelo original.
As regras de When (X3_WHEN), Inicializador padrão (X3_RELACAO) ou Gatilhos (SX7) não serão reproduzidas na tela de cadastro em PO-UI.
05. RESTRIÇÕES
Restrições de Dicionário:
Não é recomendada a utilização de campos F3 que contem 2 ou mais campos, como o código de Cliente (SA1), Fornecedor (SA2). Pois a consulta F3 será atribuída a somente um dos campos e será preenchido somente o campo que contem o F3 preenchido, o campo auxiliar deverá ser preenchido manualmente uma vez que o PO-UI não utiliza posicionamento em memória ou gatilhos (SX7).
Os campos que utilizarem consultas F3 tem de seguir as seguintes premissas:
- Consultas do tipo "Consulta Específica":
É altamente recomendado utilizar a Consultas JurSXB na criação da Consulta padrão, pois com ele conseguimos extrair a query e realizar os filtros apropriados.
...
...
.
...
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
// Publicando o fonte
PUBLISH USER MODEL REST NAME RSB001 SOURCE RSB001 RESOURCE OBJECT JPagPfsModel //Modelo Teste
//-------------------------------------------------------------------
/*/{Protheus.doc} MenuDef
Menu Funcional
/*/
//-------------------------------------------------------------------
Static Function MenuDef()
Local aRotina := {}
Return aRotina
//-------------------------------------------------------------------
/*/{Protheus.doc} ViewDef
Modelo de exemplo
/*/
//-------------------------------------------------------------------
Static Function ViewDef()
Local oStruct := FWFormStruct(2, "Z01")
Local oModel := FWLoadModel("RSB001")
Local oView := Nil
oView := FWFormView():New()
oView:SetModel(oModel)
oView:AddField("RSB001_VIEW", oStruct, "Z01MASTER")
oView:CreateHorizontalBox("FORMFIELD", 100)
oView:SetOwnerView("RSB001_VIEW", "FORMFIELD")
oView:SetDescription("Teste Rotinas Customizadas - Contas a Pagar")
Return (oView)
//-------------------------------------------------------------------
/*/{Protheus.doc} ModelDef
Modelo de exemplo
/*/
//-------------------------------------------------------------------
Static Function Modeldef()
Local oStruct := FWFormStruct(1, "Z01")
Local oModel := NIL
oModel:= MPFormModel():New("RSB001", /*Pre-Validacao*/, {|oModel| RSB1TOK(oModel)}/*Pos-Validacao*/, /*Commit*/, /*Cancel*/)
oModel:AddFields("Z01MASTER", Nil, oStruct, /*Pre-Validacao*/, /*Pos-Validacao*/)
oModel:SetDescription("Teste Rotinas Customizadas - Contas a Pagar")
oModel:GetModel("Z01MASTER"):SetDescription("Teste Rotinas Customizadas - Contas a Pagar")
oModel:SetPrimaryKey({'Z01_FILIAL','Z01_CODIGO'})
Return (oModel)
//-------------------------------------------------------------------
/*/{Protheus.doc} JMDCPGOK
Exemplo de Validação de modelo
/*/
//-------------------------------------------------------------------
Static function RSB1TOK(oModel)
Local lRet := .T.
Local nOpc := oModel:GetOperation()
Local oModelZ01 := oModel:GetModel("Z01MASTER")
If nOpc < 5
If Upper(AllTrim(oModelZ01:GetValue("Z01_SETOR"))) == "ERROR"
lRet := JurMsgErro(EncodeUTF8("Erro de validação do campo"))
EndIf
EndIf
Return lRet |
Orientação para o cadastro das rotinas:
Rotina MVC: Nome do modelo/serviço Rest criado, este exemplo RSB001. OBS: O nome da rotina NÃO pode ter mais do que 7 caracteres.
Título da rotina: Descrição do modelo; carregado de forma automática ao informar a rotina, neste exemplo Contatos Clientes
Descrição: Descrição da rotina cadastrada, visualizada na tela de consulta.
Ações da rotina:
a. Somente Visualização - Rotina cadastrada somente para consulta
b. Cadastro Completo - Rotina cadastrada para Visualização/Inclusão/Alteração/Exclusão dos registros.
Tipo de cadastro:
a. Cadastro básico - Manutenção do conteúdo da rotina estará disponível na própria tela de Rotinas Customizadas
b. Rotina - Manutenção do conteúdo da rotina estará disponível nas rotinas do PagPFS, quando selecionada esta opção, estarão disponíveis os seguintes campos
b.1 Tela da Rotina: Rotinas disponíveis para o cadastro de rotinas customizadas.
b.2 Chave da Tabela: Os campos chaves informados aqui servirão para verificar e filtrar a rotina de origem. Os campos chave têm de seguir a mesma ordem.
Quando a origem for "Cadastro de Título a pagar" irá realizar o filtro pelos campos "FK7_FILIAL+FK7_IDDOC".
Quando a origem for "Cadastro de Desdobramento" irá realizar o filtro pelos campos "OHF_FILIAL+OHF_IDDOC+OHF_CITEM".
Quando a origem for "Cadastro de Pós-pagamento" irá realizar o filtro pelos campos "OHG_FILIAL+OHG_IDDOC+OHG_CITEM".
Filtro: Campos constantes no modelo criado poderão ser utilizados como filtros ao acessar a rotina customizada.
Ao realizar inclusão de um novo registro na tabela customizada o sistema irá preencher os dados da tabela de origem nos campos chaves realizando a relação entre as tabelas.
Obs: Todos os campos informados, tanto na Chave da Tabela quanto no Filtro devem estar marcados como Usado na SX3, caso não esteja o campo não será encontrado durante as validações.
b. Consulta da Rotina Cadastrada
i. Browser - Grid de consulta
Na consulta da Rotina o usuário irá visualizar todos os registros da rotina. Para controle das colunas no Grid só serão demonstradas as colunas que estão marcadas como Browse igual a "Sim".
ii. Tela de Cadastro
Na tela de Cadastro da Rotina MVC o sistema irá interpretar a Estrutura MVC obedecendo os seguintes critérios:
Campos virtuais: Nenhum campo virtual será demonstrado em tela.
Campos F3: Campos com consulta padrão serão disponibilizados em Combos. Os combos irão reproduzir a consulta original e retorna os 10 primeiros resultados. Para filtrar melhor a busca o usuário terá de digitar no campo.
Campos com CBOX: Campos com combo pré-definido (X3_CBOX) serão disponibilizados em Bullets (RadioButtons) com as opções abertas no Formulário.
O botão de Salvar somente será habilitado após os campos obrigatórios serem preenchidos.
Ao clicar em Salvar o sistema irá rodar todas as validações do modelo original.
As regras de When (X3_WHEN), Inicializador padrão (X3_RELACAO), Gatilhos (SX7), Retorno de Consulta Padrão (mais de 1 campo) não serão reproduzidas na tela de cadastro em PO-UI.
05. RESTRIÇÕES
Restrições de Dicionário:
Não é recomendada a utilização de campos F3 que contem 2 ou mais campos de retorno, como o código de Cliente (SA1), Fornecedor (SA2). Pois a consulta F3 será atribuída a somente um dos campos e será preenchido somente o campo que contem o F3 preenchido, o campo auxiliar deverá ser preenchido manualmente uma vez que o PO-UI não utiliza posicionamento em memória ou gatilhos (SX7).
Os campos que utilizarem consultas F3 tem de seguir as seguintes premissas:
- Consultas do tipo "Consulta Específica":
É altamente recomendado utilizar a Consultas JurSXB na criação da Consulta padrão, pois com ele conseguimos extrair a query e realizar os filtros apropriados.
A função que fornece os dados não pode realizar referências a posicionamento em memória para realizar os filtros ou posicionamento em tabela. Por exemplo: M→ED_CODIGO ou FK7→FK7_IDDOC.
Caso algum campo configurado como filtro seja do tipo Data, este deverá ter seu conteúdo informado como "YYYYMMDD" no filtro a ser realizado