Bibliotecas Internas

Pessoal,
uso o SC 8.1.046 com MySQL.

Criei/copiei uma biblioteca simples para uns testes e notei que se tiver sc_lookup está dando erro, alguém já passou por isso?
Veja o código da biblioteca:

[code]<?php
function GetCustomerName($customerid){
if($customerid== ‘’){ return false; }
$str_sql = “SELECT customername FROM customer where customerid = $customerid”;
sc_lookup(dataset,$str_sql);
return {dataset[0][0]};
}

function GetTicketStatus($ticket_id){
if($ticket_id == ‘’){ return false; }

$str_sql = "SELECT statusid FROM ticket where ticketid = $ticket_id";
sc_lookup(dataset,$str_sql);

return {dataset[0][0]};	

}?>[/code]

ao executar a aplicação recebo a seguinte mensagem de erro:

Parse error: syntax error, unexpected '{' in C:\Program Files (x86)\NetMakeMySQL\v81\wwwroot\scriptcase\app\sc_tickets\form_customer_open_ticket\vaucher.php on line
Esse erro é sempre onde trata o {dataset[0][0]}. Alguém sabe o que está errado nesta biblioteca? Estou estudando o exemplo de HelpDesk.

Se observar as cores dos parenteses e chaves leva a acreditar que há um erro, não aparente em vosso código mas que deve existir. Reescreva o código e atente-se ao abrir e fechar “(” e “{”.

Ainda penso ser um bug ou limitação no SC, pois na internet há muitos relatando que não conseguem usar o sc_lookup dentro de bibliotecas internas.
Como teste, alterei para a macro sc_select e funcionou, ao voltar para sc_lookup gera o erro novamente.
Já havia até copiado o código para o Notepad++ e exibi todos os caracteres para ver se não havia lixo no código, mas não, somente os CR LF normais.

Campos também não tem acesso direto da biblioteca interna, devem ser passados como parâmetro.
O mais estranho é que o exemplo HelpDesk vem com o código escrito usando sc_lookup e acessando campos direto {nomedocampo}. Mas tudo dá erro.
Será que é uma configuração errada em meu SC?

Boa tarde!
acho que o erro está aqui:
if($customerid== ‘’){ return false; }

Não deveria existir ponto e virgula dentro, tentei rodar também e deu erro nessa linha.

André, comente essa linha para ver que o erro acontece da mesma forma.

Pessoal,
acho que o motivo de isso estar acontecendo é que estou usando um exemplo disponibilizado pelo Scriptcase, o HelpDesk.
Fiz esse teste em outro projeto que criei em branco e funciona essas opções.

Achei várias mensagens no passado que isso não funcionava (macros dentro de biblioteca), mas na versão 8.1.024 isso foi corrigido.
Portanto, será que esse exemplo está usando alguma biblioteca desatualziada?
Tem como atualizar isso?
Alguém já teve que fazer isso?

Seu código está correto. Criei uma aplicação de teste e coloquei seu código como biblioteca interna e funcionou normalmente.

Mas tem um porém… o ScriptCase tem um certo problema na parte de bibliotecas… lá em bibliotecas, se você criar uma variável com o mesmo nome de um campo da aplicação, o ScriptCase substituirá os lugares onde você utilizar sua variável pelo campo. Ou seja, se na aplicação que você chamar a função GetCustomerName existir um campo com o nome “customerid”, seu código final (depois que o ScriptCase gerar a aplicação) vai ficar assim:

// código original da biblioteca
function GetCustomerName($customerid){
   echo $customerid;
}


// código final (depois que a aplicação for gerada)
function GetCustomerName($customerid){
   echo $this->customerid;
}

Aí se a aplicação tiver um campo com o nome “customerid” e você chamar a biblioteca, o resultado vai ser esse:

// suponhamos que o campo na aplicação tenha o valor "A" (salvo no banco)


// aí você executa a biblioteca passando outro valor como parâmetro...
GetCustomerName("teste");


// o texto exibido é "A", porque o ScriptCase mudou o código e agora na verdade não está
// lendo o parâmetro que foi passado para a função, e sim o campo com mesmo nome da
// aplicação (por causa do $this-> que ele adiciona)

Estou explicando isso, porque eu já tive problema parecido com o seu (erro de sintaxe) e o motivo era esse (campo com mesmo nome de parâmetro de função). Nessa “conversão” que o ScriptCase faz (e que na minha opinião não deveria fazer para as bibliotecas), ele acabou deixando erro de sintaxe.

A solução que eu encontrei foi utilizar outro nome para o parâmetro. Faça este teste em sua biblioteca, talvez seja o mesmo motivo…

1 Curtida

Interessante sua colocação Anderson.
Possuo uma Biblioteca Interna com o nome de vaucher_lib, certo?
Após gerar as aplicações o SC cria um arquivo com o nome de vaucher_lib.php exatamente como eu escrevi, ou seja, sem “tradução” nenhuma!
Não seria esse o problema então?
O SC deveria “traduzir” o código da minha bilbioteca? Porque não está fazendo nesse caso?
Quanto aos campos verifiquei e não seria esse o problema, mas sem dúvida uma dica para se guardar.

Julio.

Cara, o SC não está traduzindo minha biblioteca interna, qual será o motivo?

Peguei outro projeto e olhei e realmente ele não cria arquivo separado e escreve o código junto na aplicação!

Mas neste caso não está fazendo isso!

A dica do Anderson foi determinante para me ligar que não estava gerado o código corretamente, não era campos com o mesmo nome, mas era uma biblioteca do tipo class que eu ativei para enviar email: class.phpmailer.php. Mesmo assim ela estava funcionando e enviando emails.
Mas alguma coisa acontece que o SC não consegue gerar o código corretamente com essa biblioteca interna do tipo class ativa.
Desativei essa biblioteca do tipo class e funcionou!
Não gerou arquivos separados das bibliotecas, traduziu tudo e colocou o código junto com a aplicação!

Agora vou ter que ver como usar a PHPmailer sem ser classe!

Realmente ele não traduzia as macros em _libs Internas, não sei como esta agora no momento, se mudaram na 8.1.024

É comentado neste tópico isso:
http://www.scriptcase.com.br/forum/index.php/topic,12430.msg64580.html#msg64580

E em todas as variáveis que você for usar conforme Anderson relatou, para o SC não misturar elas tem que usar esta regra:
VARIAVEIS
SC: {Nome} // Nome de Campos das tabelas.
Local $Nome // Colocar $ antes do nome para variável local
Global [glo_Nome] // Colocar [glo_] antes do nome

Quando precisava usar macros do SC repetidamente a gente usava aqui até a 8.1.024:

Pelo jeito é alguma confusão na hora de gerar todo o código…

Você consegue mostrar uma parte do código que fica perto da linha que dá erro? Faz dar o erro de novo e abre diretamente o arquivo “C:\Program Files (x86)\NetMakeMySQL\v81\wwwroot\scriptcase\app\sc_tickets\form_customer_open_ticket\vaucher.php”, na linha onde ele acusa erro… talvez vendo qual é o erro de sintaxe que tem ali dê para achar uma solução…

Pessoal,
está tudo resolvido!
Como mencionei foi um equívoco meu, eu criei uma outra biblioteca interna do tipo class e não pode!
Biblioteca do tipo class somente em Bibliotecas Externas.
Isso gerou uma “loucura” na geração do código no Sc ,mas não ocorria nenhum erro, somente na execução.