Professional Documents
Culture Documents
Exerccios Prticos
ltima atualizao: 30 de setembro de 2010
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
CONTEDO
1.
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.
4.
5.
6.
SUBTIPOS ..................................................................................................................................................... 26
7.
8.
9.
WORKFLOW ................................................................................................................................................. 27
10.
Pgina 2
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.).
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)
Pgina 3
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:
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
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
Character(1)
CustomerTotalPurchases
Total
CustomerTotalPayments
Total
CustomerBalance
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
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
Regras:
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:
Pgina 7
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.
Product Id
Id
ProductDescription
Product Description
Description =
Character(30)
ProductStock
Product Stock
Stock=Numeric(4)
ProductPrice
Product Price
Price
Pgina 8
Form Web:
Selecione com o mouse os distintos controles do form e
veja como vai mudando o que mostra nesta barra.
Pgina 9
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
Total
Detail identifier
ShortId = Numeric(2)
ProductId
Product Identifier
Id
ProductDescription
Product Description
Description
ProductStock
Product Stock
Stock
ProductPrice
Product Price
Price
InvoiceDetailQuantity
Quantity= Numeric(3)
Amount
Pgina 10
InvoiceAmount
Invoice Amount
Amount
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:
Pgina 11
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:
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
Frmulas:
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.
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
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
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
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).
1)
2)
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
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.
Pgina 17
O passo seguinte vai pedir para ingressar tanto o nome da imagem na KB, como o path onde se encontra:
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
E outra forma escrever dois parnteses retos e se abre uma lista de objetos para selecionar, para incluir link a
Pgina 19
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:
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.
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).
Debug
Ative a configurao do Debug para controlar o valor que dos atributos durante a execuo da listagem:
Execute a aplicao
2.
Pgina 20
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
Cliente : 5 - CliYYY
Id. Fatura
Data
Valor
15
01/01/08
R$700
11
01/02/08
R$300
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
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
Data: 02/02/08
Cliente: 5 - CliYYY
Id
Valor
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
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:
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
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
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
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
Date
BillInvoicePeriodEndDate
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
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 .
seu
seu
seu
seu
identificador
nome
endereo
status (Active, OnHold, Closed)
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
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:
Pgina 27
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.
Pgina 28
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.
4.
Acesse a Security/Logins
5.
6.
7.
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