You are on page 1of 30

Curso GeneXus X

Exerccios Prticos
ltima atualizao: 30 de setembro de 2010

Curso GeneXus X: Exerccios prticos


Copyright Artech Consultores S. R. L. 1988-2010.
Todos os direitos reservados. Este documento no pode ser reproduzido por qualquer meio sem o consentimento
explcito de Artech Consultores S.R.L. A informao contida neste documento para uso pessoal unicamente.

Marcas Registradas
Artech e GeneXus so marcas registradas de Artech Consultores S.R.L. Todas as outras marcas mencionadas neste
documento so de propriedade de seus respectivos donos.

Notas prvias

O material presente corresponde aos exerccios prticos que o aluno do curso GeneXus ir desenvolver de forma
paralela as classes tericas.
Com este prtico o aluno poder familiarizar-se com a ferramenta, seu ambiente, barra de ferramentas, etc, assim
como poder colocar em prtica de uma maneira guiada e gradual os conceitos mais importantes.
Finalizada esta parte prtica do curso, o aluno estar em condies de analisar uma realidade simples e fazer sua
modelagem utilizando GeneXus, com o apoio de um instrutor, de tal forma que possa encerrar um ciclo completo
de aprendizagem fundamental para que possa comear a desenvolver suas prprias aplicaes.
Visto que a finalidade deste curso aprender a lgica de GeneXus, sua essncia, independentemente da
plataforma da aplicao que vai ser implementada, voc pode prototipar em qualquer uma das plataformas
suportadas por GeneXus.
O instrutor dever entregar ao comear o prtico os dados da plataforma escolhida para o curso, de tal maneira
que voc configure o Environment com essa informao.
Voc vai encontrar notas na continuao de alguns exerccios, para refletir sobre o realizado. Foram includas para
que o aluno no passe por cima de conceitos tericos importantes que esto sendo aplicados. Tambm ter
sugestes de variaes aos exerccios, para que se teste se assim o desejar.

Pgina 1

Curso GeneXus X: Exerccios prticos

CONTEDO

1.

CRIAR UMA BASE DE CONHECIMENTO ........................................................................................................... 3

2.

EXERCCIOS DE TRANSAES.......................................................................................................................... 3
TRANSAO COUNTRY ..................................................................................................................................................... 3
TRANSAO CUSTOMER ................................................................................................................................................... 5
CONSTRUIR E EXECUTAR A APLICAO ................................................................................................................................... 7
Chave candidata ....................................................................................................................................................... 8
Efeito de permitir valores nulos em atributos Foreign Key (FK) ................................................................................ 8
MAIS TRANSAES: PRODUCT E INVOICE ........................................................................................................................... 8
TRANSAO INVOICE ..................................................................................................................................................... 10
EXECUTE AS TRANSAES PRODUCT E INVOICE .................................................................................................................. 13
Regra de atribuio versus frmula ........................................................................................................................ 13
NORMALIZAO ............................................................................................................................................................. 14
AVANADO: TRANSAO CUSTOMER [OPCIONAL] ............................................................................................................. 15
AVANADO: USO DE IMAGENS [OPCIONAL] .......................................................................................................................... 18
AVANADO: USO DE DOCUMENTOS E ARQUIVOS [OPCIONAL] .................................................................................................. 19

3.

CONSULTAS BATCH: PROCEDIMENTOS ......................................................................................................... 20

4.

DATA SELECTORS .......................................................................................................................................... 23

5.

ATUALIZAES NO INTERATIVAS DA BD .................................................................................................... 24

6.

SUBTIPOS ..................................................................................................................................................... 26

7.

INTERFACE DE USURIO: PATTERN WORK WITH E WEB PANELS .................................................................. 26

8.

CONSULTAS DINMICAS .............................................................................................................................. 27

9.

WORKFLOW ................................................................................................................................................. 27

10.

APNDICE: SQL SERVER EXPRESS 2005 ......................................................................................................... 29

Pgina 2

Curso GeneXus X: Exerccios prticos

1. Criar uma base de conhecimento


Para comear o desencolvimento da aplicao, entrar no GeneXus e criar uma base de conhecimento de nome
BillingSystem.
Nota: Sugere-se que a base de conhecimento no seja criada na pasta Meus Documentos ou qualquer outra pasta
que fique abaixo de Documents and Settings, devido que estas pastas tem permisses especiais ortogadas por
Windows.

Tire alguns minutos para que voc se familiarize com o IDE. Experimente mover janelas, personaliz-las a
seu gosto, visualizar janelas (View e View/Other Tool Windows) e observe o Folder View dentro da janela
Knowledge Base Navigator. Voc vai ver que aparecem domnios j inicializados, alguns objetos, imagens,
etc. Sugesto: mantenha a janela de propriedades aberta (F4), voc vai utiliz-la muito. Dentro do
Knowledge Base Navigator veja as Preferences onde se configura o Environment.

2. Exerccios de transaes
Na base de conhecimento que voc criou, ser solicitada que sejam definidas algumas transaes. Para cada uma
delas se mostra uma imagem da Web Form e uma lista de atributos que sero includos na sua estrutura (mas
poder ser necessrio incluir outros). Sero realizadas diversas exerccios envolvendo as caractersticas das
transaes (definio de regras, frmulas, etc.).

Lembrar que para criar um objeto existem vrias alternativas:

A partir da Start Page.

A partir do menu: File/New/Object.

Ctrl+N.

Sugestes:
- Utilizar a insero de regras mediante os snippets do ToolBox, ou inserir funes mediante Insert/Functions.
- Utilize: View/Work with Object.
- Utilize: View/Work with Attributes.
- Criar um objeto tipo Diagram (File/New object/Diagram) para realizar o diagrama de Tabelas e de Transaes.

Transao Country
Atributos:
CountryId

Country Id

Numeric(6)

CountryName

Country Name

Character(50)

Sendo CountryId atributo chave, autonumerado.

Pgina 3

Curso GeneXus X: Exerccios prticos

Depois de ter ingressado o CountryId na estrutura da transao, com toda informao relacionada
(Type, Description, Nullable, etc.), e quando estiver pronto para digitar o prximo atributo
CountryName, ao invs de digitar a primeira letra, C, para escrever Country, digite ponto .. O que
aconteceu?
No campo Nullable do atributo CountryName na estrutura, se dispe de um combo box com os possveis
valores para essa coluna (Yes, No, por default No). Por que no posso alterar o valor por default
do atributo CountryId?

Form Web:

