27
Prática do padrão WorkWithPlus

Laboratorio de WorkWithPlus Português

Embed Size (px)

Citation preview

Page 1: Laboratorio de WorkWithPlus Português

Prática do padrão WorkWithPlus

Page 2: Laboratorio de WorkWithPlus Português

P á g i n a | 2

Introdução

O padrão WorkWithPlus é um padrão desenvolvido por DVelop Software Solutions com o objetivo de

acompanhar a alteração tecnológica da nova versão de GeneXus. Foi desenvolvido a partir do WorkWith

Pattern convencional, desenvolvido pela Artech, com o objetivo de aumentar sensivelmente a flexibilidade

oferecida ao usuário, tanto para modificar a forma em que se geram os objetos, bem como para modificar

os objetos gerados sem perder a sua relação com o padrão.

Exercício

1. Começamos por criar uma nova KB.

Page 3: Laboratorio de WorkWithPlus Português

P á g i n a | 3

2. Em Prototyping Environment selecionamos a opção C# e em Target a opção Web.

3. Em seguida criamos uma nova transação (TRN) com nome Pais, com os seguintes atributos

(PaisId definir como AutoNumber = true).

Page 4: Laboratorio de WorkWithPlus Português

P á g i n a | 4

4. Logo salvamos a TRN e vamos a opção correspondente a “Patterns”. Aqui vamos encontrar a

opção para aplicar o padrão WorkWithPlus.

5. Selecionamos o Tab correspondente a WorkWithPlus e pressionamos o check box onde diz

“Apply this pattern on save”. Depois disso salvamos as alterações e vemos em Output o resultado

da geração do padrão. Por ser a primeira vez que aplicamos o pattern, WorkWithPlus importará

arquivos de configuração e em seguida aplicará o padrão à TRN selecionada. Por sua vez, aplicará

à TRN o Tema WorkWithPlus que depois se poderá editar.

Page 5: Laboratorio de WorkWithPlus Português

P á g i n a | 5

6. Verificamos se são gerados objetos distintos para cada TRN, tais como o objeto WWPais, para

trabalhar com todos os países, o objeto ViewPais, para ver um país em particular, a tela

correspondente à TRN País, etc.

7. Após isso, executamos a KB pela primeira vez (F5), onde serão pedido os dados para criação da

base de dados do aplicativo, forneça essas informações e prossiga.

8. A análise de impacto da KB confirma que temos uma nova TRN e devemos impactar as

alterações na base de dados. Como a base de dados ainda não existe, ela será criada

automaticamente. E em seguida a aplicação é gerada e executada.

Page 6: Laboratorio de WorkWithPlus Português

P á g i n a | 6

10. Entramos na opção “Work With Pais”, e pressionamos o botão de (+) para ingressar países.

11. Ingressamos 4 países e regressamos à KB, ao nó do pattern WorkWithPlus.

Page 7: Laboratorio de WorkWithPlus Português

P á g i n a | 7

12. Desde a instância de cada TRN podemos fazer um "Preview" de como se vai gerar a tela, sem

ter que especificar, compilar e executar. Para fazer isso pressionamos o botão direito sobre o nó

principal da TRN e selecionamos a opção “Preview” como se mostra na imagem superior.

A partir desta ação se mostrará uma tela com uma representação gráfica de como esta será

gerada.

13. O WorkWithPlus nos permite modificar propriedades de cada elemento dessa tela e ver as

alterações refletidas em "Preview". Nesse caso selecionamos o atributo “PaisNombre” e vamos a

propriedades.

14. Marcamos a opção “Is required” como True, para que o padrão WorkWithPlus estabeleça este

atributo como requerido.

Page 8: Laboratorio de WorkWithPlus Português

P á g i n a | 8

15. Este passo agregará as regras correspondentes ao nível de Rules como se vê na imagem

superior. Depois disso podemos pressionar novamente F5 e testar a funcionalidade agregando

algum país adicional.

16. Depois voltamos à KB e criamos a transação Persona, como se mostra em seguida, (PersonaId

tem AutoNumber = true).

17. O atributo PersonaSexo se define com base em um Domínio Sexo que tem a seguinte

estrutura:

Page 9: Laboratorio de WorkWithPlus Português

P á g i n a | 9

18. De seguida aplicamos o padrão WorkWithPlus a esta TRN, e se move a tabela TableActions

para cima de TableContent.

Page 10: Laboratorio de WorkWithPlus Português

P á g i n a | 10

19. Selecionamos a opção "Preview" da transação para ver como se vai gerar a tela (observar que

as ações aparecem por cima dos dados uma vez que se moveu a tabela de lugar).

Page 11: Laboratorio de WorkWithPlus Português

P á g i n a | 11

20. Depois selecionamos para que o atributo PersonaId não seja visível na transação, e retornamos

a tabela que contém as ações para debaixo da tabela que contém os atributos.

Em seguida queremos ter a possibilidade de selecionar em tempo de execução as colunas que

desejamos ver no grid correspondente ao nó selecionado, ou seja Trabalhar com Personas. Para

