Habilitando e desabilitando botões dinamicamente

Olá pessoal,

Estou tentando desabilitar os botões Edit, Update e Delete dinamicamente através do código abaixo:

$pagina = $this->Ini->nm_cod_apl;

$sql = "SELECT A.Permissao_ID, A.Usuario_ID, A.Menu_Id, ";
$sql .= "A.Permissao_Edita, A.Permissao_Exclui, A.Permissao_Imprime, A.Permissao_Exporta, ";
$sql .= "B.Descricao, B.Aplicacao, C.Usuario_Login, ";

$sql .= "CASE A.Permissao_Edita WHEN 1 THEN ‘on’ ELSE ‘off’ END AS EDITA, ";
$sql .= "CASE A.Permissao_Exclui WHEN 1 THEN ‘on’ ELSE ‘off’ END AS EXCLUI, ";
$sql .= "CASE A.Permissao_Imprime WHEN 1 THEN ‘on’ ELSE ‘off’ END AS IMPRIME, ";
$sql .= "CASE A.Permissao_Exporta WHEN 1 THEN ‘on’ ELSE ‘off’ END AS EXPORTA ";

$sql .= "FROM mdi_a000_usuariospermissao A ";
$sql .= "INNER JOIN mdi_a000_menu B ON (A.Menu_Id = B.Id) ";
$sql .= "INNER JOIN mdi_a000_usuarios C ON (A.Usuario_ID = C.Usuario_ID) ";
$sql .= "WHERE A.Usuario_ID = “.[vlUsuario].” “;
$sql .= “AND B.Aplicacao = '”.$pagina.”’ ";

sc_lookup(Ds, $sql);

if(count({Ds}) == 0)
{
sc_redir(‘FrmMenuPaincipal’, ‘’,’’);
}else{
sc_btn_display(‘Edit’, {Ds[0][10]});
sc_btn_display(‘Delete’, {Ds[0][11]});
};

Só que, ao executar, está retornando a mensagem:

Array to string conversion Array to string conversion

Como posso resolver isso? Outra coisa, onde posso pegar os nomes de todos os botões do scriptcase para ampliar meu cadastro de permissões?

Grato,

Ilano.

só utilize on ou off no segundo parametro da macro.
Veja webhelp

Então não é isso o que estou tentando fazer? Quer dizer que não posso fazer isso usando SQL como o que fiz na mensagem acima?

Então eu teria que fazer testando o valor das colunas, tipo:

If ({Ds[0][3]}) == 0 {sc_btn_display('Edit', 'on')}else{sc_btn_display('Edit', 'off')}; If ({Ds[0][4]}) == 0 {sc_btn_display('Delete', 'on')}else{sc_btn_display('Delete', 'off')}; If ({Ds[0][5]}) == 0 {sc_btn_display('Print', 'on')}else{sc_btn_display('Print', 'off')}; If ({Ds[0][6]}) == 0 {sc_btn_display('Export', 'on')}else{sc_btn_display('Export', 'off')};

Fazendo o teste abaixo…

If ({Ds[0][3]}) == 0 {sc_btn_display('Edit', 'on')}else{sc_btn_display('Edit', 'off')};

está retornando o erro:

Parse error: syntax error, unexpected '==' (T_IS_EQUAL) in /home/mdierpco/public_html/scriptcase/app/MDI_ERP/adm_CadCidades/adm_CadCidades_apl.php on line 2539

Como resolver isso?

Não seria:
If ({Ds[0][3]} == 0) {sc_btn_display(‘Edit’, ‘on’)}else{sc_btn_display(‘Edit’, ‘off’)};
??

Tenta assim, igual ao Haraldo comentou:

if (count({Ds})==0) {
sc_redir(‘FrmMenuPaincipal’, ‘’,’’);
} else {
sc_btn_display(‘Edit’, ‘off’);
sc_btn_display(‘Delete’, ‘off’);
};

seu finalizador de linha de comando esta errado.
sua expressão na condição if esta errada.

Nota: Identar o código ajuda muito na percepção de erros básicos.

errado :If ({Ds[0][3]}) == 0 {sc_btn_display(‘Edit’, ‘on’)}else{sc_btn_display(‘Edit’, ‘off’)};

correto: If ({Ds[0][3]}== 0 ) { sc_btn_display('Edit', 'on'); } else { sc_btn_display('Edit', 'off'); }

Era isso mesmo Haroldo!

Deu tudo certo, só os nomes dos botões que são em minúsculo edit, delete….

Agora, como faço para tornar essa função pública para não ter que escrevê-la em cada aplicação? Queria só chamá-la nas aplicações.

Esse código você teria que colar mesmo manualmente nas app que for usar, se tentar usar uma biblioteca interna como seu código usa macros do SC, aconteceria isso:
“Se você colocar mais de uma função do SC dentro de uma biblioteca interna, o SC não traduz as macros apenas faz um include do script com as funções, ai não funciona.”
“Biblioteca interna já eh uma função declarada em seu escopo.”

Então com esse código não tem como, só colocando-o em cada aplicação. Mas teria outra forma de implementar isso no sc de forma que só precise chamar a função? E quanto ao include, como funcionaria isso? Não tenho experiência com PHP.

Alguem conseguiu fazer habilitar/desabilitar uma pagina?