Você está na página 1de 163

Transações

Quais nomes de atributos usamos?


Nomenclatura GIK Entidade + Categoria [+ Qualificador]

Product Invoice
{ {
ProductId* (PK) InvoiceId* (PK)
ProductName (S) InvoiceDate (S)
ProductPrice (S) -----
} Product
{
ProductId* (PK, FK)
ProductName (I)
ProductPrice (I)
InvoiceProductQuantity (S)
--------
}
}
Desenho de Transações
1 – N forte

Cada cliente pertence a um pais e um pais tem muitos clientes

1 N
COUNTRY CUSTOMER

Country Customer
COUNTRY { { CUSTOMER
CountryId* CountryId* (PK) CustomerId* CustomerId*
CountryName CustomerName
CountryName CustomerName
} CountryId (FK)
CountryName CountryId
}
1 – N fraca

Cada cliente tem muitos telefones e cada telefone pertence a um único


cliente
Customer
CUSTOMER
{
CustomerId* CustomerId*
CustomerName CustomerName
Phone
{ CUSTOMERPHONE
PhoneId*
FK CustomerId*
PhoneType chave
PhoneNumber PhoneId*
} PhoneType
} PhoneNumber
1 – N fraca

Cada hospital tem muitas salas e cada sala pertence a um único hospital

Hospital
HOSPITAL
{
HospitalId* HospitalId*
HospitalName HospitalName
Room
{ HOSPITALROOM
RoomId*
FK HospitalId*
RoomName chave
RoomId*
}
} RoomName
N – N (M)

Cada carreira tem muitas disciplinas e cada disciplina pode estar em


muitas carreiras

N N
CAREER SUBJECT
N – N: Opção 1 de 4

Cada carreira tem muitas disciplinas e cada disciplina pode estar em


muitas carreiras

Career Subject
CAREER SUBJECT
{ {
CareerId* CareerId* SubjectId* SubjectId*
CareerName CareerName SubjectName SubjectName
} }

CareerSubject
CAREERSUBJ
{
ECT
CareerId*
CareerId* SubjectId*
SubjectId* }
N – N: Opção 1 – Tabelas geradas

CareerId CareerName

CAREER 1 Computer Science

2 Data Science for Health


CAREER

N
SubjectId SubjectName
SUBJECT 1 Computer Logic

2 Programming Fundamentals

N
CareerId SubjectId
SUBJECT
1 1
CAREERSUBJECT 1 2

2 2
N – N: Opção 2 de 4

Cada carreira tem muitas disciplinas e cada disciplina pode estar em


muitas carreiras

CAREER Career Subject SUBJECT


{ {
CareerId* SubjectId*
CareerId* SubjectId*
CareerName CareerName SubjectName SubjectName
Subject }
{
CAREERSUBJ
ECT SubjectId*
SubjectName
CareerId*
}
SubjectId* }
N – N: Opção 3 de 4

Cada carreira tem muitas disciplinas e cada disciplina pode estar em


muitas carreiras

CAREER Career Subject SUBJECT


CareerId* { {
SubjectId*
CareerId* SubjectId*
CareerName
CareerName SubjectName SubjectName
} Career
CAREERSUBJ {
ECT CareerId*
CareerId*
CareerName
}
SubjectId*
}
N – N: Opção 4 de 4

Cada carreira tem muitas disciplinas e cada disciplina pode estar em


muitas carreiras

Career Subject
CAREER { { SUBJECT
CareerId* CareerId* SubjectId* SubjectId*
CareerName CareerName SubjectName SubjectName
Subject Career
{ {
CAREERSUBJ
ECT SubjectId* CareerId*
SubjectName CareerName
CareerId*
} }
SubjectId* } }
1-1

Cada curso é ministrado em uma sala e esta sala só pode ser


usada para ministrar esse curso

ROOM Room Course


{ { COURSE
RoomId*
RoomId* CourseId* CourseId*
RoomName
RoomName CourseName CourseName
} RoomId
RoomId Unique index
RoomName
}
1
1 N
ROOM COURSE
Criação de um índice
2
1