isso selecionamos o nó “Grid” dentro do ramo “Selection (Work With Personas)”.

21. Marcamos como True a opção “Columns selector”. Retornamos à TRN Personas no modo

"structure" e selecionamos o atributo “PaisId”. Para esse atributo selecionamos a opção InputType

= Descriptions. Em ItemDescriptions = PaisNombre, e em Suggest = OnRequest (esta opção nos

permitirá ingressar um país escrevendo o nome e não o id do mesmo).

Page 12: Laboratorio de WorkWithPlus Português

P á g i n a | 12

22. Depois de alterar esta configuração pressionamos F5 novamente, reorganizamos as alterações

correspondentes e vamos para a tela de ingressar pessoas.

Page 13: Laboratorio de WorkWithPlus Português

P á g i n a | 13

23. Depois de ingressar uma pessoa voltamos ao grid correspondente a Trabalhar com Personas.

Se desejamos agora alterar as colunas, tanto a sua ordem como selecionar quais são ou não

visíveis, podemos fazê-lo com Columns Selector.

24. Ao pressionar o botão de ‘Edit Columns’ se abre um popup onde podemos selecionar que

colunas queremos ver e em que ordem. Depois de realizar as modificações pressionamos o botão

de Update columns e vemos refletidas as alterações no grid.

Page 14: Laboratorio de WorkWithPlus Português

P á g i n a | 14

25. Em seguida queremos agregar uma coluna nova no grid, para isso retornamos ao nó Selection,

e no nó da grid selecionamos “Add” e depois “GridVariable” para inserir uma variável nova como

coluna.

Assim que selecionamos que queremos agregar esta variável, aparece uma janela onde se deve

escolher sobre que atributo ou domínio estará baseada essa variável. Elegemos o atributo

‘PersonaNombre’ e aceitamos. Se agregará no grid o seguinte nó:

26. Na nova variável modificamos o nome para “Nombre Completo”. Depois em LoadCode

iniciamos a variável. Este código se vai inserir diretamente no evento Load do objeto

WWPersonas. Lhe atribuímos:

&NombreCompleto = PersonaNombre + ' ' + PersonaApellido + ' (' + PersonaEdad.ToString() + ')'

Page 15: Laboratorio de WorkWithPlus Português

P á g i n a | 15

Depois disso abrimos o objeto “WWPersonas” e podemos verificar que no evento Load se inseriu

o código que agregamos na propriedade anterior.

Uma das vantagens de WorkWithPlus é a flexibilidade para poder editar os objetos gerados. O que

quer dizer que podemos editar os objetos por fora do código gerado pelo padrão. Ao fazer essas

alterações particulares sobre o objeto este ficaria normalmente deslinkado do padrão, e ao aplicar

o padrão novamente se perderia as alterações particulares. Com WorkWithPlus isso não ocorre, as

alterações particulares são guardados e o objeto se mantém linkado com a instância do padrão. Se

pode notar que o código gerado pelo padrão está delimitado por comentários (Start e End). O

usuário pode agregar código tanto por cima como por baixo do código gerado automaticamente, e

o mesmo não será sobrescrito no momento de reaplicar o padrão. Também se podem definir

novos eventos ou subs (isso se exemplificará mais à frente na parte prática).

28. Depois de executar (F5) vemos o resultado no grid.

29. De seguida vemos como se pode modificar a tabela que contém os botões de “Inserir” e

“Exportar” de forma a alinhar os mesmos para a esquerda.

Page 16: Laboratorio de WorkWithPlus Português

P á g i n a | 16

30. Também podemos alterar as colunas de lugar, como por exemplo mover a coluna Apellido

para cima, isto é, para antes da coluna Nombre.

Todas estas alterações na instância se podem salvar e aplicar novamente. Internamente o

WorkWithPlus vai deixar o nosso código de usuário igual sem alterações, e de acordo com isso vai

realizar as suas alterações.

31. Depois de aplicar estas alterações pressionamos F5 e vemos as alterações em execução.

32. Da mesma forma que se pode ingressar código de usuário, o usuário do padrão WorkWithPlus

pode inserir “zonas de usuário”. Estas são blocos ou zonas dentro das telas dos web panels

gerados pelo padrão, nos quais o programador tem total controle.

Ou seja, dentro destas zonas de usuário podemos inserir qualquer controle (textblock, variable,

User Control, etc) e ao re-aplicar o padrão estes se preservam da mesma forma em que os

inserimos. Por sua vez, podemos usar código de usuário para modificar propriedades nos

controles ou lhes atribuir comportamentos.

Page 17: Laboratorio de WorkWithPlus Português

P á g i n a | 17

De seguida vamos inserir uma Zona de Usuário ou “UserTable” no nó Selection dentro da tabela

TableGridHeader.

33. Atribuímos um nome à tabela que vai definir uma zona de usuário: myUserTable e salvamos a

transação.

Page 18: Laboratorio de WorkWithPlus Português

P á g i n a | 18

34. Depois de salvar a transação, abrimos o objeto WWPersona para ver debaixo da grelha a nossa

User Table.

