Campo Obrigatório (N-N)

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});
};
1 Curtida

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.