Escolar Documentos
Profissional Documentos
Cultura Documentos
2
“Primeiro faça o necessário;
Depois faça o possível;
e, de repente, você vai perceber
que pode fazer o impossível”
São Francisco de Assis
3
Agradecimentos
Agradeço:
• a Deus, por está sempre ao meu lado, dando-me coragem para enfrentar
todos os obstáculos da vida.
• aos meus pais, Francisco de Sousa Isidório e Maria Edileusa de Carvalho,
que jamais pouparam esforços na abençoada tarefa de me fazer feliz.
• A minha namorada, Kaluce Gonçalves, a cujo amor e dedicação, devo alto
percentual de minhas realizações.
• aos professores Flávio Ferry, Francisco Vieira, Kelson Aires, Vinícius
Machado, Raimundo Moura e aos demais professores do DIE pelo
incentivo e pela dedicação à atividade docente.
• a Igor Feliciano e Thiago Correia por toda a atenção comigo e a todos os
meus amigos que de alguma forma contribuíram nesta jornada.
• a Amir Samary e a InterSystems do Brasil pelo apoio e confiança no
desenvolvimento desse trabalho.
4
Resumo
Atualmente pode-se notar que vem se tornando cada vez mais difundido o
uso da tecnologia de orientação a objetos no desenvolvimento de aplicações. No
entanto, a maior parte dos sistemas gerenciadores de banco de dados (SGBDs)
utilizados nos últimos anos são baseados no modelo relacional.
O modelo relacional é baseado na relação entre tabelas. Entretanto, esse
modelo não atende à demanda, cada vez mais complexas das aplicações, que
utilizam imagens e multimídia.
Para suprir as limitações do modelo relacional surgiram várias soluções, como
Frameworks, os sistemas gerenciadores de bancos de dados orientados a objetos
(SGBDOO) e o objeto-relacional (SGBDOR).
Os Frameworks realizam o mapeamento de objeto para SBBDs relacionais.
Contudo, seu uso é especifico e acrescenta mais camadas ao sistema.
O modelo orientado a objetos é baseado no conceito de classes e utilizam
encapsulamento, herança e polimorfismo. A grande vantagem do uso de um
SGBDOO consiste em que os objetos podem ser armazenados de forma
transparente. Porém, os SGBDOOs ainda apresentam pouca maturidade e robustez.
Os SGBDs objeto-relacionais dão suporte ao modelo relacional estendido
com certos conceitos de orientação a objetos. Contudo, esse modelo não apresenta
as características da orientação a objetos de forma simples, o que faz com que ele
termine sendo utilizado como o SGBD relacional.
Neste contexto, a melhor solução seria unir as características dos modelos
relacionais e orientados a objetos de forma eficiente, permitindo ao SGBD um ganho
substancial de performance.
O Caché é um banco de dados banco de dados pós-relacional que realiza
esta união, pois possui suporte a objetos e tabelas.
Este trabalho apresenta um estudo sobre o SGBD Caché, destacando a
arquitetura unificada de dados, a integração com tecnologias e o desenvolvimento
de aplicações.
5
Sumário
1 Introdução........................................................................................ 13
2 Noções de Orientação a Objetos...................................................16
2.1 Abstração...............................................................................................16
2.2 Objeto......................................................................................................16
2.3 Identidade de Objeto............................................................................ 17
2.4 Obetos Compexos................................................................................ 17
2.5 Classes.......................................................................... ....................... 17
2.6 Herança................................................................................................. 18
2.7 Métodos e Mensagens..........................................................................18
2.8 Polimorfirmo......................................................................................... 19
2.9 Encapsulamento.......................................................................... ........ 19
3 Modelo Pós-Relacional Caché....................................................... 20
3.1 Arquitetura............................................................................................ 20
3.2 Características............................................................................ ......... 21
3.3 Objetos.................................................................................................. 22
3.4 Tipos de Classes.................................................................................. 22
3.4.1 Dados........................................................... ...................................... 23
3.4.2 Objetos............................................................................ ................... 23
3.4.3 Não-Registradas................................................................................. 23
3.4.4 Registradas............................................................................ ............ 23
3.4.5 Embutidas........................................................................................... 24
3.4.6 Persistentes........................................................................................ 24
3.5 Linguagens........................................................... ................................ 24
3.5.1 Programação............................................................................ .......... 24
3.5.1.1 Caché ObjectScript...........................................................................24
3.5.1.2 Caché Basic............................................................................ ........ 25
3.5.2 Consulta............................................................................ ................. 25
3.6 Elementos de Classes........................................................... .............. 25
3.6.1 Métodos.............................................................................................. 26
3.7 Referências e Identidades................................................................... 26
3.8 Relacionamento entre Classes........................................................... 26
3.8.1 Referencias Simples........................................................................... 26
3.8.2 Relacionamentos........................................................................... ..... 27
3.8.3 Composição........................................................................................ 28
3.8.4 Foreing Key Relacional....................................................................... 28
3.9 Objetos e Tabelas ........................................................... .................... 28
4 Ambiente de Desenvolvimento.................................................... . 29
4.1 Namespaces............................................................................ ............. 29
4.2 Caché Studio............................................................................ ............ 30
4.3 Integração com Tecnologias ...............................................................30
4.3.1 Rose Link............................................................................................ 31
4.3.2 SQL Gateway.................................................................. ................... 32
4.3.3 ActiveX.................................................................. ............................. 32
4.3.3.1 Visual Caché............................................................................ ....... 32
4.3.4 Java.................................................................. .................................. 32
6
4.3.5 XML.................................................................. .................................. 33
4.3.5.1 Importação do XML...........................................................................33
4.3.5.2 Exportação do XML...........................................................................34
4.3.6 Web Services.......................................................................................34
5 CSP (Caché Server Pages)..............................................................34
5.1 Arquitetura CSP.................................................................... ............... 34
5.2 Caché Application Tags....................................................................... 36
5.3 Caché Web Form...................................................................................36
6 Estudo de Caso................................................................................37
6.1 Aspectos da Implementação................................................................37
6.2 Exportação do Diagrama de Classes................................................ . 38
6.3 Análise do Código Gerado................................................................... 39
6.4 Geração de Páginas CSP..................................................................... 40
7 Consideraçoes Finais..................................................................... 43
7.1 Conclusões........................................................................................... 43
7.2 Sugestões de Trabalhos Futuros........................................................ 43
8 Referências bibliográficas.............................................................44
Anexo: Código do estudo de caso.......................................................46
Índice de figuras
8
Índice de listagens de código
9
Índice de tabelas
10
1 Introdução
Atualmente pode-se notar que vem se tornando cada vez mais difundido o
uso da tecnologia de orientação a objetos no desenvolvimento de aplicações[8].
Contudo, o modelo de dados mais utilizado por SGBDs (Sistemas Gerenciadores de
Banco de Dados) é o relacional[15].
A necessidade de armazenar e processar dados complexos em bancos de
dados relacionais vem aumentando à medida que surgem sistemas de informação
mais sofisticados, tais como aplicações multimídia para Web.
O modelo relacional está baseado em uma única estrutura de dados: a
relação. Uma relação é uma tabela com linhas (tuplas) e colunas (atributos), as
quais contêm um tipo de dado simples especificado (integer, character, string,...)[15].
Suporta uma pequena quantidade de tipos de dados que se mostram adequados
para aplicações convencionais. Isto provoca problemas no desenvolvimento de
aplicações que utilizam tecnologia de objetos. Os objetos podem ter estruturas
complexas e, neste caso, será necessário um esforço adicional de programação
para adaptá-los ao modelo relacional antes de armazená-los e outro para adequá-
los novamente ao modelo de objetos no momento de recuperá-los.
Para suprir as limitações do modelo relacional surgiram várias soluções, como
Frameworks, os sistemas gerenciadores de banco de dados orientados a objetos
(SGBDOO) e o objeto-relacional (SGBDOR).
Os frameworks são capazes de realizar o mapeamento objeto-relacional[9].
Um framework é uma aplicação reusável destinada ao mapeamento de objetos para
bancos de dados relacionais, o qual permite ao desenvolvedor concentre-se apenas
no modelo de objetos[13]. Contudo, diminuem o desempenho das aplicações,
atrasam significativamente o desenvolvimento das mesmas e acrescentam mais
camadas ao sistema.
Os SGBDOOs implementam de forma natural o modelo orientado a objeto,
isto é, os conceitos de classe, objeto, tipo, identidade, encapsulamento, herança,
agregação, método e polimorfismo[14] . Eles mantém uma correspondência direta
entre o mundo real e objetos de banco de dados de forma que objetos não percam
sua integridade e identidade e possam ser facilmente identificados e operados[16].
Além disso, possuem mecanismos especiais para controlar transações entre objetos
11
e técnicas de armazenamento que facilitam a recuperação rápida de objetos
complexos (clustering)[11]. O acesso aos objetos é mais versátil quando se utiliza
um SGBDOO, já que é possível fazê-lo de forma navegacional ou por meio de
linguagens do tipo SQL[5]. Usando SGBDRs, a única maneira de acessar os dados
é através de linguagens de consulta. Alguns fabricantes deste modelo fornecem o
acesso a dados através da linguagem Objetc Query Language (OQL). No entanto,
essa linguagem não têm aceitação generalizada[1].
Os SGBDORs são evolucionários, herdando transação robusta e
características de gerenciamento de performance da tecnologia relacional e adiciona
a flexibilidade da tecnologia orientada a objetos[16]. Pode-se trabalhar com
estruturas tabulares familiares, enquanto adiciona novas possibilidades de
gerenciamento de objetos[10]. No entanto, este modelo não foi concebido para
armazenar objetos, tornando a modelagem destes uma tarefa difícil. A linguagem de
consulta é SQL com extensões para cada banco, já que não existe um padrão.
Neste contexto, a melhor solução seria unir as características dos modelos
relacionais e orientados a objetos. Assim, as aplicações desenvolvidas poderiam
acessar dados de várias formas, permitindo uma integração entre as mesmas.
O SGBD Caché realiza esta união, pois possui suporte a tabelas e objetos. O
Caché é um banco de dados pós-relacional, com estrutura de dados
multidimensional, que combina as tecnologias de orientação a objetos e relacional
[4]. A arquitetura unificada de dados constrói uma camada de descrição para objetos
e tabelas relacionais que são mapeados diretamente em sua estrutura
multidimensional. Assim, aplicações relacionais podem coexistir com novos
componentes de negócios construídos com a tecnologia de objetos.
Todos os SGBDs desenvolvidos após o modelo relacional podem ser
chamados de pós-relacional. Esse é um termo freqüentemente utilizado para
designar bancos de dados multidimensionais que apresentam orientação a objetos.
Mas isso não é o suficiente. Eles refletem uma imagem do mundo real e atendem as
necessidades das aplicações atuais que apresentam dados complexos[7].
Cada uma das diversas tecnologias contidas no Caché é aplicada a
determinadas tarefas. A tecnologia de objetos é ideal para a modelagem de dados
complexos e a relacional favorece a análise de dados e a geração de relatórios.
12
Este trabalho apresenta um estudo sobre o SGBD Caché, destacando a
arquitetura unificada de dados, a integração com tecnologias e o desenvolvimento
de aplicações.
O trabalho encontra-se dividido da seguinte forma:
• Seção 2 - Noções de orientação a objetos.
• Seção 3 - Modelo Pós-Relacional Caché.
• Seção 4 - Ambiente de Desenvolvimento.
• Seção 5 - Tecnologia Caché Server Pages (CSP)[4].
• Seção 6 - Estudo de caso.
• Seção 7 - Conclusões e os Trabalhos Futuros.
13
2 Orientação a Objetos
2.1 Abstração
2.2 Objeto
14
2.3 Identidade de Objeto
2.5 Classes
15
Assim, a extensão da classe denota o conjunto dos objetos atualmente existentes na
classe e o tipo provê a estrutura destes objetos[2].
2.6 Herança
16
similar aos códigos dos procedimentos usados em linguagens de programação
tradicionais, que manipula o objeto ou parte deste. Cada objeto tem um certo
número de operações para ele definida. Para cada operação pode-se ter um ou mais
métodos de implementação associados[1].
As mensagens são a forma mais usada para se ativar os métodos. Os objetos
se comunicam e são ativados através de mensagens enviadas entre eles.
2.8 Polimorfismo
2.9 Encapsulamento
17
3 Modelo Pós-Relacional Caché
3.1 Arquitetura
Aplicações
Engine Engine
SQL Objetos
Máquina Virtual
Multi Dimensional
18
servidor de dados multidimensional é responsável pela performance e escalabilidade
do banco de dados.
O termo multidimensional significa que os dados podem ser indexados por
tantos parâmetros quanto forem necessários e não são limitados a linhas e colunas.
Isto permite modelos de dados mais ricos do que os obtidos no modelo relacional[4].
Dados complexos podem ser armazenados e utilizados de forma natural e intuitiva.
Armazenar objetos complexos não é simples, por que a informação precisa
ser fragmentada em tabelas, ocorrendo um empilhamento destas e causando um
maior processamento para reconstruir os objetos decompostos.
Dados multidimensionais não precisam ser reconstruídos. O servidor de
dados multidimensional elimina a sobrecarga de processamento, o que permite um
melhor desempenho.
3.2 Características
19
• Escalabilidade: utilizando o Enterprise Caché Protocol (ECP) é
simples distribuir cargas e construir esquemas de cluster[4].
• Portabilidade: por possuir uma máquina virtual, as classes Caché são
compiladas e podem ser executadas na maioria das plataformas, com
exceção da AS400 e de MainFrames.
3.3 Objetos
O J
D D
XML SOAP COM EJB Java .Net C++ Web COS
B B
C C CSP
Basic
Caché
SQL Objetos Caché
Multi-Dimensional
20
Classes
Dados Objetos
Embutidas Persistentes
3.4.1 Dados
São classes que suportam apenas valores literais. Não possuem identidades
e não podem ser instanciadas. Estas classes existem somente como propriedades
de objetos.
3.4.2 Objetos
3.4.3 Não-Registradas
3.4.4 Registradas
21
3.4.5 Embutidas
As classes embutidas são utilizadas para compor outras classes. Elas não
são armazenadas diretamente no banco de dados. Eles são carregadas na memória
principal e na momento do armazenamento são vinculadas a classes persistentes.
3.4.6 Persistentes
3.5 Linguagens
3.5.1 Programação
22
3.5.1.2 Caché Basic
3.5.2 Consulta
23
3.6.1 Métodos
24
• Encapsulamento/Acoplamento: Não é necessário checar a integridade
referencial, consequentemente não existe a propriedade inversa na
classe referenciada. Isto é útil quando existe uma objeto referenciado
por muitos outros. Qualquer classe pode acessar o objeto sem que o
mesmo faça nenhuma checagem.
3.8.2 Relacionamentos
Os relacionamentos do tipo “Um para Um” e “Muitos para Muitos” não estão
presentes no Caché. Esse relacionamentos são implementados utilizando os
relacionamentos descritos anteriormente.
O relacionamento “Um para Um” pode ser implementado utilizando o “Um
para Muitos” e garantindo que exista apenas um objeto na lista mantida pela Caché.
Já o “Muitos para Muitos” pode ser implementado utilizando dois relacionamentos
“Um para Muitos” e uma classe de relacionamento[6].
25
3.8.3 Composição
Uma referência simples para um objeto de uma classe do tipo serial. Quando
o objeto que mantém referência é salvo, o objeto serial referenciado é salvo
juntamente com o mesmo [7].
Objetos Tabelas
classe table
26
4 Ambiente de Desenvolvimento
Componente Descrição
4.1 Namespaces
27
C:\CacheSys\Mgr\User\cache.dat
USER
C:\CacheSys\Mgr\cachelib\cache.dat
SAMPLES C:\CacheSys\Mgr\Samples\cache.dat
28
Tabela 4.2: Ferramentas integráveis.
Ferramenta Descrição
Byte %Integer
Date %Date
Double %Float
Integer %Integer
String %String
29
4.3.2 SQL Gateway
SQL Server
Caché SQL
Informix
4.3.3 ActiveX
4.3.4 Java
1
http://www.sun.com/java
30
Os métodos de acesso a objetos Java (abrir, listar, salvar, excluir, etc.) são
gerados com projeções. Um projeção transporta o código da classe para a
linguagem Java[4]. A figura 4.4 mostra o modelo de interação entre essas
tecnologias.
Maquina
Virtual Java
4.3.5 XML
Quando uma classe Caché é exportada para XML são fornecidos métodos
que auxiliam a:
• Criar DTD (Document Type Definition) ou uma Esquema XML para a
classe. DTDs e Esquemas XML são documentos que definem a
estrutura dos dados XML.
• Formatar dados automaticamente (instâncias da classe) como XML, de
acordo com DTD ou esquema definido.
31
4.3.5.2 Importação do XML
2
http://www.apache.org/xerxes
32
5 CSP (Caché Server Pages)
Servidor Web
Gateway CSP
Servidor CSP
SGBD Caché
33
criado uma classe responsável por atender às chamadas subseqüentes[4]. Se a
página CSP for modificada, a classe será reconstruída na próxima chamada.
Cada requisição Web é encapsulada em dois objetos, request e response,
facilitando o recebimento de parâmetros e a formatação do resultado. É possível
utilizar o objeto session para armazenar o contexto de uma transação que pode se
estender por várias requisições. Tudo é executado dentro do banco, garantindo a
propriedade de seu código[7]. O browser cliente recebe apenas o conteúdo HTML.
CSP usa delimitadores semelhantes ao XML e scripts na linguagem COS
(Caché Object Script) para incluir a lógica da aplicação que pode ser mantida nos
objetos armazenados, que são endereçados pelos scripts. As conexões ao servidor
Web são feitas através de APIs (Application Program Interface) padronizadas.
34
6 Estudo de Caso
35
A construção da aplicação é composta de três etapas, de acordo com a figura
6.2.
figura 6.2.
36
Figura 6.4: Exportação do Diagrama de Classes
37
herança, pois são concebidas a partir de classes bases como %Persistent,
%SerialObject, etc.
Entre as classes Cliente e Pedido há um relacionamento do tipo “um para
muitos”, discutido na seção 3.8.
O parâmetro Cardinality está configurado como many, já que um Cliente pode
ter vários Pedidos, de acordo com listagem 6.3.
38
Figura 6.5: Seleção de Propriedades
…
<INPUT TYPE="BUTTON" NAME="btnSave" VALUE="Salvar"
ONCLICK='form_save();'>
<INPUT TYPE="BUTTON" NAME="btnSearch" VALUE="Pesquisar"
ONCLICK='form_search();'>
….
39
Figura 6.7: Página Pessoa.csp
40
7 Considerações Finais
7.1 Conclusões
3
Ensemble é uma plataforma de integração baseada no Caché.
41
8 Referências bibliográficas
42
[11] OMG – Object Management Group. Disponível em:
http://www.omg.org. Acesso em 04 julho de 2004.
43
Anexo – Código do estudo de caso
• Classe Pessoa;
• Classe Endereco;
• Classe Cliente;
• Classe Fornecedor;
• Classe Pedido;
• Pessoa.csp;
• Cliente.csp;
• Fornecedor.csp;
• Produto.csp;
Classe Pessoa
Class empresa.Pessoa Extends %Persistent [ ClassType = persistent, ProcedureBlock ]
{
Classe Endereco
Class empresa.Endereco Extends %SerialObject [ ClassType = serial, ProcedureBlock ]
{
Classe Cliente
44
Classe Fornecedor
Class empresa.Fornecedor Extends empresa.Pessoa [ ClassType = persistent, ProcedureBlock ]
{
Classe Pedido
Pessoa.csp
<!-- use CSP:OBJECT tag to create a reference to an instance of the class -->
<CSP:OBJECT NAME="objForm" CLASSNAME="empresa.Pessoa" OBJID=#(%request.Get("OBJID"))#>
<!-- use CSP:SEARCH tag to create a javascript function to invoke a search page -->
<CSP:SEARCH NAME="form_search" CLASSNAME="empresa.Pessoa" WHERE="Nome" OPTIONS="popup,nopredicates"
ONSELECT="update">
45
<TR>
<TD><FONT COLOR="#666666"><B><DIV ALIGN="RIGHT">ID:</DIV></B></FONT></TD>
<TD><INPUT TYPE="TEXT" NAME="sys_Id" CSPBIND="%Id()" SIZE="10" READONLY></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">*Nome:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="Nome" CSPBIND="Nome" SIZE="50" CSPREQUIRED></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">* Rua:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="EnderecoRua" CSPBIND="Endereco.Rua" SIZE="50" CSPREQUIRED></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT"> Numero:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="EnderecoNumero" CSPBIND="Endereco.Numero" SIZE="10"></TD>
</TR>
<TR>
<TD> </TD>
<TD> <INPUT TYPE="BUTTON" NAME="btnSave" VALUE="Salvar" ONCLICK='form_save();'>
<INPUT TYPE="BUTTON" NAME="btnSearch" VALUE="Pesquisar" ONCLICK='form_search();'>
<INPUT TYPE="BUTTON" NAME="btnExcluir" VALUE="Excluir"
ONCLICK="#server(empresa.Pessoa.%DeleteId(form.OBJID.value))#;form_new();">
<INPUT TYPE="BUTTON" NAME="btnClear" VALUE="Limpar" ONCLICK='form_new();'>
</TD>
</TR>
<TR>
<TD> </TD>
<TD><FONT COLOR="#000088" SIZE="2">(* Indica campos obrigatórios)</FONT></TD>
</TR>
</TABLE>
</CENTER>
</FORM>
<HTML>
<HEAD>
</HEAD>
<BODY>
<center>
<a href="http://127.0.0.1:1972/csp/user/index.html">Página Inicial</a>
</center>
</BODY>
</HTML>
Cliente.csp
<H1 ALIGN="CENTER">Classe Cliente</H1>
<SCRIPT Language=JavaScript>
<!--
function update(id)
{
#server(..formLoad(id))#;
return true;
}
// -->
</SCRIPT>
<!-- use CSP:OBJECT tag to create a reference to an instance of the class -->
<CSP:OBJECT NAME="objForm" CLASSNAME="empresa.Cliente" OBJID=#(%request.Get("OBJID"))#>
<!-- use CSP:SEARCH tag to create a javascript function to invoke a search page -->
<CSP:SEARCH NAME="form_search" CLASSNAME="empresa.Cliente" WHERE="Nome,CPF"
OPTIONS="popup,nopredicates" ONSELECT="update">
46
<TD><INPUT TYPE="TEXT" NAME="sys_Id" CSPBIND="%Id()" SIZE="10" READONLY></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">*Nome:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="Nome" CSPBIND="Nome" SIZE="50" CSPREQUIRED></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">*CPF:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="CPF" CSPBIND="CPF" SIZE="10" CSPREQUIRED></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">*Rua:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="EnderecoRua" CSPBIND="Endereco.Rua" SIZE="50" CSPREQUIRED></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">Numero:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="EnderecoNumero" CSPBIND="Endereco.Numero" SIZE="10"></TD>
</TR>
<TR>
<TD> </TD>
<TD> <INPUT TYPE="BUTTON" NAME="btnSave" VALUE="Salvar" ONCLICK='form_save();'>
<INPUT TYPE="BUTTON" NAME="btnSearch" VALUE="Pesquisar" ONCLICK='form_search();'>
<INPUT TYPE="BUTTON" NAME="btnExcluir" VALUE="Excluir"
ONCLICK="#server(empresa.Pessoa.%DeleteId(form.OBJID.value))#;form_new();">
<INPUT TYPE="BUTTON" NAME="btnClear" VALUE="Limpar" ONCLICK='form_new();'>
</TD>
</TR>
<TR>
<TD> </TD>
<TD><FONT COLOR="#000088" SIZE="2">(* Indica campos obrigatórios)</FONT></TD>
</TR>
</TABLE>
</CENTER>
</FORM>
<HTML>
<HEAD>
</HEAD>
<BODY>
<center>
<a href="http://127.0.0.1:1972/csp/user/index.html">Página Inicial</a>
</center>
<!-- Put your page code here -->
</BODY>
</HTML>
Fornecedor.csp
<!-- use CSP:OBJECT tag to create a reference to an instance of the class -->
<CSP:OBJECT NAME="objForm" CLASSNAME="empresa.Fornecedor" OBJID=#(%request.Get("OBJID"))#>
<!-- use CSP:SEARCH tag to create a javascript function to invoke a search page -->
<CSP:SEARCH NAME="form_search" CLASSNAME="empresa.Fornecedor" WHERE="Nome,CNPJ"
OPTIONS="popup,nopredicates" ONSELECT="update">
47
<FORM NAME="form" CSPBIND="objForm" CSPJS="All" ONSUBMIT='return form_validate();'>
<CENTER>
<TABLE CELLPADDING="3">
<TR>
<TD><FONT COLOR="#666666"><B><DIV ALIGN="RIGHT">ID:</DIV></B></FONT></TD>
<TD><INPUT TYPE="TEXT" NAME="sys_Id" CSPBIND="%Id()" SIZE="10" READONLY></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">*Nome:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="Nome" CSPBIND="Nome" SIZE="50" CSPREQUIRED></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">*CNPJ:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="CNPJ" CSPBIND="CNPJ" SIZE="10" CSPREQUIRED></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">*Rua:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="EnderecoRua" CSPBIND="Endereco.Rua" SIZE="50" CSPREQUIRED></TD>
</TR>
<TR>
<TD><B><DIV ALIGN="RIGHT">Numero:</DIV></B></TD>
<TD><INPUT TYPE="TEXT" NAME="EnderecoNumero" CSPBIND="Endereco.Numero" SIZE="10"></TD>
</TR>
<TR>
<TD> </TD>
<TD> <INPUT TYPE="BUTTON" NAME="btnSave" VALUE="Salvar" ONCLICK='form_save();'>
<INPUT TYPE="BUTTON" NAME="btnSearch" VALUE="Pesquisar" ONCLICK='form_search();'>
<INPUT TYPE="BUTTON" NAME="btnExcluir" VALUE="Excluir"
ONCLICK="#server(empresa.Fornecedor.%DeleteId(form.OBJID.value))#;form_new();">
<INPUT TYPE="BUTTON" NAME="btnClear" VALUE="Limpar" ONCLICK='form_new();'>
</TD>
</TR>
<TR>
<TD> </TD>
<TD><FONT COLOR="#000088" SIZE="2">(* Indica campos obrigatórios)</FONT></TD>
</TR>
</TABLE>
</CENTER>
</FORM>
<HTML>
<HEAD>
</HEAD>
<BODY>
<!-- Put your page code here -->
<center>
<a href="http://127.0.0.1:1972/csp/user/index.html">Página Inicial</a>
</center>
</BODY>
</HTML>
Pedido.csp
<H1 ALIGN="CENTER">Classe Pedido</H1>
<SCRIPT Language=JavaScript>
<!--
function update(id)
{
#server(..formLoad(id))#;
return true;
}
function updateCliente(id)
{
#server(..formClienteLoad(id))#;
return true;
48
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<center>
<a href="http://127.0.0.1:1972/csp/user/index.html">Página Inicial</a>
</center>
</BODY>
</HTML>
49