3
Normalização
GeneXus normaliza as tabelas na Terceira Forma Normal (3NF)
• Atributos inferidos em uma transação não são incluídos na tabela gerada

Continent Country Customer


{ { {
ContinentId* (PK) CountryId* (PK) CustomerId* (PK)
ContinentName CountryName CustomerName
} ContinentId (FK) CountryId (FK)
ContinentName (INF) CountryName (INF)
ContinentId (INF)
} ContinentName (INF)
}

CONTINENT COUNTRY CUSTOMER


ContinentId* CountryId* CustomerId*
ContinentName CountryName CustomerName
ContinentId CountryId
Integridade referencial
Integridade referencial

Country Customer
{ {
CountryId* (PK) CustomerId*
CountryName CustomerName
} CountryId (FK)
CountryName
}
CountryId CountryName
CustomerId CustomerName CountryId
1 URUGUAI
1 ANA 1
2 ARGENTINA
2 PEDRO 2

3 LUIS 2

O registro não é inserido 4 JOSE 3


Integridade referencial

Country Customer
{ {
CountryId* (PK) CustomerId*
CountryName CustomerName
} CountryId (FK)
CountryName
}
CountryId CountryName CustomerId CustomerName CountryId

1 URUGUAI 1 ANA 1

2 ARGENTINA 2 PEDRO 2

3 LUIS 2
O registro não é eliminado 4 JOSE 3
Tabela Base e Estendida
• Tabela Base
É qualquer tabela do banco de dados em que estamos posicionados trabalhando em um
determinado momento.

• Tabela Estendida
Dada uma tabela, sua tabela estendida é um conceito que nos permite pensar todas as
informações às quais temos acesso, a partir de suas chaves externas.
É o conjunto de atributos da própria tabela + todos os atributos das tabelas com as quais
ela tem um relacionamento N-1 direta ou indiretamente.

Tabela Base

Tabela Estendida
Diagrama de Tabelas
Exemplo
(diagrama de Bachman)

Customer Invoice
{ {
CustomerId* InvoiceId*
CustomerName InvoiceDate
} CustomerId
CustomerName
Product
Product
{
{
ProductId*
ProductId*
ProductName
ProductName
ProductPrice
ProductPrice
InvoiceProductQuantity
}
--------
}
}
Exemplo: Tabela Estendida de Invoice

BASE TRN
Exemplo: Tabela Estendida de Customer

BASE TRN
Exemplo: Tabela Estendida de InvoiceProduct

BASE TRN
Exemplo: Tabela Estendida de Product

BASE TRN
Subtipos
Múltiplas Referências :
É preciso salvar, para cada vôo, o aeroporto de partida e o aeroporto de chegada

Airport Flight
{ {
AirportId* FlightId*
AirportName FlightDate
} AirportId
AirportName
AirportId Erro por nome de
AirportName atributos duplicados
}
Solução 1 de 3: criar dois grupos de subtipos, um para o aeroporto de partida e
outro para o aeroporto de chegada

Airport Flight
{ {
AirportId* FlightId*
AirportName FlightDate
} DepartureAirportId
DepartureAirportName Subtype group: DepartureAirport
ArrivalAirportId
ArrivalAirportName Subtype group: ArrivalAirport
}
Solução 2 de 3: criar um grupo de subtipos, somente para o aeroporto de partida

Airport Flight
{ {
AirportId* FlightId*
AirportName FlightDate
} DepartureAirportId
DepartureAirportName Subtype group: DepartureAirport
AirportId
AirportName
}
Solução 3 de 3: criar um grupo de subtipos, somente para o aeroporto de chegada

Airport Flight
{ {
AirportId* FlightId*
AirportName FlightDate
} AirportId
AirportName
ArrivalAirportId
ArrivalAirportName Subtype group: ArrivalAirport
}
Múltiplas Referências :
É preciso salvar, além do país do cliente, o pais onde foi emitida a Fatura

