Desenvolvimento > Safe X3 WAS > Tokens > Ligs. dinâmicas 

SEEWARNING Antes de criar o seu estabelecimento, é preferível ler a documentação :Antes de começar.


A ligação dinâmica é um "token" que permite tratar os cliques de rato do utilizador sobre as zonas sensíveis da página HTML que são "tags". <a> ou as "tags" <input type='button'>.

<input type='button' adx="MyDynamicLink" value="Clicar aqui">
<a adx="MyDynamicLink">Clicar aqui</a>

Os três parâmetros principais de uma ligação dinâmica são :

1. a acção Web,
2. a página Web de destino,
3. a selecção :

A ordem da lista é a ordem seguinte o qual estes parâmetros são tratados pelo servidor XTEND.

Tomado em mão

a acção Web

Não existem dois tipos de acção que são :

  • As acções tratadas pelo back-office X3 via a chamada do "web service" :
    • "Login" criação encomenda, modificação coordenadas...
  • As acções tratadas pelo servidor XTEND :
    • Paginação, selecção de uma linha, alteração de estabelecimento/língua....

Cada acção está declarada no dicionário por uma ficha de parametrização.

a página Web de destino

Trata-se da página afixada em volta do pedido colocado sobre o servidor.

Cada página está declarada no dicionário por uma ficha de parametrização.

SEEINFO A página de destino pode ser modificada pela acção.

Para modificar a página de destino por programa (L4G), utiliza o encadeamento (encadeamento programado) de ligações dinâmicas :

Valoriza um parâmetro do sub-programa com o código de ligação dinâmica (com ou sem acção/selecção) que aponta versus a página de destino.

A selecção :

A ligação dinâmica pode colocar uma selecção com destino do bloco principal da página alvo para modificar os critérios de selecção.

A selecção permite gerir a ligação lista do detalhe, a ordenação dos quadros ou o refinamento dos pedidos.

SEEREFERTTO Para mais informações ver a documentação sobre os. "Tokens" Blocos.

Parâmetros HTML

Os parâmetros seguintes são tomados em conta por ligações dinâmicas.

Código

Parâmetros

Descrição

xacceptreload

Nenhum

