Desenvolvimento > Safe X3 WAS > Tokens > Blocos 

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


O "token bloco" efetua a leitura e a afixação da entidade que lhe está afetada por parametrização :

1. Lê a ou as entidade(s) na base de dados X3 via chamada de uma interface (web service) de tipo "Acesso dados",

2. Efetua uma iteração sobre as entidades reenviadas para construir dinamicamente as linhas de um quadro.

Tomado em mão

Principio

O "token" bloco está inserido na página HTML em utilizando a sintaxe seguinte :

<table>
<!adx="MyBlock">
    <tr>
        <td adx="aBLKELMTRANK"></td>
        <td adx="ITEMREF"></td>
    </tr>
<!adx="MyBlock">
</table>

O motor XTEND procede da maneira seguinte para tratar os blocos :

Fase de análise da página HTML

Esta etapa está efetuada uma única vez no momento da alteração da página HTML :

  • Criação de objeto bloco e acréscimo na arborescência,
  • Cálculo das dependências entre blocos se a seleção de um bloco depende de um outro bloco.
    O resultado deste cálculo dá a ordem de inicialização dos blocos.
Fase de geração da página.

Esta etapa está efetuada a cada afixação da página HTML :

1. Inicialização dos blocos

  • Cálculo dos critérios de seleção em função do tipo de seleção,
  • Chamada do web service "Acesso dados" com os critérios de seleção em parâmetro,
  • Criação e armazenagem em memória das entidades devolvidas.

2. Iteração sobre todas as entidades devolvidas

  • Posicionamento de entidade no contexto de dados,
  • Chamada do método de geração do HTML dos filhos "tokens".
  • Posicionamento de entidade no contexto de dados,

No exemplo precedente, se a seleção reenvia 3 artigos de código PUZ001, PUZ002 e PUZ003 o resultado obtido será um quadro de três linhas :

1

PUZ001

2

PUZ002

3

PUZ003

O HTML gerado é o seguinte :

Vê-se que o HTML "filho do token" bloco foi repetido 3 vezes e recalcula a cada vez em tendo em conta do novo contexto de dados (linha corrente).

<table>
    <tr>
        <td>1</td>
        <td>PUZ001</td>
    </tr>
    <tr>
        <td>2</td>
        <td>PUZ002</td>
    </tr>
    <tr>
        <td>3</td>
        <td>PUZ003</td>
    </tr>
</table>

Seleção e ordenação

Outro o facto de afixar os quadros de dados, o "token" bloco gere a modificação dinâmica dos critérios de seleção e de ordenação.

A parametrização do bloco define os critérios por defeito e pode-se autorizar ou não a modificação destes critérios por uma ligação dinâmica.

É o "token" ligação dinâmica, para qual se pode também definir os parãmetros de seleção e de ordenação, que pode modificar os critérios do bloco.

Apenas os critérios de seleção e de ordenação do bloco principal da página (alias AMAIN) podem ser modificadas por aqueles das ligações dinâmicas.

Pode-se definir vários blocos por página mas um único (o bloco principal) poderá ter os critérios de seleção e de ordenação modificáveis pelo utilizador.

Existem três tipos de modificações dos critérios de um bloco por uma ligação dinâmica :

  • Os critérios da ligação dinâmica "Substitui a seleção do bloco principal":
    • Seleção do bloco = critérios de seleção da ligação.

  • Os critérios da ligação dinâmica "Se acrescenta à seleção do bloco principal":
      • Efetua um refinamento do pedido do bloco com o critério da ligação,
      • Seleção do bloco = critérios de seleção do bloco + critérios de seleção da ligação

  • Os critérios da ligação dinâmica "Se acrescenta à seleção em curso do bloco principal":
      • Efetua um refinamento do pedido do bloco em acrescentando (E lógico) a seleção da ligação dinâmica ao pedido corrente do bloco,
      • Esta opção está utilizada se a seleção do bloco resulta do acumulado de várias ligações dinâmicas,
      • Seleção do bloco = critérios de seleção do bloco + soma dos critérios de todas as ligações clicadas.

Estas três opções permitem gerir a maior parte das situações que se apresentam nas páginas web.

A ficha "token" bloco permite parametrizar os critários de seleção e de ordenação do bloco.

São os critérios por defeito que são aplicados na primeira afixação da página que contém o bloco.

O "token" bloco propõe dois parâmetros "Seleção alterável" e "Triagem alterável" que indicam se os critérios de seleção e/ou os critérios de ordenação podem ser modificados por uma ligação dinâmica.

Estes parâmetros se aplicam apenas se o bloco foi definido como bloco principal na ficha da página web que o afixa.

Bloco com várias células por linha