Country Invoice
{ {
CountryId* InvoiceId*
CountryName InvoiceDate
} CustomerId
CustomerName
Customer CountryId Atributos inferidos
{ CountryName
CustomerId* InvoiceCountryId
CustomerName Subtype group: InvoiceCountry
InvoiceCountryName
CountryId }
CountryName
}
Regras
Regras

Error(“Enter the student name”) if


StudentName.isEmpty();

Msg(“The address is empty”) if


StudentAddress.isEmpty();

Default(StudentAddedDate, &Today);

Noaccept(StudentAddedDate);
Regras

Serial(CityId, CountryLastLine, 1);

Parm(attribute1, &variable1, ….);

Variável: Espaço em memória que posssui um nome e o


tipo de dados que pode guardar. São referenciadas através
do “&”.
Momentos de disparo
Browser Server Database

Commit
Momentos de disparo de regras

Em transações de um só nivel: Em transações de dois níveis:

On BeforeValidate On BeforeValidate
VALIDAÇÃO VALIDAÇÃO do cabeçalho
On AfterValidate On AfterValidate
On BeforeInsert/BeforeUpdate/ BeforeDelete On BeforeInsert/BeforeUpdate/BeforeDelete
No GRAVAÇÃO GRAVAÇÃO do cabeçalho
servidor, On AfterInsert/AfterUpdate/ AfterDelete On AfterInsert/AfterUpdate/AfterDelete
depois de On BeforeValidate
pressionar VALIDAÇÃO da línha
Confirm Para On AfterValidate
cada
OnBeforeInsert/BeforeUpdate/BeforeDelete
línha
GRAVAÇÃO da línha
On AfterInsert/AfterUpdate/AfterDelete
On AferLevel Level Atributo das línhas
On BeforeComplete On BeforeComplete
COMMIT COMMIT
On AfterComplete On AfterComplete
Momentos de disparo de regras

PrintCustomer(CustomerId) on AfterInsert, AfterUpdate; ¿Está certo ou não? Está


correto!

VALIDAÇÃO
On Aftervalidate

GRAVAÇÃO
On AfterInsert / On AfterUpdate / On AfterDelete
Momentos de disparo de regras
Não está correto porque é
PrintCustomer(CustomerId) on ¿Está certo ou não? chamado APÓS a exclusão
AfterDelete; e o cliente não será
encontrado com esse ID
na tabela

VALIDAÇÃO
On Aftervalidate

GRAVAÇÃO
On AfterInsert / On AfterUpdate / On AfterDelete
Momentos de disparo de regras

Em transações de dois niveis:

On BeforeValidate
VALIDAÇÃO do cabeçalho
On AfterValidate
On BeforeInsert/BeforeUpdate/BeforeDelete
GRAVAÇÃO do cabeçalho
On AfterInsert/AfterUpdate/AfterDelete
On BeforeValidate
VALIDAÇÃO da linha
Para On AfterValidate
cada
OnBeforeInsert/BeforeUpdate/BeforeDelete
linha
GRAVAÇÃO da linha
<8 On AfterInsert/AfterUpdate/AfterDelete
On AferLevel Level Atributo das línhas
On BeforeComplete
COMMIT
On AfterComplete
Momentos de disparo de reglas

Em transações de dois níveis:


On BeforeValidate
VALIDAÇÃO do cabeçalho
On AfterValidate
On BeforeInsert/BeforeUpdate/BeforeDelete
GRAVAÇÃO do cabeçalho
On AfterInsert/AfterUpdate/AfterDelete
On BeforeValidate
✓on AfterComplete: VALIDAÇÃO da linha
Imediatamente depois de Para On AfterValidate
realizar o Commit no cada
OnBeforeInsert/BeforeUpdate/BeforeDelete
linha
banco de dados GRAVAÇÃO da linha
On AfterInsert/AfterUpdate/AfterDelete
On AfterLevel Level Atributo das linhas
On BeforeComplete
COMMIT
On AfterComplete
Exemplos
Determine se está correto ou não:

Invoice PrintInvoiceDetail(InvoiceId) on AfterComplete;