Força a acção da ligação dinâmica a se executar o recarregamento da página HTML (F5) mesmo se o recarregamento está bloqueado na parametrização da acção ("Activo sobre "reload")

xparams

QueryString

Acrescenta os parâmetros na URL da ligação dinâmica
Os parâmetros são de tipo Chave=Valor~Chave=Valor

<a adx="MyDynLink:xacceptreload&xparams=?PARCOD1=VAL1~PARCOD2=VAL2#xtdbottom">

Este exemplo :

  • força a execução da acção "sobre F5",
  • valorize 2 variáveis utilizador PARCOD1 e PARCOD2,
  • se posiciona sobre o marcador de página "xtdbottom" da página de destino.
Posicionamento no interior da página de destino

Exemplo montante como efectuar um posicionamento no interior da página de destino (via o parâmetro HTML xparams) quando o utilizador clica sobre uma ligação dinâmica :

<!--Ligação dinãmica na página origem-->
<input type="button" value="Clicar aqui" adx="MYDYNLINK:xparams=#signet">
<a adx="MYDYNLINK:xparams=#signet">Clicar aqui</a>
<!--Página de destino-->
<body>
    <!--Código HTML -->
    <a name="marcador">
    <!--Posicionamento da página quando o utilizador clica sobre o botão acima-->
    <!--Código HTML -->
</body>

Valorizar as variáveis utilizador via os parâmetros de URL.

Exemplo valorizando as variáveis utilizador PARCOD1 e PARCODE com VAL1 e VAL2 (via o parâmetro HTML xparams) quando o utilizador clica sobre uma ligação dinâmica:

<!--Ligação dinãmica na página origem-->
<input type="button" value="Clicar aqui" adx="MYDYNLINK:xparams=?PARCOD1=VAL1~PARCOD2=VAL2">
<a adx="MYDYNLINK:xparams=?PARCOD1=VAL1~PARCOD2=VAL2">Clicar aqui</a>

Caso de uso: ligação lista detalhe

A ligação lista detalhe consiste em definir uma ligação para aceder ao detalhe entidade afixada numa lista.
Por exemplo : aceder ao detalhe do artigo a partir do catálogo.

A página detalhe contém geralmente as informações complementares provindo de outras tabelas que aquela utilizada para afixar a lista.
Por exemplo : A ficha de descrição rica de um produto ou os produtos associados (cross-selling).

Inversamente o utilizador deverá poder devolver a lista a partir da página detalhe sem perder o contecto da lista (critérios de selecção, paginação...).

1. Criação da entidade afixada na lista
  • Criação de interface
  • criação de campos,
  • Criação das entidades.
2. Criação de um bloco "multi-registos" para ler e afixar a lista
  • Selecção da entidade definida previamente
3. Criação de uma ligação dinâmica para seleccionar o detalhe da entidade
  • Selecção da mesma entidade que o bloco lista.

A ligação dinâmica selecciona uma entidade tal que o código é igual aquela da linha corrente.
A linha corrente está identificada pelo bloco ACURRENT (extremo da pilha do contexto de dados).
A ligação "Substitui a selecção do bloco principal".

4. Criação da página "web" que afixa a lista
  • Declaração do bloco da lista como bloco princiapal da págima web,
  • Criação do HTML para afixar a lista.

<table>
    <tr>
        <th><b>Code</b></th>
        <th><b>Literal</b></th>
    </tr>    
<!--Bloco lista-->
<!adx="BLKITMLST">
    <tr>
        <!--Ligação versus detalhe-->
        <td><a adx="DLKDETAIL"><span adx="CODE"></span></td>
        <td adx="DESCR"></td>
    </tr>    
<!adx="BLKITMLST">
</table>

5. Criação de um bloco "mono-registos" para ler e afixar o detalhe
  • Selecção da mesma entidade que o bloco lista.

O bloco mono-registo tem uma selecção de tipo "última ligação clicada" para que utilize os critérios de selecção da ligação dinâmica clicada pelo utilizador (aquele criado precedentemente com a selecção sobre ACURRENT.CODE).

6. Criação de uma "ligação dinâmica" para o desvio versus a lista
  • A página de destino é a página lista,
  • A acção web tem por código ABLKRESTOREMAINCTX
    Restaura o contexto do bloco principal.
7. Criação da página "web" que afixa o detalhe
  • Criação da HTML para afixar o detalhe.

<!--Bloco detalhe-->
<!adx="BLKDETAIL">
    <b>Code    </b><span adx="CODE"></span><br>
    <b>Libellé </b><span adx="DESCR"></span><br>
    <b>Prix    </b><span adx="PRIX"></span><br>
    <b>Stock   </b><span adx="STOCK"></span><br>
<!adx="BLKDETAIL">
<!--Devolução versus a lista-->
<a adx="DLKRETOURLISTE">devolução lista</a>

Para afixar os dados complementares emitidos de uma outra tabela ou vista (por exemplo uma descrição rica de um artigo ou dos produtos associados) :

  • Crie as entidades e os blocos que lêm estas entidades em passando os critérios de selecção o código de entidade detalhe BLKDETAIL.CODE.

Devolução página precedente

A ligação dinâmica ADLKRETURN permite de efectuar uma devolução atrás sobre as páginas XTEND que foram consultadas.

  • funciona melhor que a tecla "Back" ou "Recalcular de uma página" do navegador
  • não toma em conta as ligações dinâmicas que restam sobre a mesma página.

Exemplo :

Se se pagina sobre um catálogo de artigos a ligação ADLKRETURN afixará a página que precedeu a afixação do catálogo sem ter em conta das acções de paginação contrariamente à tecla "para trás" do navegador.

O motor XTEND gera uma pilha de páginas consultadas por sessão utilizador cujo tamanho é parametrizável via o parâmetro de configuração :
xtend.server.gensetup.misc.rtnstacksize (20 por defeito).

Ligações Prédefinidas

Código

Parâmetros

Acção

Descrição

ADLKFIRSTPAGE

Não

ABLKFIRSTPAGE

Afixa a primeira página de um bloco
Syntaxe MonBloc.MonLienDynamique

ADLKNEXTPAGE

Não

ABLKNEXTPAGE

Afixa a página seguinte de um bloco

ADLKLASTPAGE  

Não

ABLKLASTPAGE

Afixa a última página de um bloco

ADLKSELECT

Não

ABLKSELECT

Selecione a linha de um bloco
MonBloc.MonChamp reenvia o valor de MonChamp para a linha selecionada

ADLKUNSELECT

Não

ABLKUNSELECT

Des-selecione a linha de selecção de um bloco

ADLKRESTOREFORM

Não

ARESTOREFORM

Restaura um formulário HTML com os valores iniciais
Não tem em conta do parâmetro HTML xrc

ADLKRESTORESESSION

Não

ARESTORESESSION

Afixa a última página aberta antes do fecho do navegador
Utilizado na página de reconexão (ver ficha estabelecimento)

ADLKLOGIN

Sim

ASESSLOGIN  

Login do utilizador
Código utilizador (AUSERCODE) e palavra chave (APWD) em parâmetro
A interface e o "mapping" dos parâmetros devem-se fazer

ADLKLOGOUT

Não

ASESSLOGOUT

Desconecta o utilizador

ADLKSWITCHCOOKIES

Não

ASESSSWITCHCOOKIES

Permuta o modo "sem cookies" e o modo "com cookies"
Utilizar o bloco condicionado ADISPNOCOOKIES para afixar a lista com/sem "cookies" da sessão

ADLKTRACESET 

Não

ATRACESET

Actualização do rastro XTEND

ADLKRETURN

Não

Não

Devolução à página precedente

ADLKPOSTPAGE

Não

Não

Posto do formulário da página corrente e devolução sobre a mesma página

ADLKSWITCHSITE

Sim

Não

Abre um outro estabelecimento XTEND
!!Parâmetros do estabelecimento a preencher

ADLKSWITCHLANG

Sim

Não

Não Alteração da língua utilizador
!!Parâmetros código língua a preencher

 

Pré-requisitos

SEEREFERTTO Consulte a docuemntação de Implementação

Gestão do ecrã

Cabeçalho

Campos

Os seguintes campos estão presentes neste separador :

Código de ligação dinâmica

  • Estab. (campo FCYLIB)

Estabelecimento Web corrente.

  • Descr. (campo INTIT)

Permet de définir un intitulé associé à chaque fiche.

Fechar

 

Separador Geral

Apresentação

Parâmetros gerais da ligação dinâmica.

O quadro "Param. acesso sub-programa" está alimentado se as condicções seguintes :

  • A ligação dinâmica posui uma selecção sobre a entidade,
  • Esta entidade está ligada a uma interface de tipo "Acesso dados sub-programa",
  • O interface possui os campos parâmetros "Acesso sub-programa".

Quando este quadro está não vazio, permite de definir uma selecção sobre estes parâmetros.

Fechar

 

Campos

Os seguintes campos estão presentes neste separador :

Seg.

  • Seg. da actividade (campo LOGMOD)

Seleccione "sim" para rastrear as chamadas à ligação dinâmica no log do servidor XTEND.

  • Forçar o modo Http Get (campo POSTFORCE)

Seleccione "sim" para utilizar o método HTTP GET ; a ligação deve ser tomada em conta pelos motores de pesquisas (web crawlers).
Isto foi utilizado unicamente para assegurar a compatibilidade da ligação com os motores de pesquisa.

SEEINFO Apenas as ligações que não têm parâmetro contextual para a selecção e/ou a acção são compatíveis com o método HTTP GET.

Destino

  • Página corrente (campo PAGSAM)

Seleccione :

  • "Sim" para restar sobre a página corrente,
  • "Não" para registar uma página de destino.

Página de destino.

Dinamismo

Código da entidade seleccionada se ligação dinâmica posto uma selecção para o bloco principal da página de destino.

SEEINFO A entidade está utilizada para a ajuda ao registo dos critérios de selecção no separador selecção.

  • Aplicação selecção (campo SELBLCOPT)

Existe três tipos de modificação dos critérios de um bloco por uma ligação dinâmica.
Estas três opções permitem gerir a maior parte das situações que se apresentam nas páginas web :

1. Os critérios da ligação dinâmica "Substitui a selecção do bloco principal"

SELECÇÃO DO BLOCO = CRITÉRIOS DE SELECÇÃO DA LIGAÇÃO

2. Os critérios da ligação dinâmica "Substitui a selecção do bloco principal"

Efectua um refinamento do pedido do bloco com os critérios da ligação.
SELECÇÃO DO BLOCO = CRITÉRIOS DE SELECÇÃO DO BLOCO + CRITÉRIOS DE SELECÇÃO DA LIGAÇÃO

3. Os critérios da ligação dinâmica "Se acumula à selecção em curso do bloco principal"

Efectua um refinamento do pedido do bloco em acrescentando (E lógico) a selecção da ligação dinâmica ao pedido corrente do bloco.
Esta opção está utilizada se a selecção do bloco resulta do acumulado de várias ligações dinâmicas.
SELECÇÃO DO BLOCO = CRITÉRIOS DE SELECÇãO DO BLOCO + SOMA DOS CRITÉRIOS DE TODAS AS LIGAÇÕES CLIQUES

SEEWARNING Restrição :
Apenas os critérios de selecção e de ordenação de triagem do bloco principal da página (aliás AMAIN) podem ser modificados por aqueles de ligações dinâmicas.
Você pode definir vários blocos por página mais um apenas (o bloco principal) poderá ter critérios de selecção e de ordenação modificáveis por utilizador.

Código de acção web se a ligação dinâmica tem uma acção.

SEEINFO Os parâmetros de acção são afixados automaticamente no bloco Parâmetro do separador Avançado para indicar a maneira cujos vão ser valorizados.

  • Controlar campos Web (campo ACTVERCHP)

Assinala a check box que para parâmetros da acção declaradas como "Campos web obrigatórios_" sejam automaticamente controlados por XTEND.

Quadro Param. Acesso subprograma

Código do parâmetro sub-programa.

  • Origem (campo VALTYP42)

  • Origem constante : valor fixo registado na coluna "Cste / Attrib," Web

  • Origem "Campo web" : valor emissão de um campo de formulário HTML (geralmente registado pelo utilizador).
    A coluna "Cste / Attrib." Web contém o nome (atributo "NAME") do campo <input> do formulário HTML

  • Origem "Campo Token" : valor de um campo de um bloco cujos nomes são registados nas colunas seguintes.

  • Cste / Atrib. Web (campo VALEUR42)

  • Origem constante : contém o valor da constante.

  • Origem "Campo web" : contém o nome (atributo "NAME") do campo <input> do formulário HTML.
    O parâmetro será valorizado com o valor deste campo.

Código do bloco para a origem "Token champ"

 

  • Campo (campo VFIEKEY42)

Código do bloco para a origem "Token champ"

Fechar

 

Separador Avançado

Campos

Os seguintes campos estão presentes neste separador :

Quadro Parâmetros

código do parâmetro da ação.

  • Origem (campo VALTYP41)

  • Origem constante : valor fixo registado na coluna "Cste / Attrib," Web

  • Origem "Campo web" : valor emissão de um campo de formulário HTML (geralmente registado pelo utilizador).
    A coluna "Cste / Attrib." Web contém o nome (atributo "NAME") do campo <input> do formulário HTML

  • Origem "Campo Token" : valor de um campo de um bloco cujos nomes são registados nas colunas seguintes.

  • Cste / Atrib. Web (campo VALEUR41)

  • Origem constante : contém o valor da constante.

  • Origem "Campo web" : contém o nome (atributo "NAME") do campo <input> do formulário HTML.
    O parâmetro será valorizado com o valor deste campo.

Código do bloco para a origem "Token champ"

 

  • Campo (campo VFIEKEY41)

Código do bloco para a origem "Token champ"

Encadeamento

Trata-se da página que será afixada se a ação está em erro.
Por defeito o motor XTEND resta sobre a página corrente se um erro acontece.

SEEWARNING O motor XTEND considera que uma ação encalhou se o web service invocado reenviou ao menos uma mensagem de erro.

  • Encad. programado (campo SUIPRG)

"Sim" para indicar que este tratamento L4G que reenvia o código da ligação dinâmica num parãmetro do sub-programa.

Encadeamento dinâmico definido pelo tratamento L4G

O tratamento L4G pode decidir da ligação dinâmica a encadear em reenviando o código da ligação num parãmetro do sub-programa.

  • Campo Ench. programado :
    O código da ligação dinãmica está guardado numa entidade de tipo sessão via o "mapping" da ação.

  • Campos Entidade, Campo :
    Indiquem o código de entidade de tipo sessão e o código do campo que contém o código da ligação dinamica a utilizar para o encadeamento.

O código da ligação dinâmica pode assim ser guardado numa variável sessão (variável utilizador).
Neste caso indica-se :

  • "ASESSION"
  • e o código da variável que contém a ligação nos parâmetros entidade e campo.

A página afixada seguinte ao encadeamento de várias ligações dinâmicas é a página web associada à última ligação dinâmica tratada.

 

 

Quadro Ligações

Código da ligação dinâmica a executar.

Lista das ligações dinâmicas : As ligações dinâmicas registadas na lista serão executadas sequencialemnte tanto que nenhum erro foi reenviado pelo web service.

Fechar

 

Separador Selecção

Apresentação

A ligação dinâmica na capacidade de colocar uma selecção com destino do bloco principal (AMAIN) da página de destino. Se a selecção do bloco está "alterável" e se as entidades seleccionadas são idênticas, o bloco efectuará a selecção colocada pela ligação dinâmica (em função do parâmetro "Aplicação selecção")

Os campos deste separador estão activos unicamente se um código entidade foi seleccionado no campo "Selecção sobre a entidade" do ecrã "Geral".

Fechar

 

Campos

Os seguintes campos estão presentes neste separador :

Características

  • Tipo de selecção (campo SELTYP)

Nenhum : seleção de todos os registos.

Pedido : aplicação dos critérios de seleção do bloco.

Última ligação clicada : aplicação dos critérios de seleção da ligação dinâmica que foi clicada para aceder à página que contém o bloco.

  • Selec. modificável (campo SELDYNALT)

Não: o pedido SQL associado ao bloco não pode ser modificado por aquela de uma ligação dinâmica

Sim: o pedido pode ser modificado para aquela associada a uma ligação dinâmica.

SEEINFO O pedido do bloco é o requerente por defeito.

  • Optimização (campo INTOPTIMI)

Escolha de optimização proposta pelo interface.

Nenhuma : Nenhuma optimização

Sem blob : o interface não reenvia o campo de tipo blob

Sem clob : o interface não reenvia o campo de tipo blob

Nem clob, nem blob : o interface não reenvia o campo de tipo blob e clob

Síntese selecção

  • campo RES30

Pedido do bloco ao formato texto

Quadro Critérios de selecção

  • E/Ou (campo ANDOR30)

Operador lógico de encadeamento das operações.

  • ( (campo BRKLFTM30)

Parenteses abertos.

  • Campo (campo FIEKEY30)

Campo de entidade cujo valor é o primeiro operando da operação.

  • campo OPE30

Operador de comparação.

  • Origem (campo VALTYP30)

  • Origem constante : valor fixo registado na coluna "Cste / Attrib," Web

  • Origem "Campo web" : valor emissão de um campo de formulário HTML (geralmente registado pelo utilizador).
    A coluna "Cste / Attrib." Web contém o nome (atributo "NAME") do campo <input> do formulário HTML

  • Origem "Campo Token" : valor de um campo de um bloco cujos nomes são registados nas colunas seguintes.

  • Cste / Atrib. Web (campo VALEUR30)

Regista-se aqui o valor do parâmetro. Esta é registada segundo os casos como um número, uma data, ou um código alfanumérico. Quando o parâmetro é de tipo menu local, pode-se à escolha registar o início do título, ou o valor numérico correspondente à fila do intitulado na lista. Quando o código está controlado por uma tarefa anexa, um toque de seleção está utilizável para o escolher.

Código do bloco para a origem "Token champ"

 

  • Campo (campo VFIEKEY30)

Código do bloco para a origem "Token champ"

  • ) (campo BRKRGTM30)

Parenteses de fecho.

  • Critério obrigatório (campo CRIOBY30)

  • Sim: o valor do segundo operador deve estar não vazio senão a mensagem de erro "AERRCRITMANDATORY" estão reenviados por XTEND.

  • Não: se o valor do segundo operador está vazio, o critério (a linha) é ignorado.

  • Car. * para todos (campo ALLSTAR30)

 

Entidade

Indica as entidades que serão criadas a partir do resultado do pedido.
A entidade contém o interface de tipo "Acesso dados" que deve ser chamado.

Interface de tipo "Acesso" dado que será chamado.

  • campo INTTYPSEL

Tipo de interface "Acesso" dado que será chamado.

Fechar

 

Separador Ord.

Campos

Os seguintes campos estão presentes neste separador :

Características

  • Tipo de ord. (campo SRTTYP)

Selecione um tipo de ordenação :

  • Nenhum : os registos (linhas do bloco) não são ordenados.

  • Campo: ordenação seguindo uma lista de campos definidos no quadro de Ordenação.

  • Hasard : a ordem das linhas está calculado de maneira aleatória por um tratamento L4G pós-pedido. "Hasard" é utilizado para afixar aleatoriamente uma linha por entre N.
  • Ord. modificável (campo SRTDYNALT)

  • Não: os critérios de ordenação não podem ser modificadas por uma ligação dinâmica

  • Sim: os critérios de ordenação são modificáveis por uma ligação dinâmica.

Quadro Ord.

  • Campo (campo FIEKEY31)

Nome do campo para a origem "Token campo".

  • Ordenação (campo SRTORD31)

Ordem de triagem Ascendente/Descendente

Fechar

 

Listagens

Por defeito, os seguintes listagens estão associados à função :

 PRTSCR : Impressão ecran

Mas pode ser alterado por parametrização.

Botões específicos

Este botão permite atualizar o dicionário XTEND ao formato XML

O servidor X3WEB toma em conta unicamente o dicionário sob este formato.

Existe um ficheiro xml por dicionário.

Por exemplo o ficheiro ACT.xml correspondente ao conjunto das ações web para o estabelecimento web corrente.

Este botão permite copiar uma ligação dinâmica

Utilização avançada

Função javaScript xtdDoDlk

Um "token" ligação dinâmica está sempre inserido como atributo de um "tag" HTML <a> ou <input type='button'>.

Quando o servidor XTEND contrói dinamicamente a página HTML : gera, no acondicionamento dos tokens ligação dinãmica, um apelo a uma função JavaScript da biblioteca XTEND (xtdDoDlk) sobre o evento onClick.

Os parâmetros da função xtdDoDlk são contextuais e vão permitir à biblioteca XTEND de constituir os dados (xml) a enviar ao servidor XTEND para tratar a acção e a selecção.

<a  href="javascript:xtdDoSubmit('MYDLK',null);"
onclick="xtdDoDlk(this,'MYDLK',null,null,'XAA',0,null,event,false,'_1',false,null,false);">

<input type="button"
onclick="xtdDoDlk(this,'MYDLK',null,'MYBLOCK','XA',0,null,event,true,'',false,null,true);"
value="Add to cart"/>

Contexto de dados

Quando o utilizador clica sobre uma ligação dinâmica, o contexto de dados da página não existe mais sobre o servidor.
Existe durante a construção da página depois foi suprimida.

O servidor XTEND guarda, na página HTML (tag <span id="xtdctx">), o contexto de dados necessário ao tratamento à posteriori das selecções e acções das ligações dinâmicas.

Um dos papéis da função JavaScript xtdDoDlk é de encontrar o contexto de dados associados à ligação dinâmica para o reenviar ao servidor.

Exemplo :

Para uma ligação lista/detalhe (catálogo) pretende-se afixar a página "detalhe" objecto (artigo) sobre o qual clicamos. Esta operação consiste, para o servidor XTEND :

  • a memorizar para cada linha do catálogo os valores dos critérios de selecção (aqui o código do artigo mas podem existir vários) para poder passar ao bloco que afixa o detalhe.

O facto de guardar o contexto na página HTML assegura um bom funcionamento de XTEND com a tecla "Back" do navegador.

Chamada de uma ligação por programa

Para chamar uma ligação dinãmica por programa em JavaScript (não gerado por XTEND), utiliza a função a seguir :

//aElmt é o elemento do DOM sobre o qual se clicou
//aDlk é o código da ligação dinâmica a chamar
//aParams é opcional e contém os parâmetros de URL (query string)
função xtdCallDlk(aElmt,aDlk,aParams){}

SEEWARNING Esta função não pode ser utilizada que se a ligação dinãmica não tem nenhuma referência a campos XTEND nos critérios de selecção ou dos parâmetros da acção.

Apenas os critérios ou parâmetros de tipo "Campo web" são tidos em conta.

Como interceptar o clique do rato

Em certos casos, o programador pode ser colocado a interceptar o clique para efectuar os controlos.

Declare uma função JavaScript de nome xtdDoMyDlk para que a biblioteca (XtendLib.js) o chama em passando em parâmetro objecto contextual aDomOut (classe CXtdDomOut) qui permite de aceder a todas as informações sobre a ligação dinâmica.

Esta função reenvia "falso" para interromper o tratamento.

função xtdDoMyDlk(aDomOut)
{      
     if (aDomOut.isDlk("MyDynLink"))
     {
         // O utilizador clicou sobre a ligação MyDynLink
         return confirm("Confirmar a sua acção");
     }
    return true;
}

Você pode assim interceptar o processo justo antes do envio do formulário versus o servidor (submit) em criando uma função JavaScript xDoMySubmit na página :

função xDoMySubmit(aDlk,aDomOut){
    // Reevia "false" para interromper o processo
    return true;
}

Class CXtdDomOut

Classe do parâmetro aDomOut que dá acesso ao contexto da ligação dinâmica.

// Reenvia o valor da variável utilizador aKey
aDomOut.getUserVar(aKey);
// Reenvia o código da ligação dinâmica sobre o qual o utilizador clicou
aDomOut.getDynLinkId();
// Reevia o índice da linha (0 a N) se o utilizador clicou
// sobre uma ligação no bloco quadro
aDomOut.getCurLineIdx();
// Reenvia "true" se o utilizador clicou sobre a ligação aArg
// aArg está seja um quadro de ligações seja uma String
aDomOut.isDlk(aArg);
    if (aDomOut.isDlk("DLK1","DLK2")){
        // Código utilizador clicou sobre "DLK1" ou "DLK2"
    }
// Reenvia a lista dos parâmetros web (Class CXtdDlkWebParamsOut)
aDomOut.getWebParameters();
// Para conhecer o valor do parâmetro web aName
// aIdx está o índice do valor se valor múltiplo
aDomOut.getWebParameters().getParamValue(aName,aIdx)
// Reenvia um Array que contém os valores do parâmetro web aName
aDomOut.getWebParameters().getParamValues(aName)
// Reenvia o valor de um critério de selecção ou parâmetro de acção
// aFieldName é o nome do campo XTEND utilizado pelo "mapping"
aDomOut.getDlkParamValues(aFieldName);
// Idem getDlkParamValues - aParamId est l'ID do parâmetro no "mapping"
// - Para um critério de selecção ID é SEL + fila do critério (1-N)
// - Esta é a mais exacta que getDlkParamValues porque o ID contrariamente ao nome do campo XTEND
aDomOut.getDlkParamValuesById(aParamId);

Como acrescentar os controlos de registo

Quando um parâmetro de acção está declarado como "Campo web obrigatório" a biblioteca contrôla automaticamente :

  • o registo de um valor,
  • o tipo para os campos numéricos e data.

Para acrescentar os controlos suplementeres sobre os parâmetros web, acrescente a função xtdWebParamCheckValue a seguir na página HTML

Esta função está chamada para cada parâmetro web da acção associada à ligação dinâmica e reenvia "true" para validar o registo.

Ver exemplo no registo do formulário do estabelecimento ASAMPLE.

Função xtdWebParamCheckValue

Parâmetros

  • aWebParamOut é o objecto que representa o parâmetro
    Ver class CXtdDlkWebParamOut
  • aInputFieldName é o nome do campo web
    Atributo nome
  • aInputFieldIndex é o índice do campo no formulário
    0 se um único campo de nome aInputFieldName
  • aInputFieldValue é o valor do parâmetro para o índice aInputFieldIndex

função xtdWebParamCheckValue(aWebParamOut,aInputFieldName,
                               aInputFieldIndex,aInputFieldValue){
    // Exemplo : Controlo do formato do email sobre o campo MAICOD
    if (aInputFieldName=="MAICOD"){
        var wEmail=xtdCheckEmail(aInputFieldValue);
        if (wEmail && wEmail!=aInputFieldValue){
            //Formato OK
            //Actualiza-se o valor com o formato calculado por xtdCheckEmail
            aWebParamOut.setValue(aInputFieldIndex,wEmail);
        }
        //"True" para validar o registo - "Falso" para invalidar
        return wEmail!=null;
    }
}

Class CXtdDlkWebParamOut

// Reenvia "True" se parâmetro obrigatório
aWebParamOut.isMandatory();
// Reenvia o índice do campo no formulário HTML
// -> Podem existir vários campos de mesmo nome num formulário (quadro)
aWebParamOut.getIndex();
// Reenvia o elemento DOM
aWebParamOut.getElement(aIdx)
//aValue é um "Array"
aWebParamOut.setValues(aValue);
//aIdx é o índice (0 - N) do valor
aWebParamOut.setValue(aIdx,aValue);
// Reenvia o valor de um outro parâmetro Web
// -> Útil se o controlo do valor de um parâmetro depende de outros parâmetros
aWebParamOut.getParamValue(aName,aIdx);
// Reenvia o valor num "Array"
aWebParamOut.getValues();
// Reenvia o valor de índice aIdx
aWebParamOut.getValue(aIdx);
// Reenvia o valor de índice 0
aWebParamOut.getFirstValue();
// Reenvia o atributo nome
aWebParamOut.getName();
// Reenvia o tipo de parâmetro definido no dicionário XTEND
aWebParamOut.isInteger();
aWebParamOut.isX3Menu();
aWebParamOut.isDecimal();
aWebParamOut.isCurrency();
aWebParamOut.isDate();
aWebParamOut.isString();
aWebParamOut.isNumeric();
// Reenvia o tipo de elemento do DOM do parâmetro
aWebParamOut.isHidden(aIdx);
aWebParamOut.isInputText(aIdx);
aWebParamOut.isCheckBox(aIdx);
aWebParamOut.isRadio(aIdx);
aWebParamOut.isTextArea(aIdx);
aWebParamOut.isSelect(aIdx);

Filtrar os parâmetros a controlar

Se a função xtdWebParamCheck está presente na página, a biblioteca XTEND chama esta função antes de efectuar o controlo do parâmetro.

Esta função reenvia "verdadeiro" para efectuar o controlo do valor e "falso" para bloquear o controlo.

Ela está particularmente útil nas listas de picking com selecção das linhas por uma check box a assinalar. Ela permite filtrar as linhas para efectuar o controlo unicamente sobre as linhas que são assinaladas.

Ver exemplo no registo do formulário do estabelecimento ASAMPLE.

Função "xtdWebParamCheck"

Parâmetros

  • aWebParamOut é o objecto que representa o parâmetro
    Ver class CXtdDlkWebParamOut
  • aInputFieldName é o nome do campo web
    Atributo nome
  • aInputFieldIndex é o índice do campo no formulário
    0 se um único campo de nome aInputFieldName

var gNbChecked=0;
// Reevia "true" se o parâmetro web "aInputFieldName/aInputFieldIndex" deve ser controlado
função "xtdWebParamCheck(aWebParamsOut,aInputFieldName,aInputFieldIndex){
/*
    Exemplo para uma lista de picking com checkboxes (ASELECTED) para seleccionar as linhas.
Não se controla o campo AQUANTITY se a linha não está seleccionada
*/
    if (aInputFieldName=="AQUANTITY"){
        // gNbChecked é um contador das linhas seleccionadas
        // Permite bloquear a acção se nenhuma linha foi seleccionada
        if (aInputFieldIndex==0) gNbChecked=0;
        // Linha selecionada se o valor de ASELECTED é igual a 1
        if (aWebParamsOut.getParamValue("ASELECTED",aInputFieldIndex)=="1"){
            gNbChecked++;
            return true;
        }
        return false;
    }
    return true;
}