Para comear, utilize a insero de regras mediante os Snippets da ToolBox, (se a janela no estiver
aberta, edite com a View/Other Tool Windows) e Drag & Drop (D&D); ou utilize o menu Insert.
Para utilizar um atributo sem ter que escrev-lo, utilize a janela View/Work With Attributes e Drag &
Drop; ou o menu Insert/Attibute (Ctrl+Shift+A).
Quando voc pressionar ponto . depois do nome de um atributo ou varivel, abre uma lista de
propriedades e mtodos associados a esse atributo ou varivel, para selecionar o desejado. Lembre que
os
mtodos
incluem
parnteses
().
Se
no
aparecer,
dever
adicion-los.
Ex
CountryName.IsEmpty().

Regras:

No se permitem pases sem nome.

Observe os Text Blocks que aparecem no form, esquerda dos atributos. Na estrutura da transao, edite as
propriedades do atributo CountryId e modifique o valor da propriedade ContextualTitle por Identifier. Salve e
observe o que acontece com o Text Block que fica a esquerda de CountryId no form Web. Diminua o valor por
default que o GeneXus coloca na propriedade mencionada.

Pgina 4

Curso GeneXus X: Exerccios prticos

Transao Customer
Defina os 4 domnios conforme solicitado abaixo.
Existem diferente caminhos que conduzem a definio de um domnio:

Se for identificado antes de criar as transaes que ser necessrio definir determinado domnio, podese criar mediante View/Domains ou com duplo clique sobre Domains no FolderView. Primeiro defina os
domnios Name como Character(50), Price como Numeric(9.2) e Total como Price (domnio baseado
em domnio) desta maneira centralizada. Depois utilize-os nas transaes, quando estiver definindo os
atributos. Defina os atributos baseados nestes domnios.

Quando estiver definindo o atributo CustomerId, ao completar seu tipo de dados digite: Id =
Numeric(6.0). Depois v na opo View/Domains para ver todos os domnios definidos na KB. Id est
a? Modifique o domnio, mude a propriedade Autonumber, passando seu valor a True.

Quando estiver definindo o atributo CustomerName, observe que GeneXus automaticamente sugere seu tipo de
dados.

Atributos:
CustomerId

Customer Id

Id = Numeric(6.0)

CustomerName

Customer Name

Name

CustomerAddress

Customer Address

Character(30)

CustomerGender

Customer Gender (Sexo de Cliente)

Character(1)

CustomerTotalPurchases

Customer Total Purchases (Total de compras do Cliente)

Total

CustomerTotalPayments

Customer Total Payments (Total de pagamentos do Cliente)

Total

CustomerBalance

Customer Balance (Saldo de Cliente)

Total

CountryId

Country Identifier

Id

CountryName

Country Name

Name

Por que os atributos CountryId e CountryName no aparecem na estrutura de Customer com os domnios Id e
Name respectivamente? Associe diretamente nesta transao. Abra Country (deve renovar a janela se ela estiver
aberta) e veja que CountryId e CountryName ficaram com os domnios atribudos.
Edite o domnio Name e modifique seu tipo de dados para que ao invs de Character(50) seja Character(30).
Observe o que aconteceu com os atributos que tem este domnio associado (ver Properties/Type Definition dos
atributos CountryName e CustomerName).
Observe os cones que aparecem na estrutura da transao Customer, a esquerda dos atributos CountryId e
CountryName respectivamente. O que esto indicando?
necessrio autonumerar o atributo CustomerId que chave? Por que a propriedade Autonumber est ativa se voc
no a alterou?

Pgina 5

Curso GeneXus X: Exerccios prticos

Form Web:

Gerais:

Definir CustomerGender para que aparea em todo form como um controle do tipo Radio Button.

Na estrutura do atributo CustomerGender indo em propriedade que isto deve ser feito. Na propriedade
Control Type selecione o valor Radio Button e para a propriedade Values agregue o texto Male (masculino)
com o valor M e Female (feminino) com o valor F. Observe que depois de salvar, o form atualizado mostrando
o radio button. Ao modificar estas propriedades associadas ao atributo, cada vez que for agregado
CustomerGender num form de qualquer objeto GeneXus, por default aparecer como Radio Button. Por outro
lado so configuradas as propriedades associadas ao controle no form, somente aplicado esse controle
CustomerGender neste form em particular, e no em qualquer outro onde for inserido.

Pgina 6

Curso GeneXus X: Exerccios prticos

Regras:

Nome do cliente obrigatrio.


Se o endereo no for informado dar um aviso.
Total de compras no deve ser informado (ser atualizado a partir das faturas do cliente).
O saldo do cliente calculado diminuindo as compras de seus pagamentos (Compras Pagamentos).
CustomerBalance no deve ser informado.
Por default o atributo CustomerGender deve ter o valor Female.

Construir e executar a aplicao


Depois de ter definido as duas duas transaes anteriores o que precisa ser feito executar a aplicao e para isso
temos que implementar a aplicao em uma determinada plataforma.
Lembre que no Environment onde se armazena a informao da implementao do sistema.
Assegure-se de ter editado a janela Output (View/Other Tool Windows). Para executar a aplicao, pressione F5.

Vai abrir uma tela onde dever configurar o nome da base de dados em que sero criadas as tabelas da
aplicao, o servidor do DBMS dessa BD; usurio e password de conexo da base de dados (deve ter
permisses de DBCreator). As informaes para realizar essas atividades esto no apndice.

Uma vez ingressada a informao ser realizada a Anlise de Criao da Base de Dados (cuja execuo
pode ser lida na janela de Output), e o resultado ser o IAR (reporte de Anlise de Impacto). Observe com
ateno a informao que brinda o reporte, para cada uma das tabelas. Depois pressione o boto Create, a
fim de que seja criada a BD (se no existia) e as tabelas.

Depois de executar o programa de Criao da base de dados, comea o processo de gerao dos
programas correspondentes aos dois objetos criados, na linguagem definida quando a KB foi criada. Ao
finalizar a construo dos programas, vai abrir uma janela do browser de Internet, com a aplicao em
execuo. Observe toda a listagem na janela de Output. Ali mostrado tudo o que os programs em
execuraao iro fazer. Observe tambm como aberta uma aba Navigation View que permite visualizar os
objetos que precisam ser gerados para contruir a aplicao.

Entre com alguns pases e clientes. Onde aparece o cabealho (Application Header) e o rodap de pgina (footer)
que so visualizados em execuo nas duas transaes? (Observe em GeneXus, na aba Navigation View que foi
aberto na janela central, o objeto AppMasterPage gerado). Depois:

Ingresse um pas sem informar o Identificador. O autonumber est funcionando?