{
InvoiceId*
InvoiceDate
------- ProductControl(ProductId) on BeforeInsert;
Product
{
ProductId*
ProductControl(ProductId) on AfterComplete;
ProductName
ProductPrice
InvoiceProductQuantity
-------- Posso atribuir um valor a um atributo on
}
}
AfterInsert? NÃO
Patterns
Gerados automaticamente por GeneXus
Dinamismo

Transaction Pattern Generated


structure instance objects

Example: New attribute CountryFlag


Configurações Gerais

Como são inicializadas todas as instâncias?

Em Country…
Exclusão da aplicação do pattern

Delete
Fórmulas
Fórmulas Globais Product Invoice
{ {
ProductId* InvoiceId*
ProductName InvoiceDate
ProductPrice InvoiceAmount Sum(InvoiceProductAmount)
} Product
• É um cálculo que {
definimos associado a ProductId*
um atributo ProductName Atributos
ProductPrice “virtuais”
• São acessíveis em toda a InvoiceProductQuantity
KB InvoiceProductAmount
}
}

ProductPrice*InvoiceProductQuantity*0.9 if ProductId = 1;
ProductPrice*InvoiceProductQuantity*0.8 if ProductId = 3;
ProductPrice*InvoiceProductQuantity otherwise;
Country Customer
{ {
CountryId* CustomerId*
CountryName CustomerName
CountryCustomersQuantity CountryId
} CountryName
}

Count(CustomerName)

Esta fórmula contará clientes por país ou o número total de clientes?

Contará os clientes por cada país já que GeneXus realiza um filtro


automático pelo atributo em comum (CountryId).
Customer Invoice
{ {
CustomerId* InvoiceId*
CustomerName InvoiceDate
Dominio InvType
CustomerTotal InvoiceType
que oferece Credit
} CustomerId dois Enum Values
CustomerName Cash
InvoiceAmount
}

condição de cálculo
Sum(InvoiceAmount, InvoiceType = InvType.Credit)
If CustomerId = 3 condição de disparo
- Estão escritas no código
Fórmulas Inline
- São acessíveis apenas no objeto em que foram definidas

Requisito: Nos pedem um relatório de países com a quantidade de atrações de cada pais

Countries List
1 N
COUNTRY ATTRACTION
Country Quantity
___________________________________

Argentina 2 Country Attraction


{ {
Uruguay 3 CountryId* AttractionId*
CountryName AttractionName
Paraguay 1
} CountryId
Estados Unidos 5 CountryName
}
Formula inline no código de um objeto Procedimento

Tabela base do For Each: COUNTRY

Tabela navegada pela fórmula: ATTRACTION

Esta fórmula contará as atrações por país ou o número total de atrações?

Contará as atrações por cada país já que é feito um filtro automático pelo
atributo em comum CountryId (ambas tabelas estão relacionadas).
For each
Transação Base

Flight For each Flight


{ ---------
FlightId* Endfor
FlightDate
Transação Base
-----
Seat
{ Nome da transação cuja
For each Flight.Seat tabela física associada
FlightSeatId*
---------
FlightSeatChar deseja-se percorrer
Endfor
}
}
Ordem

Customer Requisito: nos pedem um relatório de todos os


{ clientes listados em ordem alfabética.
CustomerId*
For each Customer order CustomerName
CustomerName
-------
------ Endfor
}

Requisito : nos pedem um relatório de todos os clientes


ordenados de forma decrescente pelo nome.

For each Customer order (CustomerName)


-------
Endfor
Ordem

GeneXus permite ordenar pelo valor de um atributo que não está na tabela que
estamos percorrendo, mas em sua tabela estendida.
Filtros com Where

Flight For each Flight


{ Where FlightDate = Today()
FlightId* ---------
FlightDate Endfor
-----
Seat
{
FlightSeatId*
FlightSeatChar For each Flight.Seat
} Where FlightId = 1
} --------
Endfor
Filtros + Ordem Index

Customer For each Customer order CustomerName