Para afixar um bloco com várias células por linha utiliza-se o "token" especial ASTAMP para delimitar a célula.

O servidor XTEND repitirá tantas vezes o código HTML compreendido entre duas balizas ASTAMP que existem células na linha.

<table>
<!-Iteração sobre as linhas do bloco-->
<!adx="MYBLOCK">
    <tr>
        <!-Código repetido tantas vezes que existem células por linha'-->
        <!adx="ASTAMP">
                <!--Para alternar a cor das células-->                           
                <td adx="ALINESTYLE:xattr=Class">
                   <!--Código HTML de uma célula-->
                   <b>Nom</b><p adx="NAME"></p>
                   <b>Prénom</b><p adx="FIRSTNAME"></p>
                </td>
        <!adx="ASTAMP">
    </tr>
<!adx="MYBLOCK">
</table>

Como prencher as células vazias.

O exemplo a seguir mostra como preencher as células vazias quando o número de registos não é um múltiplo de número de células por linha.

Utiliza-se o bloco condicionadoADISPSTAMPEMPTY para delimitar o HTML dedicado às células vazias.

<table>
<!-Iteração sobre as linhas do bloco-->
<!adx="MYBLOCK">
    <tr>
        <!adx="ASTAMP">                        
                <td adx="ALINESTYLE:xattr=Class">
                    <!adx="ADISPSTAMPEMPTY">
                        <!--Célula vazia preenchida com um branco-->      
                        &nbsp;
                    <!adx="ADISPSTAMPEMPTY">
                    <!adx="ADISPSTAMPEMPTY:xnot">
                        <!--Código HTML de uma célula não vazia-->
                        <b>Nom</b><p adx="NAME"></p>
                        <b>Prenome</b><p adx="FIRSTNAME"></p>   
                    <!adx="ADISPSTAMPEMPTY">
                </td>
        <!adx="ASTAMP">
    </tr>
<!adx="MYBLOCK">
</table>

As ações que tratam sobre os blocos

Paginação

As ações ABLKFIRSTPAGE, ABLKNEXTPAGE, ABLKPREVPAGE, ABLKLASTPAGE permitem de gerar a paginação nos blocos.

Os "tokens" ADLKFIRSTPAGE, ADLKNEXTPAGE, ADLKPREVPAGE, ADLKLASTPAGE podem ser utilizados para o bloco principal da página.

Os campos aBLKNBELMTS e APAGEPOS afixam o número total de registo e a posição da página por relação ao número total de páginas.

Os blocos condicionados AHIDEMAINFIRSTPAGE e AHIDEMAINLASTPAGE gera a afixação/máscara dos botões de paginação para a primeira e ultimas páginas.

Sintaxe

MonBloc.ADLK*

Exemplo:

Paginação com gestão de afixação em início e fim de paginação.

<table width="100%">
    <tr>
        <td align="left" width="20%">
        <!--Hide FirstPage and Previous actions if current page is the first page-->           
            <!adx="aHideMainFirstPage">
                <!---->
                <a href="" adx="AMAIN.aDlkFirstPage">Première</a>
                <a href="" adx="AMAIN.aDlkPrevPage">Précedente</a>
            <!adx="aHideMainFirstPage">
        </td>
        <!--Displays page information-->
        <td align="center" width="60%">
            Page  : <span adx="AMAIN.aPagePos"></span> -
            Número de elementos : <span adx="AMAIN.aBlkNbElmts"></span>
        </td>
        <td align="right" width="20%">                         
        <!--Hide LastPage and Next actions if current page is the last page--> 
            <!adx="aHideMainLastPage">
                <a href="" adx="AMAIN.aDlkNextPage">Suivante</a>
                <a href="" adx="AMAIN.aDlkLastPage">Dernière</a>
            <!adx="aHideMainLastPage">
        </td>
    </tr>
</table>

Seleção de uma linha

As ligações dinâmicas ADLKSELECT e ADLKUNSELECT (ação ABLKSELECT e ABLKUNSELECT) permitem de selecionar/desselecionar uma linha de um bloco.

Utilização

Inserir os "tokens" ADLKSELECT e ADLKUNSELECT numa das células da linha seja num tag <a> seja num tag <input type="botão">.

O campo ABLKSELECTEDLINE contém a fila (a a N) da linha selecionada.

Exemplo:

O bloco ABLKCOUNTRIES afixa os países no estabelecimento ASAMPLE com a seleção da linha para afixar o detalhe Divisa/Língua do país.

Um clique sobre a primeira célula (CRY) seleciona a linha.