Ingresse um pas sem nome.
Execute os botes de navegao para percorrer os pases ingressados.
Selecione um pas dos pases existentes, utilizando o boto Select. Que objeto aberto ao faz-lo? Voc
programou algo para isso? V a sua KB e busque na lista de objetos.
Edite um pas existente, digitando seu cdigo no campo CountryId e depois saia desse campo. Deixe o
vazio o campo correspondente ao nome do pas e confirme.
Edite um pas existente e o elimine.
Ingresse um cliente novo, digite um identificador de pas inexistente, ou deixei vazio o pas. Qual ndice
foi utilizado para validar que o pas exista?
Pressione a imagem que aparece ao lado de CountryId e selecione um dos pases existentes. Qual objeto
abriu? Observe que o mesmo que quando pressionou Select na transao Country para escolher um
pas.
Dexe vazio o nome de um cliente, e depois seu endereo.
Observe que CustomerTotalPurchases est Read Only, da mesma forma que CustomerBalance. Por qu?
Elimine um pas que tenha pelo menos um cliente associado. Qual ndice foi utilizado para validar que o
pas tenha ao menos um cliente associado e impedir a eliminao?
Ingresse 2 clientes com o mesmo nome. Em seguida vamos ver como podemos evitar isso.

Pgina 7

Curso GeneXus X: Exerccios prticos