{ Where CustomerName >= &NameFrom
CustomerId* ---------
CustomerName Endfor
CustomerAddress
}

¡Consulta otimizada!
For each Aninhados + Tabela base diferente + Tabelas NÃO relacionadas =
PRODUTO CARTESIANO

Country Produto Cartesiano 1 - Brasil


RoomA
{ RoomB
CountryId*
For each Country RoomC
CountryName 2 -Uruguay
Print Country RoomA
}
RoomB
For each Room RoomC
3 - Argentina
Print Room RoomA
Room Endfor RoomB
{ RoomC
RoomId* Endfor 4 - Estados Unidos
RoomName RoomA
RoomB
} RoomC
For each Aninhados + Tabela base diferente + Tabelas relacionadas = JOIN

Country
{
CountryId* 1 - Brasil
CountryName Join LUIS
JORGE
}
1 For each Country 2 - Uruguay
Print Country

N For each Customer 3 - Argentina

Print Customer
Customer Endfor 4 - Estados Unidos
{ ANA
CustomerId* Endfor
CustomerName
CountryId
CountryName
}
For each Aninhados + Mesma Tabela base + Tabelas relacionadas = CORTE DE
CONTROLE

Country
CORTE DE CONTROLE
{
CountryId*
CountryName For each Customer order CountryId
} Print Country 1 - Brasil
LUIS
For each Customer JORGE
Print Customer
Customer 4 - Estados Unidos
Endfor ANA
{
CustomerId*
Endfor
CustomerName
CountryId
CountryName
}
Resumo

Produto Cartesiano Join Corte de Controle

For each Country For each Customer order CountryId


For each Country Print Country
Print Country Print Country

For each Customer For each Customer


For each Room Print Customer
Print Room Print Customer
Endfor Endfor
Endfor
Endfor Endfor
Endfor

Tabelas Tabelas Mesma tabela,


diferentes, sem diferentes, com Agrupando com
relacionamento relacionamento order
Resumo

Produto Cartesiano Join Corte de Controle

1 - Brasil 1 - Brasil 1 - Brasil


RoomA LUIS LUIS
RoomB JORGE JORGE
RoomC
2 -Uruguay 2 - Uruguai 4 - Estados Unidos
RoomA ANA
RoomB
RoomC 3 - Argentina
3 - Argentina
RoomA
RoomB 4 - Estados Unidos
RoomC ANA

“Não existe relacionamento “Todos os paises e seus clientes, “Somente aqueles países que
entre ambas entidades, mostra independentemente que tenha tenhan clientes”
todas as possibilidades para clientes ou não”
cada país”
Comunicação entre objetos
Exemplo: passagem de parâmetros

Por exemplo, nas Regras da trn Country:


Country
{ CustomerList(CountryId) on AfterComplete;
CountryId*
CountryName
}

CustomerList
Customer
{ Parm(in: &CountryId);
CustomerId* Variável
CustomerName For each Customer
CountryId Where CountryId = &CountryId Filtro explícito
CountryName ---------
} Endfor
Exemplo: passagem de parâmetros

Por exemplo, nas Regras da trn Country:


Country
{ CustomerList(CountryId) on AfterComplete;
CountryId*
CountryName
}

CustomerList
Customer
{ Parm(in: CountryId);
CustomerId* Atributo
CustomerName For each Customer
CountryId Where CountryId = &CountryId Filtro implícito
CountryName ---------
} Endfor
Exemplo: retorno de um valor

Country Por exemplo, nas Regras da trn Customer:


{
CountryId* &Control = CustomerControl(CustomerId);
CountryName
}

CustomerControl
Customer
{ Parm(in: &CustomerId, out: &Control);
CustomerId*
CustomerName For each Customer
CountryId Where CustomerId = &CustomerId
CountryName ---------
} &Control = True
Endfor
Tipos de Dados Compostos
Conceito

John Smith 3 variáveis

5th. Avenue 1234


customer

1
John Smith Uma variável
5th. Avenue 1234
Definição

Objeto Structured Data Type

&OneCustomer: SDTCustomer

