Formulario não Insere no BD quando Rebe os campos por $_get

Eu Tenho Duas Tabelas, uma de Clientes Agendados e a outra de Processos.

a Tabela Clientes_Agendados eu criei uma Consulta que exibe os registro da data de abertura do sistema e criei um campo “link” que chama um formulario da tabela de Processos - ({link} = “Encaminhar”;).

ate ai beleza ela leva os campos, o formulário exibe os campos certinhos cada um no seu lugar, mais na hora de inserir pow!!!

Erro:

Undefined index: Protocolo

Undefined index: Data_Entrada
Undefined index: Requerente
Undefined index: Cpf
Undefined index: Cnpj
Undefined index: Tipo_Pessoa
Undefined index: Telefone
Undefined index: Celular
Undefined index: Setor_Antigo
Undefined index: Quadra_Antigo
Undefined index: Lote_Antigo
Undefined index: Endereco
Undefined index: Complemento
Undefined index: Bairro

Alguem tem alguma ideia, pois eu já esgotei tudo aqui e não consegui resolver

Carlos Botelho.

No formulário está usando assim: $var = $_GET[“nome da chave”], se for o erro está ae, porque o GET deixa salvo na memória até a próxima atualização, no momento do onload é uma requisição, no onValidate já e outra requisição.

Passe apenas o ID para o formulário faça a busca no formulário pelos valores no banco, e adicione os nos seus respectivos lugares.

Se aderir a forma de passar somente o ID use assim:

Consulta:

{campo} =  "<a href='http://127.0.0.1:97/scriptcase/app/Urbanus/form_processos?Protocolo= ".{Protocolo}."' />Link</a>";

Formulário;
Receba o valor usando as variáveis globais do SC.

$protocolo = [Protocolo];

Após utilizar [Protocolo], acesse a opção no formuário de Variáveis Globais e marque somente GET.

Boa Sorte!

Oi Almeida;

Os dados eu tenho que capturar da tabela de agendamentos e levar para a tabela de processos, ou seja estes dados são agendados na nuvem na microsoft através do site, “novamacapa.com.br/agendamento” os requerente entram no site e agendam seu comparecimento na central de atendimento num dia e hora marcada, ao chegar na central estes dados tem que estar disponível para os consultores. A zero hora (24:00) dispara uma rotina local que baixa todos os agendamentos do site (BD:SQL/azure), para uma tabela local que eu chamei de Agendamentos_web(BD:MySQL Server). Quando o Consultor entra no Sistema estes dados já estão disponivel para eles, ao atender o cliente estes dados vão se tornar um Processo (Tabela de Processo), então eu pego os dados desta consulta (Agendamentos_web) e passo para o formulário (Processos).

Bom, A consulta exibe direitinho os Agendamentos(Consulta-Agendamentos) que vieram do azure, os dados estão disponível para os consultores atenderem os clientes. Ao clicarem no link “Encaminhar” ele leva os dados correto para o formulário (Processos), o formulário exibe corretamente cada qual no seu campo, quando clicam no botão salvar o formulario diz registro salvos com sucesso, mais quando eu vou consultar a base de dados na verdade os registros não foram salvos na tabela de processo.

Na Consulta (Agendamentos) eu criei um campo chamado “link”, no evento onRecord eu coloquei o script: (code: {link} = “Encaminhar”;), que são os dados que eu vou salvar no formulario(Processos).

