Você está na página 1de 3

2017­6­7 Genexando...

: Link Target

Link Target
Links aparentemente são métodos de
chamada que poderiam ser completamente
ignorados se não fosse por uma característica
muito interessante: permitir abrir um objeto
em uma nova janela.  Muitos poderiam
argumentar que abrir novas janelas no
navegador não é coisa muito inteligente, mas
certos objetos se dão melhor em janelas
novas, como é o caso de planilhas e relatórios
PDF.   Portanto, esse post tem por objetivo
explorar um pouco a respeito da programação do Link e também compará‐lo com
os demais recursos que também abrem janelas no Genexus.

Link.Target e Events
Esse é o diferencial, pois é possível definir o target do link, o alvo, que podem ser
os tradicionais: blank, self, parent, , e por ai vai.

Mas para que o mesmo funcione, a primeira coisa a ser considerada é que essa
propriedade deve ter sido previamente programada e disponibilizada na interface do
usuário.   Portanto, o LinkTarget já deve ter sido definido quando o usuário
executar o clique sobre o controle cujo link foi programado.  Isso pode soar meio
estranho para a maioria, mas existem casos em que se programa (erroneamente,
diga‐se de passagem) o link e o target no evento do usuário, tipo o pressionamento
de um botão, e ai, claro a coisa não funciona corretamente.

Desta forma, os melhores lugares para se programar Link e Link Target são os


eventos Start, Refresh e Load.  Evitar eventos de usuário, ou seja, aqueles que
você programa livremente nos controles da interface, tipo Event
&ClienteId.Click ou Event ‘FacaAlgo’. Muitos confundem esse conceito
porque no caso dos métodos UDP, CALL, ..., são exatamente nesses eventos que se
programam as chamadas.

Vamos aos Exemplos


Confuso? Então vamos aos exemplos práticos. E nesse contexto programei alguns
casos que funcionam e outros que não funcionam para que você entenda a
diferença.

Em todos o que temos é um WebPanel qualquer com uma imagem isolada ou em


um grid, que ao ser pressionada, objetiva‐se abrir um relatório PDF definida em
uma tal Procedure1.  Passa‐se um parâmetro numérico para essa Procedure1 cujo
valor é apresentado.

1) Links dinâmicos
Nesse caso, observe que o Link Target foi definido em uma imagem (Bitmap)
que foi incluída em um Grid, para se abrir em uma nova janela, e o evento Load é
utilizado para se definir o parâmetro a ser passado para a Procedure1 a ser
aberta.  

Event Start
    &imagem.LinkTarget = 'blank'
    &imagem = ActionUpdate.Link()
EndEvent
http://www.genexando.com/2012/03/link­target.html 1/3
2017­6­7 Genexando...: Link Target

Event Load
    for &i=1 to 10
         &imagem.Link = Procedure1.Link(&i)
         load
    endfor
EndEvent

Nesse caso quando se clica na imagem abre‐se uma nova janela com o PDF definido
na Procedure1, mostrando‐se o valor definido de &i.

2) Link Estático

Programando as propriedades do Link e Link Target, com valores fixos e pré‐


determinados. Como foi definido no evento Start, esse processo funcionará porque
essas propriedades já estarão programadas na interface do usuário.

Event Start
    image1.LinkTarget     = 'blank'
    image1.Link = Procedure1.Link(12)
EndEvent

Observe que no exemplo acima o que temos é um controle Image isolado


na WebPanel1, não mais uma imagem em um Grid.

3) Link Target que não funciona

A programação do Link Target está correta, mas observe que foi programado um


chamado Link para a Procedure1 no evento, e não se está utilizando a
propriedade do controle Image1, portanto, a chamada será no
estilo Linktradicional e uma nova janela não aberta.

Event Start
    image1.LinkTarget     = 'blank'
EndEvent

Event Image1.Click
    Procedure1.Link(12)
EndEvent

O mesmo ocorre no exemplo a seguir.

Event Image1.Click
    image1.LinkTarget     = 'blank'
    Procedure1.Link(12)
EndEvent

http://www.genexando.com/2012/03/link­target.html 2/3
2017­6­7 Genexando...: Link Target

E o exemplo a seguir também não funcionaria, e a Procedure1 nem seria


chamada, uma vez que a definição da propriedade link somente é realizada quando
o usuário clica na imagem.

Event Image1.Click
    image1.LinkTarget     = 'blank'
    image1.Link = Procedure1.Link(12)
EndEvent

Entenda que essas propriedades seriam efetivas somente quando o usuário pressiona
sobre a Image1, o evento ao link seria programado na próxima chamada, mas
mesmo assim não funcionaria corretamente.

4) Janelas em outros estilos

Nos exemplos apresentados anteriormente objetivava‐se abrir uma nova janela no


navegador, mas muitos não apreciam esse estilo, preferem abrir janelas do tipo
Popup.  Então para os mais exigentes temos ai dois exemplos simples.

Nesse primeiro o que temos é uma janela estilo Popup modal com a abertura do
relatório PDF definido na Procedure1.

Event Image1.Click
    &window.Object = Procedure1.create()
    &window.Height = 500
    &window.Width  = 500
    &window.Open()
EndEvent

E no próximo e último exemplo temos uma chamada Popup tradicional, que


também abre uma janela modal, mas ao contrário do exemplo anterior não
possibilita o dimensionamento correto de PDF´s.

Event Image1.Click
     Procedure1.Popup()
EndEvent

Finalizando
Simples e fácil, somente um pouco de atenção no momento da programação. Mas
cuidado, não substitua todos os seus Call´s e Udp´s por Link´s, pois os primeiros
são chamadas internas de processos e o Link chamadas externas com URL, ou seja,
a menos que você goste de sair passeando pela Web, é sempre melhor chamar os
objetos no mesmo ciclo interno de processamento.

http://www.genexando.com/2012/03/link­target.html 3/3