customer
Data Providers
Id: 1
Name: John Smith Um cliente
Address: 5th. Avenue 1234

SDTCustomer
Id: 2
s
Id: 1 Id: 3 Id: 4
Name: Susan
Name: John Smith Name: Robert Hill Name: Peter Jensen
Brown
Address: 5th. Ave. Address: 81th. St.. Address: St,Paul Rd.
Address: 7th.Ave.

Coleção de Clientes
Exemplo: Ranking de quantidade de atrações por país

País Qtde atrações

BRASIL 4
ARGENTINA 3
URUGUAI 2
CHILE 1

….

Exemplo: Ranking de quantidade de atrações por país

SDTCountries

Uma coleção de países

Id: 1 Id: 2 Id: 3 Id: 4


Name: URUGUAI Name: ARGENTINA Name: BRASIL Name: CHILE
AttractionQuantity: 2 AttractionQuantity: 3 AttractionQuantity: 4 AttractionQuantity: 1
Exemplo: Ranking de quantidade de atrações por país

Country
{
CountryId*
CountryName
}

Attraction
{
AttractionId*
AttractionName
CountryId
CountryName
}
Exemplo: Ranking de quantidade de atrações por país

Where…
Exemplo: Ranking de quantidade de atrações por país País Qtde Atrações

BRASIL 4
ARGENTINA 3
URUGUAI 2
Country CHILE 1
{
CountryId*
CountryName
}

Attraction
{
AttractionId*
AttractionName
CountryId
CountryName
}
Variáveis Coleção
&numbers

&Countries
Business Components
Conceito: tipo de dados especial baseado em uma transação
Conceito: tipo de dados especial baseado em uma transação
Exemplos: inserção e alteração

Category
{
CategoryId*
CategoryName Insert
}

Update
Exemplo: exclusão

Category
{
CategoryId* Delete
CategoryName
}
Métodos Insert e Update

Category Insert
{
CategoryId*
CategoryName
}

Update
Método InsertOrUpdate

Category
{
CategoryId*
CategoryName
}

InsertOrUpdate
Métodos en Coleções BC Attraction

AttractionId
AttractionName
CountryId
CityId
CategoryId
AttractionPhoto

BC BC BC
Attraction Attraction Attraction

&attractions
&attractions.Update()
&attractions.Insert()
&attractions.InsertOrUpdate()
Insert / Update / InsertOrUpdate

Recomendamos o uso dos métodos Insert, Update e InsertOrUpdate uma vez que:

- O uso dos métodos Load e Save para modificar o banco de dados é acessado duas
vezes - o que diminui o desempenho - enquanto no Update ou InsertOrUpdate é
acessado apenas uma vez.

- Os nomes desses novos métodos já são claramente auto-explicativos.


Manuseio de erros trabalhando con BC

Para cada variável Business Component,


uma coleção é carregada na memória com
todas as mensagens de aviso ou erro que
ocorrem como resultado das operações.
Carregamento de Dados
Transação
Inicializar dados de forma automática

GeneXus 15 oferece uma alternativa muito fácil para definir os dados com os quais deseja-
se popular as tabelas físicas criadas associadas às transações, o que evita ter que criar as
cargas de dados de outras formas.
Inicializar dados

Não carregamos o CategoryId


já que foi definido como autonumber
Inicializar dados: Somente leitura

Country
{
CountryId*
CountryName
}
Carregamento de Dados
Business Components e Data Providers
Exemplo

Country
{
CountryId* Autonumber = True
CountryName
}
Carregamento de Dados com Procedimentos
Comandos New / For each / Delete
Inserção – Comando NEW

Category
{
CategoryId*
CategoryName
}

Se o atributo é autonumber
não o informamos
Alteração / Comando FOR EACH

Category
{
CategoryId*
CategoryName
}

Country Attraction
{ {
CountryId* AttractionId*
CountryName AttractionName
City CategoryId
{ CategoryName
CityId* CountryId
CityName CountryName
} CityId
} CitlyName
}
Exclusão – Comando DELETE