Chave candidata
Se na sua realidade no podem existir 2 clientes com o mesmo nome, isto , se CustomerName no pode ter valores
duplicados, como implementado para que a checagem seja realizada automaticamente?
Defina um ndice unique sobre a tabela CUSTOMER, composto pelo atributo CustomerName, de tipo ascendente.
Escolha a opo FolderView/Tables, depois escolha a tabela CUSTOMER e selecione a aba Indexes.
Observe o Warning apresentado no Impact Analysis, depois de F5: aparece uma viso que a reorganizao vai
falhar se existir clientes com o mesmo nome. Voc pode prosseguir com a reorganizao, mas se o seu caso for o
que mostra o aviso do warning, a reorganizao cancelada. Para resolver, v primeiro ao browser, execute a
transao Customer (http://localhost/BillingSystem.NetEnvironment/customer.aspx) e modifique o nome de um
dos clientes que est com o mesmo nome. Volte ao GeneXus e pressione novamente F5. Agora sim, voc pode
executar a reorganizao, o ndice unique ser criado por CustomerName na tabela CUSTOMER, e no ser
permitido que seja ingressado mais de um cliente com o mesmo nome.

Efeito de permitir valores nulos em atributos Foreign Key (FK)


Como voc deve ter visto, os programas GeneXus controlam a integridade referencial entre as tabelas. Assim
controlado para cada FK informada se seu valor vlido (um valor existente como PK na tabela referenciada, de
busca); e tambm por default controlado que as FKs no fiquem com valores nulos.
Devido a isto, at agora no se permitiu ingressar um cliente sem associar um pas, foi obrigatrio associar a cada
cliente um cdigo de pas vlido.
Todavia talvez algum cliente ou alguns clientes, no possua informao do seu pas de origem. E precisa que possa
ingressar um cliente sem associar um pas, o que deve ser modificado na estrutura da transao Customer?
Na coluna Nullable do atributo CountryId, alterar o valor de No para Yes. Salve e pressione. Observe que a BD vai
ser reorganizada. Em seguida, deixe um cliente sem pas e observe que agora isto ser permitido.

Mais transaes: Product e Invoice


Criar a transao Product com os seguintes atributos em sua estrutura:
Atributos:
ProductId

Product Id

Id

ProductDescription

Product Description

Description =
Character(30)

ProductStock

Product Stock

Stock=Numeric(4)

ProductPrice

Product Price

Price

Defina os domnios inline, isto , defini-los diretamente na estrutura da transao.

Pgina 8

Curso GeneXus X: Exerccios prticos

Form Web:
Selecione com o mouse os distintos controles do form e
veja como vai mudando o que mostra nesta barra.

Por exemplo, ao selecionar o boto btn_last, a barra se v assim:

Pgina 9

Curso GeneXus X: Exerccios prticos


Em seu extremo direito a barra contm uma etiqueta que identifica o controle btn_last, e para a esquerda contm
etiquetas sucessivas que identificam os controles que contem. Posicionando o mouse sobre as etiquetas da barra
que identificam os controles do form, e veja como se remarca cada controle dentro do form.
Tip: Tambm tem disponvel a janela Document Outliner para trabalhar com os controles do form. Edite e observe a
rvore de hierarquia dos controles.
Regras:

O estoque do produto no pode ser alterado se for uma alterao, somente permitir ingressar o
estoque do produto ao inserir um produto.
No permitir que o estoque fique com valor vazio ao ingressar um produto novo.

Voc pode executar agora a nova transao, ou executar depois de criar Invoice. O ltimo sugerido.

Transao Invoice
Crie a transao Invoice de 2 nveis com os atributos da tabela abaixo e defina o domnio Amount baseado no
domnio Total, e os domnios ShortId e Quantity como indicado abaixo:

InvoiceId

Invoice Identifier

Id

InvoiceDate

Invoice Date

Date

CustomerId

Customer Id

Id

CustomerName

Customer Name

Name

CustomerTotalPiurchases

Customer Total Purchases

Total

(Total de compras de Cliente)


{ InvoiceDetailId

Detail identifier

ShortId = Numeric(2)

ProductId

Product Identifier

Id

ProductDescription

Product Description

Description

ProductStock

Product Stock

Stock

ProductPrice

Product Price

Price

InvoiceDetailQuantity

Invoice Detail Quantity

Quantity= Numeric(3)

(Quantidade levada do Produto)


InvoiceDetailAmount }

Invoice Detail Amount

Amount

(Valor da linha de detalhe)

Pgina 10

Curso GeneXus X: Exerccios prticos

InvoiceAmount

Invoice Amount

Amount

(Valor total de Fatura)

Ao invs de inserir um a um dos atributos ProductId, ProductDescription, ProductStock e ProductPrice,


voc pode selecionar os 4 a partir de View/Work With Attributes e fazer Drag & Drop na estrutura da
transao.
Atribua o nome Detail ao segundo nvel da transao.
Observe que estando no segundo nvel, ao pressionar . para nomear aos atributos InvoiceDetailQuantity
e InvoiceDetailAmount sugerido InvoiceDetail como a primeira parte do nome.
Voc pode mover um atributo de um nvel at outro, com boto direito sobre o atributo e Unindent. A
operao contrria se realiza com Indent. Suba e baixe os atributos dentro do mesmo nvel, selecionando
os atributos e depois pressionando boto direito e Move Items up ou Move Items Down.
Salve a transao definida. V ao folder Tables do FolderView e observe os nomes que GeneXus coloca
por default as tabelas correspondentes a cada um dos nveis. Observe os atributos que aparecem em cada
um. A chave primria da tabela correspondente ao segundo nvel composta por dois atributos: InvoiceId
e InvoiceDetailId. Observe os ndices que o GeneXus vai criar sobre esta tabela.

Observe o form web que foir criado (por default) e compare com o form abaixo que foi ligeiramente modificado:
Form Web:

Observe que CustomerId e CustomerName foram colocados na mesma fila (os controles podem ser
movidos com Drag & Drop).
CustomerTotalPurchases no aparece no form (esse controle deve ser eliminado).
Para eliminar uma fila vazia de uma tabela, se posicione em uma clula da fila a ser eliminada, e selecione
com boto direito/Table/Delete Row.
A forma de alinhar os controles os colocando em tabelas. Para inserir uma tabela, uma das
possibilidades selecionar Insert/Table.
Com o cone Show Borders:

em tempo de desenho e no de execuo podem serem

Pgina 11

Curso GeneXus X: Exerccios prticos

vistas as bordas das tabelas onde esto contidos os controles do form. Clique neste cone para ver as
bordas das tabelas.

Observe que ProductStock no aparece no grid do form mostrado. Ele deve ser ocultado para que no seja visto.
Lembre que para trabalhar com as colunas de um grid, eliminar atributos ou variveis das colunas, reordenarem as
colunas, etc., voc tem:

Properties (F4): Estando posicionado sobre certa coluna do grid, edite as propriedades dessa coluna.
Para a coluna ProductStock mude o valor da propriedade Visible de True para False.

Boto direito sobre o grid/Columns: mostrada a lista de colunas includas no grid (por default so os
atributos correspondentes ao segundo nvel da transao). Por este caminho tambm possvel selecionar
ProducStock, editar sua propriedades e mudar o valor da propriedade Visible de True para False.

Boto direito sobre uma coluna do grid /Insert Column: para agregar uma coluna.

Boto direito sobre uma coluna do grid/Delete Column: para eliminar uma coluna.

Arrastrar e soltar (Drag & Drop) uma coluna: para mudar de lugar no grid.

Observe que os ttulos das colunas do grid so pequenos (no coincidem com as descries que demos aos
atributos). Se posicione na coluna ProductDescription e com F4 edite suas propriedades. Veja que a propriedade
Title possui o valor =ProductDescription.ColumnTitle (ele pega dinamicamente o valor da propriedade
ColumnTitle do atributo ProductDescription). Se agora voc se posicionar na coluna InvoiceDetailQuantity ou na
coluna InvoiceDetailAmount (que correspondem aos atributos da prpria tabela INVOICEDETAIL), na sua
propriedade Title possuem respectivamente os valores =InvoiceDetailQuantity.ContextualTitle e
=InvoiceDetailAmount.ContextualTitle (pegam dinamicamente o valor da propriedade ContextualTitle do
atributo).
Como se muda o valor dos ttulos das colunas? Opes:

Mudar o valor da propriedade Title da coluna estaticamente.

De acordo com a coluna, mudar a propriedade Column Title ou Contextual Title do atributo
correspondente na estrutura da transao.
Observe no seu form o Text Block Detail do grid. V estrutura da transao, se posicione sobre o nome do
segundo nvel e edite suas propriedades. Mude a propriedade Description e observe o que acontece com este text
block no form. O Text Block aparece agora com a nova descrio ingressada? Por qu?

No form acima mostrado, o controle do atributo InvoiceAmount aparece em vermelho e a direita. Para obter:

Observe que todos os atributos e suas descries (tanto os que correspondem ao primeiro nvel, como
os que correspondem ao segundo nvel e esto includos num grid) se encontram dentro de uma tabela
de 5 filas x 2 colunas. Inicialmente a tabela tem 7 filas mas para o que foi solicitado neste exerccio
voc deve eliminar 2 filas. Voc pode ver isto com maior clareza da janela Document Outliner.

Se posicione na fila onde est o atributo InvoiceAmount. Na primeira clula dessa fila voc vai encontrar
o text block de ttulo Amount, Observe a propriedade Caption deste text block (veja que a descrio
Amount pega dinamicamente da propriedade ContextualTitle do atributo InvoiceAmount). Agora se
posicione na clula em que se encontra o atributo InvoiceAmount. Boto direito/Properties (ou F4), e
modifique a propriedade Align para poder alinhar o contedo da clula.

Insera dentro da clula em que est o atributo InvoiceAmount uma tabela de 1 fila x 2 colunas. Para
fazer isso selecione Insert/Table ou faa Drag & Drop a partir da Toolbox.

Mova o controle correspondente ao atributo InvoiceAmount para a clula da direita da tabela que voc
acabou de criar. O text block com texto Amount coloque na clula esquerda da tabela. Para modificar
as propriedades desses controles (texto e atributo) para que apaream em preto e vermelho
respectivamente, selecione cada controle e modifique a propriedade que corresponda mediante a janela
de Propriedades.

Regras:
1. Por defautl a data da fatura deve ter o dia de hoje.
2. A data no pode ser vazia e nem maior que o dia de hoje.

Pgina 12

Curso GeneXus X: Exerccios prticos

Execute as transaes Product e Invoice


Depois do F5 no se esquea de estudar o IAR para ver que as tabelas foram criadas exatamente como voc
pensava.
Execute e observe que as regras definidas em cada transao estejam sendo disparadas.
Execute o administrador de dados dentro do grid: insira, modifique e elimine linhas do grid de uma fatura.
Volte ao GeneXus e agregue as regras abaixo na transao Invoice:
3. Numere as linhas da fatura de forma automtica (a partir daqui o atributo InvoiceDetailId no precisa ser
informado pelo usurio. Desabilite.)
4. Atualize o total de compras do cliente.
5. Atualize o estoque do produto.
6. Controle que o estoque do produto no fique negativo.
7. No permita que seja ingressado mais de 5 linhas na fatura (relacionado a frmula 3, na continuao ser
visto).

Frmulas:

1. Calcule o valor de cada linha da fatura (InvoiceDetailAmount).


2. Calcule o total da fatura (InvoiceAmount).
3. Conte a quantidade de linhas ingressadas.

Construa a aplicao (F5).

Por que necessrio reorganizar? Observe detalhadamente o que foi informado pelo IAR. Devem eliminar-se os
atributos InvoiceAmount e InvoiceDetailAmount das tabelas correspondentes. Por qu?
A listagem de navegao de Invoice vai mostrar 2 Warnings devido a presena das regras Add e Subtract.
Informe que em modo update no podero ser atualizados os atributos CustomerId e ProductId. Explicao: Se
fosse permitido modificar o ProductId, a regra Subtract(InvoiceDetailQuantity, ProductStock) deveria acessar o
registro de PRODUCT correspondente ao ProductId que a linha tinha inicialmente, desfazer o subtract que foi
efetuado previamente, e depois acessar ao registro de PRODUCT correspondente ao ProductId atual na linha e
realizar o subtract. Isto , deveria acessar 2 registros distintos de PRODUCT. Isto no possvel, e por isso
desabilitada a opo de modificar o atributo ProductId. Caso queria modificar o produto em uma linha, ter ento
que eliminar a linha e voltar a inserir com o Id de produto desejado. Anlogo o caso da regra Add e o atributo
CustomerId.
Execute tudo o que foi agregado.

Regra de atribuio versus frmula


Se desejar visualizar no form de Invoice o saldo do cliente. Lembre que:
CustomerBalance = CustomerTotalPurchases - CustomerTotalPayments.

Na transao Customer foi solicitado uma regra para calcular o saldo do cliente como a diferena entre suas
compras e pagamentos e na transao Invoice foi solicitado a regra 4 para atualizar o total de compras do cliente
com cada fatura: add( InvoiceAmount, CustomerTotalPurchases).
Ingresse uma fatura para um determinado cliente e observe que se dispara a regra 4 definida, mas no se atualizou
o saldo, CustomerBalance, de acordo com o clculo anterior. Por qu?
Modifique o que for necessrio para que sempre que for consultado o atributo CustomerBalance desde qualquer
objeto GeneXus, seja calculado.

Pgina 13

Curso GeneXus X: Exerccios prticos

Antes do F5, reflita se deve reorganizar a base de dados. Qual tabela dever ser modificada?

Normalizao
Se na estrutura da transao Invoice agregrarmos no primeiro nvel os atributos CountryId e CountryName, O que
vai acontecer na tabela INVOICE? O atributo CountryId ser armazenado como Foreign Key na tabela COUNTRY?
GeneXus vai entender que esse atributo dever ser inferido, da mesma fora que CustomerName, do cliente
CustomerId?
Execute essas alteraes no GeneXus (agregue os atributos CountryId e CountryName ao primeiro nvel de Invoice
e veja no momento de salvar, o cone que fica a esquerda de CountryId na estrutura j est indicando antes do F5
que uma FK ou se vai ser um atributo inferido). Execute este comportamento e veja se o que voc esperava.
Reflita sobre o realizado.

E se quiser que a fatura tenha um pas prprio, que deva ser ingressado associado a fatura e independente do pas
do cliente? Por agora voc no tem como resolver, mas o far mais adiante quanto estudarmos o conceito de
subtipos.

Pgina 14

Curso GeneXus X: Exerccios prticos

Avanado: Transao Customer [Opcional]


Compare o form que mostramos antes para a transao Customer como o seguinte (encontre as
diferenas):

O que foi feito aqui foi disfarar o atributo CountryId de CountryName, permitindo que o usurio em execuo
trabalhe com descries ao invs de trabalhar com cdigos. Veja este novo form proposto em execuo:

Pgina 15

Curso GeneXus X: Exerccios prticos


Para o usurio mais fcil lembrar o nome de um pas do que saber qual o seu identificador. O sistema
internamente continua trabalhando com o identificador.

Como se consegue este comportamento? Temos uma forma particular (que se aplica a esse controle nesse form) e
outra geral (que aplicar para todo form em que estiver CountryId).
A forma particular editando as propriedades do controle do atributo CountryId no form. Tem que selecionar o
controle no form e modificar o valor da propriedade InputType associada ao controle. Por default esta
propriedade possui o valor Values (que significa que o prprio valor do atributo ser ingressado) e ter que
selecionar o valor Descriptions (que significa que o valor entrado ser pego de um atributo descritivo, mas o valor
armazenado ser o que corresponda ao prprio atributo).

Propriedades a serem configuradas para o controle do atributo CountryId:

1)

