Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
2012
Scriptcase
Técnicas Avançadas
Parte I
1
Scriptcase – Técnicas Avançadas
2012
Sumário
1. Introdução .................................................................................................................................................... 3
2. Banco de Dados (uma visão genérica) ........................................................................................................ 5
3. Segurança ................................................................................................................................................... 12
4. ScriptCase (SC). .......................................................................................................................................... 22
4.1. Introdução .......................................................................................................................................... 22
4.1.1. Acessando ScriptCase ................................................................................................................ 24
4.1.2. Criando um Projeto .................................................................................................................... 27
4.1.3. Nova Aplicação .......................................................................................................................... 32
4.1.4. Funcionalidades do ScriptCase .................................................................................................. 46
4.1.4.1. Menu Principal ................................................................................................................... 46
4.1.4.2. Barra de Ferramentas ........................................................................................................ 48
4.1.4.3. Barra de Tarefas ................................................................................................................. 49
4.1.4.4. Projeto Explorer ................................................................................................................. 49
4.1.5. Montando a Segurança do Nosso Sistema. .............................................................................. 52
4.1.6. Criando a Aplicação Login .......................................................................................................... 61
4.1.7. Criando uma Aplicação Tipo Menu. .......................................................................................... 78
4.1.8. Funcionalidade Esqueceu a Senha? .......................................................................................... 91
4.1.9. Valores Padrões. ...................................................................................................................... 103
4.1.10. Personalizando uma Aplicação do tipo Formulário. ............................................................... 105
4.1.11. Personalizando uma Aplicação do tipo Consulta. .................................................................. 148
4.1.12. Construindo/Alterando um Template .................................................................................... 169
4.1.13. Criando/Personalizando uma Aplicação Calendário .............................................................. 183
4.1.14. Registro de Logs/Acessos ........................................................................................................ 192
4.1.15. Segurança nas Aplicações ........................................................................................................ 193
4.1.16. Outras Aplicações do Nosso Sistema ...................................................................................... 198
2
Scriptcase – Técnicas Avançadas
2012
1. I ntrodução
O desenvolvimento de aplicações WEB para internet / intranets é uma forte tendência na Informática. Cada
vez mais, as empresas desenvolvem ou migram seus sistemas para plataforma WEB. No entanto, criar
aplicações para a internet não é tarefa simples. Aquisição de tecnologias, capacitação e diversidade de
linguagens são alguns dos desafios, além de representarem investimentos de alto custo.
O ScriptCase roda em um servidor web e pode ser acessado via internet / intranet (qualquer browser), ou
seja, é uma ferramenta bastante diferenciada das demais por conta da sua portabilidade.
O ScriptCase permite criar novos sistemas ou agregar aplicações WEB a sistemas já existentes. Para o usuário
profissional, o ScriptCase permite a programação avançada (regras de negócio), permitindo até a criação de
sistemas complexos. Para o usuário final, devido a facilidade de manuseio - o ScriptCase requer apenas
conhecimento básico de SQL - torna-se forte gerador de relatórios e consultas em diversas saídas,
destacando-se os formatos PDF, XLS e RTF.
O objetivo geral deste curso é elaborar uma aplicação WEB, com diversos recursos avançados, utilizando
como ferramenta o ScriptCase e como objetivos genéricos aprenderemos algumas técnicas que facilitarão o
desenvolvimento desta aplicação.
Fontes
O ScriptCase gera os programas-fonte (PHP, JavaScript, HTML e AJAX). Os fontes gerados são totalmente
independentes da ferramenta, podendo ser copiados para qualquer servidor WEB. A linguagem PHP é
gratuita (GNU) e pode ser utilizada nos ambientes Windows ou Linux (todo processamento do PHP é feito no
servidor).
Pré Requisitos
Do ambiente: O ScriptCase deve ser instalado em um servidor web que possua o PHP instalado e o Zend
Optimizer e um banco de dados padrão SQL (MySql, SqLite, etc). Quanto ao servidor web, para ambiente
Microsoft pode ser o IIS ou o APACHE. No ambiente Linux, sugerimos o servidor APACHE.
Do usuário: O ScriptCase é utilizado a partir do browser, nos ambientes Windows ou Linux. É desejável
conhecimentos básicos de SQL.
Ferramentas Adicionais
3
Scriptcase – Técnicas Avançadas
2012
Além dos recursos para criação de aplicações web, o ScriptCase oferece recursos adicionais que o tornam um
ambiente completo para desenvolvimento de sistemas, leia sobre as ferramentas abaixo:
SQL Builder
Ferramenta para auxiliar a construção de consultas SQL em forma de wizard. Permite a escolha da base de
dados, tabelas, campos, order by e where, assim como, a realização de simulações dos comandos montados
e a sua salva para uso posterior.
WebHelp
Permite criar webhelps, de modo a padronizar uma documentação e facilitar a sua criação.
Principais Recursos:
Permite criar arquivos HTMLS com interface gráfica (WYSIWYG), css, upload de imagens e menu hierárquico.
Permite também ligar uma aplicação diretamente a uma página do help, sem a necessidade editar os helps
de cada aplicação.1
1
Texto extraído do Manual do ScriptCase – V.5.0.264, publicado no site www.scriptcase.com.br
4
Scriptcase – Técnicas Avançadas
2012
Iniciaremos este estudo tratando de bancos de dados. O SC foi projetado para trabalhar com quase todos os
bancos relacionais que utilizem a linguagem SQL (Structured Query Language ou Linguagem de Consulta
Estruturada – veja figura abaixo), no nosso curso utilizaremos o MySQL como padrão. Não será nossa
intenção ensinar SQL, pois entendemos que este é um requisito básico de desenvolvedores de sistemas, mas
o conhecimento de algumas dicas tornará o nosso aprendizado mais eficaz.
Desenvolver uma aplicação não é uma tarefa fácil para um programador, mas bem mais simples para quem
possui conhecimentos em análises de sistemas, uma vez que escrever o código é a última das tarefas.
Estabelecendo uma escala cronológica podemos dizer que um sistema bem elaborado passa pelas seguintes
etapas de desenvolvimento:
a) Regras de Negócio - São declarações sobre a forma da empresa fazer negócio. Elas refletem políticas
do negócio. Organizações têm políticas para satisfazer os objetivos do negócio, satisfazer clientes,
fazer bom uso dos recursos, e obedecer às leis ou convenções gerais do negócio. Regras do Negócio
tornam-se requisitos, ou seja, podem ser implementados em um sistema de software como uma
forma de requisitos de software desse sistema. Representam um importante conceito dentro do
processo de definição de requisitos para sistemas de informação e devem ser vistas como uma
declaração genérica sobre a organização.
b) Casos de Estudo ou Métodos do Caso - Um método é um conjunto de processos pelos quais se torna
possível conhecer uma determinada realidade, produzir determinado objeto ou desenvolver certos
procedimentos ou comportamentos (OLIVEIRA, 1999). O método científico caracteriza-se pela
5
Scriptcase – Técnicas Avançadas
2012
escolha de procedimentos sistemáticos para descrição e explicação de uma determinada situação
sob estudo e sua escolha deve estar baseada em dois critérios básicos: a natureza do objetivo ao
qual se aplica e o objetivo que se tem em vista no estudo (FACHIN, 2001).
c) Casos de Uso - Um caso de uso representa uma unidade discreta da interação entre um usuário
(humano ou máquina) e o sistema. Um caso de uso é uma unidade de um trabalho significante. Por
exemplo: o “login para o sistema”, “registrar no sistema” e “criar pedidos” são todos casos de uso.
Cada caso de uso tem uma descrição o qual descreve a funcionalidade que irá ser construída no
sistema proposto. Um caso de uso pode “incluir” outra funcionalidade de caso de uso ou “estender”
outro caso de uso com seu próprio comportamento.
e) Escrever o Código.
f) Testar a aplicação.
Como já foi mencionado anteriormente, não é propósito deste curso o aprofundamento dos conceitos
acima, veremos apenas, na prática, como eles funcionam.
Endereço: Rua Engenheiro João Batista pereira, 129 – Centro – Arapiraca – 57.300-450 – AL.
Fone – 82 3521.9000
Contato – Dr. Jean Charles, Médico Cardiologista, graduado pela Universidade de Medicina do Agreste
Alagoano, Doutor em Cirurgia Cardiovascular pela Universidade de Havard, email
jeancharles@hnsarapiraca.com.br, celular 82 8866.5544
Vigilante – José Marcos de Oliveira, 32 anos, ensino médio completo, residente no sítio Pau D´Arco, celular
82 3247.6451.
Gerente de Tecnologia – Paulo Roberto Simões Vaz, 38 anos, casado com Marta Rocha Castro Simões, pai
de Silvia Maria Castro Simões (18 anos), formado pelo Instituto de Tecnologia de Feira Grande, Esp em
Engenharia de Software pela FGV, residente na Rua José Alexandre, 356 – Baixão – Arapiraca – Alagoas.
6
Scriptcase – Técnicas Avançadas
2012
Diretor do Centro Cirúrgico – Dr. Antônio Carlos Batista de Melo, Médico Cirurgião, 58 anos, graduado pela
Universidade de Medicina do Agreste Alagoano, email carlosbatista@hotmail.com, atende as 2ª, 4ª e 6ª
das 8:00 ás 14:00.
Diretora do Laboratório de Análises Médicas – Dilma Russef, enfermeira, graduada pela Escola de
Medicina Santa Juliana, email dilmapresidenta@brasil.com.br.
Além de outros 459 funcionários com diversos níveis de escolaridade e formação, lotados nos 14
departamentos do hospital.
Com base neste cenário, imaginando que já conhecemos as regras de negócio, os estudos de casos e os casos
de uso, iremos montar/modelar nosso banco de dados.
Exercício 1:
Dessa forma aplicaremos um conceito muito comum em modelagem que é a normalização (NF) do banco.
O objetivo da normalização de um banco de dados é evitar os problemas que podem provocar falhas no
projeto do banco de dados, bem como eliminar a mistura de assuntos e as correspondentes redundâncias
dos dados desnecessárias. A abreviação usada, (NF), vem do inglês, "Normal Form".
O processo de normalização aplica uma série de regras sobre as tabelas (também chamadas de relações) de
um banco de dados, para verificar se estão corretamente projetadas.
Um esquema de relação R está na 1FN se todos os seus atributos forem atômicos (simples) e
monovalorados, ou seja, não são permitidos atributos multivalorados, atributos compostos ou atributos
multivalorados compostos.
Exemplo:
7
Scriptcase – Técnicas Avançadas
2012
FUNCIONÁRIOS = {CODFUNC + NOME + CARGO + {PROJETO + DATAINI + DATAFIM}}
Veja abaixo outro exemplo de tabela que não está na 1FN (considerando que o campo TELEFONES é
multivalorado):
Para deixar esta tabela na 1FN, deve-se separar o campo multivalorado TELEFONES em uma tabela adicional,
desta forma:
Outra forma de identificar se a tabela está na 1NF é verificando se existem tabelas aninhadas, ou seja, mais
de um registro para uma chave primária.
Observe o exemplo:
Considere um Pedido número 00001, para este pedido se observarmos o formulário em papel teremos
muitos campos a considerar, contudo usaremos apenas alguns para facilitar o entendimento.
Neste momento devemos idealizar o pedido número: 00001 e efetuar os seguintes testes:
Observe que para os dados do pedido 00001 lançados acima, apenas os atributos que estão em negrito SÃO
ÚNICOS, pois não se diferem. Os demais atributos mudam, não cumprindo a 1NF onde os atributos devem
ser atômicos, quer dizer únicos.
Para testarmos um dos atributos e ter certeza que este é atômico, podemos efetuar uma pergunta conforme
o exemplo abaixo:
Podemos ter outro cliente para o pedido 00001? = Não. Podemos ter apenas 1 cliente por pedido, sendo
assim este atributo é atômico único para 1 pedido.
Podemos ter outro vendedor para o pedido 00001? = Não. Podemos ter apenas 1 vendedor por pedido.
8
Scriptcase – Técnicas Avançadas
2012
Podemos ter outro produto para o pedido 00001? = Sim. Podemos ter vários produtos para um pedido,
sendo assim, os campos aninhados devem ser extraídos para outra tabela.
Assim sendo devermos normalizar esta tabela, transformando-a em duas: PEDIDOS e PRODUTOS. Essa é a
técnica fundamental da normalização.
Tabela : Colaboradores
Campo Chave
Id Primária (pk)
Nome
Endereço
Estado civil(id) Estrangeira (fk)
Escolaridade(id) Estrangeira (fk)
Formação(id) Estrangeira (fk)
Cargo(id) Estrangeira (fk)
Função(id) Estrangeira (fk)
Lotação(id) Estrangeira (fk)
Habilidades(id) Estrangeira (fk)
Cônjuge
Telefone
email
Atendimento(id) Estrangeira (fk)
Nascimento
Tabela: Clientes
Campo Chave
Id Primária (pk)
Nome
Endereço
Contato
Telefone
Campo Chave
Id Primária (pk)
Descrição
Tabela: Escolaridade
Campo Chave
Id Primária (pk)
Descrição
9
Scriptcase – Técnicas Avançadas
2012
Tabela: Formação
Campo Chave
Id Primária (pk)
Descrição
Tabela: Cargo
Campo Chave
Id Primária (pk)
Descrição
Tabela Função
Campo Chave
Id Primária (pk)
Descrição
Tabela: Lotação
Campo Chave
Id Primária (pk)
Descrição
Tabela: Habilidades
Campo Chave
Id Primária (pk)
Descrição
Campo Chave
Id Primária (pk)
Descrição
Tabela: Dependentes
Campo Chave
Id Primária (pk)
Lotação(id) Estrangeira (fk)
Nome
Grau de parentesco(id) Estrangeira (fk)
10
Scriptcase – Técnicas Avançadas
2012
Campo Chave
Id Primária (pk)
Descrição
Foram necessárias inicialmente 12 tabelas, mais adiante veremos que serão necessárias pelo menos mais
umas 20 tabelas pra completar esse pequeno ciclo.
Se você concluiu que havia necessidade de pelo menos 15 tabelas, seu conhecimento e capacidade de
abstração são muito bons.
Se você concluiu que seriam necessárias mais que 15 tabelas talvez você precise entender que tudo em
informática tem um custo. Muita normalização implica em muito acesso ao disco, muita memória, muito
processador, etc. Entenda que o que é normalizado precisa ser desnormalizado em algum momento, para
facilitar o entendimento e as consultas realizadas pelo usuário final. Então a situação ideal é o meio termo.
Daremos uma pausa nesta etapa que busca firmar dois fundamentos:
11
Scriptcase – Técnicas Avançadas
2012
3. S egurança
Exercício 2:
Uma aplicação stand alone (autônoma, sozinha), sem ser baseada na web, requer critérios de segurança bem
menos complexos, porém não menos importantes. Uma aplicação web requer esforço extremo no quesito
segurança. Um dos fatores que concorre para isso é que o usuário final (o cliente), na maioria das vezes, não
faz a mínima idéia do que se passa por traz de um aparato de segurança de uma aplicação web e por não
conhecê-los não toma providências no sentido de evitá-las. Dessa forma, caberá a você analista definir a
quase totalidade dos estudos de casos e casos de uso.
Nossa intenção agora é montar um esquema no banco de dados que reforce a segurança na camada da
aplicação.
a) Nível de aplicação – Saber quem pode acessar quais aplicações, e quais os privilégios deste acesso
(incluir, alterar, excluir e consultar);
b) Nível de registro – Saber quem é dono do registro e, mesmo como proprietário, quais os privilégios
serão atribuídos a este registro (incluir, alterar, excluir e consultar).
Tabela: Usuários
Campo Chave
Id Primária (pk)
Nome
12
Scriptcase – Técnicas Avançadas
2012
Login Índice
senha
Tabela: Aplicações
Campo Chave
Id Primária (pk)
Descrição
Campo Chave
Id Primária (pk)
Descrição
Campo Chave
Id Primária (pk)
Descrição
Campo Chave
Id Primária (pk)
Grupo de Acesso(id) Estrangeira (fk)
Aplicação(id) Estrangeira (fk)
Atributos de Acesso
Campo Chave
Id Primária (pk)
Descrição
Campo Chave
Id Primária (pk)
Perfil de Acesso(id) Estrangeira (fk)
Grupos(id) Estrangeira (fk)
Atributos de Acesso
13
Scriptcase – Técnicas Avançadas
2012
Tabela: Grupo de Usuários (Na aplicação)
Campo Chave
Usuário(id) Estrangeira (fk)
Grupo de Acesso(id) Estrangeira (fk)
Se você imaginou menos que 8 tabelas, seu esquema de segurança é extremamente frágil e deveremos rever
alguns conceitos.
Um esquema neste molde é satisfatório, mas poderemos ampliá-lo com algumas decisões, veja:
Tabela: Usuários
Campo Chave
Id Primária (pk)
Nome
Login Índice
Situação
Trocar Senha?
Qual o período de
troca de senha?
Qual a última data
de troca?
senha Criptografada md5
prop_reg
Login Estrangeira (fk)
Data da criação
14
Scriptcase – Técnicas Avançadas
2012
Tabela: Aplicações
Campo Chave
Id Primária (pk)
Descrição
prop_reg
Login Estrangeira (fk)
Data da criação
Campo Chave
Id Primária (pk)
Descrição
prop_reg
Login Estrangeira (fk)
Data da criação
Campo Chave
Id Primária (pk)
Descrição
Status
prop_reg
Login Estrangeira (fk)
Data da criação
Campo Chave
Id Primária (pk)
Grupo de Acesso(id) Estrangeira (fk)
Aplicação(id) Estrangeira (fk)
Atributos de Acesso
prop_reg
Login Estrangeira (fk)
Data da criação
Campo Chave
Id Primária (pk)
Descrição
prop_reg
Login Estrangeira (fk)
15
Scriptcase – Técnicas Avançadas
2012
Data da criação
Campo Chave
Id Primária (pk)
Perfil de Acesso(id) Estrangeira (fk)
Grupo de Proprietários(id) Estrangeira (fk)
Atributos de Acesso
prop_reg
Login Estrangeira (fk)
Data da criação
Campo Chave
Usuário(id) Estrangeira (fk)
Grupo de Acesso(id) Estrangeira (fk)
prop_reg
Login Estrangeira (fk)
Data da criação
Campo Chave
Id Primária (pk)
Descrição (igual ao
login do usuário)
prop_reg
Prop_agd
Login Estrangeira (fk)
Data da criação
Campo Chave
Id Primária (pk)
Login Estrangeira (fk)
prop_reg
Prop_agd
Login Estrangeira (fk)
16
Scriptcase – Técnicas Avançadas
2012
Data da criação
Campo Chave
Id Primária (pk)
Perfil de Acesso Estrangeira (fk)
Agenda(id)
Grupo de Acesso(id) Estrangeira (fk)
prop_reg
Prop_agd
Login Estrangeira (fk)
Data da criação
Está pronto nosso esquema de segurança? Ainda não. Parta do princípio que a pessoa que menos entende
de segurança de sistemas, no mundo, é você. Então, implantaremos mais um dispositivo - esquema de LOGs
de ACESSO e AÇÕES. Embora os DBs já produzam este tipo de segurança, normalmente eles possuem dois
pontos muito fracos:
Para tanto acrescentaremos mais uma tabela que registrará toda e qualquer ação que for realizada pela
aplicação.
Tabela: LOGs
Campo Chave
Id Primária (pk)
Aplicação(id) Estrangeira (fk)
Data e Hora
login Estrangeira (fk)
IP
Ação
Realizado
status
Nota:
A tabela de Logs sugerida não possuirá campos tipo BLOB para armazenamento de imagens,
desta forma não serão atualizadas operações com imagens no tratamento dos logs.
Outra ação bastante interessante é determinarmos quem está logado na aplicação. Essa tarefa é muito
complicada em aplicações web, uma vez que o usuário está utilizando-se de um navegador (Firefox, IE,
Google Chrome), que é uma aplicação externa, para acesso ao nosso sistema e para sair da aplicação baixa
17
Scriptcase – Técnicas Avançadas
2012
fechar o navegador. Utilizaremos a tabela acima para efetuarmos esse controle – mas desde já informo –
esta solução não representará 100% da realidade.
O esquema de segurança foi montado para uma aplicação multi-empresa, onde cada empresa poderá gerir
os seus registros ou grupos de registros.
Esses controles são definidos pelas tabelas de acesso (grupo_acesso, perfil_grupo e perfil _acesso).
A tabela perfil_grupo definirá o controle que cada cliente terá sobre os demais clientes.
Sempre que um novo cliente é cadastrado, automaticamente será lançado um novo registro na tabela
grupo_acesso definido pela sua sigla e posteriormente o administrador definirá sobre quais grupos de
acesso ele terá o respectivo controle.
18
Scriptcase – Técnicas Avançadas
2012
Toda tabela terá um campo prop_reg que determinará a que grupo_acesso ele pertence,
conseqüentemente quais clientes terão acesso sobre ele.
Para efetuar este controle criaremos uma função no banco de dados denominada PermiteAcesso, que
receberá dois parâmetros: usuario e prop_reg. Veja abaixo:
Segurança na Aplicação
O controle dos usuários sobre as aplicações será definido por grupos que determinarão perfis de acesso
(Inclusão, Alteração, Exclusão e Consulta) às aplicações.
19
Scriptcase – Técnicas Avançadas
2012
a) Administradores – Acesso total a todas as aplicações;
b) Acesso Restrito – Acesso total a um conjunto mínimo de aplicações (login, menu, troca de senhas,
agenda, esqueceu a senha e sair do sistema)
Outros grupos poderão ser criados por livre escolha, como por exemplo:
Esses controles são definidos pelas tabelas de acesso (aplicações, grupos, grupo_aplicacoes e
usuario_grupos).
Sempre que um novo usuário é cadastrado ele receberá o perfil do grupo de Acesso Restrito, posteriormente
o administrador definirá qual(is) grupo(s) ele pertencerá.
Para efetuar este controle criaremos uma função no banco de dados denominada PermiteAcessoAgenda,
que receberá dois parâmetros: usuario e prop_agd. Veja abaixo:
20
Scriptcase – Técnicas Avançadas
2012
Sempre que um novo usuário é cadastrado, automaticamente será lançado um novo registro na tabela
grupo_acesso_agenda definido pelo login deste cliente e posteriormente o administrador definirá sobre
quais grupos de acesso a agenda este participará.
21
Scriptcase – Técnicas Avançadas
2012
4. S criptCase (SC).
4.1. Introdução
Sistema e Aplicação
Em linhas gerais, cada página web elaborada pelo Scripctcase é uma aplicação e o conjunto de aplicações
(páginas) compõem um sistema. Cabe salientar dois pontos:
a) Uma página web poderá, em alguns casos, ser composta de mais de uma aplicação;
b) Uma aplicação nem sempre será uma página – existem aplicações que não serão visualizadas em
páginas. Exemplo: uma aplicação de registro de saída do sistema de um usuário.
CONSULTAS - São as aplicações para visualização dos dados. Uma consulta no ScriptCase tem também o
caráter de relatório, uma vez que gera a saída em PDF, XLS, XML, RTF e outros formatos.
FORMULÁRIOS - São as aplicações para atualização de Dados. O ScriptCase cria uma aplicação com todos
os recursos de inclusão, alteração, exclusão e navegação de registros.
Os Formulários estão divididos em 4 tipos de orientação: Simples, Múltiplos Registros, Grid editável e Grid
Editável (view).
ABAS - O ScriptCase permite através desta opção reunir várias aplicações já desenvolvidas e dar à aplicação
resultante um destes formatos ou ambos, onde cada aba ou cada opção da pasta corresponde a uma
aplicação.
22
Scriptcase – Técnicas Avançadas
2012
CONTROLE - São as aplicações criadas para infra-estrutura do sistema. Podem ser utilizadas para captação
de dados (parâmetros) que serão repassados a outras aplicações.
MENU - As aplicações de menu servem para criar uma estrutura hierárquica de navegação das aplicações do
sistema. É um recurso extremamente útil, uma vez que organiza as aplicações de modo visual, facilitando o
acesso do usuário às aplicações.
MENU ÁRVORE - As aplicações de Menu Árvore servem para criar uma estrutura de navegação das
aplicações do sistema em formato Tree View (similar ao windows explorer). É um recurso extremamente útil,
uma vez que organiza as aplicações de modo visual, facilitando o acesso do usuário às aplicações.
FILTRO - Formulário de filtro para ligar alguma aplicação que necessite receber uma string contendo uma
cláusula where.
REPORT PDF - ScriptCase oferece uma ferramenta para gerar relatórios de qualidade, usando formatos pré-
definidos.
Use esta aplicação para gerar relatórios para as instituições de governo ou outra organização que formato
exigido específicos.
CONTAINER - Permite exibir vários tipos de aplicações aninhadas em Widgets semelhantes àquelas para o
iGoogle.
BLANK - Permite ao desenvolvedor escrever PHP / código HTML e exibir um resultado do processo.2
Um sistema será tratado dentro da estrutura do ScriptCase como um projeto. O projeto será o repositório de
todas as aplicações, rotinas, conexões ao banco e bancos de idiomas de um sistema.
2
Texto extraído do Manual do ScriptCase – V.5.0.264, publicado no site www.scriptcase.com.br
23
Scriptcase – Técnicas Avançadas
2012
4.1.1. Acessando ScriptCase
A tela acima representa a interface de logon, onde você deverá informar o seu código de usuário (login) e
senha.
Após a validação do usuário/senha e de acordo com o perfil estabelecido para o mesmo, o ScriptCase
disponibilizará as opções que o usuário terá acesso, assim como, os projetos que o mesmo poderá acessar.
Uma vez autenticado/logado no ScriptCase, será apresentada a página do inicial de onde você pode
selecionar um projeto existente ou criar um novo projeto.
24
Scriptcase – Técnicas Avançadas
2012
Essa tela é composta dos seguintes itens:
a) Menu Principal;
b) Barra de Ferramentas;
c) Barra de Tarefas;
d) Área de Projetos.
Ao trabalharmos com um projeto esta área de projetos será dividida em duas áreas distintas: a) Projeto
Explorer; b) Lista de Aplicações. E teremos uma tela geral semelhante à figura abaixo.
25
Scriptcase – Técnicas Avançadas
2012
26
Scriptcase – Técnicas Avançadas
2012
4.1.2. Criando um Projeto
Podemos definir um projeto como sendo um sistema. Isso de forma bem simples, uma vez que se você
estender o conceito de sistema vários projetos poderão compor um único sistema. Exemplos:
a) Se você definir que o seu sistema é uma Folha de Pagamentos, então é aconselhável que o seu
projeto seja Folha de Pagamentos, conseqüentemente ele será o repositório de todas aplicações,
funções, rotinas, etc relativas à folha de pagamentos;
b) Se você definir que seu Sistema é um Gestor Financeiro, então é aconselhável que você divida este
sistema em partes (Contabilidade, Folha de pagamento, Contas a Receber/Pagar, etc) e cada parte
desta seja um projeto. Os projetos podem ser integrados entre si.
Tudo isso é conceitual, você poderá definir um único projeto para um cliente que será repositório de todos
os sistemas, aplicações, etc relativos ao cliente.
27
Scriptcase – Técnicas Avançadas
2012
Defina um nome para o seu projeto e descreva-o. Este nome não poderá conter espaços nem caracteres
especiais. Para o nosso curso o nome será treinamento.
O SC traz como exemplos alguns modelos de projeto, no nosso curso não os utilizaremos.
Click no botão
28
Scriptcase – Técnicas Avançadas
2012
Você poderá definir um banco de idiomas para o seu projeto. Nesta fase do nosso treinamento isso não é
Outro ponto forte do SC é que você poderá definir lay-outs para seus sistemas. Essa definição poderá ser
feita em tempo de execução. Veremos esses tópicos mais adiante, por ora ficaremos na configuração básica.
Click no botão
29
Scriptcase – Técnicas Avançadas
2012
Como foi abordado nos capítulos anteriores, todo processo de desenvolvimento inicia-se pela modelagem do
banco de dados (DB), assim, ao criarmos um novo projeto, deveremos informar o Sistema Gestor do Banco
de Dados (DBMS – Data Base Manager System) que gerenciará nosso banco (DB).
30
Scriptcase – Técnicas Avançadas
2012
Supondo-se que sua base de dados está instalada em seu computador pessoal (localhost), escolha o usuário
e a senha, a seguir click no botão para selecionar a base de dados que utilizará
neste projeto, conforme exemplo abaixo.
Click no botão
Como esse é um novo projeto o SC abrirá uma tela sugerindo a criação de uma nova aplicação.
31
Scriptcase – Técnicas Avançadas
2012
4.1.3. Nova Aplicação
Existem dois modos de criação de uma nova aplicação:
a) Wizard;
b) Expressa.
Um sistema por mais simples que seja terá pelo menos três aplicações:
a) Um Menu;
b) Uma tela de cadastro;
c) E uma tela de consulta/relatório.
Pois bem, antes de iniciarmos o sistema – objeto deste curso – faremos uma apresentação bem simples de
cada um desses tipos de aplicações e, a seguir, retornaremos às mesmas para um estudo mais avançado.
Os tipos de aplicações disponíveis foram descritas na Introdução deste capítulo, por ora veremos a criação
de uma aplicação do tipo formulário e utilizaremos como exemplo a tabela clientes da nossa base de dados.
32
Scriptcase – Técnicas Avançadas
2012
Selecione o tipo de aplicação Formulário.
33
Scriptcase – Técnicas Avançadas
2012
Defina o nome da aplicação. Este nome não poderá conter espaços nem caracteres especiais. Poderemos
utilizar o nome padrão utilizado pelo SC (form_clientes).
Mesmo para os usuários mais experientes, 90 % das aplicações do tipo formulário são criadas desta maneira
ou seja, sem qualquer alteração dos valores padrões. O que pode mudar é o Tipo e sobre isso falaremos mais
adiante no estudo avançado.
34
Scriptcase – Técnicas Avançadas
2012
Criaremos agora uma aplicação do tipo Consulta para a tabela clientes. Para tanto click no botão (Nova
Aplicação) localizado na barra de Ferramentas.
35
Scriptcase – Técnicas Avançadas
2012
Defina o nome da aplicação. Este nome não poderá conter espaços nem caracteres especiais. Poderemos
utilizar o nome padrão utilizado pelo SC (grid_clientes).
36
Scriptcase – Técnicas Avançadas
2012
Criaremos agora uma aplicação do tipo Menu para o nosso sistema. Para tanto click no botão (Nova
Aplicação) localizado na barra de Ferramentas e escolha o tipo de aplicação Menu
Click no botão
37
Scriptcase – Técnicas Avançadas
2012
Teremos agora que editar a aplicação menu, de forma tal que ela possa executar as aplicações geradas e sair
do sistema. Vamos lá.
Passo 1:
38
Scriptcase – Técnicas Avançadas
2012
Passo 2:
Crie o label Cadastrar Clientes, informe a aplicação que será o link (form_clientes) e insira o Sub-item.
Passo 3:
Crie o label Consultar Clientes, informe a aplicação que será o link (grid_clientes) e insira o Item.
39
Scriptcase – Técnicas Avançadas
2012
Passo 4:
Crie o label Sair do Sistema, altere o Target para Sair e insira o Item.
Você pode observar que o item Sair do Sistema está no mesmo nível dos itens Cadastrar Clientes e Consultar
Clientes, ou seja, está dentro do item Clientes, mas eu desejo que ele fique no mesmo nível (menu) que o
item Clientes. Para consertar isso utilize o botão , mostrado na figura anterior.
40
Scriptcase – Técnicas Avançadas
2012
Feito isso salve a aplicação clicando no botão Salvar, localizado na Barra de Ferramentas.
Pronto, agora que aplicações foram criadas na base de dados do SC precisamos gerar os códigos PHP.
41
Scriptcase – Técnicas Avançadas
2012
Agora já poderemos executar o nosso sistema. Como ele se iniciará pela aplicação menu, click na sua aba
43
Scriptcase – Técnicas Avançadas
2012
44
Scriptcase – Técnicas Avançadas
2012
Evidentemente que um sistema neste estágio atual não deve ser apresentado sequer a nós mesmos, quanto
mais a um cliente. Poderia gastar algumas folhas de papel enumerando os problemas que encontramos nele,
mas a etapa de personalização das aplicações será descrita mais adiante. Por ora, nossa tarefa está concluída
– elaborar um pequeno sistema.
45
Scriptcase – Técnicas Avançadas
2012
4.1.4. Funcionalidades do ScriptCase
No tópico anterior aprendemos a criar alguns tipos de aplicações (menu, formulário e consulta) e montamos
um sistema. Esse sistema precisa ser totalmente editado (por diversos motivos), mas antes de efetuarmos
esta edição precisaremos conhecer melhor as potencialidades do ScriptCase – é o que veremos a seguir.
Arquivo
Novo Projeto Cria um novo projeto.
Abrir Projeto Lista os projetos que o usuário possui permissão.
Fechar Projeto Fecha o projeto em edição.
Nova Aplicação Cria novas aplicações de consultas, report pdf, formulários, abas,
controle, menu, filtro, container ou blank.
Criação Expressa Permite criar várias aplicações simultaneamente.
Aplicações Recentes Exibe as últimas aplicações editadas.
Menu Principal Navega para a página do menu principal do ScriptCase.
Restaurar Aplicação Utilizado para restaurar versões anteriores de uma aplicação.
Exportar Projeto Utilizado para exportar aplicações desenvolvidas utilizando o
ScriptCase.
Importar Projeto Utilizado para importar aplicações desenvolvidas utilizando o
ScriptCase.
Novos Módulos - Ferramenta para automatizar controle de acesso as suas
Segurança aplicações.
Logout Fecha o ScriptCase.
Exibir
Código Fonte Exibir último código fonte gerado da aplicação que
está sendo editada.
Filtrar Usuários – Todos os usuários Serão exibidas todas as aplicações desenvolvidas
pelo grupo.
Filtrar Usuários – Apenas admin Serão exibidas somente as aplicações desenvolvidas
pelo usuário.
Filtrar Pastas – Pastas clássicas Serão exibidos seus conteúdos quando forem
selecionadas.
Filtrar Pastas - Exibir abertas As pastas serão exibidas com seus conteúdos visíveis.
Dados em Sessão Serão exibidas todas as variáveis de sessão do
ScriptCase, bem como, as das aplicações executadas.
46
Scriptcase – Técnicas Avançadas
2012
Projeto
Propriedades Exibe as propriedades do projeto.
Valores Padrões Exibe a lista dos valores padrões para o projeto corrente.
Histórico de Versões Exibe as versões do projeto.
Incrementar Versão Incrementa a versão do projeto corrente.
Gerar Código Fonte Gera o fonte de todas as aplicações do projeto atual.
Publicar Abre o wizard de publicação do projeto corrente.
Exportar aplicações Gera um arquivo de exportação do projeto corrente.
Importar aplicações Importa um arquivo de backup no projeto corrente.
Excluir Elimina o projeto corrente.
Relatórios- Lista de Aplicações Exibe as aplicações do projeto.
Relatórios - Resumo por Exibe aplicações totalizadas pelo desenvolvedor.
Desenvolvedores
Exibir Diagrama Exibe o diagrama do projeto.
Busca em Aplicações Permite buscar por texto nas aplicações do projeto.
Conexões
Nova Conexão Cria uma nova conexão no projeto atual.
Editar Conexão Permite editar as conexões do projeto atual.
Aplicação
Salvar Salvar Aplicação.
Gerar Gerar o fonte da Aplicação.
Executar Executar a aplicação.
Ferramentas
SQL Builder Ferramenta para criação rápida de comandos
SQL.
Dicionário de Dados Permite ao usuário definir padrões para as
tabelas (nomes, e tipos de campos, etc.).
Edição expressa Abre uma janela para editar várias aplicações ao
mesmo tempo.
Criar WebHelp Ferramenta para criar documentação.
Bibliotecas Permite a criação de rotinas padrões que serão
utilizadas em muitas aplicações.
Regionalidade Idiomas Edição das mensagens.
Regionalidade Configurações regionais Personalização das configurações regionais.
Conversor Conversor (V4 -> V5).
Visualização- Temas Edição de Esquemas.
Visualização- Botões Gerenciamento de botões.
47
Scriptcase – Técnicas Avançadas
2012
Visualização - Templates Edição de templates.
Configuração
Administração Acesso a todas as configurações da parte de
administração do ScriptCase.
Meu ScriptCase Configurações personalizadas no nível do
usuário.
Trocar Senha Acesso a alteração senha.
Criar base de exemplos Abre um wizard para a criação das bases dos
sistemas de exemplos.
Ajuda
WebHelp Manual do ScriptCase.
Suporte Acessa o suporte on-line do ScriptCase.
Diagnosis Exibe configurações do ambiente / Servidor
onde está instalado o ScriptCase.
Verificar Versão Acessa o site do ScriptCase a procura de
atualizações.
Dicas Importantes Dicas do ScriptCase.
Sobre Informações sobre o ScriptCase.
48
Scriptcase – Técnicas Avançadas
2012
49
Scriptcase – Técnicas Avançadas
2012
À direita teremos todas as Pastas criadas para administração do projeto. Estas pastas não fazem parte do
Sistema, elas são repositórios das aplicações e suas criações servem apenas para melhor administrar as
ações que estão sendo desenvolvidas no projeto.
Por exemplo: Como todo sistema terá algumas aplicações relativas à segurança é aconselhável que criemos
uma pasta Segurança e nela depositaremos todas as aplicações referentes à segurança do sistema.
Click no botão
Defina um nome para a pasta (Seguranca). Este nome não poderá conter espaços nem caracteres especiais.
50
Scriptcase – Técnicas Avançadas
2012
Click no botão
Você deverá criar tantas pastas quantas forem necessárias para uma boa administração do seu sistema.
Atenção! Entenda que estas pastas não farão parte do Sistema.
As pastas criadas sempre serão dispostas em ordem alfabética. Se você desejar estabelecer uma ordem
cronológica utilize algarismos numéricos no início do nome das pastas (ex. 1_Tabelas, 2_Cadastros,
3_Consultas, etc).
Não é propósito deste curso descrever detalhadamente as funcionalidades do ScriptCase, para isso você
deverá baixar o Manual do Scriptcase no site
http://downloads.scriptcase.net/downloads/v5/manual/pt_br/pdfhelp_pt_br.pdf, ele é bastante completo e
detalhado.
51
Scriptcase – Técnicas Avançadas
2012
4.1.5. Montando a Segurança do Nosso Sistema.
Como foi dito anteriormente, nosso sistema precisa de algumas funcionalidades que estabeleçam segurança.
Isso já foi discutido no Capítulo – Segurança. Com base na nossa modelagem vamos implementar nosso
esquema de segurança iniciando pelo cadastro de usuários.
Click na pasta Segurança para que as aplicações a serem criadas fiquem depositadas nesta pasta.
Defina:
e) Click no botão
Criada a aplicação, execute-a clicando no botão (Executar) localizado na barra de tarefas e teremos a
seguinte tela.
52
Scriptcase – Técnicas Avançadas
2012
Pela tela apresentada pode-se notar que nossa tabela de usuários já está populada com os dados do
Administrador do Sistema – todo esquema de segurança precisa ser populado com pelo menos um usuário, o
administrador, e isso foi feito durante a Modelagem do nosso Banco de Dados.
53
Scriptcase – Técnicas Avançadas
2012
Todos os campos desta tabela (apresentados na figura anterior) foram descritos no capítulo Segurança, em
caso de dúvida reveja-o.
O conjunto de labels mais importante é o nome dos campos das nossas tabelas, e para criarmos este banco
utilizaremos dois passos:
Defina:
a) O nome do dicionário (treinamento). Este nome não poderá conter espaços nem caracteres
especiais;
b) Descreva o dicionário;
c) A conexão (conn_mysql);
d) Click no botão
54
Scriptcase – Técnicas Avançadas
2012
A seguir o SC disponibilizará uma tela contendo todas as tabelas referentes ao nosso banco de dados
(treinamento).
55
Scriptcase – Técnicas Avançadas
2012
Deixe marcada apenas a opção Gerar índices nos arquivos de idiomas com os labels dos campos da tabela.
Se você marcar também a o opção Sobrescrever índices existentes nos arquivos de idioma, tudo que já
estiver sido criado no banco de idiomas será apagado (para as tabelas selecionadas).
Criado o Dicionário de dados, faremos agora a atualização da tabela de idiomas (tabela interna do nosso
projeto, gerado pelo (SC).
Click no item Ferramentas do menu principal e escola a opção Reginalidade -> Idiomas.
56
Scriptcase – Técnicas Avançadas
2012
57
Scriptcase – Técnicas Avançadas
2012
Atualize os labels dos campos.
58
Scriptcase – Técnicas Avançadas
2012
Click no botão .
Esta tarefa terá que ser repetida para todos os idiomas e todas as tabelas do sistema.
Para que seus labels sejam atualizados com menos esforço possível, basta que deletemos as aplicações
criadas e as criemos novamente. Isso nem sempre é conveniente, mais adiante veremos o motivo.
Caso desejemos alterar algum label, de alguma aplicação já criada, basta alterarmos no banco de idiomas e
re-gerar a aplicação. Isso porque o banco foi criado antes da aplicação.
Vamos agora apagar todas as aplicações criadas e a seguir recriá-las de forma que os labels criados no banco
de idiomas sejam incorporados automaticamente.
Marque todas as aplicações e click na opção DELETAR, conforme mostrado na figura acima.
Agora crie a nova aplicação, tipo formulário, para a tabela usuários, conforme foi mostrado no tópico - Nova
Aplicação. Execute-a e teremos a seguinte tela.
59
Scriptcase – Técnicas Avançadas
2012
60
Scriptcase – Técnicas Avançadas
2012
Como você pode observar os labels já estão iguais aos criados no banco de idiomas. Se você gerar as outras
aplicações poderá notar que os labels estão todos perfeitos.
Nota Importante:
Sempre que for criar uma nova aplicação observe se o banco de idiomas para a
tabela já está criado. Isso gerará uma boa economia de tempo no desenvolvimento.
As aplicações do tipo Controle são semelhantes às aplicações tipo Formulário (porque também é uma
aplicação de entrada de dados), com pequenas diferenças, as mais importantes são:
a) Sua criação não está associada a nenhuma tabela, desta forma não aceita algumas funcionalidades
(Mestre/Detalhes, Dependências, Relacionamentos, etc);
b) Os Eventos relacionados a este tipo de aplicação são diferentes da aplicação Formulário;
61
Scriptcase – Técnicas Avançadas
2012
Feito isso teremos a seguinte tela:
O próximo passo agora é criarmos os campos login e senha, uma vez que esta aplicação não está
relacionada a qualquer tabela.
62
Scriptcase – Técnicas Avançadas
2012
Informe os nomes dos campos. Esses nomes não poderão conter espaços nem caracteres especiais. E click no
botão
Personalizando os Campos
Click no campo login para definirmos um label para ele.
63
Scriptcase – Técnicas Avançadas
2012
No nosso banco de idiomas, na tabela usuários, já existem os labels criados para os campos login e senha
(daquela tabela), utilizaremos estes dois labels.
A seguir Click na tabela usuários (tble_usuarios) cole o índice lang_usuarios_fild_login e copie para o label
do campo login da aplicação login.
64
Scriptcase – Técnicas Avançadas
2012
Não se esqueça de colocar as chaves ({ }), antes e depois do label, para que o PHP assuma que é uma
variável local.
65
Scriptcase – Técnicas Avançadas
2012
Agora definiremos as funcionalidades desta aplicação. Isso será feito através dos Eventos.
Criando Eventos
Eventos são rotinas criadas pelo desenvolvedor para definirmos uma determinada ação. São semelhantes às
Trigers dos bancos de dados. Ou seja, sempre que acontecer isso, faça aquilo.
Não há necessidade de decorar onde ocorre determinado evento. Se você clicar e qualquer um deles, será
aberta uma tela para criação do evento e o SC lhe informará em que situação ele será executado.
Em toda aplicação login o evento a ser criado será to tipo onValidate, ou seja no momento que o usuário
clicar no botão .
A primeira coisa que faremos é limpar da sessão o perfil do ultimo usuário logado neste browser (Acesso).
Isso será feito com a função sc_reset_apl_status().
67
Scriptcase – Técnicas Avançadas
2012
Agora vamos limpar da sessão o perfil do ultimo usuário logado neste browser (Direitos). Isso será feito
com a função sc_reset_apl_ conf ().
Como as senhas armazenadas no banco estarão criptografadas, teremos que criptografar a senha informada
para compararmos com as que estão armazenadas.
Agora vamos proteger a aplicação de invasões do tipo SQL Injection, para isso utilizaremos a função
sc_sql_injection() sobre a variável {login}.
68
Scriptcase – Técnicas Avançadas
2012
Agora vamos buscar as informações no banco. Para isso montamos o seguinte comando SELECT. O SC
disponibiliza a função sc_lookup(data,$query) que armazenará na matriz (array) data o resultado da
pesquisa $query.
A seguir verificaremos:
69
Scriptcase – Técnicas Avançadas
2012
Estando tudo correto verificaremos os atributos que o usuário tem dentro do sistema.
70
Scriptcase – Técnicas Avançadas
2012
Definidos os atributos, criaremos variáveis globais que serão acessadas pelas demais aplicações do sistema.
71
Scriptcase – Técnicas Avançadas
2012
A seguir registraremos o acesso na tabela de Logs e redirecionaremos para o menu do nosso sistema.
Para gravarmos o registro no arquivo de logs, criaremos uma função chamada de RegLogMysql() e
adicionaremos esta função à nossa biblioteca de funções, uma vez que ela será executada por todas as
aplicações do sistema.
72
Scriptcase – Técnicas Avançadas
2012
Click no botão
73
Scriptcase – Técnicas Avançadas
2012
Digite o código abaixo.
Observações:
Criada a função é necessário que a mesma seja incluída na aplicação login. Para tanto click na opção
Programação -> Bibliotecas -> Bibliotecas Públicas e marque a rotina criada (RegLogMysql()).
74
Scriptcase – Técnicas Avançadas
2012
Agora vamos executar a aplicação clicando no botão Executar localizado na Barra de Ferramentas.
Ao clicarmos no botão Executar todas as alterações executadas na aplicação serão salvas e o código
fonte é gerado automaticamente.
Esta é a tela padrão de uma aplicação tipo Controle. Está evidente que não estamos executando nenhuma
atualização, portanto vamos alterar este layout para que seja uma aplicação de login.
Personalizando o LayOut
Click na opção Layout -> Visualização e defina o Modelo Cabeçalho como sendo Elegant2 (apenas como
exemplo).
Crie agora dois novos labels (sistema e versao) no banco de idiomas (na pasta Geral), conforme exemplo
abaixo:
75
Scriptcase – Técnicas Avançadas
2012
Retorne para a aplicação login e click na opção Layout -> Cabeçalho e Rodapé, a seguir defina o título com
o novo label criado ({lang_sistema}), não se esquecendo das chaves ({}).
76
Scriptcase – Técnicas Avançadas
2012
a) Mudança de Idioma;
b) Mudança de Layout.
Ambas podem ser alteradas em tempo de execução. Vamos implementá-las nesta aplicação.
Selecione a opção Barra de Ferramentas, marque os itens Idiomas e Esquemas e transfira-os para a coluna
da direita usando a .
77
Scriptcase – Técnicas Avançadas
2012
Por ora está pronta, mais adiante acrescentaremos mais uma funcionalidade a esta aplicação: Esqueceu a
Senha?
A Operacionalização de ambos é idêntica e, mesmo após criado, é possível transformar um tipo no outro e
vice-versa.
A criação de um Menu já foi discutida no tópico Nova Aplicação. Nosso foco agora será a personalização
deste tipo de aplicação.
Click no botão (Nova Aplicação) localizado na barra de Ferramentas e escolha o tipo de aplicação Menu
Click no botão
79
Scriptcase – Técnicas Avançadas
2012
Teremos agora que editar a aplicação menu, de forma tal que ela possa executar as aplicações geradas e sair
do sistema. Vamos lá.
a) Cadastro de Usuários;
b) Login;
Dessa forma criaremos apenas duas opções no Menu: a) Cadastro de Usuários e b) Sair do Sistema.
Inicialmente criaremos três labels no banco de idiomas na pasta Geral (usuários, sair e logado), conforme
exemplo abaixo:
80
Scriptcase – Técnicas Avançadas
2012
81
Scriptcase – Técnicas Avançadas
2012
82
Scriptcase – Técnicas Avançadas
2012
Marque a Exibição do Rodapé e acrescente na Linha 1/Coluna 1 (ROD_LIN1_COL1) a string: {lang_logado}
[sm_global_nome] - [sm_global_dtlog] ** {lang_versao} - {lang_usuarios_fild_usuarios_count} - [sm_global_contador].
Agora iremos executar a aplicação login e a partir dela acessar o nosso menu. Se tentarmos acessar
diretamente a aplicação menu surgirão alguns erros, uma vez que algumas variáveis foram criadas na
aplicação login e não foram repassadas para o menu.
Click na pasta Home e Execute a aplicação Login, conforme mostrado na figura abaixo.
Como já foi mencionado anteriormente, a tabela de usuários já está populada com o usuário
administrador e a senha 123456 (senha padrão de todos os novos usuários).
83
Scriptcase – Técnicas Avançadas
2012
Veja que nossa aplicação já está tomando um aspecto mais profissional, mas vamos melhorar.
Click na opção Itens do Menu, selecione o item usuários e click no botão para selecionar um ícone.
85
Scriptcase – Técnicas Avançadas
2012
Escolha o ícone.
86
Scriptcase – Técnicas Avançadas
2012
Escolha um ícone para o item {sair}, repetindo o processo acima. Salve as alterações clicando no botão
(localizado na Barra de Ferramentas do SC), gere a aplicação clicando no botão e execute a aplicação
Login.
Após se logar no sistema teremos o nosso menu semelhante à figura abaixo.
87
Scriptcase – Técnicas Avançadas
2012
88
Scriptcase – Técnicas Avançadas
2012
Terminado o Layout, a próxima alteração que faremos na aplicação menu é criar um evento que registre os
acessos no arquivo de LOGs. Ou seja, sempre que um usuário acessar uma aplicação través do menu, esse
acesso será gravado na tabela logs.
Se desejarmos transformar nossa aplicação em uma aplicação tipo Menu Árvore, selecione a opção
89
Scriptcase – Técnicas Avançadas
2012
Eventualmente quando se altera o tipo de menu a conexão com o banco de dados pode ser perdida,
precisamos restaurá-la. Veja abaixo como fazê-la.
Feito isso, salve as alterações clicando no botão (localizado na Barra de Ferramentas do SC), gere a
90
Scriptcase – Técnicas Avançadas
2012
Escolha a que melhor lhe convier. Para o nosso treinamento utilizaremos o tipo tradicional (horizontal).
Daremos prosseguimento ao nosso curso criando as demais aplicações que comporão nosso esquema total
de segurança.
Durante a criação da aplicação login, no evento onValidate, fizemos menção a funcionalidade Esqueceu a
Senha?. Pois bem, criaremos agora esta aplicação que possui um recurso bastante interessante
disponibilizado pelo SC – Envio de Email.
Sempre que o botão Esqueceu a Senha? Da aplicação login for clicado, o sistema executará as seguintes
tarefas:
c) Enviará para o administrador do sistema um email, informando que o usuário fulano-de-tal solicitou
mudança de senha através do botão Esqueceu a Senha?
a) Em português -> Você receberá sua<b> Nova Senha </b>no email indicado.
91
Scriptcase – Técnicas Avançadas
2012
b) Em espanhol -> Usted recibirá su contraseña<br>en email indicada.
92
Scriptcase – Técnicas Avançadas
2012
Essa aplicação solicitará o login do usuário, seu nome completo e o seu email, a seguir comparará com o
banco de usuários se as informações estão corretas. Caso estejam, enviará emails para o usuário e o
administrador do sistema. Para tanto criaremos quatro campos (uma vez que a aplicação tipo controle não
possui campos por não está associada a nenhuma tabela do nosso banco de dados).
Três campos serão do tipo Texto (usuários_login, usuários_nome, usuários_email) e um do tipo Label
(mensagem). Veja a figura abaixo.
93
Scriptcase – Técnicas Avançadas
2012
Click no botão .
94
Scriptcase – Técnicas Avançadas
2012
95
Scriptcase – Técnicas Avançadas
2012
E por fim criaremos um evento OnValidate que executará as funções descritas no escopo deste tópico. Veja
abaixo.
Na figura acima será verificado se o usuário e o seu email conferem com o banco de dados. Em caso positivo
o sistema ajustará a senha deste usuário para a padrão (123456) e enviará email para ele informando-o
deste procedimento.
96
Scriptcase – Técnicas Avançadas
2012
Suas propriedades poderão ser analisadas no manual do SC, cabe apenas a seguinte observação – para que o
PHP proceda o envio deste email é necessário que as extensões php_openssl.dll e php_snmp.dll estejam
habilitadas no arquivo php.ini (arquivo de configuração do PHP). Por padrão, estas extensões estão
desabilitadas.
97
Scriptcase – Técnicas Avançadas
2012
A seguir será verificado qual o email do administrador e o enviará um email informando que usuário fulano-
de-tal solicitou mudança de senha.
Finalmente, se tudo ocorreu sem problema o usuário receberá um email informando que o email foi enviado
com sucesso ou que ocorreu um erro.
98
Scriptcase – Técnicas Avançadas
2012
Salve as alterações clicando no botão (localizado na Barra de Ferramentas do SC) e gere a aplicação
clicando no botão .
Crie um label (lang_esqueceu_senha) para esse botão, a seguir edit a aplicação login, criando um Novo
Botão.
Este botão será do tipo PHP – será apenas uma rotina PHP de redirecionamento para a aplicação
99
Scriptcase – Técnicas Avançadas
2012
Defina o label do botão e click na opção CODIGO PHP para acrescentarmos o redirecionamento.
100
Scriptcase – Técnicas Avançadas
2012
Salve as alterações clicando no botão (localizado na Barra de Ferramentas do SC), gere a aplicação
101
Scriptcase – Técnicas Avançadas
2012
Agora que já temos a aplicação login bem definida, retornaremos a aplicação de cadastro de usuários
(form_usuarios) para personalizá-la.
Antes de iniciarmos a personalização desta aplicação, utilizaremos um recurso do SC para definirmos valores
padrões (cabeçalhos, rodapés, bibliotecas, etc) para as aplicações criadas.
102
Scriptcase – Técnicas Avançadas
2012
4.1.9. Valores Padrões.
No menu principal click na opção Projetos -> Valores Padrões.
Todos os valores atribuídos nesta sessão serão utilizados nas novas aplicações a serem criadas, por esse
motivo esse é um dos passos iniciais para construção de um projeto.
103
Scriptcase – Técnicas Avançadas
2012
104
Scriptcase – Técnicas Avançadas
2012
105
Scriptcase – Técnicas Avançadas
2012
106
Scriptcase – Técnicas Avançadas
2012
107
Scriptcase – Técnicas Avançadas
2012
108
Scriptcase – Técnicas Avançadas
2012
LayOut
Iniciaremos elaborando um novo layout, para tanto criaremos 5 novos blocos (endereço, documentação,
acesso, observação e usuarios_x_grupos) mas antes criaremos 3 labels (lang_documentacao, lang_acesso e
lang_grupo_usuario). O processo de criação dos labels já foi amplamente discutido anteriormente.
109
Scriptcase – Técnicas Avançadas
2012
110
Scriptcase – Técnicas Avançadas
2012
Agora habilitaremos a exibição do Rodapé (por padrão o SC não habilta esta exibição).
Feito isso, iremos distribuir os campos pelos blocos recém criados, de acordo com as telas do formulário
mostradas anteriormente.
E teremos a tela.
111
Scriptcase – Técnicas Avançadas
2012
A caixa da esquerda mostra os campos que não farão parte do formulário e a direita os que serão exibidos
no formulário.
Retiraremos os campos:
112
Scriptcase – Técnicas Avançadas
2012
113
Scriptcase – Técnicas Avançadas
2012
O bloco usuarios_x_grupos será preenchido oportunamente uma vez que o seu conteúdo não será um
campo, e sim um relacionamento do tipo N para N.
Agora, seguindo uma cronologia, atribuiremos valores aos campos que não fazem parte do formulário,
conforme figura abaixo.
Obrigatórios
Agora definiremos os campos obrigatórios.
a) usuarios_id;
b) usuarios_login;
c) usuarios_nome;
d) usuarios_cpf;
e) usuarios_situacao;
f) grupo_acesso;
g) perfil_acesso;
h) perfil_acesso_agenda;
i) usuarios_periodo;
j) usuarios_ultima_troca;
k) usuarios_senhapadrao;
l) usuarios_dtcad;
m) usuarios_senha;
n) usuarios_email;
o) prop_reg;
p) prop_agd;
114
Scriptcase – Técnicas Avançadas
2012
Chave única
Por definição usuários_id é a chave primária, conseqüentemente única, desta forma acrescentaremos os
campos usuários_login e usuários_cpf ao rol.
115
Scriptcase – Técnicas Avançadas
2012
Campos
O próximo passo será definir as características dos campos.
116
Scriptcase – Técnicas Avançadas
2012
usuarios_observ Editor HTML Altura - 400
Faremos uma abordagem apenas dos campos que apresentem uma forma diferenciada de configuração.
117
Scriptcase – Técnicas Avançadas
2012
É importante usar o Título/Navegação nos campos tipo Select, isso forçará o usuário excolher uma opção ao
invés de selecionar a primeira opção do select (que nem sempre será a opção desejada).
118
Scriptcase – Técnicas Avançadas
2012
119
Scriptcase – Técnicas Avançadas
2012
Preciso agora incluir uma cláusula WHERE, utilizando a função PermiteAcesso discutida no capítulo
Segurança, para definir quais clientes o usuário terá acesso para efetuar a sua escolha.
120
Scriptcase – Técnicas Avançadas
2012
A variável global [sm_global_login] foi criada durante na aplicação login. Toda variável global no SC vem
sempre entre cochetes ([]). Por se tratar de uma variável do tipo texto deverá estar entre aspas simples (‘
‘).
O parâmetro prop_reg refere-se ao proprietário do registro na tabela clientes.
O SC possui uma funcionalidade para tratamento de campos específicos (CPF, CNPJ, CEP, etc). Esta
funcionalidade será oferecida na escolha do tipo de campo. Para determinação de campos do Tipo – CEP o
SC utiliza uma base de dados oficial que é atualizada periodicamente (anualmente). Na grande maioria das
vezes – posso afirmar que mais de 90% - esta base de dados é corrompida durante a transmissão (plana)
para o ambiente de produção e existem duas maneiras para solucionar este problema :
121
Scriptcase – Técnicas Avançadas
2012
A seguir defina os campos da sua tabela de usuários que correspondem aos parâmetros que serão passados
da base de dados do SC.
122
Scriptcase – Técnicas Avançadas
2012
O evento Ajax ocorre sempre que alguma ação é feita sobre um campo numa aplicação do tipo
formulário/controle. Os seguintes eventos estão disponíveis com o ScriptCase.
onChange - Este evento ocorre quando o campo tem o foco e o valor do campo é mudado e o foco é
direcionado para outro objeto.
123
Scriptcase – Técnicas Avançadas
2012
onBlur - Este evento ocorre quando o campo tem o foco, o valor do campo não é alterado e o foco é
direcionado para outro objeto.
Escolha o tipo de evento onChange e click no botão . Este evento será executado sempre
que o campo for atualizado.
124
Scriptcase – Técnicas Avançadas
2012
125
Scriptcase – Técnicas Avançadas
2012
Este campo também merece uma atenção especial. Nós não desejamos que dois CPFs iguais sejam incluídos
no nosso cadastro de usuários, comprometendo nosso esquema de segurança. Desta forma criaremos mais
um evento Ajax que verificará a existência de outro CPF, igual ao que está sendo digitado, em nossa base.
126
Scriptcase – Técnicas Avançadas
2012
Também não desejamos que dois logins iguais sejam incluídos no nosso cadastro de usuários,
comprometendo nosso esquema de segurança. Desta forma criaremos mais um evento Ajax que verificará a
existência de outro login, igual ao que está sendo digitado, em nossa base. Esse tipo de checagem pode ser
feita diretamente no banco de dados, criando uma chave única para este campo, porém nossa intenção é
criarmos uma situação que não haja necessidade de digitarmos o último campo para identificarmos esta
duplicidade.
127
Scriptcase – Técnicas Avançadas
2012
128
Scriptcase – Técnicas Avançadas
2012
Outro tipo de campo especial disponibilizado pelo SC (Email). O ser digitado este campo o SC verifica se a
nomenclatura corresponde a um endereço de email. Ele não verificará se o email é válido.
Este campo definirá qual grupo de acesso o novo usuário pertencerá, este assunto já foi discutido no capítulo
segurança. Seu processamento é idêntico ao campo, alterando-se apenas a construção do select de consulta.
Veja abaixo.
129
Scriptcase – Técnicas Avançadas
2012
130
Scriptcase – Técnicas Avançadas
2012
131
Scriptcase – Técnicas Avançadas
2012
Aqui também precisaremos de um tratamento especial. Veja, as aplicações do tipo Formulário são utilizadas
tanto para cadastrar um novo registro, como para alterar registros existentes. Neste campo especialmente,
durante a alteração de um registro, precisamos setar a senha para a condição de padrão (123456) ou não e
lembre-se que nossas senhas são criptografadas. Assim sendo, criaremos novo evento Ajax para checarmos
esta condição e criptografar a senha padrão.
132
Scriptcase – Técnicas Avançadas
2012
Eventos
Antes de definirmos alguns eventos discutiremos algumas funcionalidades do formulário form_usuarios.
Onvalidate - Este evento e executado ao clicar nos botões de validação (OK,Alterar, incluir, Excluir, Filtrar)
dependendo da aplicação utilizada. No caso de Formulário os V botões são: Incluir, Alterar e Excluir;
133
Scriptcase – Técnicas Avançadas
2012
OnLoad - Este evento ocorre quando a pagina é carregada. EX.: ao navegar de um registro para outro; ao
clicar nos botões ( novo, inserir, anterior etc.), ao recarregar a página, etc.
onValidate
O evento onValidate ocorrerá sempre que o formulário for submetido (inclusão, alteração ou exclusão), no
caso específico ele verificará se o botão foi clicado. Se for clicado não altere a senha do usuário
(para que não haja criptografia da senha que já está criptografada), se não será responsável pela criptografia
da senha.
134
Scriptcase – Técnicas Avançadas
2012
onBeforeInsert
O evento onBeforeInsert ocorrerá antes da inclusão de novo registro e será responsável pela criptografia da
senha senha padrão (123456), uma vez que todo novo usuário sempre receberá a senha padrão (123456).
135
Scriptcase – Técnicas Avançadas
2012
onAfterInsert
O evento onAfterInsert ocorrerá após a inclusão de novo registro e será responsável por:
136
Scriptcase – Técnicas Avançadas
2012
Comentários:
No capítulo segurança definimos que o campo prop_agd é responsável pela determinação de quem é o
proprietário do registro na tabela de agenda – esse campo aparecerá nas tabelas dos usuários e da agenda.
Para todo novo usuário cadastrado o sistema criará um perfil de acesso a agenda para esse usuário que é
correspondente ao seu nome de login.
Ao se criar o novo perfil o sistema gerará automaticamente (uma vez que o campo perfil_acesso_agenda_id
é auto incrementável nesta tabela) e este novo id só será conhecido após a inclusão do registro então, após a
inclusão faremos a leitura deste registro para identificar o respectivo id, que corresponderá ao prop_agd
deste usuário.
137
Scriptcase – Técnicas Avançadas
2012
Comentários:
Para todo novo usuário cadastrado o sistema criará um grupo de acesso a agenda para esse usuário que é
correspondente ao seu nome de login.
Ao se criar o novo grupo o sistema gerará automaticamente (uma vez que o campo
grupo_acesso_agenda_id é auto incrementável nesta tabela) e este novo id só será conhecido após a
inclusão do registro então, após a inclusão faremos a leitura deste registro para identificar o respectivo id,
que será lançado no perfil de grupo deste usuário.
Obtido este valor lança-se um novo perfil de grupo de agenda deste usuário, contendo o seu grupo e perfil
de acesso a agenda
Caso você deseje que o administrador do sistema tenha acesso a agenda dos novos usuários então digite o
código abaixo.
138
Scriptcase – Técnicas Avançadas
2012
A seguir digite o código abaixo.
Comentários:
onBeforeUpdate
O evento onBeforeUpdate ocorrerá antes da alteração de um registro e será responsável pela consulta ao
registro antes da alteração. O resultado desta consulta será armazenado em um array que será comparado
às alterações efetuadas.
139
Scriptcase – Técnicas Avançadas
2012
onAfterUpdate
O evento onAfterUpdate ocorrerá após da alteração de um registro e será responsável pela comparação da
consulta ao registro antes da alteração e após a alteração. O resultado desta comparação será registrado no
arquivo de logs.
140
Scriptcase – Técnicas Avançadas
2012
onBeforeDelete
O evento onBeforeDelete ocorrerá antes da exclusão de um registro e será responsável pelo registro no
arquivo de logs deste cadastro excluído.
141
Scriptcase – Técnicas Avançadas
2012
N-N Relations
O relacionamento n <-> n é necessário para definirmos quais os grupos de usuários que o usuário pertence
(ex: Cadastradores, Acesso Restrito, etc).
Essa é uma parte bastante especial, a tela abaixo mostrará o resultado deste relacionamento.
142
Scriptcase – Técnicas Avançadas
2012
Para que haja um relacionamento n <-> n entre duas tabelas é necessário que haja uma terceira tabela que
servirá de junção entre ambas. No caso específico desejaremos fazer o relaciomento n <-> n entre as tabelas
de usuarios e grupos, para isso utilizaremos a tabela usuario_grupos como junção.
143
Scriptcase – Técnicas Avançadas
2012
Identifique o campo (usuarios_x_grupos), esta identificação não poderá conter espaços nem caracteres
A seguir você informará a tabela onde será montado select de consulta. Veja, iremos consultar quais os
grupos disponíveis para informar qual(is) dele(s) o usuário pode participar.
144
Scriptcase – Técnicas Avançadas
2012
145
Scriptcase – Técnicas Avançadas
2012
A seguir definiremos qual a tabela de ligação, ou seja a tabela que receberá os novos registros –
usuario_grupos.
Agora informaremos qual o campo chave na tabela de ligação entre a tabela de junção (usuario_grupos) e a
tabela do formulário (usuarios) – no nosso caso usuarios_id.
146
Scriptcase – Técnicas Avançadas
2012
O próximo passo é informar a chave estrangeira da tabela de relacionamento que será atualizada com o
valor do lookup (grupos_id).
147
Scriptcase – Técnicas Avançadas
2012
Para as demais opções (Filtro, Configuração da Visualização e Configuração da Ajuda) basta clicar no botão
e por fim
a) Relatórios;
b) Filtros para as aplicações do tipo Formulário.
Criaremos agora uma aplicação do tipo Consulta para a tabela usuário. Para tanto click no botão (Nova
Aplicação) localizado na barra de Ferramentas.
148
Scriptcase – Técnicas Avançadas
2012
Defina o nome da aplicação. Este nome não poderá conter espaços nem caracteres especiais. Poderemos
utilizar o nome padrão utilizado pelo SC (grid_usuarios).
Considerações:
O SC disponibiliza um query que contém os campos que poderão ser exibidos na consulta. Antes de criar a
aplicação faremos uma personalização nesta query para que nos sejam disponibilizados apenas os campos
que nos interessam e os respectivos relacionamentos com outras tabelas (ex: clientes_id, grupo_acesso_id,
etc).
Exemplo:
Os campos que me interessam nesta consulta são: id, login, nome, CPF, celular, email, situação, sigla do
cliente, grupo de acesso, perfil de acesso, período de troca de senha, data da última troca da senha, se a
senha padrão está setada e quem é o proprietário do registro. A escolha destes campos obedeceu a critérios
técnicos (sob o prisma do administrador do sistema). Desta forma, nossa query seria conforme a figura
abaixo.
149
Scriptcase – Técnicas Avançadas
2012
SELECT
u.usuarios_id,
u.usuarios_login,
u.usuarios_nome,
u.usuarios_cpf,
u.usuarios_celular,
u.usuarios_email,
u.usuarios_situacao,
c.clientes_sigla,
ga.grupo_acesso_descricao,
pa.perfil_acesso_descricao,
u.usuarios_periodo,
u.usuarios_ultima_troca,
u.usuarios_senhapadrao,
u.prop_reg
FROM
usuarios as u,
clientes as c,
grupo_acesso as ga,
perfil_acesso as pa
WHERE
c.clientes_id = u.clientes_id AND
u.grupo_acesso_id = ga.grupo_acesso_id AND
u.perfil_acesso_id = pa.perfil_acesso_id AND
PermiteAcesso('[sm_global_login]',u.prop_reg) = 'Sim'
ORDER BY
u.usuarios_nome
150
Scriptcase – Técnicas Avançadas
2012
Como nós desejamos que o usuário visualize apenas os registros permitidos pelo seu grupo de acesso,
incluiremos na cláusula where a função PermiteAcesso (já discutida no capítulo segurança)
Click no botão
151
Scriptcase – Técnicas Avançadas
2012
Agora na opção Exportação habilite as opções PDF Configurável e Resolução do PDF. Isto porque se você
desejar exportar para um arquivo PDF e a quantidade de colunas escolhidas exceder o tamanho do papel (ex:
A4), poderá configurar o relatório em tempo de execução.
152
Scriptcase – Técnicas Avançadas
2012
Se isso não for feito, os campos que não constavam do relatório, antes de efetuarmos o Posicionamento dos
Campos, não poderão ser submetidos à ordenação na grid.
153
Scriptcase – Técnicas Avançadas
2012
Na opção Layout -> Cabeçalho & Rodapé habilite a exibição do rodapé e acrescente o label
{Lang_tble_usuarios} ao título do cabeçalho.
154
Scriptcase – Técnicas Avançadas
2012
Na opção Detalhes -> Cabeçalho acrescente o label {Lang_tble_usuarios} ao título do cabeçalho e altere as
variáveis do cabeçalho conforme a figura abaixo.
Na opção Aplicação -> Navegação defina a URL de Saída como sendo a aplicação menu e habilite a opção
Fechar Janela, conforme a figura abaixo.
155
Scriptcase – Técnicas Avançadas
2012
Agora criaremos uma ligação do tipo Aplicação com a aplicação form_usuarios, veja as figuras seguintes.
156
Scriptcase – Técnicas Avançadas
2012
157
Scriptcase – Técnicas Avançadas
2012
Existe outra forma de efetuar ligações entre aplicações, logo mais adiante veremos outra forma. Por ora está
pronta nossa aplicação de Consulta.
Iremos agora gerar todas as aplicações criadas e verificar o resultado. Proceda como as figuras abaixo.
158
Scriptcase – Técnicas Avançadas
2012
Agora execute a aplicação login e veja se está tudo ok. O usuário inicial é administrador e a senha é 123456.
Personalizando a Ligação
Se você acessar o cadastro de usuários verá a seguinte tela:
159
Scriptcase – Técnicas Avançadas
2012
160
Scriptcase – Técnicas Avançadas
2012
Pois bem, a tela esta perfeita e é funcional, mas podemos melhorá-la.
O SC utiliza os ícones para linkar com uma tela de detalhes e com a aplicação form_usuarios
(alterações). Muitos usuários não entendem muito bem esses dois ícones, principalmente o lápis ( ) que
indica alteração do registro.
Também o botão não é uma forma muito amigável de comunicação com o usuário (digitador), até por
que em alguns casos não é algo NOVO que se quer adicionar e sim algo NOVA (questão de semântica).
Faremos uma personalização desta consulta, substituindo os ícones e o botão por algo mais
sensitivo.
Criaremos um novo botão para adicionar um novo usuário (novo_usuario). Esse botão será do Tipo – PHP, ou
seja será uma rotina php para direcionamento à aplicação form_usuarios.
Criaremos agora uma aplicação do tipo Menu para o nosso sistema. Para tanto click no botão
Altere o modo de exibição deste botão para Imagem, associe um ícone a esta imagem e click no link CODIGO
PHP para escrever a rotina de redirecionamento.
161
Scriptcase – Técnicas Avançadas
2012
Criado o botão, acesse a opção Barra de Ferramentas e posicione o botão (novo_usuario) na posição
adequada e retire o Botões do Formulário da exibição da consulta.
162
Scriptcase – Técnicas Avançadas
2012
Agora acrescentaremos um botão ao lado de cada registro pra efetuar a alteração dos mesmos.
Altere o Label (Alterar), associe uma imagem, posicione o Alinhamento Horizontal – Centralizado,
Alinhamento Horizontal – Meio e click no botão
163
Scriptcase – Técnicas Avançadas
2012
Ajuste os parâmetros que serão passados para a aplicação form_usuarios, click no botão ea
seguir no botão
164
Scriptcase – Técnicas Avançadas
2012
Na opção Posicionamento dos Campos coloque o novo botão (alterar_usuario) para o início da consulta e
click no botão
165
Scriptcase – Técnicas Avançadas
2012
166
Scriptcase – Técnicas Avançadas
2012
Faremos agora uma nova personalização nesta consulta. Efetuaremos uma quebra por Clientes (Sigla), você
pode observar que existem usuários para dois clientes diferentes (Oops e JCM).
Edite a aplicação grid_usuarios e selecione a opção Quebras -> Posicionamento dos Campos, marque o
campo clientes_sigla.
:
Agora na opção Quebras -> Posicionamento dos Campos, altere o Separador do valor para ( )
167
Scriptcase – Técnicas Avançadas
2012
168
Scriptcase – Técnicas Avançadas
2012
Pronto! Encerramos esta sessão.
Nosso exemplo será a construção de uma tela de login, nada muito complicado.
A deixaremos assim.
Construir um template é lento e empírico, serão necessárias algumas horas de trabalho para ajustar todos os
campos, cores, etc e uma boa dose de criatividade. Comece sempre criando sua tela, para tanto utilize um
editor gráfico de sua preferência (nós utilizamos o Corel Draw). A nossa ficou assim.
169
Scriptcase – Técnicas Avançadas
2012
Comentários:
A seguir acesse a opção Ferramentas -> Visualização -> Temas do menu principal do SC
Escolha um esquema que seja igual ao do seu projeto (nosso exemplo: ScriptCase5_Green) e a seguir click no
botão
170
Scriptcase – Técnicas Avançadas
2012
A aplicação login é uma aplicação do tipo Controle que é, como já foi mencionado no início desta apostila,
uma aplicação do tipo Formulário com características especiais (não está associada a nenhuma tabela, etc),
desta forma faremos alteração na opção Formulário do nsso novo template.
Depois de muitas tentativas e erros estabelecemos os valores que passaremos através das telas seguintes,
para cada opção do Formulário.
171
Scriptcase – Técnicas Avançadas
2012
172
Scriptcase – Técnicas Avançadas
2012
173
Scriptcase – Técnicas Avançadas
2012
174
Scriptcase – Técnicas Avançadas
2012
175
Scriptcase – Técnicas Avançadas
2012
176
Scriptcase – Técnicas Avançadas
2012
177
Scriptcase – Técnicas Avançadas
2012
178
Scriptcase – Técnicas Avançadas
2012
Na opção Configuração faça os ajustes conforme tela abaixo. Os valores obtidos foram alcançados através
do método de tentativas e erros e aplica-se apenas ao nosso exemplo. Na construção da sua tela esses
valores certamente não serão os mesmos.
179
Scriptcase – Técnicas Avançadas
2012
Na opção Layout -> Cabeçalho & Rodapé desabilite a exibição do cabeçalho e do rodapé.
180
Scriptcase – Técnicas Avançadas
2012
Tudo Ok?
Os exemplos acima lhe deram uma boa orientação no procedimento de técnicas avançadas do SC, existem
outras que veremos a seguir. Para exemplificá-las faremos a importação de um projeto pronto que servirá de
subsídio para os próximos passos.
181
Scriptcase – Técnicas Avançadas
2012
Para exportar um projeto proceda da seguinte maneira.
182
Scriptcase – Técnicas Avançadas
2012
O SC informa o nome do projeto, que você poderá alterá-lo caso já exista um projeto com o mesmo nome. A
seguir click no botão
Pronto! Agora abra o projeto (Treinamento) e gere o código fonte todas as aplicações.
183
Scriptcase – Técnicas Avançadas
2012
O que nós faremos agora é:
a) Ajustarmos nosso esquema de segurança de forma tal que esta possa ser compartilhada
corporativamente;
b) Criarmos a funcionalidade de geração de múltiplas ocorrências para o mesmo evento;
c) Criarmos os logs.
Por padrão todos os eventos gerados serão visualizados por toso os usuários do sistema e isso nem sempre é
conveniente. Utilizando a função PermiteAcessoAgenda, discutida no capítulo Segurança, a tornaremos
pessoal ou corporativa.
184
Scriptcase – Técnicas Avançadas
2012
Criaremos o campo nr_recor que determinará quantas vezes este evento será replicado.
Criaremos o campo grupo_acesso para informar ao usuário quem está compartilhando aquele evento. Este
campo será do tipo Select.
185
Scriptcase – Técnicas Avançadas
2012
Eventos da Agenda
Crie o evento onBeforeInsert (antes da inclusão). Esto este evento informará que o usuário logado estou este
evento.
186
Scriptcase – Técnicas Avançadas
2012
Crie os eventos onAfterInsert (após a inclusão). Este evento fará as devidas replicações caso o número de
ocorrências seja superior a 1 e, ao final, registrará os logs.
if({nr_recor} > 1)
{
if({agenda_periodo} == 'D')
{
$w=1;
$z={nr_recor}-1;
for($x = 0; $x < $z; $x++ ) {
$nova_dtinicio = sc_date_conv({agenda_dtinicio},"db_format","dd/mm/aaaa");
$nova_dtinicio = SomarData($nova_dtinicio, $w, 0, 0);
$nova_dtfim = sc_date_conv({agenda_dtfim},"db_format","dd/mm/aaaa");
$nova_dtfim = SomarData($nova_dtfim, $w, 0, 0);
$w++;
$insert_sql = "INSERT INTO agenda
(
agenda_titulo,
agenda_dtinicio,
agenda_hrinicio,
agenda_dtfim,
agenda_hrfim,
agenda_recorrente,
agenda_periodo,
agenda_descricao,
agenda_alerta,
usuarios_login,
agenda_dtcad,
prop_reg,
prop_agd
)
VALUES
(
'{agenda_titulo}',
187
Scriptcase – Técnicas Avançadas
2012
'$nova_dtinicio',
'{agenda_hrinicio}',
'$nova_dtfim',
'{agenda_hrfim}',
'{agenda_recorrente}',
'{agenda_periodo}',
'{agenda_descricao}',
'{agenda_alerta}',
'[sm_global_login]',
current_timestamp,
[sm_global_acesso],
{prop_agd}
)";
sc_exec_sql($insert_sql);
}
}
elseif({agenda_periodo} == 'W')
{
$w=7;
$z={nr_recor}-1;
for($x = 0; $x < $z; $x++ ) {
$nova_dtinicio = sc_date_conv({agenda_dtinicio},"db_format","dd/mm/aaaa");
$nova_dtinicio = SomarData($nova_dtinicio, $w, 0, 0);
$nova_dtfim = sc_date_conv({agenda_dtfim},"db_format","dd/mm/aaaa");
$nova_dtfim = SomarData($nova_dtfim, $w, 0, 0);
$w = $w+7;
$insert_sql = "INSERT INTO agenda
(
agenda_titulo,
agenda_dtinicio,
agenda_hrinicio,
agenda_dtfim,
agenda_hrfim,
agenda_recorrente,
agenda_periodo,
agenda_descricao,
agenda_alerta,
usuarios_login,
agenda_dtcad,
prop_reg,
prop_agd
)
VALUES
(
'{agenda_titulo}',
'$nova_dtinicio',
'{agenda_hrinicio}',
'$nova_dtfim',
'{agenda_hrfim}',
'{agenda_recorrente}',
'{agenda_periodo}',
188
Scriptcase – Técnicas Avançadas
2012
'{agenda_descricao}',
'{agenda_alerta}',
'[sm_global_login]',
current_timestamp,
[sm_global_acesso],
{prop_agd}
)";
sc_exec_sql($insert_sql);
}
}
elseif({agenda_periodo} == 'M')
{
$w=1;
$z={nr_recor}-1;
for($x = 0; $x < $z; $x++ ) {
$nova_dtinicio = sc_date_conv({agenda_dtinicio},"db_format","dd/mm/aaaa");
$nova_dtinicio = SomarData($nova_dtinicio, 0, $w, 0);
$nova_dtfim = sc_date_conv({agenda_dtfim},"db_format","dd/mm/aaaa");
$nova_dtfim = SomarData($nova_dtfim, 0, $w, 0);
$w++;
$insert_sql = "INSERT INTO agenda
(
agenda_titulo,
agenda_dtinicio,
agenda_hrinicio,
agenda_dtfim,
agenda_hrfim,
agenda_recorrente,
agenda_periodo,
agenda_descricao,
agenda_alerta,
usuarios_login,
agenda_dtcad,
prop_reg,
prop_agd
)
VALUES
(
'{agenda_titulo}',
'$nova_dtinicio',
'{agenda_hrinicio}',
'$nova_dtfim',
'{agenda_hrfim}',
'{agenda_recorrente}',
'{agenda_periodo}',
'{agenda_descricao}',
'{agenda_alerta}',
'[sm_global_login]',
current_timestamp,
[sm_global_acesso],
{prop_agd}
189
Scriptcase – Técnicas Avançadas
2012
)";
sc_exec_sql($insert_sql);
}
}
elseif({agenda_periodo} == 'A')
{
$w=1;
$z={nr_recor}-1;
for($x = 0; $x < $z; $x++ ) {
$nova_dtinicio = sc_date_conv({agenda_dtinicio},"db_format","dd/mm/aaaa");
$nova_dtinicio = SomarData($nova_dtinicio, 0, 0, $w);
$nova_dtfim = sc_date_conv({agenda_dtfim},"db_format","dd/mm/aaaa");
$nova_dtfim = SomarData($nova_dtfim, 0, 0, $w);
$w++;
$insert_sql = "INSERT INTO agenda
(
agenda_titulo,
agenda_dtinicio,
agenda_hrinicio,
agenda_dtfim,
agenda_hrfim,
agenda_recorrente,
agenda_periodo,
agenda_descricao,
agenda_alerta,
usuarios_login,
agenda_dtcad,
prop_reg,
prop_agd
)
VALUES
(
'{agenda_titulo}',
'$nova_dtinicio',
'{agenda_hrinicio}',
'$nova_dtfim',
'{agenda_hrfim}',
'{agenda_recorrente}',
'{agenda_periodo}',
'{agenda_descricao}',
'{agenda_alerta}',
'[sm_global_login]',
current_timestamp,
[sm_global_acesso],
{prop_agd}
)";
sc_exec_sql($insert_sql);
}
}
}
190
Scriptcase – Técnicas Avançadas
2012
$apl = 'agenda';
$mess_executada = 'Incluir - '.{lang_tble_agenda};
$mess_realizada='<table border=1 style="padding: 0px; border-spacing: 0px; border-width:
0px;">
<tr class="scGridLabel">
<td class="scGridLabelFont">Campo
<td class="scGridLabelFont">Valor';
$i=0;
foreach ($this->nm_new_label as $campo=>$display)
{
$display=$this->Ini->Nm_lang[substr($display,1,-1)];
$mess_realizada.="<tr><td class=scGridFieldOddFont>$display<td
class=scGridFieldOddFont>".$this->$campo;
$i++;
}
$mess_realizada.='</table>';
RegLogMysql($apl,$mess_executada,$mess_realizada);
Crie os eventos onBeforeUpdate (antes da alteração). Este evento será responsável pela consulta ao registro
antes da alteração. O resultado desta consulta será armazenado em um array que será comparado às
alterações efetuadas.
Crie os eventos onAfterUpdate (após a alteração). Este evento será responsável pela comparação da
consulta ao registro antes da alteração e após a alteração. O resultado desta comparação será registrado no
arquivo de logs.
191
Scriptcase – Técnicas Avançadas
2012
Crie os eventos onBeforeDelete (antes da exclusão). Este evento será responsável pelo registro no arquivo
de logs deste evento excluído.
a) onAfterInsert.
$apl = 'aplicação';
$mess_executada = 'Incluir - '.{lang_tble_tabela};
$mess_realizada='<table border=1 style="padding: 0px; border-spacing: 0px; border-width: 0px;">
<tr class="scGridLabel">
<td class="scGridLabelFont">Campo
<td class="scGridLabelFont">Valor';
$i=0;
foreach ($this->nm_new_label as $campo=>$display)
{
$display=$this->Ini->Nm_lang[substr($display,1,-1)];
$mess_realizada.="<tr><td class=scGridFieldOddFont>$display<td class=scGridFieldOddFont>".$this->$campo;
$i++;
}
$mess_realizada.='</table>';
RegLogMysql($apl,$mess_executada,$mess_realizada);
b) onBeforeUpdate;
192
Scriptcase – Técnicas Avançadas
2012
c) onAfterUpdate;
$apl = 'aplicação';
$mess_executada = 'Alterar - '.{lang_tble_tabela};
$mess_realizada='<table border=1 style="padding: 0px; border-spasgservng: 0px; border-width: 0px;">
<tr class="scGridLabel">
<td class="scGridLabelFont">Campo
<td class="scGridLabelFont">Anterior
<td class="scGridLabelFont">Atual';
sc_lookup(ver_campos,"SHOW columns FROM tabela");
sc_lookup(dataset,"SELECT * FROM tabela WHERE tabela_id = { tabela_id}");
$dataset_atual = {dataset[0]};
foreach({ver_campos} as $chave => $valor )
{
if((!($dataset_anterior[$chave]==$dataset_atual[$chave])) or ($chave < 1))
{
$mess_realizada.="<tr><td class=scGridFieldOddFont>".
$this->Ini->Nm_lang['lang_tabela_fild_'.$valor[0]].
"<td class=scGridFieldOddFont>".$dataset_anterior[$chave].
"<td class=scGridFieldOddFont>".$dataset_atual[$chave];
}
}
$mess_realizada.='</table>';
RegLogMysql($apl,$mess_executada,$mess_realizada);
d) onBeforeDelete.
$apl = 'aplicação';
$mess_executada = 'Excluir - '.{lang_tble_tabela};
$mess_realizada='<table border=1 style="padding: 0px; border-spacing: 0px; border-width: 0px;">
<tr class="scGridLabel">
<td class="scGridLabelFont">Campo
<td class="scGridLabelFont">Valor';
$i=0;
foreach ($this->nm_new_label as $campo=>$display)
{
$display=$this->Ini->Nm_lang[substr($display,1,-1)];
$mess_realizada.="<tr><td class=scGridFieldOddFont>$display<td class=scGridFieldOddFont>".$this->$campo;
$i++;
}
$mess_realizada.='</table>';
RegLogMysql($apl,$mess_executada,$mess_realizada);
193
Scriptcase – Técnicas Avançadas
2012
Você poderá fazer essa ativação automaticamente em todas as aplicações utilizando um recurso bastante
interessante do SC – Edição Expressa. Vejamos
194
Scriptcase – Técnicas Avançadas
2012
195
Scriptcase – Técnicas Avançadas
2012
Atenção.
Você não poderá ativar a segurança de duas aplicações, sem as quais será
impossível acessar o sistema:
a) Login
b) Esqueceu a Senha.
Se você escolheu ativar todas as aplicações terá que editar estas duas aplicações e
desativar a segurança (em ambas). Por isso, dentro do nosso projeto, estas duas
aplicações estão na pasta Segurança -> Sem_Segurança.
196
Scriptcase – Técnicas Avançadas
2012
Sempre uma nova aplicação for gerada no sistema haverá a necessidade de pelo menos o administrador ter
acesso a mesma. Para tanto desenvolvemos a aplicação grid_aplicacoes que, além de ser uma consulta à
tabela aplicações, ela verificará quais aplicações foram recém criadas e dará acesso total (Inclusão,
Alteração, Exclusão e Consulta) ao administrador. Edite esta aplicação.
No evento onScriptInit poderá ser vista a rotina que fará a verificação descrita acima.
197
Scriptcase – Técnicas Avançadas
2012
Daremos prosseguimento ao nosso exercício 1, criando as tabelas abaixo em nosso DB. É parte integrante de
nosso treinamento um arquivo que contem script de criação de todas as tabelas do sistema (MySQL).
a) Colaboradores;
b) Fotos dos Colaboradores;
c) Funções;
d) Cargos (CBO - Classificação Brasileira de Ocupações);
e) Estado Civil;
f) Formação Acadêmica;
g) Graus de Instrução;
h) Lotação;
i) Dependentes;
j) Habilidades;
k) Habilidades dos Colaboradores.
198
Scriptcase – Técnicas Avançadas
2012
Após criação das novas tabelas, deveremos atualizar o nosso banco de dicionários e idiomas.
Selecione as tabelas da base de dados (aquelas que ainda não fazem parte do dicionário), marque todas e
click no botão
199
Scriptcase – Técnicas Avançadas
2012
Deixe marcada apenas a opção Gerar índices nos arquivos de idiomas com os labels dos campos da tabela.
Se você marcar também a o opção Sobrescrever índices existentes nos arquivos de idioma, tudo que já
estiver sido criado no banco de idiomas será apagado (para as tabelas selecionadas).
Criado o Dicionário de dados, faremos agora a atualização da tabela de idiomas (tabela interna do nosso
projeto, gerado pelo (SC).
Click no item Ferramentas do menu principal e escola a opção Reginalidade -> Idiomas.
200
Scriptcase – Técnicas Avançadas
2012
201