Attraction
{
AttractionId*
AttractionName
CategoryId
CategoryName
CountryId
CountryName
CityId
CitlyName
}
Considerações

Os comandos New / For Each / Delete são usados para inserir, alterar e excluir informações do
banco de dados, mas eles só podem ser usados em Procedimentos.

Embora os comandos a seguir sejam usados para inserir, alterar e excluir informações do
banco de dados, recomendamos o uso do Business Component, uma vez que eles:

- Controlam a integridade referencial

- Disparam as regras definidas na transação


Web Panels
Web Panel sem grid, com variáveis no form

Variáveis: de entrada
(não readonly)
Web Panel sem grid mas com atributos no form

Parm(in: AttractionId);

É carregado só um registro
Grid: COM TABELA BASE
Transação base
Ordem
Grid: COM TABELA BASE
Condições de filtro
Muitas condições
Eventos

First time
Start
Refresh
Load

User / Control
Event
Evento Load em Web Panel COM tabela base

Evento LOAD

“N vezes,
tantas
quantos
registros
existirem na
tabela
percorrida”
Outro exemplo

Country
{
CountryId*
CountryName
}
Event Load
Attraction &Quantity = Count(AttractionName)
{ endevent
AttractionId*
AttractionName
CountryId
CountryName
}
Evento Refresh

Refresh (once)
Load (2 times)
Atributos na Grid
Web panels
sem tabela base
Web Panels SEM TABELA BASE

Evento LOAD
“1 vez”
Web panels
Múltiplas grids
Múltiplas grids
FreeStyleGrid

PARALELO ANINHADO

Navegação independente Navegação com tabelas relacionadas


Tipos de Web Panels
Tipos de Web Panels

Web page (default) Component Master page


Design Systems
Design Systems Master Page e.g. Header / footer

Theme Classes
RWD
Responsive sizes Responsive tables
Elementos que dão
uniformidade e
coerência ao UX Controls User control objects

Base styles CSS libraries

Stencils Design components

Patterns Design / behaviour


Stencils

Design component

Objeto que permite repetir o desenho da mesma parte da tela (um conjunto de controles), em várias telas.
Responsive Web Design
Responsive Web Design
Responsive Web Design
GeneXus Server
Send Knowledge Base to GeneXus Server
Team Development
Commit

Knowledge Manager / Team Development

Partial commit
Update

Partial selection
History
Create KB from GeneXus Server

File / New / Knowledge Base from Server

Select KB from server


Segurança com GAM
AUTHENTICATION AUTHORIZATION
Habilitando o GeneXus Access Manager
Importando os objetos do GAM
Selecionando o nível de segurança
Acesso ao backend do GAM (objeto GAM Home)
Testing
Objetos para gerar testes unitários e testes de interface

- Permite simular
ações do usuário no
navegador

Prova isolada de:


- Procedures
- Data Providers
- Business Components
Teste Unitário


Test Explorer
Teste de Interface: GXTest
Teste de Interface

(Requer licença GXTest)


Deployment
Deploy automático com F6 F6

F5
Desenho Protótipo Produção

Validate Prepare Transfer Publish


Application Deployment Tool

Objetos main
Integração
Módulo de Inteligência Artificial IBM Watson

Microsoft Cognitive Services

SAP Leonardo

Google Cloud Services

Amazon Web Services


Chatbots: objeto Conversational Flow

155
Smart Devices
Aplicar Pattern em Transação
Aplicar Pattern em Transação

Tem que configurar sua propriedade Main program


= True e, sobre o objeto, clicar com o botão direito e
Run
Aplicar Pattern em Transação

botão direito e Run:

GENERAL PLACE
Escolho 1 country
Aplicar Pattern em Transação

Queremos, para cada lugar, além de ver seu nome, ver sua geolocalização.
Menu de acesso: Menu for Smart Devices
Criação: Add action…
Ao pressionar F5…
Videos training.genexus.com
Documentation wiki.genexus.com
Certifications training.genexus.com/certifications

Você também pode gostar