Pessoal, tenho duas relações N para N no meu formulário, porém não têm a opção de deixar a seleção como obrigatória. Alguém têm alguma alternativa para isso ?
onValidate faça um lookup e verifique na tabela NN se existem registros relacionados à chave passada no NN, caso não tenha, dê um sc_erro_message
Olá Rodrigo!
Fiz o que você me informou, ficou assim:
$check_sql = "SELECT cod_interessado FROM interesado_modalidade WHERE cod_interessado = ".{cod_interessado}; sc_lookup(rs, $check_sql);if (!isset({rs[0][0]})) {
sc_error_message(“Você deve selecionar pelo menos uma modalidade para este usuário!”);
};
O problema é que ele somente vai ter um ‘cod_interessado’ quando eu inserir um registro. Neste caso ele ainda não inseriu nada, é uma lógica errada.
Vou exemplificar o modelo: Existe uma tabela ‘interessados’ que possui a PK ‘cod_interessado’; A relação N-N é feita na tabela ‘interessado_modalidade’ através do campo FK ‘cod_interessado’; Dentro dessa tabela associativa possui uma PK chamada ‘cod_interessado_modalidade’;
Como não existe campo para o N-N criado, ainda não sei como fazer. Talvez seja por que sou completamente iniciante ainda.
Tente fazer no onAfterInsert (depois de inserir) e no onBeforeUpdate. Sendo que no onAfterInsert se não constar os registros, você exibe o erro, redireciona para index e passa o id como parâmetro, assim voltará em modo de atualização, e se tiver inserido tudo não dará o erro…
Rodrigo segui suas dicas, funcionaram perfeitamente! Fica aqui meu agradecimento pela ajuda!
Porém… Agora estou enfrentando outro problema neste formulário. Ao tentar deletar algum registro da tabela, ele me retorna a seguinte mensagem:
Undefined property: form_public_visitantes_apl::$dataset_sc_tabble_0 Trying to get property of non-object Undefined property: form_public_visitantes_apl::$dataset_sc_tabble_0 Trying to get property of non-object
Os eventos ficaram assim:
OnAfterInsert / OnAfterUpdate
$check_sql = "SELECT cod_interessado FROM interesado_modalidade WHERE cod_interessado = ".{cod_interessado}; sc_lookup(rs, $check_sql);if (!isset({rs[0][0]})) {
sc_error_message(“Você deve selecionar pelo menos uma Modalidade para este cliente!”);
sc_redir(‘form_public_visitantes’,cod_interessado={cod_interessado});
};$check_sql = "SELECT cod_interessado FROM objetivo_interessado
WHERE cod_interessado = ".{cod_interessado};
sc_lookup(rs, $check_sql);if (!isset({rs[0][0]})) {
sc_error_message(“Você deve selecionar pelo menos um Objetivo para este cliente!”);
sc_redir(‘form_public_visitantes’,cod_interessado={cod_interessado});
};
Pela sintaxe do erro me parece que está dando erro nos dois Eventos (apenas uma suposição);
Já passou por isso?
Mude os eventos para
OnAfterInsert => depois de inserir
OnBeforeUpdate => antes de atualizar
Pode ser isso que está dando o erro.
Se não for, verifique se tem algum script errado no onValidade ou no onAfterDelete ou no onBeforeDelete
Olá Rodrigo!
Fiz as alterações indicadas porém sem resolução. Criei também algumas dependências e coloquei para deletar em cascata, e também não resolveu.
Os mesmos códigos estão no OnAfterInsert e no OnBeforeUpdate.
Não há nada inserido em onValidade e OnAfterDelete e no onBeforeDelete.
Legal então executa os 2 em onAfterInsert e onAfterUpdate.
Faz o seguinte antes de tudo comenta todos os códigos e testa para ver se dá o erro.
Após crie um método PHP com o seu código de lookup e chame apenas o método nos eventos onAfterInsert e onAfterUpdate. Para não repetir muito e outra coisa, muda o nome do seus datasets, ex:
$check_sql1 = "SELECT cod_interessado FROM interesado_modalidade
WHERE cod_interessado = ".{cod_interessado};
sc_lookup(rs1, $check_sql1);
if (!isset({rs1[0][0]})) {
sc_error_message("Você deve selecionar pelo menos uma Modalidade para este cliente!");
sc_redir('form_public_visitantes',cod_interessado={cod_interessado});
};
$check_sql2 = "SELECT cod_interessado FROM objetivo_interessado
WHERE cod_interessado = ".{cod_interessado};
sc_lookup(rs2, $check_sql2);
if (!isset({rs2[0][0]})) {
sc_error_message("Você deve selecionar pelo menos um Objetivo para este cliente!");
sc_redir('form_public_visitantes',cod_interessado={cod_interessado});
};
Rodrigo!!
O problema estava na dependência criada automaticamente pelo scriptcase com uma tabela antiga que não é mais usada. Simplesmente excluí a dependência e funcionou.
Obrigado Rodrigo. Vou seguir suas dicas, criar a função na biblioteca de Métodos PHP como você disse.