<!adx="ABLKCOUNTRIES:xselect=false"> 
    <tr>
        <td><a adx="ADLKSELECT"><span adx="CRY"></span></a></td>
        <td adx="CRYDES"></td>    
        <td adx="CUR"></td>
        <td adx="LAN"></td>                
    </tr> 
<!adx="ABLKCOUNTRIES"> 
<!--Afixação do N° de linha selecionada-->
<span adx='ABLKCOUNTRIES.ABLKSELECTEDLINE'></span>

O parâmetro HTML 'xSelect=true' permite selecionar a primeira linha por defeito.

Se este parametro não está presente, ou se o valor é igual a "falso" o bloco não tem nenhuma linha selecionada por defeito.

Quando um bloco tem uma linha selecionada pode-se endereçar os campos desta linha via a sintaxe MonBloc.MonChamp.

Os valores dos campos da linha selecionada podem ser afixados ou utilizados como critérios num bloco, uma ligação dinâmica ou um bloco condicionado.

O bloco condicionado AHIDEMAINSELECT gera a afixação/máscara de uma zona de HTML em função do facto que o bloco principal tem ou não a linha selecionada (ver página país do estabelecimento ASAMPLE).

Devolução detalhe versus a lista

A ação ABLKRESTOREMAINCTX permite retornar versus uma página lista a partir de uma página detalhe sem perder nem a paginação nem a linha selecionada do bloco principal.

A ligação dinâmica a seguir permite retornar à página FORMQUERYRES com restauração do contexto do bloco principal.

<input type="button" value="Retour liste" adx="DlkFrmQueryBack" class="xtendButton" >

Acesso direto aos dados das linhas

A sintaxe seguinte permite endereçar diretamente os dados de uma linha de um bloco:

<!--Primeira linha-->
<span adx="MYBLOCK(first).MYFIELD"></span>]<br>
<!--Última linha-->
<span adx="MYBLOCK(last).MYFIELD"></span>]<br>
<!--N-ésima linha-->
<span adx="MYBLOCK(N).MYFIELD"></span>]<br>

Acesso aos dados de um bloco em JavaScript (JSON)

A sintaxe seguinte permite valorizar uma variável JavaScript com a representação JSON de um bloco ou de uma linha de um bloco :

<script>
    // Dados JSON de um bloco
    var wMyBlock_JSON=<!adx="MYBLOCK(*)"><!adx="MYBLOCK(*)">;
    var wMyBlock_JSON=<!adx="MYBLOCK(*)"><!adx="MYBLOCK(*):xinclude=FIELD1,FIELD2">;
    var wMyBlock_JSON=<!adx="MYBLOCK(*)"><!adx="MYBLOCK(*):xexclude=FIELD1,FIELD2">;
    // Dados JSON de uma linha
    var wMyLine_JSON=<!adx="MYBLOCK(2)"><!adx="MYBLOCK(2)">;
    var wMyLine_JSON=<!adx="MYBLOCK(2):xinclude=FIELD1,FIELD2"><!adx="MYBLOCK(2)">;
    var wMyLine_JSON=<!adx="MYBLOCK(2):xexclude=FIELD1,FIELD2"><!adx="MYBLOCK(2)">;
</script>

A variável JSON de um bloco é um quadro (Array) de linhas :

<script>
    var wMyBlock = [{linha 1},{linha 2},...];
   
var wMyBlock = [{"STATUT":1,"STATUT_DESCR":"A tratar","PRIX":81.35,"COD2":"30-112"},
    {"STATUT":2,"STATUT_DESCR":"Tratado","PRIX":117.9,"COD2":"31-02"},
    {"STATUT":1,"STATUT_DESCR":"A tratar","PRIX":606.15,"COD2":"32-034"}];
</script>

A variável JSON de uma lina é um objeto que contém os campos :

<script>
    var wMyLine ={"CHAMP1":"Valor1","CHAMP2":"Valor2"...};
   
var wMyLine = {"STATUT":1,"STATUT_DESCR":"A tratar","PRIX":606.15,"COD2":"32-034"}
</script>

