Categorias
Dicas

Simplificando as Macros SC_LOOKUP e SC_SELECT

Existem duas formas de fazer acesso aos dados do banco de dados no Scriptcase: Usando as macros sc_lookup e sc_select. Vamos aprender uma forma simplificada de manipular estes dados do banco com uma função que eu criei para usar nos meus projetos: lw_lookup.

Exemplo:

Para exemplificar a aplicação das macros vamos supor que queremos uma listagem com o nome, telefone e nascimento dos clientes.

Exemplo de listagem de clientes com telefone e nascimento

Para criar este exemplo usaremos uma aplicação blank do Scriptcase onde será aplicada a tag HTML <h2> para o nome e uma quebra <br> para o Nascimento.

Usando a macro sc_lookup

Para usar a macro sc_lookup do Scriptcase você tem a seguinte sintaxe:

sc_lookup(Dataset, “Comando SQL”, “Conexão”);

Dataset é um array bidimensional com o índice das colunas e linhas definido.

Neste exemplo vamos fazer um SELECT na tabela de cliente usando sc_lookup.

$sql = 'SELECT 
		cliid,
		clistatus,
		clinome,
		clitel,
		cliemail,
		clinasc,
		cliempresa,
		clicep,
		cliobs,
		clilogo
	FROM
		cliente';
sc_lookup(ds, $sql);

for ($i = 0; $i < count({ds}); $i++) {
	echo '<h2>' . {ds[$i][2]}
		. '</h2>Telefone: ' . {ds[$i][3]}
		. '<br>Nascimento: ' 
		. date('d/m/Y', strtotime({ds[$i][5]}));
}

Observe que usando a sc_lookup para acessar os registros é necessário indicar o número da linha e coluna.

Por exemplo, para acessar o telefone é necessário fazer:

{ds[$i][3]};

Quando se faz um select com muitas colunas a gente precisa contar para saber exatamente qual é o índice referente a coluna desejada.

Eu já fiz isso muito até apliquei “aquela velha técnica japonesa” de colocar os dois primeiros campos na linha 1 do código mas não funciona quando o select está no meio do código.

Associando o número da linha com a posição do campo

Já usei muito isso sempre pensando que deveria ter uma forma mais simples de fazer esta associação.

Usando a macro sc_select

Para ter o mesmo resultado com sc_select é necessário fazer o while no dataset e conferir se houve erro.

$sql = 'SELECT 
			cliid,
			clistatus,
			clinome,
			clitel,
			cliemail,
			clinasc,
			cliempresa,
			clicep,
			cliobs,
			clilogo
		FROM
			cliente';
sc_select(ds, $sql);

if ( {ds} === false ) {
	echo "Erro de acesso. Mensagem = " . {ds_erro};
} else {
	while (!{ds}->EOF) {
		echo '<h2>' . {ds}->fields[2]
			. '</h2>Telefone: ' . {ds}->fields[3]
			. '<br>Nascimento: ' . date('d/m/Y', strtotime({ds}->fields[5]));
    	{ds}->MoveNext();
	}
  	{ds}->Close();
}

Neste caso para acessar o mesmo telefone temos duas opções:

echo {ds}->fields[3];            // ou
echo {ds}->fields['clitel'];

A segunda opção é mais amigável, mas de qualquer forma o seu código ficará poluído com um if e um while que não tem relação direta com a regra de negócio a ser implementada.

Penso que esse tratamento deveria estar separado do meu código principal.

Por isso criei a função lw_lookup() veja a diferença e como melhora a legibilidade do código.

Função lw_lookup

A grande diferença é que aqui eu manipulo os dados com base no nome do campo da tabela. Eu tenho um array bidimensional com cada nome.

$sql = 'SELECT 
			cliid,
			clistatus,
			clinome,
			clitel,
			cliemail,
			clinasc,
			cliempresa,
			clicep,
			cliobs,
			clilogo
		FROM
			cliente';
$clientes = lw_lookup($sql);

Veja por exemplo um print_r deste array.

Array da função lw_lookup
Array da função lw_lookup

Se você quiser simplificar ainda mais o acesso aos dados você pode dar um extract aqui dentro do foreach. Vou criar um alias para os campos que eu usei aqui no exemplo.

$sql = 'SELECT 
			cliid,
			clistatus,
			clinome,
			clitel,
			cliemail,
			clinasc,
			cliempresa,
			clicep,
			cliobs,
			clilogo
		FROM
			cliente';