No Formulário(Processos) eu coloquei o script nos eventos:
- onApplicationInit: (sc_apl_conf(‘form_processos’,‘start’,‘new’):wink:
- onLoad: ($Protocolo = [Protocolo];
$Data_Entrada = [Data_Entrada];
$Requerente = [Requerente];
$Cpf = [Cpf];
$Cnpj = [Cnpj];
$Tipo_Pessoa = [Tipo_Pessoa];
$Telefone = [Telefone];
$Celular = [Celular];
$Setor_Antigo = [Setor_Antigo];
$Quadra_Antigo = [Quadra_Antigo];
$Lote_Antigo = [Lote_Antigo];
$Endereco = [Endereco];
$Complemento = [Complemento];
$Bairro = [Bairro]:wink:

       - onBeforeInsert: ({Protocolo} = $Protocolo;
                                    {Data_Entrada} = $Data_Entrada;
                                    {Requerente} = $Requerente;
                                    {Cpf} = $Cpf;
                                    {Cnpj} = $Cnpj;
                                    {Tipo_Pessoa} = $Tipo_Pessoa;
                                    {Telefone} = $Telefone;
                                    {Celular} = $Celular;
                                    {Setor_Antigo} = $Setor_Antigo;
                                    {Quadra_Antigo} = $Quadra_Antigo;
                                    {Lote_Antigo} = $Lote_Antigo;
                                    {Endereco} = $Endereco;
                                    {Complemento} = $Complemento;
                                    {Bairro} = $Bairro;)

 quando o consultor clica no botão salvar ele diz "Registro Salvo Com Sucesso", mais na verdade não salva o registro.


  Eu ja tentei de tudo aqui mais o registro não Salva, eu não sei mais o que fazer.

atenciosamente;

Carlos Botelho

Coloque apenas esse código no seu evento onLoader.

Não precisa colocar no onBefore.

onLoad: (
{Protocolo} = [Protocolo];
{Data_Entrada} = [Data_Entrada];
{Requerente} = [Requerente];

)

Fiz apenas o início, termine todos os campos. Fazendo assim, no evento onLoader de seu formulário já vai estar atribuindo os valores passados por GET para seus campos. Quando se clicar no Botão INSERIR esses campos já serão salvo no banco automaticamente, se tudo ocorrer certo. Ative o modo debug da sua aplicação para ver melhor se está fazendo INSERT.

Ok! Almeida;

 Foi feito conforme sua orientação, mais não grava, dai eu criei outro formulario novo recebendo os parametros e também não funcionou eu habilitei o modo debug e nada a aplicação não executa o insert. é bug no SC...

tem algum redirecionamento nos eventos

onAfterInsert / onAfterUploade / onAfterDelete?

Não

apenas dois eventos:

onaplicationInit: sc_apl_conf(‘form_InsereProcessos’,‘start’,‘new’); para abrir no modo novo e
onLoad: ({Protocolo} = [Protocolo];
{Data_Entrada} =[Data_Entrada];
{Requerente} = [Requerente];
{Cpf} = [Cpf];
{Cnpj} = [Cnpj];
{Tipo_Pessoa} = [Tipo_Pessoa];
{Telefone} = [Telefone];
{Celular} = [Celular];
{Setor_Antigo} = [Setor_Antigo];
{Quadra_Antigo} = [Quadra_Antigo];
{Lote_Antigo} = [Lote_Antigo];
{Endereco} = [Endereco];
{Complemento} = [Complemento];
{Bairro} = [Bairro]:wink:

e é só.

sc_apl_conf(‘form_InsereProcessos’,‘start’,‘new’);

Essa macro não se utiliza na própria aplicação. Deve ser utilizada em uma aplicação anterior, estou lembrando aqui, o Fredy estava com esse mesmo problema era a macro nesse lugar.

Utilize essa macro na sua grid que chama o o formulário, pode ser no envento onAppInit da grid.

só que no exemplo o cara diz pra se colocar no form que está sendo chamado no caso (Form_Processos), quando eu coloco na grid(Cns_Agendamentos) o form abre para atualização e sobrepõe o primeiro registro que o form traz, pois ele abre no modo atualização, cara uma coisa simples tá se tornando uma complicação que eu to desistindo, a pressão aqui ta muita acho que vou fazer em PHP puro sem usar o SC é uma pena pois a ferramenta é muito dinamica e eu indiquei aqui para a empresa comprar, só que os diretores tão no meu pé eu tenho que achar uma solução urgente.

Carlos, não desista amigo! As coisas é assim mesmo! Olha, de mais uma olhadinha no seu script onde esta sendo alimentado as variáveis, eu acho que o pro é ele. Tem como você executar um “echo” em cada variável pra ver se esta sendo alimentada? Ou não tem como substituir o script por um form modal ?

Carlos, não se desespere, isso é só uma questão de mudar seus conceitos de desenvolvimento para se adequar ao estilo SC de desenvolver.

Vamos lá se você tem uma grid que traz os agendamentos legal, os dados já existem em algum lugar agora você precisa entender que o Scriptcase faz para você este tipo de ligação que você esta tentando e uma segunda opção seria fazer o que o Almeida recomendou, passar apenas o ID do agendamento para o formulário e no ScriptInit do formulário fazer a busca na tabela de agendamentos e completar os campos já neste evento.

Se precisar de ajuda me add no Skype saulobborges.

Abraço!

Amigo, tenho certeza que o problema é essa macro no onAppInit, veja.

sc_apl_conf(“Aplicação”, “Propriedade”, “Valor”)

Esta macro permite alterar as propriedades de execução das aplicações, mudando sua forma de execução em relação ao inicialmente previsto. Desta forma, podemos forçar que um formulário inicie no modo de inclusão, ou uma consulta inicie pelo filtro, etc.

Esta macro deve ser utilizada, por uma aplicação, para modificar as propriedades de uma outra aplicação.

Abraço

Bom Dia!

Almeida e SaulobBorges;.

    Acredito que achei a solução, não sei se foi a melhor solução mais é a que funcionou aqui, e a pressão parou (por enquanto - hehehe), bem a solução foi a seguinte;


  No Form (Processos) eu retirei o botão inserir, atualizar, excluir deixei só o botão sair, e criei um botão Gravar .

 no Código PHP do botão (Gravar) eu coloquei o seguinte script:

     /**
  • Check for an existing record
    */

// SQL statement parameters

$check_table = ‘processos’; // Table name
$check_where = “protocolo = ‘{Protocolo}’”; // Where clause

// Check for record
$check_sql = ‘SELECT *’
. ’ FROM ’ . $check_table
. ’ WHERE ’ . $check_where;
sc_select(dataset, $check_sql);

if (false == {dataset})
{
//erro na database
}
elseif ({dataset}->EOF)
{
/**
* Insert a record on another table */
{Data_Entrada} = sc_date_conv({Data_Entrada},“ddmmaaaa”,“yyyy-mm-dd”);

	// SQL statement parameters

$insert_table  = 'processos';      // Table name
$insert_fields = array(   // Field list, add as many as needed
 				'Protocolo' => "'{Protocolo}'",
 				'Data_Entrada' => "'{Data_Entrada}'",
 				'Localizacao' => "'{Localizacao}'",
				'UserName' => "'{UserName}'",
				'Requerente' => "'{Requerente}'",
				'Cpf' => "'{Cpf}'",
				'Cnpj' => "'{Cnpj}'",
				'Tipo_Pessoa' => "'{Tipo_Pessoa}'",
				'Telefone' => "'{Telefone}'",
				'Celular' => "'{Celular}'",
				'Setor_Antigo' => "'{Setor_Antigo}'",
				'Quadra_Antigo' => "'{Quadra_Antigo}'",
				'Lote_Antigo' => "'{Lote_Antigo}'",
				'Setor_Semfi' => "'{Setor_Semfi}'",
				'Quadra_Senfi' => "'{Quadra_Senfi}'",
				'Lote_Semfi' => "'{Lote_Semfi}'",
				'Endereco' => "'{Endereco}'",
				'Complemento' => "'{Complemento}'",
				'Bairro' => "'{Bairro}'",
				'Nom_Arquivo' => "'{Nom_Arquivo}'",
				'Docmto_Img' => "'{Docmto_Img}'",
				'Tam_Arquivo' => "'0'",

);

		// Insert record
		$insert_sql = 'INSERT INTO ' . $insert_table
			. ' ('   . implode(', ', array_keys($insert_fields))   . ')'
			. ' VALUES ('    . implode(', ', array_values($insert_fields)) . ')';

		sc_exec_sql($insert_sql);
                   sc_alert("Registro Inserido Com Sucesso!");

}
else
{
/**

  • Update a record on another table
    */
    {Data_Entrada} = sc_date_conv({Data_Entrada},“ddmmaaaa”,“yyyy-mm-dd”);
    // SQL statement parameters
    $update_table = ‘processos’; // Table name
    $update_where = “Protocolo = ‘{Protocolo}’”; // Where clause
    $update_fields = array( // Field list, add as many as needed
    ‘Data_Entrada’ => “’{Data_Entrada}’”,
    ‘Localizacao’ => “’{Localizacao}’”,
    ‘UserName’ => “’{UserName}’”,
    ‘Requerente’ => “’{Requerente}’”,
    ‘Cpf’ => “’{Cpf}’”,
    ‘Cnpj’ => “’{Cnpj}’”,
    ‘Tipo_Pessoa’ => “’{Tipo_Pessoa}’”,
    ‘Telefone’ => “’{Telefone}’”,
    ‘Celular’ => “’{Celular}’”,
    ‘Setor_Antigo’ => “’{Setor_Antigo}’”,
    ‘Quadra_Antigo’ => “’{Quadra_Antigo}’”,
    ‘Lote_Antigo’ => “’{Lote_Antigo}’”,
    ‘Setor_Semfi’ => “’{Setor_Semfi}’”,
    ‘Quadra_Senfi’ => “’{Quadra_Senfi}’”,
    ‘Lote_Semfi’ => “’{Lote_Semfi}’”,
    ‘Endereco’ => “’{Endereco}’”,
    ‘Complemento’ => “’{Complemento}’”,
    ‘Bairro’ => “’{Bairro}’”,
    ‘Nom_Arquivo’ => “’{Nom_Arquivo}’”,
    ‘Docmto_Img’ => “’{Docmto_Img}’”,
    ‘Tam_Arquivo’ => “‘0’”,
    );

// Update record
$update_sql = ‘UPDATE ’ . $update_table
. ’ SET ’ . implode(’, ', $update_fields)
. ’ WHERE ’ . $update_where;
sc_exec_sql($update_sql);
sc_alert(“Registro Atualizado Com Sucesso!”);

}

Bem é isso, como falei não sei se foi a melhor solução, mais é a que tá funcionando direitinho e inserindo os dados na Base, agora vou ter tempo para verificar e me aprofundar mais ainda no jeito SC de programar

Fico muito Grato pela atenção de vcs.

Já que você fez assim, não seria melhor usar um CONTROLE?
Nos controles tem mais liberdade para manipular.

Bem observado Almeida…

Bom, esta foi uma solução de emergência (urgentíssima), para deixar os usuários inserirem na base, já que o atendimento na central não para, agora vou verificar a melhor forma de fazer, Vou Verificar o Controle, confesso que não usei ainda, mais se for a melhor forma e a mais segura, certamente que irei usar.

Desde já agradeço a Vocês pela ajuda.