35. Dentro desta tabela inserimos um TextBlock de nome “PagesTextBlock”.

36. A partir do código vamos usar este TextBlock para mostrar a página actual na qual nos

encontramos no grid. Para isso ingressamos o seguinte código no evento Grid.Load do objeto

WWPersona:

37. De seguida pressionamos F5 e vemos as alterações em execução.

Page 19: Laboratorio de WorkWithPlus Português

P á g i n a | 19

Com este exemplo podemos ver o potencial desta funcionalidade, que permite ao usuário inserir

qualquer tipo de controle que interaja com os demais controles na tela (e desta forma agregar

valor aos objetos gerados por WorkWithPlus).

38. Em seguida vamos gerar um Web Panel de associação. Para isso criamos 2 TRN, Empresa e

Moeda. Depois criamos uma terceira TRN EmpresaMoneda (que será o que vai gerar a tabela de

relação) como se mostra nas imagens (a TRN EmpresaMoneda deve estar configurada como

Business Component).

O Web Panel de associação permitirá ao usuário selecionar para determinada empresa, quais as

moedas que a mesma vai operar (as moedas relacionadas com cada empresa).

39. Aplique o padrão WorkWithPlus na transação de Empresa, e dentro do nó Level selecionamos

a opção Add -> Association, e selecionamos a TRN EmpresaMoneda.

Page 20: Laboratorio de WorkWithPlus Português

P á g i n a | 20

De seguida salvamos a instância e assim se aplicará o pattern e se irá criar o novo Web Panel.

Depois disso modificamos os TextBlocks: “Not associated Empresa Moneda” e “Associated

Empresa Moneda” por “Monedas no asociadas” e “Monedas asociadas”.

41. Agregamos uma UserAction ao nível do grid do nó Selection e selecionamos em GXObject o

objeto criado como associação. Selecionamos o tipo Imagem para o controle e especificamos uma

imagem.

Page 21: Laboratorio de WorkWithPlus Português

P á g i n a | 21

42. Agregamos um parâmetro a UserAction que seja “EmpresaId”.

43. Depois salvamos o padrão novamente e executamos. Ingressamos uma empresa e 3 moedas e

em seguida executamos Work With Empresas e pressionamos o botão de “Moneda Asociadas”

para modificar esta relação de N a N (desta forma poderemos entrar no novo Web Panel de

associação que nos permitirá selecionar as moedas relacionadas com cada empresa).

Page 22: Laboratorio de WorkWithPlus Português

P á g i n a | 22

44. Em Seguida, queremos que todos os objetos WW tenham a ação para exportar em pdf o grid

com os valores que estão sendo filtrados. Então vamos em Preferences da "KB Navigator /

Patterns / Work With Plus, e criamos uma StandardAction na qual selecionamos o nome

“ExportReport”. Agregamos a mesma na tabela “Table Actions”.

Page 23: Laboratorio de WorkWithPlus Português

P á g i n a | 23

Devemos configurar a propiedade ‘Include Action’ desta ação, para a ação esteja incluída no

objeto em <default>,:

Depois configuramos a propriedade “Preview” de WorkWithPlus Configuration de forma a ver

como ficarão os objetos gerados a partir deste Template, podemos associar qualquer transação da

aplicação. Aqui selecionamos Persona:

Page 24: Laboratorio de WorkWithPlus Português

P á g i n a | 24

Salvamos a configuração e executamos Preview do objeto Selection, e vemos o resultado:

Para que esta alteração impacte todas as instâncias (em particular os objetos Selection) de toda a

aplicação, executamos a ação ‘Update Instances’, sobre o nó ‘Instance Generation Template’. Logo

se pode visualizar o log que mostra quais Instâncias foram impactadas corretamente e que as

propriedades não se impactaram, pois haviam sido modificadas nessa instância em particular,

entre outros.

Em seguida, abrimos Transação de País e confirmamos que se inseriu a nova ação.

Page 25: Laboratorio de WorkWithPlus Português

P á g i n a | 25

Page 26: Laboratorio de WorkWithPlus Português

P á g i n a | 26

Por último, executamos a aplicação e testamos o "export report".

45. Agora vamos criar um web panel a partir do web panel template denominado:

WorkWithWithoutBaseTable. Para isso criamos um web panel que se denomine

‘WebPanelEjemplo’ e abrimos a instância do Pattern, clicamos na opção "Apply this pattern on

save" e salvamos o objeto, em seguida selecionamos o template no qual vamos basear este

WebPanel da seguinte forma:

Agora selecionamos o template ‘WorkWithWitohutBaseTable’ e observamos que se ingressaram

todos os nós que foram definidos no template:

Page 27: Laboratorio de WorkWithPlus Português

P á g i n a | 27

Em seguida agregamos variáveis no grid, baseadas em PersonaNombre, PersonaApellido e

PersonaEdad, teremos uma tela similar a de baixo:

Depois de salvar a WebPanel, se abre Eventos e se realiza o "for each" correspondente para que

percorra a tabela de Persona e lhe sejam atribuídas as variáveis.

Por último se executa a aplicação e se vêm os resultados em execução.