Escolher valor: Descriptions


Como consequencia:

Se completa automaticamente a propriedade ItemValues = CountryId

Se solicita completar a propriedade ItemDescriptions

2)

Completar propriedade ItemDescriptions = CountryName

3) Observe na prxima figura todas as propriedades remarcadas. Uma vez configuradas ditas propriedades para o
controle CountryId no form de Invoice, fica implementado o disfarce para que o valor que o usurio entrar em

Pgina 16

Curso GeneXus X: Exerccios prticos


CountryId seja um nome de pas, mas o valor que vai ficar armazenado no atributo CountryId seja o identificador de
pas correspondente:

Observe que foi configurado tambm o valor da propriedade Suggest. Esta propriedade permite indicar que seja
sugerido ao usurio a medida que ele estiver digitando, as descries armazenadas que coincidam com o digitado
(para que escolha um dos valores j existentes). No form em execuo mostrado acima, pode-se observar este
comportamento.

Observe que depois de definir este disfarce, o controle CountryId visualizado no form com o mesmo tamanho da
definio de CountryName (j que o usurio vai ingressar nomes de pases em dito controle). Tire o controle
atributo CountryName do form, pois ele no mais necessrio.

Ao invs de ter configurado estas propriedades em nvel do controle no form, poderia ter sido feito pela soluo
geral, configurando as mesmas propriedades mas associadas ao atributo (editando as propriedades do atributo na
estrutura da transao). Definindo desta maneira, em todo form em que for inserido CountryId se administra o
disfarce (e o controle atributo CountryName diretamente no ser includo).

Uma funcionalidade muito similar aqui utilizar um Dynamic ComboBox para o atributo CountryId.

Execute para ver o comportamento.

Pgina 17

Curso GeneXus X: Exerccios prticos

Avanado: uso de imagens [Opcional]


Busque uma imagem que identifique o sistema que est construindo, para agregar ao cabealho ou rodap de
pgina de todas as pginas do site.
As imagens em GeneXus so agregadas a KB mediante a criao de objetos de tipo Image, e depois podem ser
inseridos nos forms.
Para realizar isto, abra o n Customization/Images do FolderView. Selecione New Image para inserir uma nova
imagem na KB. Vai abrir um Wizard que no primeiro passo pergunta onde est o arquivo da imagem:

O passo seguinte vai pedir para ingressar tanto o nome da imagem na KB, como o path onde se encontra:

Os check boxes possuem duas funcionalidades que no veremos no curso presente.


Selecione Finish no wizard e grave a imagem que foi criada na KB.

Deixe-as desmarcadas.

Uma vez criada imagem na KB, ela pode ser inserida no form desejado, como controle Image. Abra a master
page associada a suas pginas (a master page por default) AppMasterPage que se encontra no folder
GeneralWeb. Insera um controle imagem, com a imagem criada recentemente.
Execute com F5. Ver que GeneXus somente precisa gerar o objeto AppMasterPage e j possui a alterao
funcionando.

Pgina 18

Curso GeneXus X: Exerccios prticos

Avanado: uso de documentos e arquivos [Opcional]