Caso particular check boxes a assinalar

As "CheckBoxes" têm a particularidade de não serem reenviadas num formulário HTML se elas não estão assinaladas.

Este comportamento não é compatível com o motor XTEND que se baseia sobre o índice do campo no formulário HTML para associar os dados registados numa mesma linha de um quadro.

Para fazer em saida que uma "CheckBoxes" seja reenviada mesmo se ela não está assinalada a biblioteca, XTEND substitui as "CheckBoxes" não assinaladas por um campo "input hidden" de mesmo nome justo antes de enviar o formulário versus o servidor "(xtdProcessCheckBoxes)".

O valor utilizado para valorizar as "CheckBoxes" não assinaladas é dada para a variável global "gXtdCBUnSelelectedValue" que está vazia por defeito (var gXtdCBUnSelelectedValue="").

Para modificar o valor :

  • Chame a função "xtdSetUnSelelectedValue" com o valor escolhido, por exempo sobre o evento "onLoad" da página.

<script>
    // "Page onLoad event"
function xBodyOnLoad()
    {
   // Set '0' value for unselected checkboxes
  xtdSetUnSelelectedValue('0');
        // Page initialization code
    }
</script>
<body onLoad="xBodyOnLoad();">
    <form>
        //Html code
    </form>
</body>