$clientes = lw_lookup($sql);
foreach($clientes as $cli) {
	extract($cli);
	echo '<h2>' . $clinome
		. '</h2>Telefone: ' . $clitel
		. '<br>Nascimento: ' 
		. date('d/m/Y', strtotime($clinasc));
}

Acessando diretamente o registro ou campo da tabela

Veja um exemplo simples em que a função vai permitir acessar o campo em apenas uma linha:

$nome = lw_lookup("SELECT clinome FROM cliente WHERE cliid = 1")[0]['clinome'];

Código da função lw_lookup

Para utilizar a função lw_lookup vá em ferramentas, bibliotecas internas, bibliotecas públicas e clique em nova para criar uma nova.

Criando uma nova biblioteca interna
Criando uma nova biblioteca interna

Informe o nome do arquivo “lwLookup.php”, a descrição “Criando uma nova biblioteca interna”.

Cole o código a seguir:

<?php
function lw_select( $pdo ) {
	$arrSelect = array();
	if($pdo) {
		while (! $pdo -> EOF) {
			$arr = $pdo -> fields;
			$campos = array_filter($arr, function($k) {
				return (! is_int($k));
			}, ARRAY_FILTER_USE_KEY);

			$arrSelect[] = $campos;
			$pdo -> MoveNext();
		}
		$pdo -> close();
	}
	return $arrSelect;
}

function lw_lookup($sql) {
	sc_select(ds, $sql);
	$res = lw_select({ds});
	return $res;
}
?>

Aqui temos duas funções: a lw_select que faz a mágica acontecer e a lw_lookup que foi usada nos exemplos acima.

A parte principal da lw_select é a função do PHP array_filter que retorna somente os índices do array $pdo->fields que não são inteiros.

Praticamente ela dá uma limpa no array de retorno do sc_select.

Já a função lw_lookup apenas usa o sc_select para acessar o dataset bruto chama o lw_select para fazer a limpeza.

Conclusão

Como a função é baseada na macro do Scriptcase sc_select a gente tem ótima compatibilidade, inclusive com o modo debug ativado funciona perfeitamente.

Prezo muito pela legibilidade do código pois você vai precisar dar manutenção no código e se o código estiver limpo você tem muito mais facilidade.

Essa foi a nossa dica de hoje. Comente aqui se foi útil para você.

Um abraço e até a próxima.

Categorias
Tutoriais

Ambiente Perfeito para Scriptcase 9.8 com PHP 8.1

Vamos usar o WSL do Windows para instalar o Scriptcase. Clique para conhecer as novidades do Scriptcase 9.8.

No vídeo você verá o passo a passo.

No vídeo você verá o passo a passo.

Introdução

O WSL – Windows Subsystem for Linux 2 foi a melhor coisa que a Microsoft fez, na minha opinião. Antigamente você tinha que usar virtual box ou fazer dualboot para usar o linux. Seus problemas acabaram!!!

Com o WSL você roda o linux dentro do Windows, vou mostrar pra vocês aqui!

O WSL é muito leve e rápido. Se vocês quiserem saber mais sobre WSL, como instalar, como usar, deixa um comentário aqui embaixo.

Você pode seguir o tutorial de instalação do site oficial.

Instalando a Distribuição Debian

Vamos usar a distribuição do Debian por ser mais robusta.

Abra terminal do Windows e digite o comando:

wsl --install -d Debian
Instalação Debian WSL

Após este comando outro terminal será lançado solicitando as configurações iniciais da Distribuição.

Configurações iniciais Debian

Informe o username, informe a senha e em seguida confirme a senha.

Atualização do Linux

sudo apt update
sudo apt upgrade -y

Baixar o Scriptcase

Acesse o site de download do Scriptcase e baixe o Instalador Scriptcase 9.8 – Linux 64 bits. Será preciso informar um e-mail para download.

Download Scriptcase 9.8 Linux 64 bits

Volte para o terminal e copie o arquivo de instalação da pasta de downloads do seu usuário. No meu computador ficou assim o comando:

cd ~
cp /mnt/c/Users/eliel/Downloads/scriptcase_linux_installer_x86_64_pt_br_v9.8.002-php8.1.run . 

Procedendo a Instalação

Com o instalador na pasta do usuário você vai precisar dar permissão de execução ao arquivo e em seguida executá-lo.