Observe que uma KB GeneXus pretende centralizar todo o conhecimento relacionado a uma aplicao. Nesse
entendimento, existe a possibilidade de incorporar arquivos de toda ndole na KB, como o plano diretor, um
arquivo word, arquivos xsl, etc.. Desta maneira voc no desperdia informao relacionada ao projeto em
diversos lugares. A KB que centraliza tudo. Os arquivos so agregados na KB de uma forma similar as imagens.
Veja o n Files dentro de Documentation do FolderView.
Por sua vez se conta na KB com documentao estilo Wiki (uma pgina principal: Main Document que est abaixo
do n Documentation do FolderView). Nesta pgina voc pode escrever informao e agregar links a outros
recursos da KB (imagens, pginas correspondentes a documentao de cada objeto GeneXus, etc.).
Para agregar links na pgina Main Document para outros documentos, objetos, imagens, etc., utiliza-se a Toolbox
(desde a mesma se arrasta e solta o objeto sobre a pgina):

E outra forma escrever dois parnteses retos e se abre uma lista de objetos para selecionar, para incluir link a

sua seo de documentao:

Pgina 19

Curso GeneXus X: Exerccios prticos

3. Consultas batch: procedimentos


Em seguida propomos realizar uma srie de listagens.

Para poder visualizar diretamente a partir do browser uma listagem, o mesmo deve ser gerado como PDF. Para
isto precisa ser configurado as seguintes propriedades do objetoprocedimento:

Main program = True

Call Protocol = http

Report Output = Only to File


E a regra seguinte:

Output_file(nome-arquivo.pdf , PDF)

LISTAGENS SOLICITADOS:

1.

Listagem de clientes cujos nomes estejam includos em uma determinada faixa. Se voc no viu nada de Web
Panels trate essa faixa de forma fixa no Source (hardcoded). Se j viu como desenvolver uma Web Panel para
pedir dados ao usurio, programe e chame a partir da Web Panel a listagem solicitada (passe por parmetro, a
faixa informada pelo usurio na Web Panel). Os dados que se quer visualizar na listagem para cada cliente so:
Nome, Endereo e Saldo (CustomerBalance).

Antes de executar dedique uns minutos para estudar a Listagem de navegao. Lembre que o mesmo brinda com
a informao das tabelas que sero navegadas, os filtros que sero aplicados, a ordem em que sero devolvidos
os dados, etc. fundamental antes de testar a aplicao, prestar ateno especial ao informado aqui.

Observe a ordem que o GeneXus escolheu para o For each.

Est otimizado este procedimento?

Agregue a clusula order CustomerName no For each e observe o que mudou na listagem de
navegao. Observe o ndice utilizado em cada caso (se agrega/tira a clusula order).

A quais tabelas esto acessando o For each?

Agora agregue o nome do pas do cliente e observe a repercusso na listagem de navegao.

Debug
Ative a configurao do Debug para controlar o valor que dos atributos durante a execuo da listagem:

Agregue um breakpoint no incio do bloco do for each.

Agregue o atributo CustomerName na janela de visualizao.


2. Listagem da fatura ao finalizar o ingresso da mesma na transao Invoice.

Execute a aplicao

Observe o valor o atributo CustomerName vai recebendo.

2.

Listagem da fatura ao finalizar o ingresso da mesma na transao Invoice.

Observe a listagem de navegao resultante da especificao de ser reporte.


Um parmetro deve ser includo no procedimento para receber o identificador da fatura que se quer
imprimir. Este parmetro foi declarado com o atributo InvoiceId, ou voc definiu uma varivel? Quais
alteraes devero ser feitas em seu relatrio se agora voc declarar como parmetro a opo
contrria a escolhida?
Qual informao aparecer listada se a partir da transao Invoice chama este reporte com call nas
regras, e condiciona a chamada com o evento de disparo: On BeforeInsert?
E se condiciona a chamada com o evento de disparo: On AfterInsert?
Estaria certo condicionar o disparo com On AfterInsert Level InvoiceDetailQuantity?
E com On AfterLevel Level InvoiceDetailQuantity? Qual diferena deste caso com On AfterComplete?

Pgina 20

Curso GeneXus X: Exerccios prticos

3.

Listagem de vendas por cliente, incluindo somente os clientes que possuem faturas (Controle de
Corte).

Cliente : 1 - CliXXX

Id. Fatura

Data

Valor

01/01/08

R$ 150

01/02/08

R$1000

Total de vendas: R$1150

Cliente : 5 - CliYYY

Id. Fatura

Data

Valor

15

01/01/08

R$700

11

01/02/08

R$300

Total de vendas: R$1000

Observe cuidadosamente a listagem de navegao. Como voc sabe que um controle de corte?
Se alm de agrupar as faturas por cliente, totalizando o valor, deseja que saiam ordenadas as faturas
por nmero, o que dever fazer? Teste. No exemplo a fatura 11 deveria sair antes que a 15.
Por que GeneXus informa na listagem de navegao que a ordem ser a mesmo para os dois For
Eachs, incluso quando voc especificou uma ordem para o For Each externo e outra ordem para o For
Each aninhado?

Pgina 21

Curso GeneXus X: Exerccios prticos

4.

[Opcional: Duplo Controle de corte] Listagem de vendas por data, agrupadas por cliente. Ou seja, para cada
data que possuir faturas, se deseja ver a informao das mesmas (Identificador e Valor), mas agrupada por
cliente.

Data: 01/01/08

Cliente: 1 - CliXXX
Id

Valor

R$150

R$10

Cliente : 5- CliYYY
Id.

Valor

R$700

R$300

Total de vendas: R$1160

Data: 02/02/08

Cliente: 5 - CliYYY
Id

Valor

R$200

Total de vendas: R$200

5.

Este tema no aparece no curso, mas esto includas notas ao final do tema: final do Controle de
Corte. Leia cuidadosamente o exemplo e implemente a listagem pedida.
Quantos For Eachs so necessrios para implementar um controle de corte duplo?
Onde se especifica cada critrio de corte?

Listagem de pases que possuem mais de 5 clientes. Os dados a serem listados so Identificador e Nome do
pas.

Lembrar que as frmulas podem ser definidas tanto a nvel global (nvel de um atributo em uma
transao) como local (inline, no meio de certo cdigo).
Observe com cuidado a listagem de navegao. Se a frmula local se encontra dentro de um For Each, os
atributos mencionados da frmula participam na determinao da tabela base do For Each?

Pgina 22

Curso GeneXus X: Exerccios prticos

