Professional Documents
Culture Documents
Isb007 - Zen PDF
Isb007 - Zen PDF
Guia do Aluno
Cach ZEN
InterSystems do Brasil
Cach ZEN
COPYRIGHT NOTICE
Copyright InterSystems Corporation
1997-2006
All rights reserved
NOTICE
PROPRIETARY CONFIDENTIAL
This document contains trade secret and confidential information which is the property of InterSystems Corporation,
One Memorial Drive, Cambridge, MA 02142, or its affiliates, and is furnished for the sole purpose of the operation
and maintenance of the products of InterSystems Corporation. No part of this publication is to be used for any other
purpose, and this publication is not to be reproduced, copied, disclosed, transmitted, stored in a retrieval system or
translated into any human or computer language, in any form, by any means, in whole or in part, without the express
prior written consent of InterSystems Corporation.
The copying, use and disposition of this document and the software programs described herein is prohibited except
to the limited extent set forth in the standard software license agreement(s) of InterSystems Corporation covering
such programs and related documentation. InterSystems Corporation makes no representations and warranties
concerning such software programs other than those set forth in such standard software license agreement(s). In
addition, the liability of InterSystems Corporation for any losses or damages relating to or arising out of the use of
such software programs is limited in the manner set forth in such standard software license agreement(s).
THE FOREGOING IS A GENERAL SUMMARY OF THE RESTRICTIONS AND LIMITATIONS IMPOSED BY
INTERSYSTEMS CORPORATION ON THE USE OF, AND LIABILITY ARISING FROM, ITS COMPUTER
SOFTWARE. FOR COMPLETE INFORMATION REFERENCE SHOULD BE MADE TO THE STANDARD
SOFTWARE LICENSE AGREEMENT(S) OF INTERSYSTEMS CORPORATION, COPIES OF WHICH WILL BE
MADE AVAILABLE UPON REQUEST.
InterSystems Corporation disclaims responsibility for errors which may appear in this document, and it reserves the
right, in its sole discretion and without notice, to make substitutions and modifications in the products and practices
described in this document.
Cach, InterSystems Cach, Cach SQL, Cach ObjectScript, Cach Objects, ISM, MSM, DSM, and DTM are
trademarks of InterSystems Corporation.
All other brand or product names used herein are trademarks or registered trademarks of their respective companies
or organizations.
For Support questions about any InterSystems products, contact the InterSystems Worldwide Support Center:
Phone:
US: +1 617 621-0700
Europe: +44 (0) 1753 830-077
Fax:
US: +1 617 374-9391
Europe: +44 (0) 1753 861-311
InterSystems do Brasil
Cach ZEN
InterSystems do Brasil
Cach ZEN
Contedo
Mdulo Introduo ..................................................................................................... 6
Viso Geral .................................................................................................................. 12
Benefcios .................................................................................................................... 16
Demo ............................................................................................................................ 22
Mdulo Cliente e Servidor ....................................................................................... 26
Mdulo Conceito de Aplicaes Zen ..................................................................... 32
Mdulo Conceitos de Componentes Zen .............................................................. 40
Convenes de Nomenclaturas ................................................................................. 46
Mdulo Tabelas Zen ................................................................................................. 54
Mdulo Controles Zen ............................................................................................. 66
Mdulo Formulrios Zen ......................................................................................... 90
Mdulo MVC............................................................................................................ 102
Mdulo MVC Exerccios Adicionais ................................................................... 118
Mdulo Zen e SVG.................................................................................................. 152
Mdulo Grficos Zen .............................................................................................. 160
Mdulo Componentes de Navegao ................................................................... 170
Mdulo Janelas de Expanso e Popup ................................................................ 184
Mdulo Miscelnea ................................................................................................ 202
Mdulo Componentes Customizados .................................................................. 208
Mdulo Localizao ............................................................................................... 218
Mdulo Programao da Aplicao ...................................................................... 226
Respostas dos Exerccios ........................................................................................ 242
InterSystems do Brasil
Cach ZEN
InterSystems do Brasil
Cach ZEN
Mdulo: Introduo
Mdulo: Introduo
InterSystems do Brasil
Cach ZEN
InterSystems do Brasil
Cach ZEN
InterSystems do Brasil
Cach ZEN
InterSystems do Brasil
Cach ZEN
InterSystems do Brasil
10
Cach ZEN
InterSystems do Brasil
11
Cach ZEN
Viso Geral
Viso Geral
InterSystems do Brasil
12
Cach ZEN
InterSystems do Brasil
13
Cach ZEN
Utiliza tecnologia AJAX, permitindo a criao de aplicaes web muito mais interativas
Esto disponveis diversos tipos de componentes como grids, formulrios, calendrios, botes
diversos, menus, etc.
InterSystems do Brasil
14
Cach ZEN
InterSystems do Brasil
15
Cach ZEN
Benefcios
Benefcios
InterSystems do Brasil
16
Cach ZEN
InterSystems do Brasil
17
Cach ZEN
Zen Benefcios
Desenvolvimento Rpido.
Simplicidade.
Gerao de Cdigos.
Extensibilidade (CSS)
Segurana.
Manipulao de Form.
Layout de pgina.
Manipulao de Eventos.
Suporte a Multilinguagem.
Documentos de reports.
Desenvolvimento Zen
InterSystems do Brasil
18
Cach ZEN
InterSystems do Brasil
19
Cach ZEN
Multi-linguagem
Segurana
InterSystems do Brasil
20
Cach ZEN
InterSystems do Brasil
21
Cach ZEN
Demo
Demo
InterSystems do Brasil
22
Cach ZEN
InterSystems do Brasil
23
Cach ZEN
Introduo Demo
Acesse a pgina de exemplos do Zen atravs do link:
http://localhost:<port>/csp/samples/ZENDemo.Home.cls
Login para os exerccios:
http://localhost:<port>/csp/user/ISCZen.Pag.Login.cls
Usurio: master
Senha: mster
InterSystems do Brasil
24
Cach ZEN
InterSystems do Brasil
25
Cach ZEN
InterSystems do Brasil
26
Cach ZEN
InterSystems do Brasil
27
Cach ZEN
Os seguintes diagramas resumem as interaes entre o cliente CSP e o servidor. Como pginas
Zen so pginas CSP, essas informaes so tambm aplicadas ao Zen.
Os nmeros do diagrama anterior demonstram o fluxo dos eventos em um processo CSP. A seqncia
a seguinte:
1. O browser (ou cliente Web similar) faz uma requisio HTTP;
2. Se o servidor web determina que esta uma requisio CSP, ele envia a requisio ao Gateway CSP
instalado no servidor Web. Alternativamente, se a requisio de um arquivo esttico (como um arquivo
.html ou .jpg), o servidor Web encontra o arquivo em seu sistema de arquivos local e envia o contedo
ao cliente.
InterSystems do Brasil
28
Cach ZEN
4. O servidor Cach decodifica a mensagem, determina qual classe de manipulao de evento (parte da
aplicao) deveria processar o evento, e invoca o mtodo OnPage desta classe.
Pgina Zen so pginas CSP, ento cada classe de pgina Zen tem um mtodo OnPage.
Entretanto, as pginas Zen possuem muito mais recursos.
5. O servidor Cach retorna a sada do mtodo OnPage ao Gateway CSP como uma resposta HTTP;
7. O servidor Web retorna a resposta ao browser que ento processa a resposta. No caso de HTML, a
pgina apresentada.
Aplicaes Zen usam tecnologia CSP para:
Fornecer mecanismo de hiperevento usado para chamar mtodos servidor a partir do cliente;
InterSystems do Brasil
29
Cach ZEN
A seqncia do diagrama anterior mostra uma pgina Zen em um browser. A numerao em negrito
mostra como uma pgina Zen interage dentro do processo CSP, conforme aqui detalhado:
1. O browser envia uma requisio HTTP com nome especfico de uma pgina Zen. O servidor Cach
recebe a requisio e automaticamente direciona para a classe da pgina Zen. Nota: CSP trata este
passo, como descrito anteriormente.
InterSystems do Brasil
30
Cach ZEN
4. A classe da pgina invoca o mtodo callback %OnAfterCreatePage. Neste mtodo, a aplicao pode
modificar o contedo gerado pelo %CreatePage.
5. O objeto da pgina constri um documento HTML a partir do DOM. A pgina invoca o mtodo
%DrawHTML. Cada pgina Zen e objeto de componente tem um mtodo %DrawHTML que sabe como
desenhar o objeto como HTML.
6. O servidor Cach entrega o documento HTML ao cliente, e o browser mostra o documento HTML.
InterSystems do Brasil
31
Cach ZEN
InterSystems do Brasil
32
Cach ZEN
InterSystems do Brasil
33
Cach ZEN
Aplicaes Zen
Cada aplicao Zen tem uma classe de aplicao. Esta uma classe derivada
de %ZEN.application que fornece comportamento e estilo para a aplicao. A
folha de estilo especificada como um bloco XML embutido dentro da classe.
Classes de Pgina:
Uma aplicao consiste em uma ou mais pginas. Cada pgina uma classe
derivada de %ZEN.Component.page.
Classes de Componente:
InterSystems do Brasil
34
Cach ZEN
Um classe de aplicao Zen fornece alto nvel de administrao e age como base para todas as
pginas na aplicao.
A associao entre a aplicao e suas pginas ocorre e toda pgina Zen identifica qual a
aplicao a que pertence.
A classe da aplicao pode definir estilos, inclusive com referncias arquivos externos, a
serem utilizados por todas as pginas desta aplicao.
InterSystems do Brasil
35
Cach ZEN
Pginas Zen
InterSystems do Brasil
36
Cach ZEN
InterSystems do Brasil
37
Cach ZEN
Componentes Zen
Define como seu HTML inicial desenhado. tambm possvel definir componentes
que apenas so desenhados usando eles mesmos atravs de lado-cliente, HTML
dinmico;
Define uma folha de estilos CSS padro que especifica como deveria ser apresentado
na pgina;
InterSystems do Brasil
38
Cach ZEN
InterSystems do Brasil
39
Cach ZEN
Mdulo Conce
InterSystems do Brasil
40
Cach ZEN
InterSystems do Brasil
41
Cach ZEN
Componentes Zen
Os componentes fornecem layout, estilo e comportamento para a pgina. A seguir uma tabela
que define os termos geralmente usados:
Te r m o
I lust r a o
Re sum o
Pgina
Layout
Est ilo
Pgina
Uma pgina inicialmente vazia. Ela preenchida com componentes que so adicionados ela.
Uma estratgia de layout necessria para determinar onde estes componentes sero exibidos
na pgina.
Layout
Componentes so inseridos dentro de grupos: um tipo especial de componente que pode conter
zero ou mais componentes. Um grupo responsvel pela localizao dos seus componentes na
pgina.
Certos componentes permitem camadas, como folhas de papel que ocupam uma posio em
uma pilha. Apenas uma camada mostrada a cada vez, baseado em cliques do usurio. Menus
e guias trabalham desta forma.
<page> um componente de grupo que atua como container de mais alto nvel para
todos os elementos XML;
InterSystems do Brasil
42
Cach ZEN
<pane paneName="menuPane"/>.
Estilo
Zen gerencia estilos gerando instrues CSS padro baseados nas entradas fornecidas ao Zen.
H muitos atributos de estilos que podem ser configurados para cada componente. Estes
incluem cor de fundo, tamanho, fontes, ...
A seguir uma relao com alguns exemplos de atributos que configuram o estilo de um
componente, a lista completa de atributos est descrita na documentao:
id: pode ser utilizado para selecionar uma definio de estilo CSS para um componente.
InterSystems do Brasil
43
Cach ZEN
Comportamento
Personalizao
InterSystems do Brasil
44
Cach ZEN
InterSystems do Brasil
45
Cach ZEN
Convenes de Nomenclaturas
Convenes de Nomenclaturas
InterSystems do Brasil
46
Cach ZEN
InterSystems do Brasil
47
Cach ZEN
Convenes de Nomenclaturas
As seguintes convenes de nomes so aplicadas em cdigos Zen. Estas convenes usam case
(letras maisculas e minsculas) para diferenciar entre categorias de mtodos ou propriedades.
meuNomeMetodo e MeuNomeMetodo no so o mesmo nome;
Mtodos lado-cliente:
Exemplo: meuNomeMetodo
Mtodos Zen:
So definidos usando a palavra-chave ZenMethod. Eles podem ser chamados a partir do cliente,
mas so executados no servidor. Estes mtodos so escritos em ObjectScript ou Basic, mas
podem incluir JavaScript embutido que retornam ao cliente. Os nomes iniciam com letras
maisculas, assim como as iniciais das palavras sucessivas.
Exemplo: MeuNomeMetodo
Mtodos lado-servidor:
Exemplo: %MeuNomeMetodo
Classes Zen:
Geralmente, os nomes de classes Zen iniciam com letra minscula, semelhante as convenes
para mtodos e propriedades lado-cliente.
As excees para esta regra incluem algumas classes de utilitrios apenas-servidor, que iniciam
com uma letra maiscula.
InterSystems do Brasil
48
Cach ZEN
Exemplo: tablePane
Atributos e Propriedades
Nomes de atributos e propriedades iniciam com letra minscula, exceto para manipuladores de
eventos e callbacks.
Exemplo: filterOp
Manipuladores de Eventos
Exemplo: onmousedown
CallBacks
Exemplo: OnCreateDataSet
Neste exerccio voc ir adicionar um mtodo JavaScript do lado cliente para a sua classe de
pgina Zen, como segue:
1. Abra ISCUser.Pag.BoasVindas no Cach Estudio.
2. Digite no manipulador de eventos onclick do boto a seguinte expresso:
zenPage.btnClique();
InterSystems do Brasil
49
Cach ZEN
3. Escolha Ferramentas
Modelos
dilogo Modelos do Cach Studio. Escolha Zen Method Wizard. Clique em OK.
Informe os seguintes valores para os campos:
5. Escolha Compilar
6. Escolha Exibir
Compilar ou o cone.
Pgina Web ou o cone.
InterSystems do Brasil
50
Cach ZEN
O compilador de classe trata a herana. Isto significa que voc pode definir mtodos
JavaScript dentro de uma super classe e eles estaro automaticamente disponveis para
qualquer subclasse.
O corpo deste mtodo usa o mtodo alert padro JavaScript para apresentar a
mensagem no cliente;
O mtodo definido dentro da mesma unidade lgica (isto , dentro da mesma classe)
como a definio da pgina que o referncia. Isto faz com que as pginas sejam fceis
para desenvolver e manter.
InterSystems do Brasil
51
Cach ZEN
Neste exerccio, faremos uma alterao em nossa pgina Zen. Esta alterao demonstra a
habilidade de invocar um mtodo no servidor a partir de uma pgina cliente.
1. No Studio, abra a classe de pgina;
2. Usando as tcnicas dos exerccios anteriores, adicione um novo boto dentro do bloco XData
Contents. D ao novo boto os seguintes valores de atributos:
id = meuBotaoServ
caption = Mtodo Servidor
onclick = zenPage.BtnCliqueServ();
3. Posicione o cursor logo abaixo do final do bloco XData Contents;
4. Escolha Ferramentas
Modelos
dilogo do Studio. Escolha Zen Method Wizard. Clique em OK. Nesta tela informe o seguinte:
Em Nome do Mtodo informe BtnCliqueServ
Escolha um mtodo de instncia
Escolha executa no servidor
Informe uma descrio.
Clique em Finish. Seu novo mtodo criado com a seguinte aparncia:
6. Escolha Compilar
7. Escolha Exibir
Compilar ou o cone
Pgina Web ou o cone
InterSystems do Brasil
52
Cach ZEN
Omite a palavra-chave Language. Isto significa que este mtodo usar a linguagem de
script padro do servidor (ObjectScript ou Basic, neste caso ObjectScript);
Usa a palavra-chave ZenMethod. Isto significa que este um mtodo lado-servidor que
pode ser chamado a partir do cliente. At quando este mtodo chamado a partir do
ambiente do cliente (browser), ele executado no servidor;
O mtodo associa o valor do utilitrio $ZVERSION a varivel msg, ento envia msg ao
cliente;
InterSystems do Brasil
53
Cach ZEN
InterSystems do Brasil
54
Cach ZEN
InterSystems do Brasil
55
Cach ZEN
Tabelas Zen
As tabelas Zen recebem um resultset retornado por uma query SQL e apresenta os dados como
uma tabela HTML.
H vrias formas para gerar um resultset para uma tabela Zen. Voc pode especificar um
comando SQL, fazer referncia a uma query SQL pr-definida, ou fornecer ao Zen informaes
necessrias para que o comando SQL seja gerado automaticamente.
Uma vez que os dados so recuperados, possvel aplicar na tabela diversas opes de estilo e
funcionalidade.
Para colocar uma tabela em uma pgina Zen, deve-se inserir um componente <tablePane>
dentro do bloco XData Contents na classe da pgina.
<tablePane> - Desenha uma tabela HTML baseado em uma query SQL. Cada linha do resultset
uma linha da tabela. Ela pode conter os seguintes elementos:
<condition> determina uma condio para aplicar um determinado estilo para a linha ou
clula da tabela. Ex.: se o valor da coluna Mdia for menor que 7 deve-se usar a cor
vermelha para o cor de fundo da linha.
InterSystems do Brasil
56
Cach ZEN
O elemento <tablePane> usa umas das seguintes origens dos dados para a tabela:
1. Especificando um comando SQL;
2. Fornecendo uma simples descrio que o Zen usa para gerar o comando SQL;
3. Referenciando uma query de classe que gera o comando SQL;
4. Referenciando um mtodo callback que gera o comando SQL;
Um <tablePane> pode fornecer um comando SQL completo como valor do atributo sql. Zen ento
executa este comando SQL para obter o contedo da tabela.
Exemplo:
<tablePane id="tabela" sql="SELECT ID,Nome FROM
MinhaApl.Funcionarios WHERE Nome %STARTSWITH ? ORDER
BY Nome"/>
tableName o nome da tabela SQL que fornece os dados. Este o valor usado
na clusula From.
Exemplo:
<tablePane id="tabela"
tableName="MinhaApl.Funcionarios">
<column colName="ID" hidden="true" />
<column colName="Nome" />
</tablePane>
InterSystems do Brasil
57
Cach ZEN
Um <tablePane> pode fazer referncia a queries j existentes em uma classe para obter
o objeto %ResultSet. Os seguintes atributos suportam esta tcnica:
Exemplo:
<tablePane id="tabela"
queryClass = "MinhaApl.Funcionarios"
queryName = "ListaFuncionarios" />
Um <tablePane> pode gerar uma tabela usando um objeto %ResultSet definido pela
aplicao. Os seguintes atributos suportam esta tcnica:
Exemplo:
<tablePane id="tabela" OnCreateResultSet="CriaRS"/>
58
Cach ZEN
Parmetros da Query
Ao trabalhar com queries SQL para gerar tabelas Zen, muitas vezes necessrio fornecer
valores para parmetros de entrada da query, definidos pelo caracter ?. Para isso, deve-se
usar o elemento <parameter> dentro do elemento <tablePane>.
Exemplo:
<tablePane id="tabela"
queryClass = "MinhaApl.Funcionarios"
queryName = "ListaFuncionarios">
<parameter value="Vendas"/>
<parameter value="Curitiba"/>
</tablePane>
Colunas da Tabela
Um <tablePane> pode tambm conter um ou mais elementos <column>, que servem para
identificar quais colunas do resultset devem ser apresentadas na tabela.
Exemplo:
<tablePane id="tabela"
tableName="MinhaApl.Funcionarios">
<column colName="ID" />
<column colName="Nome"/>
<column colName="Funcao" style="color: blue;"/>
</tablePane>
InterSystems do Brasil
59
Cach ZEN
O elemento <column> possui vrios atributos que podem ser utilizados para controlar layout,
estilo e comportamento. A lista completa encontra-se na documentao.
hidden: se o valor for igual a true, ento esta coluna no apresentada. O valor default
false;
style: valor do estilo CSS a ser aplicado nas clulas dentro da coluna. Ex.: color: red;
Configure um estilo para a coluna Sexo, fazendo com que o texto desta coluna seja apresentado
em vermelho(style=color: red).
Estilo da Tabela
showRowNumber: se o valor for igual a true, ento mostra uma coluna no lado
esquerdo da tabela com o nmero da linha;
showZebra: se o valor for igual a true, ento apresenta as linhas da tabela alternando
entre uma linha clara e outra escura.
InterSystems do Brasil
60
Cach ZEN
Cada elemento <condition> uma expresso simples, baseada nos valores de uma determinada
linha, que controla o estilo da linha ou de uma clula individual.
<tablePane id="tabela"
sql="SELECT Nome,Salario FROM MinhaApl.Funcionarios">
<condition colName="Nome"
predicate="STARTSWITH"
value="A"
rowStyle="background: plum;"/>
</tablePane>
No exemplo anterior, as linhas em que o valor do Nome inicia com a letra A ser apresentada
com a cor de fundo plum;
cellStyle: estilo CSS a ser aplicado nas clulas dentro de colunas-alvo, para linhas em que a
CONTAINS: Verdadeiro se o valor na coluna identificada por colName contm (como uma
substring) o valor especificado por value;
InterSystems do Brasil
61
Cach ZEN
Modo Snapshot
Um <tablePane> pode operar em modo snapshot. Neste modo, Zen executa a query da tabela
uma vez e copia estes resultados para um local temporrio no servidor.
Este modo especialmente til ao trabalhar com tabelas multi-pginas, ou com tabelas que o
usurio pode escolher a ordem dos dados.
Atributos:
useSnapshot: quando for igual a true ativado o modo snapshot. O valor padro
false.
pageSize: para tabelas em modo snapshot, este atributo identifica que para apresentar
os dados em vrias pginas, e qual o tamanho da pgina (quantos registros apresentar
em cada vez). 0 (zero), o padro, significa que para apresentar todos os dados na
primeira pgina.
Exemplo:
<tablePane id="tabela"
sql="SELECT Nome,Salario FROM Pac.Classe"
useSnapshot="true"
pageSize="25" />
InterSystems do Brasil
62
Cach ZEN
Filtrando Colunas
Uma tabela Zen pode criar filtros a serem apresentados acima do cabealho de qualquer
coluna. Um filtro um campo de entrada onde o usurio pode informar um ou mais critrios de
pesquisa.
Os filtros trabalham apenas com tabelas que usam um comando SQL gerado automaticamente
ou um mtodo callback OnCreateResultSet.
O elemento <column> possui diversos atributos para trabalhar com filtros, entre eles:
filterType: Indica que a coluna deve apresentar o filtro e qual tipo de filtro usado. Os
valores possveis so: "", "text", "range", "date", "datetime", "enum", "query", ou "custom".
filterEnum: Se filterType for igual a Enum, este atributo define um conjunto de valores
possveis a usar no filtro. Ex.: vermelho,verde,azul.
filterOp: Operador SQL a avaliar o filtro. Os valores possveis so: "", "%STARTSWITH",
"=", ">=", "<=", "<>", ">", "<", "[","BETWEEN", "IN", ou "%CONTAINS".
filterQuery: Se filterType for igual a query, este atributo define o comando SQL usado
para popular a combo box.
Exemplo:
<tablePane id="tabela" useSnapshot="true"
tableName="MinhaApl.Funcionarios">
<column colName="ID" hidden="true"/>
<column colName="Nome" filterType="text" />
<column colName="Departamento"
filterType="enum"
filterEnum="Vendas,RH,Produo"
filterOp="=" />
</tablePane>
InterSystems do Brasil
63
Cach ZEN
Links em Colunas
Colunas em tabelas Zen podem apresentar links, como por exemplo links que acessam outra
pgina para editar os dados do objeto mostrado na linha atual.
Este link pode ser mostrado tanto em uma coluna que contm um dado, como em uma coluna
extra na tabela.
Alguns atributos:
link: Indica que a coluna apresentada como um link, e o valor do atributo a URL a
acessar. Para invocar um mtodo JavaScript lado-cliente, inicie a URL com javascript:.
Ex.: link=javascript:zenPage.meuMetodo();
linkConfirm: Se a coluna tem um link definido, o texto deste atributo apresentado como
uma mensagem de confirmao antes de o link ser executado.
Exemplo:
<tablePane id="tabela"
sql="SELECT ID,Matricula,Nome FROM Apl.Funcionarios">
<column colName="ID" hidden="true"/>
<column colName="Matricula"
link="MinhaApl.EditFunc.cls?ID=#(%query.ID)#"
linkTitle="Ver informaes do funcionrio." />
<column
link="javascript:zenPage.inclDep('#(%query.ID)#');"
linkCaption="Incluir dependente"
linkConfirm="Deseja incluir um dependente?" />
</tablePane>
InterSystems do Brasil
64
Cach ZEN
Botes de Navegao
Para usar um dos componentes, coloque-o em qualquer lugar de uma pgina que contm um
<tablePane> e configure o atributo tablePaneId com o valor do atributo Id do elemento
<tablePane>.
Exemplo:
<tablePane id="minhaTab" tableName="Apl.Funcionarios">
<column colName="ID" hidden="true"/>
<column colName="Nome"/>
</tablePane>
<tableNavigatorBar tablePaneId="minhaTab" />
65
Cach ZEN
InterSystems do Brasil
66
Cach ZEN
InterSystems do Brasil
67
Cach ZEN
Controles Zen
Cada controle tem um valor associado a ele. A propriedade que contm o valor atual do controle
a value.
Zen valida e submete todos os valores dos controles de um formulrio, como uma unidade.
Planilhas: <dynaGrid>;
Ocultos: <hidden>.
Atributos Comuns
clientType: Indica o tipo do dado (data type) JavaScript para o valor do controle. Por
padro, um controle trata o valor como string, no entanto, para fins de validao, podem
ser usados os seguintes: string, boolean, integer e float.
dataBinding: Se este controle est associado um data controller, este atributo identifica
a propriedade que fornece o valor ao controle.
onblur: evento que disparado quando o controle perde o foco. Ex.: <button
onblur=alert(Perdeu o foco);>;
required: quando verdadeiro, o usurio deve informar um valor para este controle, caso
contrrio, a validao falhar;
InterSystems do Brasil
68
Cach ZEN
Botes
<button> e <submit>
Alm dos atributos comuns a todos os controles, os componentes <button> e <submit> tem
ainda:
<image>
Pode ser usado para apenas apresentar uma imagem, ou serve como um boto se for
especificado o atributo onclick.
Atributos:
InterSystems do Brasil
69
Cach ZEN
Textos
<textarea>
InterSystems do Brasil
70
Cach ZEN
Escolhas Simples
A nicas diferena entre <radioSet> e <radioButton> que <radioSet> tem layout mais simples.
<checkbox>
Exemplo:
InterSystems do Brasil
71
Cach ZEN
<colorPicker>
O componente <colorPicker> mostra uma linha de cores para o usurio escolher. O usurio clica
em uma cor para escolh-la;
colorList: lista de cores (valor CSS) separadas por vrgula a apresentar dentro do
controle, da esquerda para a direita. O valor padro como mostrado na imagem acima :
,black,gray,darkblue,darkred,darkgreen,blue,red,green,yellow,
orange,plum,purple,white
<radioSet>
Este controle apresenta uma lista concisa de botes radio de um conjunto de opes;
A maneira mais simples para definir um <radioSet> fornecer um valueList para o usurio
escolher. possvel informar valores correspondentes ao valueList para o usurio visualizar
atravs do displayList.
Exemplo:
possvel tambm indicar uma fonte de dados para as opes dos botes atravs de queries
SQL.
InterSystems do Brasil
72
Cach ZEN
Quando usada esta tcnica, as colunas retornadas pela query determinam o que mostrado
no <radioSet>.
Se o %ResultSet tem apenas uma coluna, o contedo desta coluna usado tanto para o
valor lgico (valueList) quanto para o apresentado (displayList).
Se o %ResultSet tem duas (ou mais) colunas, o contedo da primeira coluna fornece o
valor lgico (valueList) e o da segunda coluna fornece o valor a ser apresentado
(displayList);
queryClass: Opcional, o nome da classe que contm a query. Deve-se informar tambm
o atributo queryName.
Exemplo:
InterSystems do Brasil
73
Cach ZEN
<radioButton>
name: (no id) estabelece a associao entre os botes radio. criado um conjunto de
botes associados informando o mesmo nome (name) para todos os botes;
Exemplo:
Listas
<listBox> define uma caixa de lista com opes fixas para o usurio escolher.
InterSystems do Brasil
74
Cach ZEN
<select>
Este elemento produz uma lista de opes (combobox) onde o usurio pode escolher um item.
A maneira mais simples para definir um <select> fornecer um valueList para o usurio
escolher. possvel informar valores correspondentes ao valueList para o usurio visualizar
atravs do displayList.
Exemplo:
possvel tambm indicar uma fonte de dados para as opes atravs de queries SQL.
Quando usada esta tcnica, as colunas retornadas pela query determinam o que mostrado
no <select>.
Se o %ResultSet tem apenas uma coluna, o contedo desta coluna usado tanto para o
valor lgico quanto para o apresentado.
Se o %ResultSet tem duas (ou mais) colunas, o contedo da primeira coluna fornece o
valor lgico (valueList) e o da segunda coluna fornece o valor a ser apresentado
(displayList);
queryClass: Opcional, o nome da classe que contm a query. Deve-se informar tambm
o atributo queryName.
Exemplo:
InterSystems do Brasil
75
Cach ZEN
<listBox>
O controle Zen <listBox> apresenta uma caixa de lista, cujas opes podem ser formatadas
individualmente.
Exemplo:
InterSystems do Brasil
76
Cach ZEN
<dataListBox>
um tipo especializado de <listBox> que apresenta ao usurio uma lista de opes obtidas
atravs de uma query SQL.
Para fornecer os dados a um <dataListBox> so utilizados os mesmos recursos das tabelas Zen,
ou seja, possvel:
Exemplo:
InterSystems do Brasil
77
Cach ZEN
<comboBox>
<option> mais flexvel do que valueList e displayList porque ele permite a aplicao de
estilos CSS para cada item da lista.
Exemplo:
image indica que ser apresentada uma imagem para o usurio clicar;
InterSystems do Brasil
78
Cach ZEN
editable: se verdadeiro, o usurio pode editar um valor dentro da caixa de entrada, como
se fosse um campo de texto.
InterSystems do Brasil
79
Cach ZEN
<dataCombo>
um tipo especializado de <combobox> que apresenta ao usurio uma lista de opes obtidas
atravs de uma query SQL.
Se o %ResultSet, tem apenas uma coluna, o contedo desta coluna usado tanto para
o valor lgico quanto para o valor a ser apresentado.
Se tiver duas (ou mais) colunas, a primeira coluna fornece o valor lgico e as demais
colunas fornecem os valores a apresentar. Atravs dos atributos valueColumn e
choiceColumn possvel alterar essas colunas.
Para fornecer os dados a um <dataCombo> so utilizados os mesmos recursos das tabelas Zen,
ou seja, possvel:
Exemplo:
InterSystems do Brasil
80
Cach ZEN
Exemplo:
A query definida pelo sql chamada sempre que a lista dropdown apresentada. Ela
fornece um conjunto de valores lgicos (ID) e de apresentao (Nome). O parmetro ?
recebe o valor do campo texto do <dataCombo>; o valor de searchKeyLen indica que os
primeiros 10 caracteres sero usados nesta busca.
InterSystems do Brasil
81
Cach ZEN
Calendrios
<calendar>
Componente que apresenta um calendrio navegvel por ms, onde o usurio pode visualizar e
selecionar uma data.
dayList: lista separada por vrgula das abreviaes dos dias a apresentar no incio do
calendrio. O valor padro : $$$Text(S,M,T,W,T,F,S);
monthList: lista separada por vrgula dos nomes dos meses. Ex.:
$$$Text(Jan,Fev,Mar,..).
InterSystems do Brasil
82
Cach ZEN
<dateText>
O controle <dateText> essencialmente uma combo box. Apresenta uma caixa de texto e um
boto, que quando pressionado, mostra um calendrio popup.
Este controle tambm faz a converso do valor digitado pelo usurio para o formato data ou
mostra uma mensagem de data invlida.
Pode-se configurar nos parmetros format como DMY e separator como / para as datas no
formato europeu.
Atributos:
separator: /,.,-
Exemplo:
InterSystems do Brasil
83
Cach ZEN
Planilhas
O controle <dynaGrid> mostra um grid editvel, em duas ou trs dimenses, semelhante a uma
planilha.
dataSet um objeto especial que contm dados usados para definir uma, duas ou trs
dimenses de dados.
O <dynaGrid> cria automaticamente um objeto dataSet com duas dimenses, com o nmero de
linhas (dimenso 1) e colunas (dimenso 2) especificados pelo nmero de entradas <gridRow> e
<gridColumn> dentro da definio do <dynaGrid>.
InterSystems do Brasil
84
Cach ZEN
Uma aplicao pode alterar o tamanho e contedo do objeto dataSet inicial atravs da definio
de um mtodo callBack.
Onde:
InterSystems do Brasil
85
Cach ZEN
Quando o mtodo callback altera o objeto dataSet para conter 3 dimenses, isso d ao
<dynaGrid> a habilidade para movimentar entre pginas de dados.
Cada pgina apresentada como um grid de duas dimenses que representa a pgina atual que
est sendo visualizada.
InterSystems do Brasil
86
Cach ZEN
Campos Ocultos
Est presente em um formulrio, e tem um valor (value) associado, mas nunca visvel ao
usurio.
InterSystems do Brasil
87
Cach ZEN
88
Cach ZEN
InterSystems do Brasil
89
Cach ZEN
InterSystems do Brasil
90
Cach ZEN
InterSystems do Brasil
91
Cach ZEN
Formulrios Zen
<form> um grupo Zen que contem uma lista especfica de componentes. Estes
componentes podem ou no estar ligados a um data controller. O layout inteiramente
determinado pela definio do <form> no XData Contents;
InterSystems do Brasil
92
Cach ZEN
A interao bsica entre o usurio de uma aplicao Zen e um formulrio Zen a seguinte:
1. O usurio interage com os controles no formulrio;
2. Zen pode validar os dados no momento que so informados;
3. Uma ao do usurio indica que para submeter o formulrio;
4. Zen pode validar os dados antes de tentar submeter o formulrio;
5. Zen interage com o usurio para tratar qualquer erro encontrado;
6. Quando estiver tudo certo, Zen submete os dados do formulrio;
7. Ento pode ocorrer:
Definindo um Formulrio
InterSystems do Brasil
93
Cach ZEN
Um formulrio pode inicialmente mostrar os campos em branco, ou voc pode fornecer os dados
para os campos.
Fornecer dados para um campo significa atribuir um valor para a propriedade value do controle.
<text value=ol/>
Do ..%SetValueById(Nome,$G(^formTeste(Nome)))
Exemplo:
InterSystems do Brasil
94
Cach ZEN
Validando um Formulrio
Todo formulrio Zen tem um mtodo validate, que valida os valores dos controles do formulrio.
Como o mtodo validate testa cada controle, um array de controles invlidos criado;
InterSystems do Brasil
95
Cach ZEN
Submetendo um Formulrio
A requisio para submeter o contedo de um formulrio pode ser disparada das seguintes
maneiras:
O mtodo %OnSubmit recebe todos os valores submetidos. Zen automaticamente trata todos os
detalhes da operao submit, incluindo chamadas a mtodos no servidor, e processamento de
erros.
Exemplo:
InterSystems do Brasil
96
Cach ZEN
InterSystems do Brasil
97
Cach ZEN
Por padro, dependendo das configuraes de segurana do Cach, quando um usurio inicia
uma aplicao Zen, uma janela, padro do Cach, solicitando usurio e senha apresentado.
No bloco XData Contents, inserir um formulrio com controles para usurio e senha. O
atributo name dos controles devem respeitar o exemplo:
<page>
<form>
<text name="CacheUserName" />
<password name="CachePassword" />
<submit caption="OK" />
</form>
</page>
Administrao de Segurana
Aplicaes
CSP.
No campo Pgina de Login informe o caminho e nome da classe da pgina Zen. Ex.:
/csp/MinhaApl/MinhaPagLogin.cls
Clique em Salvar.
InterSystems do Brasil
98
Cach ZEN
Else {
If rs.GetData(1) '= vpass
{
Do pSubmit.%SetError("formlogin","Invalid Password")
}
Else {
Set UserId = 1
Do %session.Set("UsuarioId",UserId)
Do %session.Set(NomeUsuario",vuser)
Set pSubmit.%NextPage = ..Link("ISCUser.Pag.Menu.cls")
}
}
Quit $$$OK
InterSystems do Brasil
99
Cach ZEN
3. Insira um formulrio (<form>) fazendo com que todos os controles da pgina sejam filhos dele.
4. Altere o boto Salvar para o tipo Submit.
5. Altere a caixa de texto Nome do Cliente para que o seu preenchimento seja obrigatrio.
6. Configure o campo Nome do Cliente para apresentar a seguinte mensagem em caso de no
preenchimento: Informe o Nome do Paciente..
7. Configure o formulrio para que em casos de erros na validao seja apresentada a seguinte
mensagem: Falha na Validao da Pgina..
8. Teste a pgina informando e no informando um valor para o campo Nome do Cliente.
Formulrios Dinmicos
A lista de controles pode ser determinada pelas propriedades de um data controller associado,
ou por um mtodo callback.
InterSystems do Brasil
100
Cach ZEN
InterSystems do Brasil
101
Cach ZEN
Mdulo - MVC
Mdulo - MVC
InterSystems do Brasil
102
Cach ZEN
InterSystems do Brasil
103
Cach ZEN
Modelo-Viso-Controle (MVC)
Para simplificar o fluxo de dados entre a origem dos dados e a pgina Zen, so fornecidos um
Arquitetura
InterSystems do Brasil
104
Cach ZEN
E valida os valores.
InterSystems do Brasil
105
Cach ZEN
<dynaGrid>
Todos os formulrios;
Todos os grficos;
Todos os medidores.
Criando um Formulrio
As sequncias mostram um exemplo simples de como usar o MVC para criar um formulrio.
Suponha um objeto persistente chamado Dados.Cliente que contm registros de clientes. Este
objeto pode ter dezenas de propriedades. No entanto, ns queremos criar uma pgina simples
que apenas apresente as informaes demogrficas, neste caso o nome e a cidade do cliente.
Primeiro, definimos uma classe de modelo de dados (ModeloCliente) que saiba como
carregar e armazenar as propriedades do objeto Cliente:
InterSystems do Brasil
106
Cach ZEN
Suponha que j temos criado uma classe de pgina Zen. Agora inserimos um
componente data controller na pgina Zen adicionando um elemento <dataController>
no bloco XData Contents.
Onde:
Para isso deve-se configurar a propriedade controllerId do <form> para ser igual a
propriedade id do <dataController>.
InterSystems do Brasil
107
Cach ZEN
Exemplo:
Cada controle <text> est agora conectado a uma propriedade da classe de modelo de dados.
Passo 4: Resultado
O atributo dataBinding de cada controle identifica qual propriedade fornece o valor para
cada controle.
Um dataController pode ser compartilhado entre vrios componentes. Por exemplo, o mesmo
dataController pode fornecer dados para um formulrio, um grfico e um medidor em uma
pgina Zen.
InterSystems do Brasil
108
Cach ZEN
Formulrios Dinmicos
Este simples cdigo cria automaticamente todos os controles necessrios para a entrada de dados
de todas as propriedades contidas na classe de modelo de dados (Apl.Cliente).
O tipo do controle (textbox, checkbox, ...) criado determinado pelo tipo de dado (data type) de
cada propriedade.
Onde:
Como resultado do simples cdigo apresentado anteriormente, temos a seguinte pgina Web.
InterSystems do Brasil
109
Cach ZEN
Ao invs de aguardar pela validao no servidor, possvel adicionar validao no lado cliente.
Para isso deve-se definir o mtodo IsValidJS de uma propriedade especfica na classe de
modelo de dados.
O cdigo abaixo um mtodo de classe, JavaScript, que usa a conveno de nome
InterSystems do Brasil
110
Cach ZEN
dataBinding adaptvel apenas aos componentes que mostram apenas um valor, como
medidores e controles
onnotifyView: expresso JavaScript lado cliente que executada cada vez que o
dataController associado com o visualizador de dados executa um evento.
InterSystems do Brasil
111
Cach ZEN
Como dito anteriormente, h duas maneiras para trabalhar com classes de modelos de dados:
InterSystems do Brasil
112
Cach ZEN
InterSystems do Brasil
113
Cach ZEN
Exerccios MVC
3. Sobrescreva o mtodo %OnNewSource, que cria uma nova instncia do objeto Paciente.
InterSystems do Brasil
114
Cach ZEN
5. Crie o mtodo %OnLoadModel, que traz para a classe de modelo de dados os valores das
propriedades do objeto persistente.
7. Crie o mtodo %OnStoreModel, que atualiza a classe de dados com os valores inseridos na
classe de modelo de dados.
InterSystems do Brasil
115
Cach ZEN
10. Insira um <dataController>. Faa com que seja carregado o primeiro registro da classe
de modelo ISCUser.MVC.Paciente criada no passo anterior.
11. Insira um formulrio dinmico ligado ao <dataController> criado anteriormente. Lembrese de incluir um valor para o atributo id, ser necessrio depois.
InterSystems do Brasil
116
Cach ZEN
15. Inclua em algumas propriedades da classe de modelo de dados, parmetros para a configurao
da aparncia, usando:
ZENCONTROL, ZENLABEL, ZENTAB, ...
InterSystems do Brasil
117
Cach ZEN
InterSystems do Brasil
118
Cach ZEN
InterSystems do Brasil
119
Cach ZEN
5. Crie o parmetro.
Parameter CLASSEMODELO As %String;
6. Crie as propriedades.
Property ClasseModelo As %String [ InitialExpression = {..#CLASSEMODELO} ];
Property ModelId As %String(ZENURL = "ModelId");
7. Altere o id do controller para id = controller e o id do form para id = form.
8. Copie os mtodos de instncia da classe de pgina Paciente.cls para a Pagina.cls.
9. Faa alteraes nos mtodos:
1. Altere zenPage.getComponentById('orgPaciente'); para
zenPage.getComponentById('controller');
2. Altere zenPage.getComponentById('frmPaciente'); para
zenPage.getComponentById('form');
InterSystems do Brasil
120
Cach ZEN
121
Cach ZEN
8. Em PesquisaItens.cls', para facilitar a pesquisa pode-se filtrar os itens por exames, adicione na
classe:
Property ExameId As %String (ZENURL = exame");
Receberemos como parmetro de url o id do exame e usaremos como filtro para a query na
pesquisa.
InterSystems do Brasil
122
Cach ZEN
InterSystems do Brasil
123
Cach ZEN
124
Cach ZEN
controller.setDataByName('Exame',zenPage.ExameId);
// informa a tela para atualizar...
zenPage.getComponentById('form.Exame').setValue(zenPage.ExameId);
zenPage.getComponentById('form.Exame').setProperty('disabled',"true");
}
Confia as mudanas. Veja que o campo ficou protegido.
20. Sobrescreva o mtodo 'onloadHandler e chame o mtodo atualiza():
zenPage.atualiza (); dentro de 'onloadHandler;
21. Para filtrar os itens, para a pesquisa de itens, passe o id como parmetro de url na pgina onde
a pesquisa chamada:
1. Abra a classe ExamesItem.cls e modifique o link para 'javascript: zenPage.pesquisa ();
2. Adicione um caption.
3. No mtodo pesquisa () altere o link para a chamada de itens. Passe o id do exame.
4. Teste.
InterSystems do Brasil
125
Cach ZEN
InterSystems do Brasil
126
Cach ZEN
InterSystems do Brasil
127
Cach ZEN
InterSystems do Brasil
128
Cach ZEN
InterSystems do Brasil
129
Cach ZEN
Relatrios Zen
Zen fornece um framework extensvel para a criao de relatrios no formato XHTML ou PDF.
A criao de um relatrio exige 3 passos:
1. O desenvolvedor cria uma classe de relatrio Zen e, dentro dela, fornece dois blocos
XML:
2.
3.
InterSystems do Brasil
130
Cach ZEN
XData ReportDefinition
O bloco XData ReportDefinition especifica os dados a apresentar no relatrio.
Tambm descreve como formatar estes dados em XML.
Pode conter referncias a seguinte varivel:
Contem 0 ou 1:
<group> - agrupa itens para que operaes possam ser executadas em grupo.
possvel omitir ou sobrescrever o bloco XData ReportDefinition se for fornecido um valor vlido
para o parmetro de classe DATASOURCE.
Se for fornecido o parmetro de classe e o bloco XML, o valor do parmetro ter preferncia.
<report>
O elemento <report> o container de nvel mais alto dentro do bloco XData ReportDefinition.
Um <report> pode conter vrios elementos <element>, <attribute> e <aggregate> em qualquer
ordem.
Um <report> pode conter um <group>. Cada <group> pode conter um outro <group>.
<report> requer um atributo name e alguma combinao de atributos de query.
InterSystems do Brasil
131
Cach ZEN
<element>
O elemento <element> vlido dentro de um <group> ou <report>.
Cada <element> adiciona um elemento XML no documento XML.
Tem os seguintes atributos:
expression: Opcional. Pode ser usado para processar o valor de field antes de ger-lo. A
linguagem da expresso deve ser COS. Dentro da expresso, a varivel %val
representa o valor de field. O atributo expression pode ser usado sem o atributo field
para retornar um dado esttico como a data do relatrio. Ex.:
<element name=dataAtual expression=$ZDate($Horolog,3) />
name: gera um elemento XML deste nome na sada. Uma entrada como esta:
<element name=meuMes field=mes />
Produz um elemento XML assim:
<meuMes>Julho</meuMes>
<attribute>
<aggregate>
O elemento <aggregate> pode aparecer dentro de um <group> ou <report>.
<aggregate> executa clculos sobre todos os registros do resultset retornado pela query do
<report>.
Tem os seguintes atributos:
type: especifica o tipo de clculo a executar. Os valores possveis so: SUM, COUNT,
AVG, MAX, MIN, CLASS, CUSTOM.
class: se o type for igual a CLASS, deve especificar o nome do pacote e da classe que
deriva de %ZEN.Report.CustomAggregate.
method: se o type for igual a CUSTOM, deve especificar um nome de mtodo ladoservidor da classe do relatrio Zen.
InterSystems do Brasil
132
Cach ZEN
<group>
O elemento <group> indica que o Zen deveria executar o mesmo conjunto de operaes em todos
os registros do resultset compatveis com um critrio especificado.
Se o <group> no especifica nenhum critrio, Zen executa as operaes do <group> em cada
registro do resultset.
Os elementos contidos dentro do <group> especificam o que fazer.
Um <report> pode conter um <group>. E cada <group> pode conter outro <group>.
Apenas um <group> deve existir em cada nvel.
Atributos dos elementos <group> e <report>:
name: o elemento <group> gera um elemento XML com este nome no arquivo de sada
XML.
InterSystems do Brasil
133
Cach ZEN
Um <group> ou <report> pode especificar uma query. A seguir relao de atributos que suportam
query.
queryClass: Opcional. Nome da classe que contm uma query. O atributo queryName
deve ser tambm fornecido.
queryName: Opcional. Nome da query da classe que fornece o %ResultSet para lista
<select>. O atributo queryClass deve ser tambm fornecido.
Exerccios Relatrios
1. Crie uma nova pgina de relatrio Zen com:
1. Pacote: ISCUser.Rel
2. Nome da classe: Paciente
3. Nome do relatrio: Paciente
2. O wizard solicitar que voc informe uma query que suprir os dados para o relatrio, digite :
Select ID,Nome,Cidade,Estado,Sexo,Adulto,Prioridade->Descricao as Prioridade
From ISCUser_Dados.Paciente
Order By Prioridade,Nome
3. O wizard criar e apresentar uma classe de relatrio Zen com alguns parmetros e os blocos
XData ReportDefinition e XData ReportDisplay.
134
Cach ZEN
9. Adicione dentro de <group> mais um elemento <group> e mais elementos <element> no bloco
XData ReportDefinition.
<group name="Paciente" breakOnField="ID">
<element name="Cidade" field="Cidade"/>
<element name=Estado" field=Estado"/>
<element name="Sexo" field="Sexo"/>
<element name="Adulto" field="Adulto"/>
<attribute name=Nome" field=Nome"/>
</group>
InterSystems do Brasil
135
Cach ZEN
XData ReportDisplay
O bloco XData ReportDisplay responsvel pela especificao da apresentao dos dados
obtidos pelo bloco XData ReportDefinition.
Os estilos no bloco XData so independentes do formato de sada.
Um relatrio pode ser chamado/iniciado a partir do browser ou da linha de comando de um
Terminal.
O relatrio pode gerar a sua sada nos formatos XHTML e PDF.
Layout Grfico;
Estilo e Aparncia;
possvel omitir o bloco XData ReportDisplay completamente, desde que seja informado uma
valor vlido para os parmetros de classe HTMLSTYLESHEET e XSLFOSTYLESHEET.
tambm possvel omitir o XData ReportDisplay se quiser usar a classe de relatrio Zen para
apenas gerar arquivos de dados XML.
<report>
<document> (0 ou 1)
<pageheader> (0 ou 1)
<pagefooter> (0 ou 1)
<body> (1).
136
Cach ZEN
name: o nome do relatrio, que deve ser compatvel com o nome do relatrio no bloco
XData ReportDefition.
title: o ttulo do relatrio, usado por itens como o nome do arquivo PDF ou ttulo da
pgina XHTML.
<document>
O elemento <document> aplicado principalmente para sada PDF.
Especifica caractersticas de layout fsica como dimenses de pginas e margens.
Pode conter vrios elementos <class>, <xslinclude> e <cssinclude> para personalizar o estilo.
Se for omitido, mesmo se for gerar um PDF, caractersticas de layout padro so aplicados, como
tamanho de pgina de 8.5x11 polegadas.
O elemento <document> tem os seguintes atributos:
InterSystems do Brasil
137
Cach ZEN
O elemento <cssinclude> referencia um arquivo de estilos CSS externo e a ser aplicado em sadas
XHTML.
O elemento <xslinclude> referencia um arquivo de estilos CSS externo a ser aplicado em sadas
PDF.
Exemplo: para importar a classe th.minhaTabela de arquivos externos, o elemento <document>
deveria conter:
E meuEstilo.xsl contendo:
<pageheader>
O elemento <pageheader> contm o cabealho do relatrio. Se presente no <report>, deve estar
antes do elemento <body>.
Pode conter os mesmos elementos de layout e aparncia descritos em <body>, mas todo o seu
contedo apresentado no espao em branco fornecido pelo atributo headerHeight do elemento
<report>.
Relatrios XHTML no suportam o cabealho pgina-a-pgina, ento o cabealho apresentado
apenas no incio do relatrio.
InterSystems do Brasil
138
Cach ZEN
<pagefooter>
O elemento <pagefooter> contm o rodap do relatrio. Se presente no <report>, deve estar antes
do elemento <body>.
O rodap no apresentado em relatrios XHTML.
<body>
Deve estar localizado obrigatoriamente dentro de <report>.
No tem atributos, mas contm a maior parte das informaes do relatrio.
Contm elementos que controlam:
Layout grfico;
Estilo e aparncia.
InterSystems do Brasil
139
Cach ZEN
<img> - imagem;
<table> - tabela
class: classe de estilo CSS a ser aplicado ao elemento. Classes de estilo so definidos
por elementos <class>.
Exemplo: <table class=minhaTabela ...>
<block>
O elemento <block> desenha todos os seus elementos-filhos sequencialmente.
Pode ser usado em qualquer lugar no <report> como um tipo de elemento de expanso, mas
mais til como um container dentro do <table>.
Em geral, o <table> trata cada elemento-filho como uma nova linha e coluna, ento o elemento
<block> pode ser usado para agrupar vrios elementos em uma nica linha ou coluna.
InterSystems do Brasil
140
Cach ZEN
<group>
Permite o relatrio Zen apresentar dados estruturados hierarquicamente, que tpico de XML.
Alm dos atributos comuns, ainda contm:
line: especifica a densidade da linha a ser desenhada entre cada iterao do <group>.
Se o valor for 0, a linha no criada.
name: apresenta o contedo dos dados XML cujo nome compatvel com este atributo.
Ento, se os dados XML contm elementos <Clientes>, o bloco XData ReportDisplay
deveria conter: <group name=Clientes> ... </group>
Pode haver outro <group> dentro de um <group>. Ex.:
<group name=Clientes> <group name=Vendas> ... </group></group>
<header> e <footer>
Os elementos <header> e <footer> so simples containers que identificam os elementos a serem
apresentados no cabealho e rodap da pgina.
<img>
Insere uma imagem no relatrio.
Alm dos atributos comuns, ainda possui:
src: URI da origem da imagem. Se o atributo src iniciar com um ponto de exclamao,
ele interpretado como uma expresso XPath. Isto permite a voc criar URIs
dinamicamente dentro de dados XML, e ento usar estas URIs customizadas como
origem da imagem.
InterSystems do Brasil
141
Cach ZEN
<item>
O elemento <item> mostra um valor literal ou um valor a partir de XML no relatrio.
Deve ter UM dos seus atributos value, field ou special especificado.
Alm dos atributos comuns, ainda possui:
field: apresenta o valor de um campo XML. field geralmente usado com expresses
XPath, ento se voc tem o dado:
<Vendas id=1><cliente>ABC Systems</cliente></Vendas>
Para obter o valor o atributo id voc precisa da expresso XPath: field=@id.
Entretanto para obter o valor do elemento <cliente> voc precisa da expresso XPath:
field=cliente.
O atributo field interpretado com relao ao atual <group> compatvel. Para um <item>
dentro de <group name=Vendas>, apenas atributos de <Vendas> e seus filhos so
disponveis.
As referncias ao contador de total de pginas podem ser lentas em extensos relatrios PDF.
formatNumber: String que especifica o formato de nmero a usar. Esta string usa as
mesmas convenes como a funo XSLT format-number. Ex.: ###.# representa um
nmero de 3 dgitos com 1 casa decimal.
InterSystems do Brasil
142
Cach ZEN
<line>
Insere uma linha no relatrio. Pode ser tanto uma linha horizontal visvel como apenas um espao
horizontal.
align: alinhamento dentro da pgina do relatrio. Possveis valores so: left, right, e
center.
color: cor da linha no formato CSS. Aplica-se apenas linhas do tipo solid ou dashed.
<list>
Usado para apresentar uma lista (numerada/ordenada) em um relatrio Zen.
O atributo style aplica-se aos marcadores ou nmeros.
Alm dos atributos comuns, possui ainda:
group: Obrigatrio. Identifica o grupo que fornece os valores para a lista. Deve ser
compatvel com algum grupo definido no bloco XData ReportDefinition.
startvalue: o valor do primeiro item da lista. Seu valor sempre especificado como um
valor inteiro.
type: o estilo do marcador ou numerao a usar na lista. Possveis valores so: none,
circle, square, disc, 1, A, a, I, i. Relatrios PDF no suportam square ou
circle.
InterSystems do Brasil
143
Cach ZEN
<p> e <pagebreak>
<p> cria um bloco de contedo esttico.
Trata seu contedo como texto puro e usa a opo p para a classe de estilo.
<pagebreak> insere uma quebra de pgina em relatrios PDF.
Insere uma linha tracejada em relatrios XHTML apresentados em tela, e quebra a pgina quando
o relatrio XHTML impresso.
<table>
Cria uma tabela no relatrio. Alm dos atributos comuns, ainda possui:
orient: cada elemento contido dentro da tabela tratado ou como uma linha ou como
uma coluna, dependendo do valor deste atributo. Os valores possveis so col e row.
group: uma tabela pode ser usada para mostrar um grupo de dados. Se este atributo
especificado, a tabela mostra uma linha ou coluna na tabela para cada item no grupo.
altcolor: valor CSS que especifica a cor de fundo para linhas alternadas (2,4,6,..).
apenas possvel quando orient col e group definido.
InterSystems do Brasil
144
Cach ZEN
10. Continuando com a classe de relatrio criada no incio deste mdulo, iremos especificar como
apresentar os dados gerados na primeira parte do exerccio em XHTML ou PDF.
11. Um relatrio bsico consiste de um <body> e elementos de apresentao. Adicione <body> e
<p> no bloco XData ReportDisplay:
InterSystems do Brasil
145
Cach ZEN
15. Faa as modificaes necessrias no bloco XData ReportDisplay como apresentado abaixo:
<line pattern="empty"/>
<table orient="col" group=Paciente" altcolor="#FFDFDF" width="3.8in">
<item field=Nome" ><caption value=Nome:"/></item>
<item field=Cidade" ><caption value="Cidade:"/></item>
<item field=Estado" ><caption value=Estado:"/></item>
<item field=Sexo" ><caption value=Sexo:"/></item>
<item field=Adulto" ><caption value="Adulto:"/></item>
</table>
</group>
</body>
</report>
InterSystems do Brasil
146
Cach ZEN
seriesColors: lista de valores CSS de cores separadas por vrgula usada para as sries
de dados.
seriesNames: lista de nomes separados por vrgula usado como ttulo para cada srie de
dados na caixa de legenda.
16. O seguinte cdigo insere um grfico no seu relatrio. Adicione o cdigo ente </p> e <group>:
<barChart width="4in" height="3in" title=Pacientes por Prioridade"
dataFields="!qt" dataGroup=Prioridade">
</barChart>
Onde:
dataGroup=Prioridade uma referncia ao elemento categoria no XML gerado.
dataFields=!qt a sintaxe que referencia o elemento <qt> no grfico.
InterSystems do Brasil
147
Cach ZEN
Onde:
0 XML
1 XHTML
2 PDF
3 HTML (depurao)
4 XSLFO (depurao)
InterSystems do Brasil
148
Cach ZEN
2. Crie uma pgina pr relatrio onde ir informar as datas a serem usadas como filtro no
relatrio. Salve como ISCUser.Pag.PreExame.cls. Esta pgina ir chamar o relatrio.
1. Adicione no 'Contents' dois componentes <dateText>.
-
InterSystems do Brasil
149
Cach ZEN
5. Formate o 'XData ReportDisplay para ter um cabealho com as dimenses das margens.
<document width="210mm" height="297mm" headerHeight="25mm
marginLeft="15mm"
6. O cabealho deve ter: data e hora um ttulo e as datas de incio e fim. Faa isso em
<pageheader> no ReportDisplay:
<pageheader>
<item field="@Hospital"/>
<line pattern="empty"/>
<item field="@Data"/>
<line pattern="empty"/>
<item field="@Titulo"/>
<line pattern="empty"/>
<item displayCaption="true" caption="Data inicial: " field="@Inicio"/>
<line pattern="empty"/>
<item displayCaption="true" caption="Data final: " field="@Fim"/>
<line pattern="empty"/>
<line pattern="dashed"/>
</pageheader>
7. Para isso voc deve ter definido a empresa, datas e ttulo. Faa isso no incio do relatrio.
Parameter HOSPITAL = "Hospital";
Parameter TITULO = "Ttulo do Relatrio";
Property DataInicial As %String(ZENURL = "datainicial");
Property DataFinal As %String(ZENURL = "datafinal");
Property Formato As %Integer(ZENURL = "format") [ InitialExpression = 4 ];
InterSystems do Brasil
150
Cach ZEN
8. E em seguida no ReportDefinition:
<attribute name="Data" expression="$ZDateTime($horolog,4)"/>
<attribute name="Hospital" expression="..Hospital"/>
<attribute name="Titulo" expression="..Titulo"/>
<attribute name=Inicio" expression="$zdate($zdateh(..DataInicial,8),..Formato)"/>
<attribute name=Fim" expression="$zdate($zdateh(..DataFinal,8),..Formato)"/>
11. Importe a classe 'EstiloRelatorio.cls' e fornea um estilo. Esta classe escreve o estilo
diretamente na pgina gerada, usando o mtodo %DrawHTMLPage.
Faa isso em <document> no XData ReportDisplay inclua o elemento:
<cssinclude href=ISCUser.Pag.EstiloRelatorio.cls"/>
12. Configure os estilos de : Hospital, Titulo, Data, Data de Inicio e Data de Fim e
a tabela de apresentao dos dados do relatrio. Faa no atributo class .
InterSystems do Brasil
151
Cach ZEN
InterSystems do Brasil
152
Cach ZEN
InterSystems do Brasil
153
Cach ZEN
Zen e SVG
SVG (Scalable Vector Graphics) uma linguagem que permite descrever grficos vetoriais em 2
dimenses em formato XML.
Zen usa SVG para apresentar com alto desempenho, grficos e medidores orientados a dados.
possvel usar componentes SVG embutidos ao Zen para definir painis de controle que
atualizam estatsticas em tempo real.
<svgFrame>
<svgGroup>
<svgSpacer>
<svgFrame>
um componente Zen que cria um quadro retangular na pgina Zen, onde possvel incluir
componentes SVG.
Qualquer componente SVG dinmico, como um medidor ou grfico, exige um <svgFrame> para
cont-lo.
InterSystems do Brasil
154
Cach ZEN
<svgGroup>
<svgGroup> um container especial que contm e controla layout de componentes SVG dentro
de um <svgFrame>.
layout: especifica como os componentes SVG dentro deste grupo devem estar
dispostos. Possveis valores so: horizontal e vertical.
<svgSpacer>
O elemento <svgSpacer> til dentro de containers <svgGroup> para criar um espao entre os
componentes.
Use <svgSpacer> com o atributo width para inserir um espao na horizontal, e com o atributo
height para inserir um espao na vertical.
InterSystems do Brasil
155
Cach ZEN
<rect>
A diferena entre <svgSpacer> e <rect> que <rect> pode ter atributos estilo de exibio, como
uma cor de preenchimento.
Atributos:
Todos os componentes SVG tem os mesmos atributos para definio de estilo. Estes atributos
so totalmente diferentes dos atributos dos componentes Zen normais.
y: posio y do componente.
InterSystems do Brasil
156
Cach ZEN
Medidores
Um medidor um componente SVG que apresenta uma representao grfica de um nico valor
numrico.
Zen fornece vrios medidores pr-construdos. Para inserir em uma pgina Zen, fornea o
elemento do medidor dentro de um <svgFrame> ou <svgGroup>:
<speedometer> - velocmetro
<trafficLight> - semforo
InterSystems do Brasil
157
Cach ZEN
Atributos de Medidores
rangeLower: valor inteiro ou decimal que define o menor valor da faixa de valores
representado pelo medidor.
rangeUpper: valor inteiro ou decimal que define o maior valor da faixa de valores
representado pelo medidor.
InterSystems do Brasil
158
Cach ZEN
Neste exerccio inclua uma tag <svg> para mostrar o valor da renda de um paciente.
1. Insira um componente <svgFrame> na classe ISCUser.Pag.Paciente aps os botes de
navegao.
2. Insira um medidor <fuelGauge> dentro do <svgFrame> conectando ao <dataController> atravs
do atributo controllerId e propriedade Renda atravs do atributo dataBinding.
3. Abaixo esto algumas configurao que podem ser usadas como referncia.
InterSystems do Brasil
159
Cach ZEN
InterSystems do Brasil
160
Cach ZEN
InterSystems do Brasil
161
Cach ZEN
Grficos Zen
Zen oferece vrios tipos de grficos como: grficos de linha, grficos de barras, grficos em
forma de pizza, etc.
Todos os grficos so criados dentro de um espao virtual que mede 100 unidades por 100
unidades. As dimenses atuais deste espao so representadas pelos atributos height e width.
Dentro deste espao virtual h uma rea menor onde o grfico apresentado. Margens
preenchem o espao ao redor do grfico. E geralmente estas margens so usadas para
apresentar textos e legendas.
InterSystems do Brasil
162
Cach ZEN
Grfico de Linhas
Um <lineChart> mostra uma ou mais sries de dados como um conjunto de linhas que cruzam
um grid.
chartStacked: til para grficos com mais de uma srie de dados. Se verdadeiro, as
linhas so empilhadas uma sobre a outra.
Grfico de Barras
Um <barChart> mostra uma ou mais sries de dados como um conjunto de barras horizontais ou
verticais.
chartStacked: til para grficos com mais de uma srie de dados. Se verdadeiro, as
barras so empilhadas uma sobre a outra.
InterSystems do Brasil
163
Cach ZEN
Todos os grficos suportam o atributo ongetData. O valor deste atributo uma expresso
JavaScript que Zen invoca quando:
Exemplo:
ongetData=return zenPage.leDados(series);
O mtodo chamado pelo ongetData deve aceitar um nico argumento, series, que contm o
nmero de sries (baseado em 0) a ser gerado pelo grfico.
O cdigo seguinte apresenta um exemplo de um mtodo que gera valores aleatrios para o
grfico.
A imagem abaixo apresenta um exemplo de um mtodo que gera valores aleatrios para o
grfico.
InterSystems do Brasil
164
Cach ZEN
Usando um <dataController>
Todos os grficos suportam os seguintes atributos, que associam um grfico uma viso de um
dataController.
InterSystems do Brasil
165
Cach ZEN
Atributos de Grficos
Layout e estilo;
rea de impresso;
Marcadores;
Legendas;
Ttulos;
InterSystems do Brasil
166
Cach ZEN
InterSystems do Brasil
167
Cach ZEN
InterSystems do Brasil
168
Cach ZEN
InterSystems do Brasil
169
Cach ZEN
InterSystems do Brasil
170
Cach ZEN
InterSystems do Brasil
171
Cach ZEN
Este mdulo agrupa os componentes disponveis de acordo com o tipo do item que cada
componente projetado a apresentar.
Links
Menus
Guias
Links
<link>
<locatorBar>
<link>
O componente <link> apresenta um simples link (um elemento HTML <a>) em uma pgina Zen.
href: URI do contedo a apresentar quando o usurio clica no texto do link. Para invocar
um mtodo JavaScript deve-se iniciar a URI com javascript:.
Exemplo: href=javascript:zenPage.meuMetodo();
title: mensagem de ajuda que aparece quando o usurio pra o mouse sobre o texto do
link.
Exerccios Links
1. Crie uma nova pgina Zen chamada Links.
2. Insira 3 links para outras pginas Zen criadas em exerccios anteriores.
InterSystems do Brasil
172
Cach ZEN
3. Insira um link que ao ser clicado mostre uma mensagem (alert) ao usurio.
<locatorBar>
Como pode-se notar a barra de localizao composta por um elemento <locatorBar> e vrios
elementos <locatorLink>, um para cada link a apresentar.
<locatorLink>
id: valor que pode ser usado para selecionar um estilo CSS.
title: mensagem de ajuda que apresentada quando o usurio pra o mouse sobre o
link.
InterSystems do Brasil
173
Cach ZEN
Exerccios Links
2. href="http://www.intersystems.com" />
InterSystems do Brasil
174
Cach ZEN
InterSystems do Brasil
175
Cach ZEN
Menus
Ao selecionar um item de menu, vrias aes podem ser disparadas, dependendo de sua
programao:
InterSystems do Brasil
176
Cach ZEN
Como pode ser observado no cdigo anterior, a criao de um menu feita atravs do elemento
<menu>.
Alguns itens de menu apresentam uma mensagem (alert) ao ser selecionados e outros acessam
uma pgina Zen diferente. Esta ao programada atravs do atributo href.
possvel criar separaes dentro dos itens do menus atravs do elemento <menuSeparator>,
isto cria uma linha horizontal dentro do menu.
<menuItem>
help: mensagem de ajuda que apresentada quando o usurio pra o mouse sobre o
item de menu.
link: URI do contedo a apresentar quando o usurio clica no texto do item do menu.
InterSystems do Brasil
177
Cach ZEN
Exerccios Menus
InterSystems do Brasil
178
Cach ZEN
Guias (tabs)
<tabGroup>
<tab>
<lookoutMenu>
<tabGroup>
InterSystems do Brasil
179
Cach ZEN
onhideTab: expresso JavaScript que invocada quando uma guia que estava sendo
apresentada trocada por outra.
onshowTab: expresso JavaScript que invocada quando o usurio seleciona uma nova
guia.
<tab>
InterSystems do Brasil
180
Cach ZEN
<lookoutMenu>
InterSystems do Brasil
181
Cach ZEN
InterSystems do Brasil
182
Cach ZEN
InterSystems do Brasil
183
Cach ZEN
InterSystems do Brasil
184
Cach ZEN
InterSystems do Brasil
185
Cach ZEN
Este mdulo descreve componentes que possuem comportamento visual dinmico, como
janelas popup, componentes com recursos para ocultar ou apresentar seu contedo, etc.
Janelas de Dilogo.
<expando>
Para criar um grupo que possa ser exibido ou ocultado, basta inserir os componentes Zen
diversos dentro do componente <expando>. Exemplo:
InterSystems do Brasil
186
Cach ZEN
<repeatingGroup>
um grupo especializado que define o layout para uma nica entrada do grupo, e ento atravs
de uma query em tempo de execuo so geradas vrias entradas com este layout.
Exemplo de utilizao:
Este cdigo cria um grupo que repetido de acordo com o atributo sql, isto , cria 10 entradas,
uma para cada registro do comando SQL.
Em cada grupo criado um boto com o nome do cliente e um texto com a cidade do cliente.
InterSystems do Brasil
187
Cach ZEN
<dynaTree>
O componente <dynaTree> mostra um conjunto de itens definidos pelo usurio como uma rvore
expansvel.
Uma global, ou
Mtodo Callback
A maneira mais simples de fornecer o contedo para um <dynaTree> especificar uma global
no atributo dataGlobal.
Para isso deve-se informar o atributo OnGetNodeInfo igual a um mtodo callback servidor.
Exemplo:
InterSystems do Brasil
188
Cach ZEN
<dynaView>
O componente <dynaView> mostra um conjunto de itens definidos pelo usurio dentro de uma
caixa.
InterSystems do Brasil
189
Cach ZEN
Onde:
InterSystems do Brasil
190
Cach ZEN
Quit $System.Status.OK()
}
InterSystems do Brasil
191
Cach ZEN
Grupos Modais
Quando o grupo modal torna-se visvel, apenas seu contedo recebe eventos do usurio.
Qualquer evento que ocorre fora do grupo modal (como um clique de mouse) automaticamente
faz com que o grupo modal fique oculto novamente.
Embutido: deve-se chamar o mtodo show do grupo modal para mostrar um grupo
embutido:
msgBox
calendar
Um boto que chama o mtodo show fazendo com que o grupo seja apresentado.
InterSystems do Brasil
192
Cach ZEN
O mtodo mgBtnClique chamado quando o usurio clica no boto OK do grupo modal. Este
mtodo l o valor que o usurio digitou, coloca este valor na pgina principal e fecha o grupo
modal atravs do mtodo endModal.
InterSystems do Brasil
193
Cach ZEN
InterSystems do Brasil
194
Cach ZEN
O mtodo btnClique, chamado quando o usurio clica no boto Salvar do grupo modal, l os
dados informados pelo usurio, escreve esses dados na pgina principal e fecha o grupo modal:
InterSystems do Brasil
195
Cach ZEN
O bloco XData Contents possui apenas um boto que ao ser pressionado chama o mtodo
grupoModalCalendario:
O mtodo acaoCalendario, que chamado quando o usurio escolhe uma data, gera uma
mensagem na tela mostrando a data selecionada.
InterSystems do Brasil
196
Cach ZEN
Semelhante ao grupo modal calendrio, no bloco XData Contents h apenas um boto que
chama um mtodo que cria a caixa de mensagem.
InterSystems do Brasil
197
Cach ZEN
Janelas de Dilogo
Zen possui classes embutidas que oferecem os seguintes recursos para trabalhar com caixas de
dilogo:
Janela de dilogo;
O cdigo abaixo cria uma pgina Zen com um boto que ao ser pressionado apresenta uma
janela de dilogo para a seleo de um arquivo.
InterSystems do Brasil
198
Cach ZEN
1. Podemos agora selecionar o tipo de menu que gostaramos, selecionando das opes de um
combobox.
if (op == '')
{
dy.setProperty('hidden',false);
mi.setProperty('hidden',false);
lo.setProperty('hidden',false);
lb.setProperty('label','All...');
}
...
}
4. Crie as propriedades.
Property Usuario As %String [ InitialExpression = {%session.Get("NomeUsuario")} ];
Property Sessao As %String [ InitialExpression = {%session.SessionId} ];
InterSystems do Brasil
199
Cach ZEN
6. Crie uma pgina de logout que ser chamada quando o usurio fechar a aplicao ou um pouco
antes de expirar o tempo da sesso.
1. Ela dever conter um link para logar novamente.
2. <link href="ISCUser.Pag.Login.cls" caption="Clique aqui para o login!."/>
3. Dever conter uma mensagem de que a sesso foi encerrada. A sesso ser encerrada
com %session.EndSession = 1
4. Em 'onloadHandler voc deve encerrar a sesso chamando o mtodo FimSessao()
(ZenMethod) e no mtodo adicionar
Set %session.EndSession = 1
Faa: zenPage.FimSessao (); dentro de 'onloadHandler';
ClassMethod FimSessao() As %Status [ ZenMethod ]
{
Set %session.EndSession = 1
Quit $System.Status.OK()
}
InterSystems do Brasil
200
Cach ZEN
InterSystems do Brasil
201
Cach ZEN
Mdulo - Miscelnea
Mdulo - Miscelnea
InterSystems do Brasil
202
Cach ZEN
InterSystems do Brasil
203
Cach ZEN
<timer>
O elemento <timer> no tem nenhuma representao visual, ele apenas dispara um evento no
lado cliente em um especfico perodo de tempo.
A contagem do atributo timeout (em miIisegundos) inicia automaticamente sempre que a pgina
carregada.
Um <timer> dispara o evento apenas uma vez, ento para reiniciar o temporizador, deve-se
chamar o mtodo startTime de dentro do mtodo especificado no atributo ontimeout.
<fieldSet>
O elemento <fieldSet> um componente agrupador que desenha uma caixa exterior ao redor
dos controles contidos nele.
Cria um painel visual que ajuda a organizar os controles dentro de uma pgina.
Para inserir este componente basta inserir um <fieldSet> e dentro dele os componentes filho.
InterSystems do Brasil
204
Cach ZEN
Possui 2 atributos:
title: especifica o texto a apresentar quando o usurio pra o mouse sobre o texto de
legend.
<colorPane>
O componente deixa o usurio ver e selecionar cores ou incorporar valores do RGB a um paleta
grande da cor. A paleta uma grade que possa ser visualizada como uma fatia possvel de um
cubo tridimensional de cores disponveis.
O <colorPane> captura uma fatia do cubo aceitando a escolha do usurio de uma de trs faces
(vermelho, verde, ou azul) e cortando atravs do cubo, paralela a essa face, em algum nvel de
saturao (mais brilhante ou menos ofuscante) para produzir uma grade das cores.
InterSystems do Brasil
205
Cach ZEN
Exerccios FieldSet
1. Usando o fieldSet.
1. Em 'Pagina.cls' adicione um <fieldSet> para conter o controller o dynaForm e os
buttons. Use 'align = left.
2. Crie outro <fieldSet> para conter os links. Atribua a ambos width = "95%".
Exerccios TimeOut
Entretanto, para prevenir que a sesso expire necessrio controlar este tempo, ou seja, h quanto
tempo a sesso est aberta, e momentos antes de expirar chamar uma pgina adequada para
tratamento.
InterSystems do Brasil
206
Cach ZEN
InterSystems do Brasil
207
Cach ZEN
InterSystems do Brasil
208
Cach ZEN
InterSystems do Brasil
209
Cach ZEN
Componentes Customizados
Componentes Compostos
Uma vez criada a classe do componente composto, ele pode ser utilizada em qualquer outra
pgina Zen.
Para incluir o componente composto criado pela classe anterior, basta inserir o componente e
fazer as devidas referncias ao namespace do componente.
InterSystems do Brasil
210
Cach ZEN
Para criar um componente novo, uma nova classe deve ser criada que herde de uma classe
base Zen.
JavaScript
HTML
SVG
As propriedades podem ser expostas para configurao, para visualizao e usar para
modificar os mtodos do lado cliente getProperty e setProperty.
A tabela seguinte uma lista de verificao para criar uma classe de componente customizada
Task
InterSystems do Brasil
Descrio
211
Cach ZEN
Estilo Customizado
Para definir um novo estilo CSS para um componente customizado, voc pode colocar um
XData Style block dentro de uma sub-classe. Dentro deste bloco abra um <style type="text/css">
e feche com </style>.
Exemplo
XData Style
{
<style type="text/css">
/* @doc="Main style definition for MyComponent." */
.MyComponent
{
color: blue;
background: yellow;
white-space: nowrap;
}
</style>
}
InterSystems do Brasil
212
Cach ZEN
Propriedades Customizadas
Sendo um componente uma classe, voc pode definir propriedades alm das herdadas.
Nomenclatura
Projeo XML
Mtodo setProperty
Parmetros Datatype
ZENENCRYPT
ZENEXPRESSION
ZENLOCALIZE
ZENSETTING
Classes Datatype
InterSystems do Brasil
213
Cach ZEN
Mtodos Customizados
Chamado de
Executado em
Linguagem
Cliente
Cliente
JavaScript
Cliente
Server
Server
Server
ObjectScript ou
Basic
ObjectScript ou
Basic
Keyword
Language =
JavaScript
Nomenclatura
myMethod
ZenMethod
MyMethod
%MyMethod
Task
Description
Subclass
renderMeter
the SVG contents of the meter. The odometer and clock examples show how to make
SVG calls from the meter class.
(Optional) Provide class parameters and appropriate values. The odometer example
Parameters
Properties
digits for its display. The clock overrides the value property from the base meter class
with an ObjectScript expression that is evaluated each time the meter is displayed.
For the clock, this expression calculates the current time.
InterSystems do Brasil
214
Cach ZEN
XData SVGStyle
XData SVGDef
setProperty
properties of the meter. The clock example does this for the value property, then
defers to the superclass for setting all other properties.
Methods
renderLabel
XML Element
Para criar um novo medidor tambm necessrio criar uma classe que deriva de uma classe
Zen de componentes SVG.
Tambm pode-se criar novos parmetros para classe, propriedades, escrever mtodos que
desenham o medidor, etc.
InterSystems do Brasil
215
Cach ZEN
Podemos customizar o componente DateText para criar um componente com barras automticas na
digitao, por exemplo. Queremos a data no padro 'D / M / Y'. Depois de digitar os dois primeiros
nmeros uma barra ser adicionada depois mais dois e mais um barra e depois mais 4 dgitos.
Crie mtodo mascara() que possui dois argumentos, pE a tecla digitada e pComponent o
objeto.
Method mascara(pE, pComponent) [ Language = javascript ]
{
var whichCode = (window.Event) ? pE.which : pE.keyCode;
//cod. teclado: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
var strCheck = '48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105';
if (strCheck.indexOf(whichCode) == -1 || whichCode==8) return;
vr = new String(pComponent.value);
tam = vr.length;
if (tam == 2)
{
pComponent.value = vr + '/';
}
if (tam == 5)
{
pComponent.value = vr + '/';
}
}
InterSystems do Brasil
216
Cach ZEN
InterSystems do Brasil
217
Cach ZEN
Mdulo Localizao
Mdulo Localizao
InterSystems do Brasil
218
Cach ZEN
InterSystems do Brasil
219
Cach ZEN
Localizao
A localizao um poderoso recurso do Cach disponvel tanto para CSP quanto para Zen que
torna possvel a traduo dos textos da aplicao, para mensagens apresentadas ao usurio,
ttulo dos controles, textos informativos para botes, etc.
Com o Zen esse recurso ainda mais fcil de ser utilizado, pois faz automaticamente a
identificao dos textos que precisam ser traduzidos.
InterSystems do Brasil
220
Cach ZEN
}
}
InterSystems do Brasil
221
Cach ZEN
InterSystems do Brasil
222
Cach ZEN
1:
^CacheMsg("CursoZen")
pt-br"
2:
^CacheMsg("CursoZen","en",60550761)
"Controls"
3:
^CacheMsg("CursoZen","en",766317539)
"Language"
4:
^CacheMsg("CursoZen","en",1403964196)
5:
^CacheMsg("CursoZen","en",2687646265)
"Return"
6:
7:
^CacheMsg("CursoZen","en",3609698214)
"Code"
8:
^CacheMsg("CursoZen","en",4115961312)
"Save"
9:
^CacheMsg("CursoZen","en",4262580536)
"Name"
10:
^CacheMsg("CursoZen","pt-br",60550761)
"Controles"
11:
^CacheMsg("CursoZen","pt-br",766317539)
"Language"
12:
^CacheMsg("CursoZen","pt-br",1403964196)
13:
^CacheMsg("CursoZen","pt-br",2687646265)
"Voltar"
14:
^CacheMsg("CursoZen","ptbr",2722840033)
15:
^CacheMsg("CursoZen","pt-br",3609698214)
"Cdigo"
16:
^CacheMsg("CursoZen","pt-br",4115961312)
"Salvar"
17:
^CacheMsg("CursoZen","pt-br",4262580536)
"Nome"
InterSystems do Brasil
223
Cach ZEN
InterSystems do Brasil
224
Cach ZEN
InterSystems do Brasil
225
Cach ZEN
InterSystems do Brasil
226
Cach ZEN
InterSystems do Brasil
227
Cach ZEN
Programao da Aplicao
Uma aplicao de Zen especifica um conjunto de atividades que podem resultar quando um
cliente Zen e um servidor Zen interagem. Estas atividades podem consistir em pginas Web
pages, querys de uma base de dados, gravar dados no disco, e mais. Quando voc cria uma
aplicao de Zen, voc cria um suite das classes de Zen que especificam estas atividades. A
linguagem que voc usa para estas classes o Cach ObjectScript - com possibilidades de uso
de XML, de HTML, de SVG, e de Javascript quando necessrio
Zen um framework extensvel para criao rpida de aplicaes baseadas na Web.
Cada aplicao de Zen tem uma classe da aplicao. Esta uma classe derivada de
%ZEN.application que fornece tarefas comuns e age como a nica raiz para todas as pginas na
aplicao.
A seguinte tabela lista os elementos de uma classe de Aplicao Zen:
Elemento
Tipo
APPLICATIONNAME
Parmetro de Classe
CSSINCLUDES
Parmetro de Classe
HOMEPAGE
Parmetro de Classe
JSINCLUDES
Parmetro de Classe
USERPACKAGES
Parmetro de Classe
USERSVGPACKAGES
Parmetro de Classe
XData Style
InterSystems do Brasil
228
Cach ZEN
Descrio
APPLICATION
AUTOLOGOUT
CSSINCLUDES
DOMAIN
JSINCLUDES
PAGENAME
Define uma string que voc possa usar nos ttulos ou nos labels.
Se no especificado, o nome da classe da pgina de Zen usado
PAGETITLE
RESOURCE
USERPACKAGES
InterSystems do Brasil
229
Cach ZEN
Zen oferece diversas variveis especiais que representam instncias de objetos de vrios tipos
dentro da aplicao de Zen.
A seguinte tabela lista as variveis especiais:
Uso em Zen
Runtime
Expressions
Server Side
Variveis
Refers To
%application
Objeto da aplicao
Pgina
No
%composite
Pgina, Componente
Sim
%page
Pgina, Componente
Sim
%query
Objeto atual de
ResultSet
Pgina, Componente
Sim
%session
Pgina, Componente
Sim
%this
Sim
%url
Um objeto cujas as
propriedades sejam
parmetros de URI da
pgina atual
Sim
%zenContext
InterSystems do Brasil
Pgina, Componente
No
230
Cach ZEN
%application:
As classes que so associadas com esta aplicao podem ento invocar este mtodo
como:
Class ZENDemo.ExpenseCalculator Extends %ZEN.Component.page {
/// Application this page belongs to.
Parameter APPLICATION = "ZENDemo.Application";
// ...Intervening lines removed...
/// Return an array of quick links to be displayed by the locator bar.
ClassMethod GetQuickLinks(Output pLinks) As %Status {
// dispatch to our application class
Quit %application.GetQuickLinks(.pLinks)
}
}
InterSystems do Brasil
231
Cach ZEN
%page e zenPage
Zen oferece variveis especiais para representar o objeto da pgina de Zen nos lados
client e server :
Em ObjectScript ou no cdigo Basic que funciona no lado do usurio, o objeto da
pgina %page:
Set btn = %page.%GetComponentById("NewBtn1)
zenEvent
Suponha que voc tem uma expresso Javascript como o valor de um atributo do evento
de XML, tal como o onchange no seguinte exemplo do listBox.
<listBox id="listBox" label="listBox" listWidth="240px"
onchange="zenPage.notifyOnChange(zenThis);" value="2">
<option value="1" text=Maa" />
<option value="2" text="Banana" style="font-size: 1.5em; "/>
<option value="3" text=Cereja" />
<option value="4" text=Abbora" />
<option value="5" text="Eggplant" style="font-size: 2.1em; "/>
</listBox>
A varivel especial zenEvent consulta o objeto atual do evento Javascript que descreve o
evento zenEvent fornece uma maneira browser-neutra de comear o acesso ao evento
atual (tal como um clique No mouse). No exemplo acima, o onchange references o
mtodo do notifyOnChange. O mtodo notifyOnChange do lado cliente pode referenciar
a varivel especial zenEvent dentro de seu cdigo do Javascript.
InterSystems do Brasil
232
Cach ZEN
%zenContext
Quando toda a atividade no usurio est pelo Zen, a varivel especial %zenContext do
server-side diz que tipo de atividade esta. %zenContext uma String. Se %zenContext
tiver o valor, ser:
page, Zen est servindo pgina em resposta a um pedido do HTTP
A sintaxe Zen runtime expression pode ser usada, com restries, somente nos
seguintes contextos
XML que est embutido com o bloco Xdata
<button caption="#(%query.Name)#" onclick="alert('#(%query.Name)#')"/>
InterSystems do Brasil
233
Cach ZEN
No lado cliente, voc no pode acessar valores de propriedade diretamente. Voc deve
usar os mtodos get e set fornecidos nas classes de componentes. Para propriedades
single-valued, use os mtodos getProperty e setProperty.
Por exemplo:
var index = table.getProperty('selectedIndex');
Ou:
var svg = zenPage.getComponentById('svgFrame');
svg.setProperty('layout','');
svg.setProperty('editMode','drag');
Importante:
No confunda o getProperty e o setProperty com os mtodos getValue e
setValue, que manipulam valor de um componente do controle, e no os aplique
a nenhuma outra propriedade do componente.
InterSystems do Brasil
234
Cach ZEN
ZENURL
Para receber um parmetro passado pela url, dentro da classe, use ZENURL.
Exemplo:
Property DataInicio As %String(ZENURL = datainicio);
Mtodos Zen
Chamado
de
Executa
no
Tipo de
Class
Chamada
Linguagem do
Cdigo
Keyword
Nomemclatura
Cliente
Cliente
Instncia
JavaScript
Language
=
JavaScript
meuMtodo
ZenMethod
MeuMtodo
%MeuMtodo
Assncrono
Server
(Can send
Instncia
Sincrono
back code
Cliente
ObjectScript ou
Assncrono
that runs
on the
Classe
client)
Server
Server
InterSystems do Brasil
Instncia
Basic
Sincrono
ObjectScript or
Basic
235
Cach ZEN
Descrio
%OnBeforeCreatePage
%OnCreatePage
%OnAfterCreatePage
Este mtodo de instncia chamado aps o objeto da pgina serverside e todos seus componentes filhos predefinidos so criados. Uma
sub-classe pode cancelar este mtodo para adicionar, para remover, ou
para modificar itens dentro da pgina de modelo, ou para fornecer
valores para controles.
%OnDrawHTMLHead
%OnDrawHTMLBody
InterSystems do Brasil
236
Cach ZEN
Descrio
%GetComponent
%GetComponentById
%GetValueByName
%SetErrorById
%SetErrorByName
%SetValueById
%SetValueByName
%SetValuesByName
InterSystems do Brasil
237
Cach ZEN
Descrio
onloadHandler
onpopupAction
onresizeHandler
onunloadHandler
InterSystems do Brasil
238
Cach ZEN
Descrio
cancelPopup
createComponent
createComponentNS
endModal
getComponent
getComponentById
startModal
InterSystems do Brasil
239
Cach ZEN
findElement
getEnclosingDiv
getHidden
Descrio
Procura um elemento nomeado HTML associado com um componente
especfico
Pega o elemento HTML div usado para incluir um componente especfico
Retorne se um componente est escondido (ou exibido).
getProperty
getSettings
getValue
invokeSuper
isOfType
refreshContents
setHidden
setProperty
setValue
InterSystems do Brasil
240
Cach ZEN
InterSystems do Brasil
241
Cach ZEN
InterSystems do Brasil
242
Cach ZEN
InterSystems do Brasil
243
Cach ZEN
Aplicao
Class ISCUser.Aplic.Aplicacao Extends %ZEN.application
{
/// Este o nome desta aplicao.
Parameter APPLICATIONNAME = "Minha Aplicacao";
/// Esta a URL da pgina inicial principal desta aplicao.
Parameter HOMEPAGE;
/// Este bloco de estilos contm definies de estilo CSS vlidas para toda a aplicao.
XData Style
{
<style type="text/css">
*{ /* padro texto geral */
padding-left:0px;
padding-right:0px;
margin:0;
font-size:11px;
font-family: Arial, Helvetica, sans-serif;
color: #003082;
}
body{ /* fundo geral */
/*#E6E6FA*/
background-color: #D3E0EE;
}
.iframe{
}
.textol{ /* texto pgina de login e dynaForm dos modelos de cadastro */
text-align: center;
font-family: Arial, Helvetica, sans-serif;
color: #003082;
font-size: 10px;
}
.caixatextolU{ /* caixa de texto pgina de login UPPER */
border:solid 1px #7F9DB9;
font-family: Arial;
font-size: 10px;
TEXT-TRANSFORM: uppercase;
}
.caixatexto{ /* caixa de texto padro */
border:solid 1px #7F9DB9;
InterSystems do Brasil
244
Cach ZEN
245
Cach ZEN
font-style: normal;
font-weight: bold;
background-position: center;
}
.celulaMenu { /* classe do td do menu */
background-color: #E9F4F8;
border-right: 1px solid white;
border-left: 1px solid white;
border-top: 1px solid #C0C0C0;
border-bottom: 1px solid #C0C0C0;
border-left: 1px solid #C0C0C0;
border-right: 1px solid #C0C0C0;
cursor:pointer;
width:80px;
text-align:center;
vertical-align:middle;
}
.celulaFavoritos { /* classe do td do Favoritos */
background-color: #F5FAFC;
cursor:pointer;
width:80px;
text-align:center;
vertical-align:middle;
border-right-width: 1px;
border-left-width: 1px;
border-right-style: solid;
border-left-style: solid;
border-right-color: #CCCCCC;
border-left-color: #CCCCCC;
}
.tabelaSubMenu { /* classe do table dos submenus */
background-color:#E9F4F8;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
font-style: normal;
font-weight: bold;
color: #003082;
background-position: left;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
}
.tabelaSubMenuFavoritos { /* classe do table do submenu do Favoritos*/
background-color:#E9F4F8;
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
InterSystems do Brasil
246
Cach ZEN
font-style: normal;
font-weight: normal;
filter: Invert;
cursor: auto;
border-top-style: none;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
}
.celulaSubMenu { /* classe do td dos submenus */
border-top: 1px solid white;
padding-left:5px;
padding-right:5px;
padding-top:0px;
padding-bottom:0px;
cursor:pointer;
}
.usuario { /* descricao usurio logado */
width:193px;
float:right;
text-align:right;
padding-top:3px;
background-image:url(../imagens/fundo_usuario.gif);
background-repeat:no-repeat;
padding-right:10px;
}
.rodape { /* rodap pgina principal */
font-size:10px;
color:#666666;
}
.rodape a { /* link rodap pgina principal */
font-size:10px;
clear:both;
}
.titulo { /* para todos os ttulos de janelas */
color: #003082;
font-weight:bold;
font-size: 12px;
}
.destaque{
color: #cc0000;
font-weight:bold;
font-size: 12px;
text-align: left;
}
.titulodestaque{
color: #FF0000;
font-size: 14px;
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
InterSystems do Brasil
247
Cach ZEN
}
.textodestaque{
color: #FF0000;
font-size: 12px;
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
}
.comboboxImgButton { /*imagem do botao do combobox */
background: white;
vertical-align: middle;
border-top: 1px solid #7F9DB9;
border-bottom: 1px solid #7F9DB9;
border-left: 1px solid #7F9DB9;
border-right: 1px solid #7F9DB9;
width: 1.3em;
height: 1.4em;
}
.comboboxInput { /* caixa de texto do combobox */
vertical-align: middle;
border-top: 1px solid #7F9DB9;
border-bottom: 1px solid #7F9DB9;
border-left: 1px solid #7F9DB9;
border-right: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
font-style: normal;
font-weight: normal;
background-color: #F5FAFC;
color: #003082;
}
.text { /*campos de texto comum*/
vertical-align: middle;
border-top: 1px solid #7F9DB9;
border-bottom: 1px solid #7F9DB9;
border-left: 1px solid #7F9DB9;
border-right: 1px solid #7F9DB9;
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
font-style: normal;
font-weight: normal;
background-color: #F5FAFC;
color: #003082;
}
.password {
vertical-align: middle;
border-top: 1px solid #7F9DB9;
border-bottom: 1px solid #7F9DB9;
border-left: 1px solid #7F9DB9;
border-right: 1px solid #7F9DB9;
InterSystems do Brasil
248
Cach ZEN
249
Cach ZEN
InterSystems do Brasil
250
Cach ZEN
Data Personalizada
Class ISCUser.Componente.Data Extends %ZEN.Component.dateText
{
Parameter DOMAIN = "iscuser";
Parameter NAMESPACE = "http://www.iscuser.com/iscuser";
Method %DrawHTML()
{
#; do not add this to set of events
Set tIgnore("onchange")=""
Set disabled = $S(..disabled:"disabled",1:"")
Set ro = $S(..readOnly:"readonly",1:"")
Set bflag = $S(..readOnly:"readonly",1:"")
#; if localized properties have not been set, set them
Set:..dayList="" ..dayList = $$$Text("S,M,T,W,T,F,S")
Set:..monthList="" ..monthList =
$$$Text("January,February,March,April,May,June,July,August,September,October,November,December"
)
Set:..timeCaption="" ..timeCaption = $$$Text("Time:")
#; if there are expressions for these props, evaluate
Set ..minDate = $$$ZENVAL(..minDate)
Set ..maxDate = $$$ZENVAL(..maxDate)
Set ..format = $$$ZENVAL(..format)
Set ..separator = $$$ZENVAL(..separator)
#; Get value
Set tValue = $$$ZENVAL(..value)
Set tDisplayValue = tValue
&html<<table border="0" cellspacing="0" cellpadding="0">>
#; render as one line as CR will mess up the display
&html<<tr><td style="white-space: nowrap">
<input class="#(..controlClass)#" type="text" size="#(+..size)#"
id="#(..%MakeId("control"))#" #(..%Attr("title",..title))#
#(..%Name())# #(disabled)# #(ro)# #(..%Attr("value",tDisplayValue))#
#(..%Attr("tabindex",..tabIndex))# #(..%GetEventHandlers(.tIgnore))#
onchange="zenPage.getComponent(#(..index)#).ondatechangeHandler();"
onkeyup="zenPage.getComponent(#(..index)#).mascara(event,this);"
/>
<img src="/csp/broker/images/datetext.gif" id="#(..%MakeId(""))#"
onclick="zenPage.getComponent(#(..index)#).showDateSelector();"
class="comboboxImgButton"/>
</td></tr>>
&html<</table>>
}
InterSystems do Brasil
251
Cach ZEN
InterSystems do Brasil
252
Cach ZEN
InterSystems do Brasil
253
Cach ZEN
MVC Paciente
Class ISCUser.MVC.Paciente Extends %ZEN.DataModel.ObjectDataModel
{
Property Nome As %String;
Property Endereco As %String(ZENLABEL = "Endereo");
Property Cidade As %String;
Property Estado As %String;
Property Sexo As %String(DISPLAYLIST = ",M,F", VALUELIST = ",1,2");
Property Adulto As %Boolean;
Property Renda As %Numeric;
Property Prioridade As ISCUser.Dados.Paciente(ZENSQL = "Select ID,Descricao From
ISCUser_Dados.PacientePrioridade", ZENSQLLOOKUP = "Select Descricao From
ISCUser_Dados.PacientePrioridade Where ID = ?");
Method %OnNewSource(Output pSC As %Status = {$$$OK}) As %RegisteredObject
{
Set status = ##class(ISCUser.Dados.Paciente).%New()
Quit status
}
Method %OnOpenSource(pID As %String, pConcurrency As %Integer = -1, Output pSC As %Status =
{$$$OK}) As %RegisteredObject
{
Quit ##class(ISCUser.Dados.Paciente).%OpenId(pID,pConcurrency,.pStatus)
}
Method %OnLoadModel(pSource As ISCUser.Dados.Paciente) As %Status
{
Set ..Nome = pSource.Nome
Set ..Endereco = pSource.Endereco
Set ..Cidade = pSource.Cidade
Set ..Estado = pSource.Estado
Set ..Sexo = pSource.Sexo
Set ..Adulto = pSource.Adulto
Set ..Renda = pSource.Renda
Set ..Prioridade = pSource.Prioridade
Quit $$$OK
}
InterSystems do Brasil
254
Cach ZEN
InterSystems do Brasil
255
Cach ZEN
Boas Vindas
Class ISCUser.Pag.BoasVindas Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Boas Vindas";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
/* style for title bar */
#title {
background: #C5D6D6;
color: black;
font-family: Verdana;
font-size: 1.5em;
font-weight: bold;
padding: 5px;
border-bottom: 1px solid black;
text-align: center;
}
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Boas Vindas">
<html id="title">Boas Vindas</html>
<vgroup width="100%">
<!-- put page contents here -->
<button caption="Mtodo Cliente" onclick="zenPage.btnClique();"/>
<button caption="Mtodo Servidor" onclick="zenPage.BtnCliqueServ();"/>
<hgroup>
<vgroup width="30%">
<calendar align="center"/>
</vgroup><vgroup width="40%">
<image align="center" src="images\LabExam.jpg"/>
</vgroup>
<vgroup width="30%">
<colorPicker align="center"/>
</vgroup>
</hgroup>
</vgroup>
</page>
}
InterSystems do Brasil
256
Cach ZEN
InterSystems do Brasil
257
Cach ZEN
Estilos Relatrio
Class ISCUser.Pag.EstiloRelatorio Extends %ZEN.Component.page
{
Parameter PRIVATE = 0;
Parameter CONTENTTYPE = "text/css";
Method %DrawHTMLPage()
{
// Nova definio de tamanhos de fontes
write "th.TabMinima {",!
write " font-size:8px;",!
write " font-family:Verdana;",!
write " vertical-align:top;",!
write " }",!
write "td.TabMinima {",!
write " font-size:8px;",!
write " font-family:Verdana;",!
write " vertical-align:top;",!
write " }",!
write "th.TabMenor {",!
write " font-size:9px;",!
write " font-family:Verdana;",!
write " vertical-align:top;",!
write " }",!
write "td.TabMenor {",!
write " font-size:9px;",!
write " font-family:Verdana;",!
write " vertical-align:top;",!
write " }",!
write "th.TabMedia {",!
write " font-size:10px;",!
write " font-family:Verdana;",!
write " vertical-align:top;",!
write " }",!
write "td.TabMedia {",!
write " font-size:10px;",!
write " font-family:Verdana;",!
write " vertical-align:top;",!
write " }",!
write "th.TabMaior {",!
write " font-size:12px;",!
write " font-family:Verdana;",!
write " vertical-align:top;",!
write " }",!
write "td.TabMaior {",!
write " font-size:12px;",!
write " font-family:Verdana;",!
write " vertical-align:top;",!
InterSystems do Brasil
258
Cach ZEN
InterSystems do Brasil
259
Cach ZEN
Exames
Class ISCUser.Pag.Exames Extends ISCUser.Pag.Pagina
{
Parameter PAGENAME = "Exames";
Parameter CLASSEMODELO = "ISCUser.Dados.Exames";
XData Links [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen">
<link href="javascript: zenPage.pesquisa();" caption="Pesquisa Exames"/>
<link href="javascript: zenPage.chamaItem();" caption="Cadastro de Itens"/>
<link href="ISCUser.Pag.PreExame.cls" caption="Relatrio por Datas"/>
</pane>
}
Method pesquisa() [ Language = javascript ]
{
var link = 'ISCUser.Pag.PesquisaExames.cls';
zenPage.launchPopupWindow(link,'Pgina de Pesquisa Exames','status,scrollbars,resizable,top=100,left=100,width=400,height=500');
}
Method onPopupAction(popupName, action, value) [ Language = javascript ]
{
var controller = zenPage.getComponentById('controller');
controller.setModelId(value);
}
Method chamaItem() [ Language = javascript ]
{
var controller = zenPage.getComponentById('controller');
var id = controller.getModelId();
if (id=='')
{
alert('Pesquise um exame!');
return;
}
var link = "ISCUser.Pag.ExamesItem.cls?exame=" + id;
location.href = link;
}
Method PropriedadeInfo(pIndex As %Integer, ByRef pInfo As %String, pModelId As %String) As %Status
{
Set pInfo("Paciente","sql") = "Select ID,Nome From ISCUser_Dados.Paciente Order By Nome"
Set pInfo("Paciente","sqllookup") = "Select Nome From ISCUser_Dados.Paciente Where ID = ?"
Set pInfo("DataExame","%type") = "ISCUser.Componente.Data"
Set pInfo("DataExame","format") = "DMY"
Set pInfo("DataExame","separator") = "/"
Quit $System.Status.OK()
}
}
InterSystems do Brasil
260
Cach ZEN
Exames Itens
Class ISCUser.Pag.ExamesItem Extends ISCUser.Pag.Pagina
{
Parameter PAGENAME = "Itens dos Exames";
Parameter CLASSEMODELO = "ISCUser.Dados.ExamesItem";
Property ExameId As %String(ZENURL = "exame");
XData Links [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen" >
<link href="javascript: zenPage.pesquisa();" caption="Pesquisa Itens"/>
</pane>
}
Method pesquisa() [ Language = javascript ]
{
var link = 'ISCUser.Pag.PesquisaItens.cls?'+"exame="+zenPage.ExameId;
zenPage.launchPopupWindow(link,'Pgina de Pesquisa - Itens de
Exames','status,scrollbars,resizable,top=100,left=100,width=400,height=500');
}
Method onPopupAction(popupName, action, value) [ Language = javascript ]
{
var controller = zenPage.getComponentById('controller');
controller.setModelId(value);
}
Method atualiza() [ Language = javascript ]
{
var controller = zenPage.getComponentById('controller');
controller.setDataByName('Exame',zenPage.ExameId);
// informa a tela para atualizar o campo...
zenPage.getComponentById('form.Exame').setValue(zenPage.ExameId);
zenPage.getComponentById('form.Exame').setProperty('disabled',"true");
}
Method onloadHandler() [ Language = javascript ]
{
zenPage.atualiza();
}
}
InterSystems do Brasil
261
Cach ZEN
Grfico
Class ISCUser.Pag.Grafico Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Grafico Prioridade";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<dataController id="origem"
modelClass="ISCUser.MVC.GraficoPrioridade" modelId="1"/>
<dynaGrid align="center" width="400" id="dynaGrid" gridLabel="dynaGrid" controllerId="origem"/>
<svgFrame id="svgFrame" height="300" width="300" backgroundStyle="fill: black;" layout="horizontal">
<lineChart id="grf" controllerId="origem" width="300" height="300" />
</svgFrame>
</page>
}
}
InterSystems do Brasil
262
Cach ZEN
Links
/// Created using the page template: Pgina Ttulo
Class ISCUser.Pag.Links Extends %ZEN.Component.page
{
/// Nome da classe da aplicao qual esta pgina pertence.
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
/// Nome de exibio desta pgina.
Parameter PAGENAME;
/// Domnio usado para localizao.
Parameter DOMAIN = "iscuser";
/// Este bloco de estilos contm definies de estilo CSS vlidas especificamente para a pgina.
XData Style
{
}
/// Este bloco XML define o contedo desta pgina.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<html id="title">Links</html>
<vgroup width="100%">
<link caption="Boas Vindas" href="ISCUser.Pag.BoasVindas.cls"/>
<link caption="Exames" href="ISCUser.Pag.Exames.cls"/>
<link caption="Pacientes" href="ISCUser.Pag.Paciente.cls"/>
<link caption="Mensagem" href="javascript: alert('Ok');"/>
</vgroup>
</page>
}
}
InterSystems do Brasil
263
Cach ZEN
Login
Class ISCUser.Pag.Login Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Login";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
/* style for title bar */
#title {
background: #C5D6D6;
color: black;
font-family: Verdana;
font-size: 1.5em;
font-weight: bold;
padding: 5px;
border-bottom: 1px solid black;
text-align: center;
}
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Login">
<html id="title">Login</html>
<vgroup width="100%">
<spacer height="50"/>
<form name="formlogin" align="center" labelPosition="left">
<text id="txtusuario" name="txtusuario" label="Usurio: " />
<password id="txtsenha" name="txtsenha" label="Senha: " />
<submit id="btnEnviar" caption="ok"/>
</form>
</vgroup>
</page>
}
InterSystems do Brasil
264
Cach ZEN
InterSystems do Brasil
265
Cach ZEN
Logout
/// Created using the page template: Default
Class ISCUser.Pag.Logout Extends %ZEN.Component.page
{
/// Nome da classe da aplicao qual esta pgina pertence.
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
/// Nome de exibio desta pgina.
Parameter PAGENAME = "Logout";
/// Domnio usado para localizao.
Parameter DOMAIN = "iscuser";
/// Este bloco de estilos contm definies de estilo CSS vlidas especificamente para a pgina.
XData Style
{
<style type="text/css">
</style>
}
/// Este bloco XML define o contedo desta pgina.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<label label="Sua sesso foi encerrada!" labelStyle="color: red;font: bold"/>
<link href="ISCUser.Pag.Login.cls" caption="Clique aqui para o login!."/>
</page>
}
ClassMethod FimSessao() As %Status [ ZenMethod ]
{
Set %session.EndSession = 1
Quit $System.Status.OK()
}
Method onloadHandler() [ Language = javascript ]
{
zenPage.FimSessao();
}
}
InterSystems do Brasil
266
Cach ZEN
Menu
InterSystems do Brasil
267
Cach ZEN
InterSystems do Brasil
268
Cach ZEN
InterSystems do Brasil
269
Cach ZEN
270
Cach ZEN
271
Cach ZEN
}
Do %session.Set("ControleTimeout",valorAtual)
Quit $system.Status.OK()
}
}
InterSystems do Brasil
272
Cach ZEN
Pacientes
Class ISCUser.Pag.Paciente Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Pacientes";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
/* style for title bar */
#title {
background: #C5D6D6;
color: black;
font-family: Verdana;
font-size: 1.5em;
font-weight: bold;
padding: 5px;
border-bottom: 1px solid black;
text-align: center;
}
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Cadastro Paciente">
<html id="title">Cadastro de Pacientes</html>
<vgroup width="100%">
<dataController id="origem" modelClass="ISCUser.MVC.Paciente" modelId="1"/>
<dynaForm align="center" id="dyfPaciente" controllerId="origem" />
<hgroup align="center">
<button id="btnAnterior" caption="Anterior" onclick="zenPage.anterior();"/>
<button id="btnProximo" caption="Proximo" onclick="zenPage.proximo();"/>
<button id="btnSavar" caption="Salvar" onclick="zenPage.salva();"/>
<button id="btnExcluir" caption="Excluir" onclick="zenPage.deleta();"/>
<button id="btnCriar" caption="Criar" onclick="zenPage.novo();"/>
</hgroup>
<svgFrame width="300" height="300">
<fuelGauge id="medRenda"
animate="true" height="300" width="300"
controllerId="origem" dataBinding="Renda"
thresholdLower="1000" thresholdUpper="9000"
rangeLower="0" rangeUpper="10000"/>
</svgFrame>
</vgroup>
</page>
}
InterSystems do Brasil
273
Cach ZEN
InterSystems do Brasil
274
Cach ZEN
Pacientes Controles
Class ISCUser.Pag.PacienteControles Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Paciente Controles";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
/* style for title bar */
#title {
background: #C5D6D6;
color: black;
font-family: Verdana;
font-size: 1.5em;
font-weight: bold;
padding: 5px;
border-bottom: 1px solid black;
text-align: center;
}
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Paciente Controles">
<html id="title">Exerccio - Controles Zen</html>
<vgroup width="100%">
<!-- put page contents here -->
<form align="center" invalidMessage="Falha na validao da pgina!">
<hgroup align="center">
<label label ="Cadastro de Pacientes" labelStyle="font-family: Verdana; font-size:
1.2em;" height="40" valign="middle"/>
</hgroup>
<hgroup align="center" >
<label label ="Nome do Paciente" align="right" width="50%"/>
<text id="txtPaciente" width="50%" required="true"
requiredMessage="Informe o nome do Paciente" />
</hgroup>
<hgroup align="center">
<label label ="Prioridade" align="right" width="50%"/>
<radioSet id="rdsPrioridade" width="50%" sql="Select ID,Descricao From ISCUser_Dados.PacientePriori
InterSystems do Brasil
275
Cach ZEN
dade"/>
</hgroup>
<hgroup align="center">
<label label ="Adulto" align="right" width="50%"/>
<checkbox id="chkAdulto" width="50%" />
</hgroup>
<hgroup align="center">
<label label ="Sexo" align="right" width="50%"/>
<select id="selSexo" width="50%" valueList="1,2" displayList="Masculino,Feminino"/>
</hgroup>
<hgroup align="center">
<label label ="Indicao" align="right" width="50%"/>
<dataCombo id="dtcIndicacao" width="50%"
sql="Select ID,Nome
From ISCUser_Dados.Paciente
Where Nome %Startswith ?
Order By Nome"
sqlLookup="Select Nome
From ISCUser_Dados.Paciente
Where ID = ?"
editable="true" searchKeyLen="4" />
</hgroup>
<hgroup align="center">
<label label ="Data Nascimento" align="right" width="50%"/>
<calendar id="calNascimento" width="50%"
dayList="D,S,T,Q,Q,S,S" monthList="Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez"/>
</hgroup>
<hgroup align="center">
<submit id="btnSalvar" caption="Salvar"/>
<button id="btnLimpar" caption="Limpar"/>
<button id="btnDeletar" caption="Deletar"/>
</hgroup>
</form>
</vgroup>
</page>
}
Method %OnAfterCreatePage() As %Status
{
Do ..%SetValueById("calNascimento",$ZDate($Horolog,3))
Do ..%SetValueById("chkAdulto",1)
Quit $$$OK
}
}
InterSystems do Brasil
276
Cach ZEN
Pgina
Class ISCUser.Pag.Pagina Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Super Pgina";
Parameter DOMAIN = "iscuser";
Parameter CLASSEMODELO As %String;
Property ClasseModelo As %String [ InitialExpression = {..#CLASSEMODELO} ];
Property ModelId As %String(ZENURL = "ModelId");
Property SessionTimeout As %Integer [ InitialExpression = {..SessionControlerTimeout()} ];
XData Style
{
<style type="text/css">
</style>
}
/// Este bloco XML define o contedo desta pgina.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Pagina">
<html id="title"></html>
<vgroup width="100%">
<fieldSet width="95%" align="left">
<dataController id="controller" modelClass="#(%page.ClasseModelo)#" modelId="#(%page.ModelId)#"/>
<dynaForm align="center" id="form" controllerId="controller" OnGetPropertyInfo="PropriedadeInfo" />
<hgroup align="center">
<button id="btnAnterior" caption="Anterior" onclick="zenPage.anterior();"/>
<button id="btnProximo" caption="Proximo" onclick="zenPage.proximo();"/>
<button id="btnSavar" caption="Salvar" onclick="zenPage.salva();"/>
<button id="btnExcluir" caption="Excluir" onclick="zenPage.deleta();"/>
<button id="btnCriar" caption="Criar" onclick="zenPage.novo();"/>
</hgroup>
</fieldSet>
<vgroup width="30%">
<fieldSet width="95%" align="left">
<pane paneName="Links" width="100%"/>
</fieldSet>
</vgroup>
</vgroup>
</page>
}
InterSystems do Brasil
277
Cach ZEN
InterSystems do Brasil
278
Cach ZEN
Pesquisa Exames
Class ISCUser.Pag.PesquisaExames Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Pesquisa de Exames";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
/* style for title bar */
#title {
background: #C5D6D6;
color: black;
font-family: Verdana;
font-size: 1.5em;
font-weight: bold;
padding: 5px;
border-bottom: 1px solid black;
text-align: center;
}
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Pesquisa Exames">
<html id="title">Pesquisa Exames</html>
<vgroup width="100%">
<tablePane id="tblExames" valueColumn="ID" onselectrow="zenPage.fire();" pageSize="10" useSnapsho
t="true" tableName="ISCUser_Dados.Exames">
<column colName="ID" hidden="true" />
<column colName="Paciente" colExpression="Paciente->Nome" filterType="text" filterOp="[" />
<column colName="Codigo" header="Cdigo" />
<column colName="DataExame" header="Data do Exame" filterType="date" filterOp="=" />
<column colName="ValorExame" header="Valor do Exame" />
</tablePane>
<tableNavigatorBar tablePaneId="tblExames"/>
</vgroup>
</page>
}
Method fire() [ Language = javascript ]
{
var idTabela = zenPage.getComponentById('tblExames').getValue();
zenPage.firePopupAction('Action', idTabela);
}
}
InterSystems do Brasil
279
Cach ZEN
Pesquisa Itens
Class ISCUser.Pag.PesquisaItens Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Pesquisa de Itens de Exames";
Parameter DOMAIN = "iscuser";
Property ExameId As %String(ZENURL = "exame");
XData Style
{
<style type="text/css">
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Itens dos Exames">
<tablePane id="tblItem" valueColumn="ID" onselectrow="zenPage.fire();" tableName="ISCUser_Dados.E
xamesItem" useSnapshot="true" pageSize="16" whereClause="Exame = ?" >
<parameter value="#(%page.ExameId)#"/>
<column colName="ID"/>
<column colName="Tipo->Descricao" header="Descrio"/>
<column colName="Quantidade"/>
</tablePane>
<tableNavigatorBar tablePaneId="tblItem"/>
</page>
}
Method fire() [ Language = javascript ]
{
var idTabela = zenPage.getComponentById('tblItem').getValue();
zenPage.firePopupAction('Action', idTabela);
}
}
InterSystems do Brasil
280
Cach ZEN
Pesquisa Pacientes
Class ISCUser.Pag.PesquisaPaciente Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Pesquisa Paciente";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
/* style for title bar */
#title {
background: #C5D6D6;
color: black;
font-family: Verdana;
font-size: 1.5em;
font-weight: bold;
padding: 5px;
border-bottom: 1px solid black;
text-align: center;
}
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Pesquisa Paciente">
<html id="title">Pesquisa Pacientes</html>
<vgroup width="100%">
<tablePane showRowNumbers="true" showZebra="true"
id="tblPaciente" tableName="ISCUser_Dados.Paciente"
whereClause="Adulto = 1" useSnapshot="true" pageSize="10">
<column colName="ID" hidden="true"/>
<column colName="Nome" filterType="text" filterOp="%STARTSWITH" />
<column colName="Cidade" />
<column colName="Sexo" style="color: red;" />
<column colName="Adulto" />
<column colName="Prioridade" colExpression="Prioridade->Descricao" filterType="query"
filterQuery="Select ID,Descricao From ISCUser_Dados.PacientePrioridade" />
<condition colName="Sexo" predicate="EQ" value="M" rowStyle="font: bold;"/>
<column link="javascript: zenPage.mostraMsg('#(%query.Nome)#');"
linkCaption="Mostrar Nome" linkConfirm="Deseja Realmente?"/>
</tablePane>
<tableNavigatorBar tablePaneId="tblPaciente"/>
</vgroup>
</page>
}
InterSystems do Brasil
281
Cach ZEN
InterSystems do Brasil
282
Cach ZEN
Pr Exames
Class ISCUser.Pag.PreExame Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Pre Exame";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Pre Exame">
<vgroup align="center">
<dateText id="txtDataInicial" label="Data Inicial" format="DMY" separator="/" />
<dateText id="txtDataFinal" label="Data Final" format="DMY" separator="/" />
<button id="btnEnviar" caption="Ok" onclick="zenPage.relatorio();" />
</vgroup>
</page>
}
Method relatorio() [ Language = javascript ]
{
var inicio = zenPage.getComponentById('txtDataInicial').getValue();
var fim = zenPage.getComponentById('txtDataFinal').getValue();
if (inicio !='' && fim != '')
{
var link = 'ISCUser.Rel.Exames.cls?datainicial='+inicio+ '&datafinal='+fim;
window.open(link,'','Relatrio de Exames por
Data','status,scrollbars,resizable,top=10,left=10,width=800,height=800');
}
else {alert('Digite as datas!')}
}
}
InterSystems do Brasil
283
Cach ZEN
Prioridade
Class ISCUser.Pag.Prioridade Extends %ZEN.Component.page
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter PAGENAME = "Prioridades Paciente";
Parameter DOMAIN = "iscuser";
XData Style
{
<style type="text/css">
/* style for title bar */
#title {
background: #C5D6D6;
color: black;
font-family: Verdana;
font-size: 1.5em;
font-weight: bold;
padding: 5px;
border-bottom: 1px solid black;
text-align: center;
}
</style>
}
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="Prioridades Paciente">
<html id="title">Prioridade do Paciente</html>
<vgroup width="100%">
<dataController id="origem" modelClass="ISCUser.Dados.PacientePrioridade" modelId="1"/>
<form id="frmPrioridade" controllerId="origem" align="center">
<text id="txtCodigo" label="Cdigo" dataBinding="Codigo" />
<text id="txtDescricao" label="Descrio" dataBinding="Descricao" />
<hgroup>
<button id="btnAnterior" caption="Anterior" onclick="zenPage.anterior();"/>
<button id="btnProximo" caption="Proximo" onclick="zenPage.proximo();"/>
</hgroup>
</form>
</vgroup>
</page>
}
InterSystems do Brasil
284
Cach ZEN
InterSystems do Brasil
285
Cach ZEN
Relatrio Exames
Class ISCUser.Rel.Exames Extends %ZEN.Report.reportPage
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter DEFAULTMODE = "html";
Parameter REPORTXMLNAMESPACE;
Parameter HOSPITAL = "Hospital";
Parameter TITULO = "Ttulo do Relatrio";
Property DataInicial As %String(ZENURL = "datainicial");
Property DataFinal As %String(ZENURL = "datafinal");
Property Formato As %Integer(ZENURL = "format") [ InitialExpression = 4 ];
Property Hospital As %String [ InitialExpression = {..#HOSPITAL} ];
Property Titulo As %String [ InitialExpression = {..#TITULO} ];
Method EditaData(pVal)
{
// converte para valor interno...
Set pVal = $ZdateH(pVal,..Formato)
Quit pVal
}
InterSystems do Brasil
286
Cach ZEN
InterSystems do Brasil
287
Cach ZEN
InterSystems do Brasil
288
Cach ZEN
Relatrio Paciente
Class ISCUser.Rel.Paciente Extends %ZEN.Report.reportPage
{
Parameter APPLICATION = "ISCUser.Aplic.Aplicacao";
Parameter DEFAULTMODE = "html";
Parameter REPORTXMLNAMESPACE;
XData ReportDefinition [ XMLNamespace = "http://www.intersystems.com/zen/report/definition" ]
{
<report xmlns="http://www.intersystems.com/zen/report/definition"
name="Paciente" sql="SELECT ID,Nome,Cidade,Estado,Sexo,Adulto,Prioridade->
Descricao as Prioridade
FROM ISCUser_Dados.Paciente
ORDER BY Prioridade,Nome">
<group name="Prioridade" breakOnField="Prioridade">
<attribute name="nome" field="Prioridade"/>
<aggregate name="qt" type="COUNT" field="ID"/>
<group name="Paciente" breakOnField="ID">
<element name="Cidade" field="Cidade"/>
<element name="Estado" field="Estado"/>
<element name="Sexo" field="Sexo"/>
<element name="Adulto" field="Adulto"/>
<element name="Nome" field="Nome"/>
</group>
</group>
</report>
}
InterSystems do Brasil
289
Cach ZEN
InterSystems do Brasil
290