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.
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 :
Esta etapa está efetuada uma única vez no momento da alteração da página HTML :
Esta etapa está efetuada a cada afixação da página HTML :
1. Inicialização dos blocos
2. Iteração sobre todas as entidades devolvidas
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>
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 :
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.
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>
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-->
<!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 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>
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).
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" >
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>
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>
Código | Parâmetro | Efeito |
xselect | Verdade/Falso | Selecione a primeira linha por defeito |
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 |
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" ; |
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 |
Campos
Os seguintes campos estão presentes neste separador :
| Código do token bloco. |
| Estabelecimento Web corrente. |
|   |
Fechar
Apresentação
Parâmetros gerais do bloco.
Fechar
Campos
Os seguintes campos estão presentes neste separador :
Características
|
|
| Número de linhas a afixar no quadro. |
| 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. |
| Interface de tipo "Acesso dados" que será chamado. |
| Tipo de interface "Acesso dados" que será chamado. |
Fechar
Apresentação
Parametrização da seleção associada ao bloco.
Fechar
Campos
Os seguintes campos estão presentes neste separador :
Características
| 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. |
| 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.
|
| 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
| Pedido do bloco ao formato texto |
Quadro Critérios de selecção
| Operador lógico de encadeamento das operações. |
| Parenteses abertos. |
| Campo de entidade cujo valor é o primeiro operando da operação. |
| Operador de comparação. |
|
|
| 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" |
|   |
| Código do bloco para a origem "Token champ" |
| Parenteses de fecho. |
|
|
|   |
Entidade
| Indica as entidades que serão criadas a partir do resultado do pedido. |
| Interface de tipo "Acesso" dado que será chamado. |
| Tipo de interface "Acesso" dado que será chamado. |
Fechar
Campos
Os seguintes campos estão presentes neste separador :
Características
| Selecione um tipo de ordenação :
|
|
|
Quadro Ord.
| Nome do campo para a origem "Token campo". |
| Ordem de triagem Ascendente/Descendente |
Fechar
Campos
Os seguintes campos estão presentes neste separador :
Dados devolvidos pelo bloco
| Indica o que deve ser afixado ao acondicionamento do bloco na página HTML se a seleção está vazia :
|
Quadro Estilo por linha
| 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> |
Quadro Param. Acesso subprograma
| Código do parãmetro sub-programa. |
|
|
|
|
| Código do bloco para a origem "Token champ" |
|   |
| Código do campo para a origem "Token champ" |
Fechar
Por defeito, os seguintes listagens estão associados à função :
PRTSCR : Impressão ecran
Mas pode ser alterado por parametrização.
Este botão permite copiar um "token" bloco. |
Validação com uma verificação da coerência dos dados do dicionário XTEND.