4. Data Selectors
Agregue transao Customer o atributo CustomerStatus, que ter 3 valores: Active, OnHold ou Closed. Para
isso crie o domnio Status enumerado (isto , ingresse na propriedade Enum values do domnio os valores:
Active, OnHold ou Closed). A tabela CUSTOMER ser reorganizada para agregar este atributo.
Agregue a transao Customer a regra: Default( CustomerStatus, Status.Active); para que os clientes que sejam
inseridos mediante a transao sejam inicializados como ativos. Mas, qual valor ter o atributo CustomerStatus nos
registros j existentes da tabela CUSTOMER (que foram inseridos antes de definir esta regra)? Clique em F5 e
observe o Warning que mostra o IAR. Cancele a reorganizao, volte ao atributo CustomerStatus da transao, e
modifique sua propriedade Initial Value:

Esta propriedade permite especificar um valor para um atributo, para que pontualmente no momento de
efetuar a reorganizao que agregou dito atributo na tabela, se atribui aos registros que j estavam
armazenados na tabela, o valor especificado no atributo criado. Faa novamente F5. Veja que desapareceu a
advertncia. Observe com o Scroll no IAR que na coluna Takes value from aparece o valor Status. Active para este
atributo a ser criado.

Supondo que repetidamente em nvel da aplicao se requeira filtrar por clientes ativos, possui sentido centralizar
esta definio, de tal maneira de reutiliz-la em todos os lugares que seja necessria. Para isso defina o seguinte
Data Selector:

Exemplos de utilizao de clientes ativos:


- Modifique a listagem de clientes dentro de uma faixa, para que mostre someste os ativos aproveitando a definio
do Data Selector.
- Modifique a ultima listagem (a 5 do prtico) para que somente liste os pases com mais de 5 clientes ativos.
- Agora, ao invs de utilizar o Data Selector em uma frmula inline, defina um atributo frmula global na transao
Country que conte a quantidade de clientes ativos de cada pas. Mostre no form da transao Country o atributo
frmula global definido.

Vantagens do uso de Data Selectors: Se a definio do cliente ativo precisa ser modificada, basta modificar
em s um lugar: no Data Selector, e todos os objetos, atributos, frmulas que o utilizam, sero impactados sem

Pgina 23

Curso GeneXus X: Exerccios prticos

necessidade de buscar e modificar manualmente.

5. Atualizaes no interativas da BD
1.

Realizar a modificao de desenho necessria na transao Product para que cada produto ao
invs de ter um somente um preo, tenha um histrico de preos segundo a data.
Ou seja, a estrutura da transao Product ficaria:
ProductId

Product identifier

Id

ProductDescription

Product description

Description

ProductStock

Product Stock

Stock

{ ProductPriceListDate*

Product Date

Date

ProductPriceListPrice }

Product Price

Price

Coloque o nome PriceList ao segundo nvel.


O form Web ficar:

Como conseqncia da alterao do desenho anterior na transao Product, j no possvel inferir o atributo
ProductPrice no segundo nvel da transao Invoice (porque ProductPrice j no pertence a tabela estendida da
tabela INVOICEDETAIL).

Pgina 24

Curso GeneXus X: Exerccios prticos


Deve-se tirar o atributo ProductPrice do segundo nvel da transao Invoice, definir um novo atributo
(InvoiceDetailProductPrice) e calcular o valor desse atributo (tem que encontrar o preo do produto de acordo a
data da fatura). Resolva isto definindo o atributo InvoiceDetailProductPrice como frmula global Max.
2.

Definir um procedimento para gerar uma nova lista de preos para os produtos. O procedimento deve
receber por parmetros: data de aumento e porcentagem de aumento. Novamente acontece que
dependendo se voc j viu como implementar uma Web Panel, poder implementar uma para pedir ao
usurio listar dados e chamar ao procedimento enviando o ingressado pelo usurio por parmetro. Caso no
tenha visto, coloque valores de data de aumento e porcentagem de aumento no Source de maneira fixa
(hardcoded) para testar. Para cada produto gerar um novo registro no histrico de preos, com a data de
aumento e o preo resultante tendo aplicado a porcentagem de aumento ao ltimo preo do produto
anterior a data de aumento.

Qual forma de atualizao (Business Component ou comando new) escolheu e por qu? Lembre o uso das
frmulas inline.
Realize tambm a atualizao utilizando a opo contrria a escolhida.
Execute 2 vezes o procedimento, com a mesma data de aumento. O que acontece?
Em caso de atualizao com BC realize o tratamento de erros e observe as mensagens obtidas ao tentar inserir 2
vezes com a mesma data.

3.

Definir a transao Bill, para registrar os recibos efetuados aos clientes por conceito de faturas. Sua
estrutura ser:

BillId*

Bill Id

Id

BillDate

Bill Date

Date

CustomerId

Customer Id

Id

CustomerName

Customer Name

Name

BillInvoicePeriodStartDate

Bill Invoice Period Start Date

Date

BillInvoicePeriodEndDate

Bill Invoice Period End Date

Date

BillAmount

Bill Amount

Amount

Implemente o seguinte: para um perodo de datas ingressado pelo usurio, se deseja que um processo
batch some para cada cliente o valor de todas suas faturas e gere um recibo para dito cliente, com a data
do dia, a faixa de datas considerada e o valor total a ser cobrado.
No material terico de Business Components se apresenta uma web panel que solicita uma faixa de datas
ao usurio; defina essa mesma web panel e chame a partir da web panel a um procedimento que receba
por parmetro os dados ingressados pelo usurio na web panel e resolva o solicitado.
Utilize um Data Provider para carregar os recibos antes de ingress-los na base de dados.
E caso queira que isso seja feito somente para os clientes ativos?

Para efeito de pura aprendizagem, modifique seu Data Provider carregando manualmente um recibo que voc
saiba que viola a integridade referencial (cliente inexistente). Voc pode testar tambm agregando alguma regra
msg e algum erro na transao Bill e no Data Provider carregar recibos que cumpram as condies dessas

Pgina 25

Curso GeneXus X: Exerccios prticos

regras e ver o que acontece ao tentar inserir esses registros.

6. Subtipos
Represente que cada fatura pertence a um pas independente de que o cliente da fatura tem seu pas. Quais
alteraes precisam ser realizadas? Implemente.
Observe que a fatura pertencer a um pas, por exemplo Uruguai, e o cliente da fatura poder pertencer a outro
pas, por exemplo, Estados Unidos .

7. Interface de usurio: Pattern Work

With e Web panels


Desenvola uma consulta interativa vistosa para cada ator: Customer, Country, Product e Invoice que
permita consultar todos os registros, ou filtrar os registros que cumpram as condies possveis (na continuao
sero indicadas quais), com vrias ordens para a consulta, e que seja possvel selecionar um registro para
modificar seus dados, eliminar ou inserir um registro novo. O objetivo oferecer consultas vistosas, uniformes,
consistentes e bem funcionais.
Consulta interativa de clientes:
Ao realizar a consulta se deseja visualizar de cada cliente:

