1) O documento descreve o uso de padrões (patterns) em GeneXus para gerar automaticamente objetos que implementam funcionalidades comuns como consultas, filtros e visualização de registros.
2) Aplicando o padrão "Work With" a transações como "Customer" e "Country", são criados objetos que oferecem telas interativas de consulta e visualização para esses domínios.
3) As propriedades dos padrões podem ser customizadas para personalizar o comportamento dos objetos gerados.
5. É natural ao desenvolver, ter que resolver partes muito similares mas não exatamente iguais.
Por exemplo, se em uma Base de Conhecimento tem modelados os objetos da realidade Customer e Country,
apesar de ditos objetos serem bem diferentes, os “Work With Customers” e “Work With Countries”
respectivamente, possuem muitas coisas em comum: um grid no form, um conjunto de variáveis para utilizar
em filtros, opções de ordens da consulta, chamadas à transação correspondente para atualizar a base de
dados, etc..
Surgem então os Patterns, oferecendo a possibilidade de aplicar um padrão (pattern) às instâncias desejadas
de uma Base de Conhecimento, e gerar todos os objetos GeneXus necessários para implementar certa
funcionalidade, considerando seus dados específicos.
Seguindo com o exemplo mencionado inicialmente, é possível aplicar o padrão “Work With” na Base de
Conhecimento, de tal forma que partindo das transações “Customer” e “Country” (e caso se deseja outras), se
obtenha todo o desenvolvimento correspondente ao “Work With Customers” e “Work With Countries” para
ambiente web (telas vistosas que implementam as consultas, com ordens, filtros, chamadas às transações
correspondentes, e mais).
6. A tela Work With oferece:
• Consulta interativa
• Múltiplas ordens
• Filtros
• Chamada à Transação nos diferentes modos (insert, update, delete, display)
• Possibilidade de incluir chamadas próprias a objetos
• Link em cada linha do grid a tela ‘View’
A tela View mostra:
• A informação do registro selecionado no grid Work With
• Um tab control com:
• Um tab com a informação do registro
• Um tab para cada tabela subordinada a tabela base do registro no grid Work With.:
7. Para aplicar o pattern sem demoras, basta editar a instância (selector “Work With” da transação), marcar o
check box e gravar. Pronto! Com isso são criados automaticamente os objetos GeneXus que implementam o
pattern (em particular a tela de seleção e filtro e a tela de View que mostramos antes). Assim mesmo se
modificará a transação para que agora receba por parâmetro o modo (Insert, Update, Delete, Display) e o
país.
8. 314
Uma vez gravada a instância, no folder view, abaixo o nome da transação, aparece o nome do pattern aplicado
a mesma (em nosso exemplo WorkWithCountry) e todos os objetos que GeneXus deve criar para implementar.
Em nosso caso serão criados 2 objetos de tipo Web Component, e 2 objetos de tipo Web Panel. São muitos
similares. A diferença é que um Web Component pode ser incluído dentro de outro objeto. No entraremos em
detalhes neste momento.
9. Ao aplicar o pattern Work With na Transação Country, será criado:
• Tela Work With:
• Terá um grid com os atributos CountryId e CountryName
• Poderá ordenar e filtrar por CountryName, por ser CountryName o atributo descriptor.
• Poderá chamar a transação nos diferentes modos
• Tela View: Mostrará dois tabs. O primeiro tab terá a informação do país selecionado, e o segundo terá a
informação dos clientes pertencentes a dito país (porque existe uma relação 1-N entre as transações Country e
Customer).
Caso não se queira visualizar o atributo CountryId no grid da tela Work With, basta editar suas propriedades a
partir do nó Attributes e colocar a propriedade Visible=False. Não pode ser eliminada porque é a chave
primária da transação Country.
10. São muitas as propriedades oferecidas nas instancias correspondentes ao padrão Work With, para
personalizar o comportamento dos objetos que serão gerados. Na continuação descrevemos algumas delas.
O nó Selection oferece as propriedades relacionadas a tela Work With que se gera para a instância. Seus sub-
nós são:
Modes (Ins, Upd, Del, Dis)
Este nó permite definir em quais modos se pode chamar a transação. As possibilidades e seus valores por
default são:
Insert: True
Update: True
Delete: True
Display: False
Na instância aparece <default> ao lado de cada uma das propriedades anteriores. Onde se configura este valor
por default? Veremos numas páginas mais adiante.
Para cada modo poderá especificar-se uma condição. São fornecidas as seguintes propriedades para esse
propósito: Insert Condition, Update Condition, Delete Condition, Display Condition.
Se define uma condição associada a um modo, a chamada para esse modo somente será habilitada a
avaliação da condição é verdadeira (Exemplo: CountryId=10).
11. Attributes
Este nó permite definir quais atributos desejam mostrar no grid (e para cada atributo, várias propriedades
podem ser personalizadas).
Orders
É possível oferecer ao usuário final várias ordens possíveis para ver o resultado da consulta (isto é, as linhas
mostrando os dados no grid). Utilizando o botão direito do mouse pode ser definida uma nova ordem (seu
nome e composição). Cada ordem pode estar composta por vários atributos (podendo indicar para cada um
deles se deseja ordem ascendente ou descendente). Um combobox será apresentado na tela WorkWith
oferecendo todas as possíveis ordens a serem selecionadas, para que o usuário final escolha e os dados
sejam apresentados no grid ordenados pelo mesmo.
Filter
Este nó permite definir condições de filtro, para que no grid sejam mostrados somente os registros que
cumpram com as mesmas.
Actions
O nó Actions permite incorporar ações próprias na tela WorkWith. Isto é, permite agregar botões (dentro ou
fora do grid) que chamem aos objetos indicados, com seus parâmetros correspondentes. O nó Actions não
está visible por default, estando posicionado no nó Selection e pressionando o botão direito do mouse, a
opção Add Actions é oferecida para ser agregada. Uma vez agregado este nó, estando posicionado sobre o
mesmo e pressionando o botão direito do mouse, se oferecerá a opção Add Action que permitirá agregar uma
ação com seu nome de ação, caption, objeto chamado, etc.
O nó View por sua vez, oferece as propriedades relacionadas a tela View gerada para a instância. Mostra toda
a informação de um registro, que foi selecionado no grid do WorkWith (a informação do registro é mostrada em
uma aba de um tab control, e além disso tem uma aba com um grid para cada tabela diretamente subordinada,
para mostrar a informação relacionada).
12. 318
O atributo CountryId, diferente do CountryName, não pode ser eliminado do grid, isso porque é um atributo que
se envia a transação ‘Country’ quando o usuário deseja modificar ou eliminar o país mostrado numa linha do
grid do Work With.
13. 319
Ao editar as propriedades estando posicionados no nó da instância que se mostra, podemos observar que
cada um dos modos que se pode chamar uma transação (para inserir, modificar, eliminar ou incluso mostrar)
estão listados como propriedades.
Podemos ver também que aparece uma propriedade Export que permite exportar os dados a uma planilha
excel.
Outra vez aqui podemos apreciar que cada uma das propriedades possui o valor <default> que ainda não
sabemos de onde é pego. Mas se queremos fixar um valor independente de qual seja o default, podemos
editar o combo box que apresentará três valores: <default>, ‘true’, ou ‘false’.
Fixamos o valor da propriedade Delete em ‘false’. Podemos ver em execução a repercussão. Não aprece no
grid a primeira coluna que contêm a imagem que permitia eliminar o país. Agora não se pode eliminar países a
partir dessa tela.
Observe também como desapareceu do grid o atributo CountryId. Ocultamos ele na página anterior.
14.
15. 321
Já havíamos definido o objeto BillingProcess para realizar o faturamento do mês de todos os clientes. Aqui
estamos agregando um botão fora do grid, que ao pressioná-lo chama outro objeto GeneXus que havíamos
criado anteriormente.
16. 322
O nó View por sua parte, oferece as propriedades relacionadas a tela view que se gera para a instância.
Mostra toda a informação de um registro, que foi selecionado no grid do Work With (a informação do registro é
mostrada em uma aba de um tab control, e além disso tem uma aba com um grid para cada tabela diretamente
subordinada, para mostrar a informação relacionada).
17. 323
Neste caso se não queremos que os atributos CustomerGender e CustomerStatus sejam vistas no grid em
execução, não necessitamos ocultá-los. Podemos diretamente eliminá-los.
18. 324
Uma vez executado o passo a) e escolher ‘Filter’ aparecerá um novo nó Filter imediatamente depois do nó
Attributes, com 2 subnós: Attributes e Conditions.
Depois, no passo b), deverá posicionar-se no subnó Attributes e fazer botão direito, onde se oferece a
possibilidade de agregar um atributo de filtro. Ao editar as propriedades, você deverá pressionar o combro box
vai mostrar uma janela onde se ingressa o atributo (em nosso caso, CustomerName). Com isto se cria
automaticamente uma variável com o mesmo nome que o atributo &CustomerName, que será o control que
aparecerá em execução para que o usuário digite ali o filtro. Vejamos o passo seguinte...
20. O padrão WorkWith além de gerar objetos novos, também modifica as transações, para que sejam chamadas
pelos objetos gerados pelo pattern, agregando a regra parm, etc..
Relacionado a isto, cada instância contêm a propriedade UpdateTransaction, que oferece os seguintes
valores:
Do not update: A transação não será modificada (web form, regras e eventos serão mantidos).
Only rules and events: Somente as regras e eventos serão modificados, o web form não é modificado.
Apply WW Style: A primeira vez que o padrão é aplicado, o comportamento será o mesmo que se houvesse
selecionado o valor Create Default. A partir da segunda vez que o padrão é aplicado, não se modificará a data
área do form da transação (caso tenha sido personalizada com GeneXus e deseja manter), e se modificará o
style área, assim como os eventos e regras.
Create default: Regras, eventos e form da transação (tanto data área como style área) serão modificados. No
que diz respeito ao form, será como selecionar a opção Create default a partir do GeneXus.
O valor por default para esta propriedade é Apply WW Style.
Enquanto as propriedades AfterInsert, AfterUpdate e AfterDelete, permitem definir o comportamento depois
que se insere, modifica ou elimina um registro.
Os valores possíveis para cada uma delas são:
• Default
• Return to caller
• Go to View
• Go to Selection
21. Aqui estão centralizados os <default> para toda instancia. Podemos ver que o nó Template oferece algumas
propriedades que mencionamos na página anterior.
O tamanho da página dos grids do work with, que nas imagens anterior era de 3 (se mostravam em 3 linhas
por página do grid) se configura no nó Grid. O valor por default desta propriedade é Page.Rows. Isto é, o valor
do domínio enumerado Pages criado por GeneXus automaticamente ao aplicar o pattern na primeira vez. O
valor que tem Page é 10. Nós tínhamos alterado para 3 para que não fosse mostrado as imagens complestas.
22. O dinamismo mencionado se mantêm para todas as partes default dos objetos.
Todos os objetos gerados por Patterns estão baseados no esquema de Defaults de GeneXus. Cada parte
(Form, Regras, Eventos) de cada objeto é gerado como Default. Caso alguma parte do objeto tenha sido
modificada, esta deixa de ser Default.
Por exemplo, se modificar o web form de um WW (não fica como default), e se agrega um novo atributo na
TRN, não vai ser atualizado automaticamente o grid WW com esse atributo (ou seja, não será agregado dito
atributo).
A implementação baseada em Defaults permite ter dinamismo entre a Transação e o padrão
• Alterar propriedades na definição do padrão (Pattern setting)
• Alterações na instância (agregar um novo filtro)
• Alterações na Transação (agregar um novo atributo)
Se quiser voltar o dinamismo, deverá ter novamente as partes como default.
Para isto, se deve selecionar a partir do Menu Edit / Apply Default (a parte onde se tem aberto o objeto) ou
Apply Default (All parts), voltando o default de todas as partes que haviam sido modificadas.