SEEINFO No momento de análise da página, XTEND detecta todas as "CheckBoxes" que têm um "token" adx e constitui uma lista que é enviada versus o cliente no contexto de dados da página. São as "CheckBoxes" desta lista que serão tidas em conta pela função "xtdProcessCheckBoxes".

Acesso às "Regional Settings"

O servidor XTEND envia ao navegador, no contexto de dados da página, as informações sobre os "Regional Settings" correspondentes à língua corrente.

Para aceder a estas informações :

  • Utilize a função a seguir que reenvia um objecto cuja classe é "CXtdRegionalSettings".

var wRegSettings=gXtdDOMFactory.getXtdDomIn().getRegionalSettings();

Métodos da classe "CXtdRegionalSettings"

// Separador de decimais
wRegSettings.getDecimalSep();
// Separador de milhares
wRegSettings.getThousandSep();   
// Ordem da data - MDY=0 - DMY=1 - YMD=2
wRegSettings.getDateOrder();
// Data pivot para o cálculo das datas X3
wRegSettings.getDatePivot();

Acrescentar/Suprimir as variáveis e critérios utilizador

As funções a seguir permitem acrescentar/suprimir as variáveis e critérios utilizador.

As funções xtdAjax* colocam as variáveis sobre o servidor via um pedido Ajax, sem submeter o formulário HTML

