Na Web, Na tela de cadastro de campos adicionais gerais (Cadastro > Geral > Campos adicionais),
No campo "Contexto",
O sistema deverá adicionar nova opção selecionável de label "Formulário" e valor "FORM", que deverá ser persistido no campo campo.sglentidade
Quando selecionado o campo "Contexto" = "Formulário",
Quando selecionado o campo "Tipo de campo" = "Pesquisa em entidade"
O sistema deve mostrar nova opção selecionável no campo "Busca" de label "Entidade genérica" e valor "GENERICO" que deverá ser persistido no campo campo.nometabela
Quando selecionado o campo "Busca" = "Entidade genérica", os seguintes novos campos deverão ser exibidos abaixo do campo "Busca", sendo eles:
"Consulta": Campo de pesquisa, cujas opções selecionáveis serão resultado da consulta a seguir:
Bloco de código
/* select idconexao as chave, descricao as valor from consulta where idnativo = 1 */
O campo deverá ser persistido no campo campo.idconsulta
Ao lado do campo drop-down, o sistema deverá exibir botão de label "Configurações avançadas"
Quando o botão for clicado,
O sistema deverá tornar o campo "Consulta" não-editável
O sistema deverá exibir novos campos, sendo eles:
"Base de dados": Campo de seleção (Drop-down), cujas opções selecionáveis serão resultado da consulta a seguir:
Bloco de código
/* select idconexao as chave, descricao as valor from conexao where idnativo = 1 */
O campo deverá ser persistido no campo campo.idconexao
"Consulta SQL": text-area obrigatório
O campo somente será obrigatório caso esteja visível
Ao lado do campo, deverá ser exibido novo botão de label "Confirmar", de cor azul.
Ao clicar em "Confirmar", o sistema deverá executar a select cadastrada no campo "Consulta SQL" e caso haja algum erro de sintaxe, o sistema deverá retornar a mensagem de erro do banco de dados em tela, em mensagem toast.
Caso a consulta for executada com sucesso, o sistema deverá validar se os campos "chave" e "valor" foram campos resultantes da consulta acima,
Caso não forem,
O sistema deverá retornar a mensagem toast de erro: "Os campos chave e valor devem ser declarados na consulta"
Caso forem
O sistema deverá retornar mensagem toast de sucesso: "A consulta foi executada com sucesso"
O campo deverá ser persistido no campo campo.sql
...
Na web, na tela de responder formulários
O sistema deverá implementar os novos tipos de pergunta do tipo "Campo adicional"
Para campos adicionais do tipo "PESENT" (Pesquisa em entidade), o sistema deverá mostrar o campo como campo de pesquisa (Chave e valor)
As opções selecionáveis serão o resultado da consulta persistida no campo campo.idconsulta > sql associado ao campo adicional do campo pesquisapergunta.idcampo
Caso não tenha valor cadastrado no campo acima, será resultado da consulta cadastrada no campo campo.sql
A grid de seleção dos registros deverá mostrar duas colunas "Chave" e "Valor" referentes aos campos da consulta chave e valor, respectivamente
O valor do campo deverá ser persistido no campo pesquisapergresulopcao.respostadescricao, com a chave da opção do campo adicional selecionado em tela
No Android, na tela de responder formulários
O sistema deverá implementar os novos tipos de pergunta do tipo "Campo adicional"
Para campos adicionais do tipo "PESENT" (Pesquisa em entidade), o sistema deverá mostrar o campo como campo de pesquisa (Chave e valor)
Especificamente no Android, visto que não é possível fazer consultas com sintaxe SQL no contexto offline
No momento da sincronização de dados
O sistema deverá preparar view ventidadegenerica com as seguintes colunas:
idcampo
Referência do campo adicional do tipo "Pesquisa entidade" com consulta "Entidade genérica"
chave
Será resultado do campo chave da consulta cadastrada no campo campo.idconsulta > sql
Caso não tenha valor cadastrado no campo acima, será resultado do campo chave da consulta cadastrada no campo campo.sql
valor
Será resultado do campo chave da consulta cadastrada no campo campo.idconsulta > sql
Caso não tenha valor cadastrado no campo acima, será resultado do campo chave da consulta cadastrada no campo campo.sql
Dessa forma, o sistema já carregará previamente as opções selecionáveis de todos os campos adicionais de formulários, para que o contexto offline continue funcional
As opções selecionáveis serão o resultado da consulta da view ventidadegenerica, associada ao campo ventidadegenerica.idcampo
A grid de seleção dos registros deverá mostrar duas colunas "Chave" e "Valor" referentes aos campos da consulta chave e valor, respectivamente
A opção selecionada na pergunta deverá ser persistida na tabela pesquisapergresulopcao, segundo a lógica