seu
seu
seu
seu

identificador
nome
endereo
status (Active, OnHold, Closed)

Ter a opo de filtrar por: nome de cliente e/o endereo.


Ter a opo de odernar por: nome de cliente o endereo.
A consulta debe oferecer paginao: Observe no tab Work With do seletor Patterns da transao Customer que
na propriedade Page do n Selection(Work With Customers) aparece o valor <default>. Onde se busca
esse <default> Poderia ser um valor fixo e dexiar independente do valor defautl, ou modificar o atribudo ao
default (10).

Lembre que na janela Knwoledge Base Navigator, abaixo Preferences, se encontra o n Patters/Work With. Aqui
esto configurados os <defaults> e aplica-se em todos as Intancias dos Work With de todas as transaes
(Work With Pattern Instance). Em particular veja as propriedades dos ns Template, Grid e Standard Actions.
Observe que a propriedade Page do n Grid possui como valor um tipo de dados enumerado criado
automaticamente na KB, uma vez aplicado o pattern Work With a alguma transao.

Deseja-se selecionar um cliente e modificar seus dados ou elimin-lo. Tambm deve ser possvel inserir um
cliente novo. Observe que isto so os modos oferecidos por default (aes padres). Voc pode testar os modos
oferecidos (modificando os <default> ou diretamente a partir da instncia da transao).

Observe como ao salvar a transao ser gerado no FolderView, abaixo a transao um n WorkWithCustomer
que corresponde a prpria definio da instancia do Pattern para essa transao e subordinados todos os objetos
que o Pattern vai criar para construir o work with.

Pgina 26

Curso GeneXus X: Exerccios prticos

Execute e teste o que foi feito at o momento


Agregue ao grid de seleo a quantidade de faturas do cliente. Execute.

Observe em execuo que o atributo CustomerName o que possui o link para visualizao dos dados desse
cliente, tendo a possibilidade de atualizar ou eliminar o cliente, assim como ver suas faturas. Por que o pattern
escolheu esse atributo? Observe a instancia do pattern e deduza o motivo.

Modifique os atributos que so visualizados seguindo esse link: elimine da visualizao os atributos
correspondentes a Total Purchases, Total Payments e Country Id e reordene-os para que saiam na ordem que
voc prefirir. Desabilite a possibilidade de inserir uma nova fatura mediante o Tab (Invoice) e teste o que foi
implementado.

Alm disso, deseja que a consulta interativa de clientes, contenha um boto abaixo do grid, que chame a outra
pgina que mostre o seguinte:

uma lista (grid) com todos os pases, sendo possvel selecionar um e a partir dele que se mostre
outra lista (grid) com todas os clientes ativos desse pas, e depois escolhendo um destes clientes,
sejam mostradas todas as faturas do cliente escolhido.

Defina consultas interativas de pases, produtos e faturas, para ver como fcil obter uma aplicao
vistosa em segundos.

8. Consultas dinmicas
Queremos consultar por pas e cliente, os totais das faturas, junto com a quantidade de faturas.
Depois, queremos agregrar como eixo, as datas da fatura e poder pivotear a tabela, de tal forma de ver os totais
por pas, cliente e data, e depois por pas, data e cliente.
Depois de testar a consulta anterior num objeto Query, integre a consulta a aplicao web, criando uma web panel
que mostre o resultado da consulta em uma pivot table.

9. Workflow
Modelaremos e executaremos um workflow pequeno para ver na prtica esta funcionalidade.
Como passo prvio, defina a transao PaymentMethod:

Agregue a transao Invoice os atributos PaymentMethodId e PaymentMethodDescription.

Pgina 27

Curso GeneXus X: Exerccios prticos


Crie um diagrama de processo de nome SaleProcess e arraste a transao Invoice como primeira tarefa interativa.
Observe que foi definido automaticamente o dado relevante InvoiceId.

Quando uma vendedora ingressar uma venda (atravs da transao Invoice), ser ingressado o cliente, os
produtos solicitados, as quantidades, a forma de pagamento solicitada pelo cliente, a venda ser salva e a primeira
atividade termina. Depois essa venda deve ser avaliada por um supervisor (quem avalia de qual cliente trata, a
quantidade, a forma de pagamento), e o supervisor deve aceitar ou recusar a venda. Para realizar esta tarefa o
supervisor vai executar uma web panel de nome Authorization.

Defina uma web panel de nome Authorization que receba por parmetro o atributo InvoiceId. Inclua no form da
web panel os atributos com a informao de invoice e customer. Esta web panel disponibiliza ao supervisor 2 botes:
Authorize e Refuse.

Esta web panel serve para que o supervisor tome a deciso de autorizar ou recusar a venda. Se o supervisor
pressionar Authorize, carregue uma varivel com valor 1 e caso o supervisor pressionar Refuse carregue a
mesma varivel com 0. O valor atribudo a varivel seja visto no diagrama de processo, para que na continuao
desta tarefa interativa (web panel Authorization) possa inserir uma condio que avalie se o supervisor autorizou a
venda ou no.

Em caso da venda ter sido autorizada, que o fluxo siga at uma web panel que diga somente venda autorizada e
tenha um boto para fechar. Em caso da venda ter sido negada, que o fluxo siga at uma web panel que diga
somente venda rechazada e tenha um boto para fechar.

Executar este workflow (caso deseja crie regra e atribua as tarefas).

Pgina 28

Curso GeneXus X: Exerccios prticos

10. Apndice: Sql Server Express 2005


Se utilizar Sql Server Express 2005 como DBMS que administrar a base de dados de sua aplicao, aqui
indicamos como criar um usurio e password com permisses para criar a base de dados. Desta maneira quando
voc desejar configurar o acesso a base de dados da aplicao gerada por GeneXus, poder deixar que GeneXus
crie a base de dados sem que voc tenha que fazer.
1.

Execute o Microsoft SQL Server Management Studio Express que voc possui instalado em sua mquina.

2.

Observe que ali aparece o valor Server name que dever ser utilizado no Genexus.

3.

Conecte-se com Windows Authentication

4.

Acesse a Security/Logins

5.

Boto direito/New Login.

6.

Ingresse o nome do login (e memorize)

7.

Selecione SQL Server authentication e ingresse a Password correspondente (tambm memorize).

8.

Desabilite o check box Enforce password policy (em nosso caso estamos criando usurio e password de
teste, no necessitamos proteo especial de nossa password).

9.

Na janela da esquerda Select a page posicione sobre Server Roles e ali marque dbcreator.

10. Grave.
11. Pronto. Agora poder configurar em GeneXus a criao da base de dados com o nome que voc quiser,
indicando o Server name que obteve do passo 2 e o usurio e chave dos passos 6 e 7.

Pgina 29

You might also like