As outras funções "(hors xtdGetUserVar)" submitem o formulário HTML

// ---------------------------------------------------------------
função xtdRemoveUserVar(aId);
função xtdSetUserVar(aId,aValue);
função xtdGetUserVar(aId);
função xtdRemoveUserCrit(aId);
// ---------------------------------------------------------------
função xtdAjaxRemoveUserVar(aId);
função xtdAjaxRemoveAllUserVar();
função xtdAjaxSetUserVar(aId,aValue);
função xtdAjaxRemoveUserCrit(aId);
função xtdAjaxRemoveAllUserCrit();
função xtdAjaxSetUserCrit(aId,aValue);
função xtdRemoveAllUserCrit();

Afixar uma mensagem emitida do servidor XTEND

A função a seguir afixa uma mensagem calculada pelo servidor XTEND.
A mensagem é reenviada na língua corrente do estabelecimento.

Parâmetros

  • ald é o código da mensagem XTEND,
  • aP1,aP2.. são os parâmetros (facultativos).

função xtdAlert(aId,aP1,aP2,aP3,aP4);
// O exemplo em cima afixa
// Vocês estão conectados à aplicação com o código utilizador DIS001'
xtdAlert("ASESSLOGIN2","DIS001");

Acesso ao contexto de chamada da página

A classe a seguir dá acesso ao contexto de chamada da página para conhecer o resultado de uma acção :

var wCallCtx==gXtdDOMFactory.getXtdDomIn().getCallingCtx();
// ---------------------------------------------------------------
// CLASS CXtdCallingCtx
// ---------------------------------------------------------------
// Ligação dinâmica utilizada para aficar a página corrente
wCallCtx.getDynLink();
// "Verdadeiro" se a página é o resultado de uma acção
wCallCtx.hasAction();
// Código da acção
wCallCtx.getAction();
// "Verdadeiro" se a acção está desenvolvida - "Falso" se erro
wCallCtx.getActionResult();

Mensagens de erro

Não existe outra mensagem de erro, para além das mensagens genéricas.

Tabelas consideradas

SEEREFERTTO Consulte a docuemntação de Implementação