Para um campo o parâmetro xjson gera um objeto JSON {"NomChamp:"Valor"}. Sem parâmetro xjson a variável JavaScript está valorizada com o valor do campo.

<script>
    // Dados JSON de um campo
    var wMyField_JSON=<!adx="MYFIELD:xjson"><!adx="MYFIELD">;
    //XTEND gerado
    var wMyField_JSON={"MYFIELD":"Valor"};
   
// Valor de um campo
    var wMyField_JSON=<!adx="MYFIELD"><!adx="MYFIELD">;
    //XTEND gera
    var wMyField_JSON="Valor";
</script>

Os parâmetros HTML

Código

Parâmetro

Efeito

xselect

Verdade/Falso

Selecione a primeira linha por defeito

Campo de um bloco

Código

Tipo

Descrição

ABLKELMTIDX

Inteiro

Índice de um elemento num bloco (O->ABLKNBELMTS-1)

ABLKELMTRANK

Inteiro

Índice de um elemento num bloco (1->ABLKNBELMTS)

ABLKLINEIDX

Inteiro

Índice de uma linha num bloco (O->ABLKNBLINES-1)

ABLKLINERANK

Inteiro

Índice de uma linha num bloco (O->ABLKNBLINES)

ABLKNBELMTS

Inteiro

Número de elementos (registos) total do pedido de um bloco

ABLKNBLINES

Inteiro

Fila da linha selecionada de um bloco via a ação ABLKSELECT

ABLKSELECTEDLINE

Inteiro

Número de linhas de um bloco

APAGENB

Inteiro

Número de páginas de um bloco

APAGENUM

Inteiro

Fila da página corrente de um bloco

APAGEPOS

Inteiro

APAGEPOS/APAGENUM

Botões pré-definidos

Blocos pré-definidos

Código

Descrição

ACONST

Contém todos os campos de tipo constante

ACURRENT

Contexto de dados corrente (top) na pilha de dados XTEND

AHTMLFORM

Formulário HTML

AHTTPCOOKIE

Cookies HTTP

AMAIN

Bloco principal de uma página definida nos parãmetros da página

APBG

Bloco fundo de uma página definida nos parãmetros da página

AMESS

Mensagens utilizador

AREFERENCE

Quando se escreve "MonBlocReference.MonTokenLien" o bloco "MonBlocReference" está chamado "bloco de referência" ;
O contexto de dados deste bloco está passado em parâmetro da ação.

ASESSION

Contém os dados da sessão utilizador

AUSERCRIT

Contém os critérios utilizadores (parâmetro HTML xcrit)

AUSERINF

Contém os dados utilizador reenviados pelo login

AUSERVAR

Contém as variáveis utilizador criados pelas funções JavaSCript xtdSetUserVar/xtdRemoveUserVar

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 do token bloco.

  • Estab. (campo FCYLIB)

Estabelecimento Web corrente.

  • Descr. (campo INTIT)

 

Fechar

 

Separador Geral

Apresentação

Parâmetros gerais do bloco.

Fechar

 

Campos

Os seguintes campos estão presentes neste separador :

Características

  • Tipo (campo TYP)

  • Multi registos : seleção de várias entidades,

  • Mono registo : seleção de uma única entidade.
    Se a seleção reenvia várias entidades é a primeira entidade que será afixada.

  • Linha por bloco (campo BLCNBRLIN)

Número de linhas a afixar no quadro.

  • Células por linha (campo LINNBROBC)

Número de células por linhas a afixar no quadro.

Neste caso falta utilizar o token ASTAMP para definir as células.

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 dados" que será chamado.

  • campo INTTYP

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

Fechar

 

Separador Seleção

Apresentação

Parametrização da seleção associada ao bloco.

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

 

Separador Avançado

Campos

Os seguintes campos estão presentes neste separador :

Dados devolvidos pelo bloco

  • Nenhum dado (campo OPTDSY)

Indica o que deve ser afixado ao acondicionamento do bloco na página HTML se a seleção está vazia :

  • Nada afixar : não afixa nada.

  • Código HTML sem token : afixa o HTML contido entre os dois "tokens" que delimtam o bloco sem ter em conta dos "tokens".

  • Código HTML com token : chama o método de geração dos "tokens" filhos como se o bloco tem reenviado dos dados.

SEEINFO Nenhum contexto de dados está posicionado.
Os "tokens" filhos são os "tokens" do código HTML delimitado pelos tag de início e de fim do bloco.

Quadro Estilo por linha

  • Estilo (campo LINSTY)

Classes "css" das linhas pares e impares para alternar o estilo das linhas (cor de fundo...).

A classe "css" deve ser definida na página HTML.

Utilizar o token especial ALINESTYLE no tag HTML (<tr>) que contém a linha.

<table>
  <!adx="MonBloc">
   <tr adx="aLineStyle:xattr=Class"></tr>
  <!adx="MonBloc">
</table>
Génère
<table>
   <tr Class="ClasseLignePaire">...</tr>
   <tr Class="ClasseLigneImpaire">...</tr>
   <tr Class="ClasseLignePaire">...</tr>
</table>

Quadro Param. Acesso subprograma

Código do parãmetro sub-programa.

  • 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 campo para a origem "Token champ"

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 um "token" bloco.

Barra de menu

Utilitários / Validação com verificação

Validação com uma verificação da coerência dos dados do dicionário XTEND.

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