sudo chmod +x scriptcase_linux_installer_x86_64_pt_br_v9.8.002-php8.1.run
./scriptcase_linux_installer_x86_64_pt_br_v9.8.002-php8.1.run

Informe as solicitações da instalação:

  • Idioma: 7 para Português Brasileiro ou escolha o seu preferido.
  • <Enter> várias vezes para ver as páginas do Acordo de licença.
  • Aceitar a licença: y
  • Diretório padrão: <Enter>
  • Porta [8092]: <Enter>
  • Email do administrador: informe seu e-mail.
  • Domínio apache: <Enter>
  • Fuso horário: Informe o número correspondente na lista – 178 para America/Sao_Paulo.
  • Deseja continuar (Instalação do Scriptcase): y
  • Abrir README: n
  • Abrir Scriptcase: n

Verificar qual IP foi atribuido ao Debian

Um IP será atribuido ao Linux no WSL. Para saber qual foi o IP use o código abaixo:

ip addr show - Copiar IP
Capturando o IP da distribuição.

Acessando o Scriptcase após a Instalação

Abrir navegador cole o endereço do IP seguido da porta e /scriptcase. No Neste exemplo ficou assim:

http://172.26.216.155:8092/scriptcase
Tela inicial do Scriptcase após a instalação

Para o primeiro acesso use admin para usuário e senha.

Os próximos passos agora é registrar a sua licença e instalar seu banco de dados.
Se tiver dúvidas deixa um comentário aqui.

Um abraço e fiquem com Deus!

Categorias
Conhecimentos básicos

Modelagem do Banco de Dados

Na modelagem do banco de dados começamos pelo que é primordial, o core do sistema, depois você pode criar as tabelas secundárias para usar no seu sistema.

Introdução

Vamos usar o MySQL Workbench para criar nosso Diagrama Entidade Relacionamento para ser usado no Scriptcase.

Padrões

O nosso padrão de nomenclatura de tabelas é:

  • Tabelas: letras minúsculas no singular
  • Campos: letras minúsculas e com um prefixo exclusivo da tabela.

Usando este padrão cada campo da tabela recebe um nome exclusivo no Banco de dados.

Relacionamento um para muitos

Relacionamentos de um para muitos entre obra, editor e exemplar.
Relacionamentos de um para muitos entre obra, editor e exemplar.

Entre obra e editora criamos um relacionamento de um para muitos onde a obra recebe o identificado da tabela de editora.

Para exemplar criamos o mesmo tipo de relacionamento para definir de qual obra o exemplar pertence. Ele recebe o id de obra.

Relacionamento muitos para muitos

Relacionamentos de muitos para muitos com tabela intermediária

Para representar o relacionamento de obra com autor precisamos do relacionamento de muitos para muitos, seguindo a lógica.

Do lado de obra:

Uma obra pode ter 1 ou mais autores.

Do lado de autor:

Um autor pode ter 1 ou mais obras.

Este tipo de relacionamento é na prática dois relacionamentos de um para muitos com uma tabela intermediária.

O mesmo tipo de relacionamento foi usado para representar a relação de obra com assunto.

Estrutura

Neste vídeo vimos a criação das principais tabelas que utilizaremos no nosso sistema:

  • Obra
  • Editora
  • Exemplar
  • Autor
  • Assunto
  • Obra_autor
  • Obra_assunto

Na próxima parte começaremos a criação das aplicações usando o Scritpcase.

Faça parte da comunidade Scriptcaser. Responda a pesquisa anônima.

Clique aqui para ir para a primeira parte da série: Criando sistema com o Scriptcase.

Um abraço e até a próxima.

Categorias
Uncategorized

Como criar sistemas Scriptcase?

Seguir um processo de desenvolvimento vai ajudar você a utilizar 100% do potencial que a ferramenta RAD te oferece.

Neste artigo eu vou te mostrar o meu processo de desenvolvimento usando o Scriptcase na criação de novos sistemas.

Estamos com uma demanda para a criação do sistema para a biblioteca da escola e aqui você vai acompanhar o passo a passo deste projeto.

Veja as etapas a seguir.

Assista o vídeo e acompanhe o meu processo.

Video completo

1ª. Análise da demanda

Nesta etapa a gente busca entender o que o cliente pretende com o sistema. Para facilitar este processo você pode conferir como é feito o trabalho atualmente.

Provavelmente ele já tem algum meio de organização, quer sejam planilhas, fichas em papel, documentos de texto, pastas etc. O ideal é que você tenha acesso a este material e estude com ele como é feito e o que ele quer melhorar.

