Para exempo dos dados do formulário serão transmitidas em modo criptado (HTTPS)
Após a ação de criação, o formulário será afixado em modo não registável na página corrente para que o utilizador possa verificar o conteúdo.
Esta operação consiste ler os dados reenviados pelo web service (entidade e parâmetros) e a os afixar ao ecrã.
A leitura se faz por "mapping" dos parâemtros em saída do web service versus duas entidades XTEND (XTDFRMHEAD e XTDFRMPARAM) para criar os dados em memória e inserindo 2 tokens blocos (ABLKFRMHEAD e ABLKFRMPARAM) na página HTML para afixar os dados.
A gestão de afixaação (formulário de registo ou formulário criado não registável) na mesma página está assegurada por um token "bloco condicional" (ACNDXTDFRMHIDE)
Os formulários criados podem ser consultados via a função X3 Formulário (GESAYZ)
Este parágrafo vem em complemento do procedimento de criação de uma ação utilizador.
1. Criar a interface "Ação utilizador objeto" AXTDFORM baseado sobre o nome de publicação de objeto AYZ (AXTDAYZ)
2. gerar o acesso
3. Gerar todos os campos de interface
Ver o menu "Utilitários/Criação token campo"
Criar as entidades :
Ver o menu Utilitários\Ajuda no preenchimento.
Estas entidades serão em seguida utilizados no mapping retorno de ação de criação do formulário.
No exemplo n´s temos definido 2 chaves para AYZ
FCYCOD filtra os formulários em função do estabelecimento corrrente ASAMPLE.
Falta supimir esta chave se deseja ler todos os formulários da base.
Criar uma ação AXTDFRMCREATE de tipo "standard" com para parametrizadas o tipo, o título, o email, o cometário e as opções.
Apenas os parãmetros do web services que dependem do contexto de chamada da ação são declaradas como parãmetros de ação em registo.
É o token ligação dinâmica que indica como serão valorizadas em função do contexto de chamada (campo web, campo XTEND...)
Supressão em início
assinalada para suprimir as entidades AXTDFRMHEAD e AXTDFRMPARAM ao início de ação (antes o resultado de chamada do sub-programa) afim de gerar correctamente a afixação do resultado na mesma página HTML com ajuda de um token "bloco condicional" baseado sobre a presença do campo FRMCOD.
Seguimento de atividade
Sim : para que cada chamada de ação seja registada no ficheiro de log
Ativo sobre reload
Não : para não recriar um formulário se o utilizador apoia sobre F5 após ter criado um formulário;
Ativação botão
Criar : para desencadear o botõa de ação Registar de objeto AYZ
Trata-se de fazer corresponder os campos XTEND com os parâmetros de chamada do web service.
No nosso caso devemos fazer unicamente um mapping dos parâemtros de ação TYP, TTL, CMT,MAIDCOD, PARCOD e PARVAL.
O mapping de PARCOD e PARVAL é de tipo Multi o que permite ao servidor XTEND de "mapear" vários campos HTML de mesmo nome sobre um parãmetro multi-dimensionado.
Para "maperar" os parãmetros de ação não se regista o código da entidade.
Os parâmetros do web services cujo valor provém sempre do mesmo contexto podem ser valorizados directamnte no mapping de ação em indicando a entidade.
Por exemplo se deve passar o código de utilizador de login podrer-se-á mapear directamemte com o campo AUSERCODE da entidade ASESSION mais cedo de declarar em parâmetro de ação.
Trata-se de criar duas entidades XTEND a partir dos dados reenviados por X3
As entidades de tipo Ação são guardadas em memória durente toda a duração da sessão utilizador.
Elas são recriadas automaticamente a cada chamada de ação
Para gerar a afixação via um "bloco condicional" tem necessidade de suprimir as entidades a primeira vez que a página se afixa (quando um clique sobre o token ligação dinâmica ADLKCONTACT no menu esquerdo)
Para tal se cria uma ação AXTDFRMRESET que não faz que suprimir as entidades AXTDFRMHEAD e AXTDFRMPARAM.
Esta ação está associada ao token ADLKCONTACT.
Tipo
Standard
Interface
Nenhum
A ligação dinâmica ADLKXTDFRMCREATE é o token que será inserido no botão de criação do formulário.
Permite definir a página de destino (Página corrrente), de associar a ação AXTDFRMCREATE e de valorizar os parâmetros
Seguimento de atividade
Sim : para que cada clique sobre a ligação registada no ficheiro de log
Forçar o modo http posto
Não : Como uma ação com parâmetros está associada à ligação dinâmica, o pedido será enviado automaticamnte em modo POST
Página corrente
Sim : O resultado (mensagem ou formulário criado) está afixado na página corrente
Ação
Código de ação a desencadear
Controlar os campos web
Sim : Para controlar os parâmetros Web (ver secção "Ação")
Transação de declarar todos os parâmetros de ação e de indicar a maneira cujo se deseja os valorizar.
Campo TYP
Constante : O tipo de formulário é sempre de tipo contrato (CON)
Campos TTL, MAICOD
'Chp Web Oblig' : Registo obrigatório por um campo web.
Campos CMT, PARCOD, PARVAL
"Campo web" : Registo por um campo web não obrigatório.
Cste/Attrib. web
Contém o nome do tag input (atribuido ao nome)
O controlo de registo não está ativo que se a opção "Generalidades/Controlar campos web" está assinalado.
O pedido será colocado versus o servidor XTEND apenas se :
O controlo está efectuado pela biblioteca JavaScript d'XTEND.
O token ADLKCONTACT permite afixar a página de criação do formulário a partir de um menu esquerdo.
Para gerar a afixação via o "bloco condicional" ACNDXTDFRMHIDE é necessário de apagar as entidades formulário à primeira afixação.
Esta operação é efetuada em associando a ação AXTDFRMRESET ao token ADLKCONTACT.
Este token permite também de afixar a página em modo segurança (https) para indicar ao utilizador que os dados serão encriptados.
Seguimento de atividade
Sim :
Forçar o modo posto
Sim : Para conservar o contexto de XTEND salavaguarda na página corrente.
O modo HTTP GET está utilizado unicamente sobre as ligações de tipo "âncora" que devem ser compatíveis com os motores de pesquisas (web crawlers).
Página corrente
Non/AXTDFRMCREATE : Página de destino
Ação
AXTDFRMRESET : Para apagar as entidades formulário
Os token blocos ABLKFRMHEAD et ABLKFRMPARAM são utilizados para afixar as entidades AXTDFRMHEAD e AXTDFRMPARAM que representam os dados de um fromulário XTEND.
Tipo
Mono registo : Lê a entidade AXTDFRMHEAD e coloca o dado ao extremo (top) da pilha do contexto de dados depois executa os tokens filhos.
Nenhum dado
Nada a afixar : Se entidade AXTDFRMHEAD não existe o bloco e os tokens "filhos" são ignorados
Entidade
AXTDFRMHEAD : Código de entidade a afixar
Tipo
Multi-registos : Efetua uma iteração sobre todas as entidades AXTDFRMPARAM e posiciona cada entidade ao extremo (topo) da pilha do contexto de dados depois executa os tokens filhos
Nenhum dado
Nada a afixar : Se a entidade AXTDFRMPARAM não existe bloco e os tokens "filhos" são ignorados
Entidade
AXTDFRMPARAM : Código de entidade a afixar
Linha por bloco
10 : Afixa 10 entidades AXTDFRMPARAM máximo na página.
Célula por linha
1 : Afixa uma entidade AXTDFRMPARAM por linha
Estilo por linha
Nenhum : Estilos a definir no ficheiro "my.css" para alternar a cor de fundo das linhas
Não é possível de definir os critérios de seleção sobre os blocos que selecionam as entidades guardadas em memória do servidor XTEND, quer dizer de tipo sessão ou Ação. O bloco seleciona automaticamente todas as entidades.
Os critérios de seleção se aplicam unicamnte que às entidade de tipo "Acesso dados"
Trata-se ilustrar o caso de utilização dos blocos condicionais.
O token ACNDXTDFRMHIDE está utilizada para modificar o conteúdo da página da presença ou não de um formulário
Afixação
Não assinalada : Indica que o conteúdo do token (html e tokens filhos) está mascarado se a condição está verificada.
Tipo de critério
Bloco vazio : Indica que a condição de afixação/máscara está baseada sobre o facto que um bloco contém ou não os dados
Bloc
ABLKFRMHEAD : Código do bloco a testar
Para que os campos de registo sejam afixados à primeira afixação da página, mesmo se um formulário foi criado anteriormente, nós temos criado uma ação AXTDFRMRESET que suprime as entidades formulário.
Esta ação está chamada pelo token ligação dinâmica ADLKCONTACT que afixa a página de criação de um formulário a partir de um clique no menu esquerdo.
Criar a página web AXTDFRMCREATE.
Página por defeito
Associar o ficheiro contact.html.
O ficheiro deve estar presente sobre o servidor X3 e pode ser selecionado pela tecla F12.
Protocole
Https : Para indicar que falta encriptar os dados do pedido Http (Ver configuração HTTPS)
Bloco principal e bloco de fundo
Nenhum
Acesso protegido
Não: para indicar que esta página está em acesso livre (anónimo)
Seguimento de atividade
Sim : para que cada afixação da página seja registada no ficheiro de log
Após modificação dos parâmetros X3 é aconselhado de validar a integralidade do estabelecimento via a função afim de reconstruir o dicionário do servidor XTEND via a função 'Validação estabelecimento Web(AYTFCYGEN)".
Bem verificar que o estabelecimento XTEND está publicado, quer dizer o campo "Publicado o estabelecimento" da ficha "Estabelecimento web" está assinalado.
Inserção do token "ligação dinâmica" ADLKCONTACT no menu esquerdo para afixar a página e suprimir o último formulário criado.
<TD class="botão"><A adx="ADLKCONTACT">Contacte-nos</A></TD>
O token "bloco condicional" ACNDXTDFRMHIDE permite afixar o registo de formulário se nenhum formulário XTEND não foi encontrado senãoafixa o conteúdo do formulário.
<!adx="ACNDXTDFRMHIDE">
<!-- Afixação do conteúdo do formulário criado se o bloco ABLKFRMHEAD não está vazio-->
<!adx="ACNDXTDFRMHIDE">
<!adx="ACNDXTDFRMHIDE:xNot">
<!-- Afixação do registo do formulário se o bloco ABLKFRMHEAD está vazio-->
<!-- Parâmetro xNot:Condição inversa do token "bloco condicional"-->
<!adx="ACNDXTDFRMHIDE">
Criaação de campos <input> com o token adx="NomDuChamp".
Se não se indica o atributo nome num tag <input> será gerado automaticamente com o nome do token adx.
O parâmetro xrc(<input adx="TokenName:xrc">) está utilizada para reafixar o último valor registado em caso de erro de registo detectado pelo servidor XTEND ou a aplicação X3.
Permite de evitar de perda dos dados registados
<H1>Nos contactar</H1>
<tabela>
<tr>
<td><b><b>Email:</b></td>
<td>
<input type="texto" adx="MAICOD:xrc" size="50">
</td>
</tr>
<tr>
<td><b><b>Sujet:</b></td>
<td>
<input type="texto" adx="TTL:xrc" size="50">
</td>
</tr>
<tr>
<td><b>Mensagem:</b></td>
<td>
<textarea adx="CMT:xrc" rows="5" cols="75"></textarea>
</td>
</tr>
</table>
Criação de conjuntos de campos <input> tipo Chave/Valor que serão "mapeados" sobre 2 colunas de um bloco quadro ou dois parâmetros de dimensão N de um sub-programa.
O mapping dos conjuntos PARCOD/PARVAL com os parãmetros do web service é efetuado seguinte a ordem de criaação dos campos na página HTML.
<tr>
<td><b>Sociedade:</b></td>
<td>
<input type="Text" adx="PARVAL:xrc" size="50">
<input type=escondido" name="PARCOD" value="Sociedade">
</td>
</tr>
<tr>
<td><b>Actividade:</b></td>
<td>
<select adx="PARVAL">
<option value="">Préciser :</option>
<option value="Artesanos" >Artisans</option>
</select>
<input type="hidden" name="PARCOD" value="Actividade">
</td>
</tr>
<tr>
<td><b>Código postal:</b></td>
<td>
<input type="text" value="" adx="PARVAL:xrc" size="10">
<input type="hidden" name="PARCOD" value="Código Postal">
</td>
</tr>
Criação de um input de tipo "botão" com o atributo adx que contém o código da ligação dinâmica
Todos os botões <input type="botão"> que contém os tokens adx devem ser de botão.
O tipo submite não deve ser utilizado.
<tr>
<td>
<input type="botão" class="botão" adx="ADLKXTDFRMCREATE" value="Criar">
</td>
</tr>
Uma ação utilizador é considerada como validad se A chamada do web service não renvia nenhuma mesagem de erro.
As mensagens de erro são colocadas em L4G via o sub-programa ADDMESSERR (Call ADDMESSERR("Mensagem") From AWEB)
A afixaação das mesagens X3 e´efetuada via o token AXUSERMSG.
Ex : <span id="userMsg" class="userMsg" adx="aMsgUser"></span>
Como os campo MAICOD e TTL foram definidos como campos web obrigatórios, o controlo é efetuado automaticamnte e não necessita nenhum acréscimo de código JavaScript.
As mensagens em caso de erro afixadas são AJSWEBFLDMANDAT (campos obrigatório) e AJSWEBFLDBADVAL (erro de formato).
É posssível de acrescentar os controlos em JavaScript sobre os parâmetros Web em acrescentando uma função JavaScript de nome xtdWebParamCheckValue na página HTML.
Se a livraria XTEND deteta a presença desta função ela será chamada com parâmetro.
Esta função reenvia verdade\falso para validar\invalidar o registo
A mensagem AJSWEBFLDBADVAL está afixada em caso de erro de registo.
Na página de exemplo nós temos acrescentado uma função que controla o formato de email.
<script type="application/x-javascript">
// This function is used to customized control on web parameters values
function xtdWebParamCheckValue(aWebParamOut,aInputFieldName,aInputFieldIndex,aInputFieldValue){
// Check input email value
if (aInputFieldName=="MAICOD"){
var wEmail=xtdCheckEmail(aInputFieldValue);
if (wEmail && wEmail!=aInputFieldValue)
aWebParamOut.setValue(aInputFieldIndex,wEmail);
return wEmail!=null;
}
return true;
}
</script>
A função xtdWebParamCheck permite de fultrar os campos a controlar.
Ela funciona segundo o mesmo principio que xtdWebParamCheckValue.
var gNbChecked=0;
// Renvoie true si le paramètre web aInputFieldName/aInputFieldIndex doit être contrôlé
function xtdWebParamCheck(aWebParamsOut,aInputFieldName,aInputFieldIndex){
/*
Exemple pour une liste de picking avec checkboxes (ASELECTED) pour sélectionner les lignes.
On ne contrôle pas le champ AQUANTITY si la ligne n'est pas sélectionnée'
*/
if (aInputFieldName=="AQUANTITY"){
// gNbChecked est un compteur des lignes sélectionnées
if (aInputFieldIndex==0) gNbChecked=0;
// Ligne sélectionnée si la valeur de ASELECTED est égale à 1
if (aWebParamsOut.getParamValue("ASELECTED",aInputFieldIndex)=="1"){
gNbChecked++;
return true;
}
return false;
}
return true;
}
O bloco ABLKFRMHEAD permite posicionar o contexto de dados.
Os campos são afixados via um token adx colocado num tag HTML
<table width="90%" border="0" cellspacing="2" cellpadding="4">
<!adx="ABLKFRMHEAD">
<tr>
<td><b>Email:</b></td>
<td adx="MAICOD"></td>
</tr>
<tr>
<td><b>Sujet:</b></td>
<td adx="TTL"></td>
</tr>
<tr>
<td><b>Message:</b></td>
<td><pre adx="CMT"></pre></td>
</tr>
<!adx="ABLKFRMHEAD">
</table>
o bloco ABLKFRMPARAM permite de iterar sobre as opções do formulário e de criar tantas linhas <tr> que de opções.
Para cada opção, XTEND posiciona um contexto de dados o que permite de resolver o valor dos tokens adx PARCOD e PARVAL colocados nas tags HTML.
<!adx="ABLKFRMPARAM">
<tr>
<td><b adx="PARCOD"></b></td>
<td adx="PARVAL"></td>
</tr>
<!adx="ABLKFRMPARAM">
O ponto de entrada pageDoMyDlk permite acrescentar uma tratamento sobre clique utilizador e de anular o processo em curso se o valor falso está reenviado.
No nosso caso pede-se uma confirmação antes de colocar o formulário versus o servidor XTEND.
//Asks user to confirm creation of a new form if user clicks on ADLKCONTACTNEW dynamic link
function pageDoMyDlk(aDomOut)
{
if (aDomOut.isDlk("ADLKCONTACTNEW"))
return confirm('Confirmar a criação do formulário\nConfirm criação');
devolve verdade;
}
O ponto de entrada xtdWebParamCheckValue faz parte do mecanismo de controlo dos valores dos "campos web" XTEND (parâmetros web das ações XTEND).
Se a função xtdWebParamCheckValue está definido na página HTML, ela será chamada pela livraria XTEND para cada controlo de "campo web".
No nosso caso controla-se o valor do campos MAICOD (email) via a função XTEND xtdCheckEmail.
//This function is used to customized control on web parameters values
function xtdWebParamCheckValue(aWebParamOut,aInputFieldName,aInputFieldIndex,aInputFieldValue){
// Check input email value
if (aInputFieldName=="MAICOD"){
var wEmail=xtdCheckEmail(aInputFieldValue);
if (wEmail && wEmail!=aInputFieldValue)
aWebParamOut.setValue(aInputFieldIndex,wEmail);
return wEmail!=null;
}
return true;
}