Desenvolver sistemas vai muito além de programar. Você precisa ter um olhar crítico no processo para ajudar o cliente a automatizar em vez de programar uma gambiarra.

Para este sistema eu recebi uma planilha do Excel de controle onde é feito o cadastro dos livros e os empréstimos.

2ª. Inspirações

Busque inspirações para criar o seu próprio sistema. No site do Scriptcase há vários exemplos de sistemas prontos que podem ser usados da forma que você quiser.

Eles são uma boa referência para a criação, inclusive eu usei o sistema de Restaurante para me inspirar na lista de livros, usando uma consulta no formato livre.

Me lembrei também do sistema que eu utilizava quando estudava na Puc e me ajudou muito na definição dos campos das tabelas. Pergamum

Pesquise também na Internet outros sistemas semelhantes, assista vídeos no YouTube e converse com os amigos dos grupos de WhatsApp ou Telegram.

Se precisar de uma dica tenho alguns grupos para indicar.

Continua

Estas são apenas as duas etapas iniciais na criação do sistema. Há mais seis etapas que eu vou mostrar a seguir.

Estou separando um tempo do meu trabalho para compartilhar com você este conhecimento. Para me ajudar peço que responda a pesquisa para eu conhecer e me direcionar na produção do conteúdo para a comunidade Scriptcaser.

Desejo todo o sucesso nos seus negócios

Eliel Ramos

Categorias
Dicas

Como Ocultar Alguns Checkboxes Numa Consulta do Scriptcase

Neste tutorial eu mostro como ocultar o checkbox de apenas algumas linhas da consulta que tem o botão Run.

Este não é um recurso nativo do Scriptcase mas com um pouco de conhecimento você pode deixar suas grids muito mais intuitivas.

Tutorial

Assita ao vídeo com o tutorial completo

Vamos ao passo a passo.

1. Inspecione o elemento

Inspecionar: clique com botão direito no checkbox.

Clique com o botão direito sobre um dos checkboxes, exceto o checkbox de marcar todos, e vá na opção inspecionar.

Inspecionar checkbox.

No id você vai encontrar algo parecido com NM_ck_run3 onde o número no final corresponde ao número sequencial da linha.

2. Crie as Variáveis Globais

No evento OnScriptInit da consulta você vai criar mais duas variáveis globais:

[gROW] = 0;[gIDS] = [];

A primeira para armazenar o número sequencial da linha e a segunda para armazenar o id do checkbox da linha.

3. Incrementar a Linha e Verificar Se Está Ativo

No evento onRecord da consulta você vai precisar primeiro incrementar a variável global [gROW]:

[gROW]++;

Na sequência verifique se o status é inativo com um if.

Atribua a um novo índice do array global [gIDS] o id do elemento concatenado ao número da linha da global [gROW].

Lembre-se de acrescentar o # antes.

if({clistatus} == 'Inativo') {
	[gIDS][] = "#NM_ck_run" . [gROW];
}

4. Ative o Rodapé na Consulta

Ativando a exibição do rodapé.

Ative o rodapé apenas para que o código onFooter seja executado.

5. Ocultar os Ids Via CSS

No método onFooter você vai implodir o array de ids [gIDS] separados por vírgula atribuindo a uma varíável $chIds.

$chIds = implode(',', [gIDS]);

Você terá na variável $chIds todos os elementos do array separados por vírgula.

Agora basta usar o CSS para aplicar o display: none nestes elementos.

echo "<style>$chIds {display:none}</style>";

A função echo serve apenas para mandar este código para o navegador.

A tag HTML <style> indica que vamos trabalhar com o CSS e o atributo display: none oculta efetivamente o checkbox.

Conclusão

De uma forma simples você pode melhorar a usabilidade do sistema impedindo que registros indesejados sejam selecionados na consulta.

Agora escreva aqui nos comentários se a dica foi útil.

Um abraço e até a próxima.

Categorias
Recursos

Aprenda Botão Run do ScriptCase Simplificado

O Botão Run do Scriptcase é uma ferramenta fantástica para utilização nas suas consultas. Veja como usá-lo de forma simples.

Vou te mostrar neste vídeo como fazer um Botão Run de forma muito mais simples.

Inscreva-se no canal para aprender a programar 8 x mais rápido usando o ScriptCase.

Deixe aqui seu comentário, dúvida ou sugestão de vídeo.

Um abraço e até o próximo!