4D v16.3

Binding 4D objects with HTML objects

Página Inicial

 
4D v16.3
Binding 4D objects with HTML objects

Binding 4D objects with HTML objects  


 

 

O servidor Web de 4D permite recuperar os dados "enviados", ou seja, os dados introduzidos pelos usuários através dos formulários web e são enviados ao servidor sob os botões ou os elementos de interface, em modo POST ou GET.

O servidor web aceita várias URLs específicas que podem ser associadas com os botões de modo que o envio do formulário desencadeie o processamento do lado do servidor. Estas URLs se descrevem na seção Ações URL e Formulário.

Este capítulo trata os princípios implementados com o propósito de recuperar os dados que se encontram nos formulários que foram devolvidos ao servidor.

Quando enviar uma página HTML utilizando WEB SEND FILE ou WEB SEND BLOB, também pode associar as variáveis 4D com os objetos HTML no endereço “navegador web a 4D”. A associação funciona de ambas formas: quando tiver o formulário HTML é devolvido, 4D pode copiar os valores dos objetos HTML nas variáveis processo 4D. Visando a compilação do banco, estas variáveis devem ser declaradas no método COMPILER_WEB (ver o parágrafo mais adiante).

O comando WEB GET VARIABLES recupera os valores em forma de texto, enquanto os comandos WEB GET BODY PART e WEB Get body part count podem recuperar os arquivos publicados, utilizando BLOBs.

Nota de compatibilidad (4D v13.4): Nas versões anteriores, 4D copiava diretamente os valores das variáveis recebidas sob um formulário web publicado ou um URL GET, nas variáveis processo 4D (em modo compilado, estas variáveis tinham que ter sido declaradas na método COMPILER_WEB). Este funcionamento se elimina a partir de 4D v13.4, se mantém por compatibilidade das bases de dados convertidas, mas pode ser desativada mediante a opção de compatibilidade
Atribuição automática de variáveis na Página Compatibilidade das Propriedades da base (se recomenda desativar esta opção e utilizar os comandos WEB GET VARIABLES ou WEB GET BODY PART em suas bases).

Considere esta página de código HTML:

<html>
<head>
  <title>Welcome</title>
  <script language="JavaScript"><!--
function GetBrowserInformation(formObj){
formObj.vtNav_appName.value = navigator.appName
formObj.vtNav_appVersion.value = navigator.appVersion
formObj.vtNav_appCodeName.value = navigator.appCodeName
formObj.vtNav_userAgent.value = navigator.userAgent
return true
}
function LogOn(formObj){
if(formObj.vtUserName.value!=""){
return true
} else {
alert("Enter your name, then try again.")
return false
}
}
//--></script>
</head>
<body>
<form action="/4DACTION/WWW_STD_FORM_POST" method="post"
 name="frmWelcome"
 onsubmit="return GetBrowserInformation(frmWelcome)">
  <h1>Welcome to Spiders United</h1>
  <p><b>Please enter your name:</b>
  <input name="vtUserName" value="<!--#4DTEXT vtUserName-->" size="30" type="text"></p>
  <p> 
<input name="vsbLogOn" value="Log On" onclick="return LogOn(frmWelcome)" type="submit"> 
<input name="vsbRegister" value="Register" type="submit">
<input name="vsbInformation" value="Information" type="submit"></p>
<p> 
<input name="vtNav_appName" value="" type="hidden"> 
<input name="vtNav_appVersion" value="" type="hidden"> 
<input name="vtNav_appCodeName" value="" type="hidden">
<input name="vtNav_userAgent" value="" type="hidden"></p>
</form>
</body>
</html>

Quando 4D envia a página ao navegador, tem essa aparência:

As principais caraterísticas desta página são:

  • Inclui três botões Enviar: vsbEntrar, vsbRegistrar e vsbInformação.
  • Quando clicar em Log On, o envio do formulário primeiro é processado pela função JavaScript LogOn. Se nenhum nome for introduzido, o formulário não é nem ao menos enviado a 4D e se mostra um alerta JavaScript.
  • O formulário tem um método POST 4D e um script Submit (GetBrowserInformation) que copia as propriedades do navegador em quatro objetos ocultos cujos nomes começam por vtNav_App.
  • O valor inicial do objeto vtNomeUsuário é <!--#4DTEXT vtNomeUsuário-->.
Examinemos agora o método 4D (chamado WWW_STD_FORM_POST que se chama quando o usuário clicar em um dos botões nos formulários HTML.
 
 <p> // Recuperação do valor das variáveis
 ARRAY TEXT($arrNames;0)
 ARRAY TEXT($arrValues;0)
 GET WEB FORM VARIABLES($arrNames;$arrValues)</p><p> //Testar os valores dos botões Submit para detectar se um deles tiver recebido um clique
 
 Case of
 
  // O botão Log On foi clicado
    :(vsbLogOn#"")
       QUERY([WWW Users];[WWW Users]User Name=vtUserName)
       $0:=(Records in selection([WWW Users])>0)
       If($0)
          WWW POST EVENT("Log On";WWW Log information)
  // O método WWW POST EVENT guarda a informação em uma tabela do banco
       Else
 
          $0:=WWW Register
  // O método WWW Register permite a um novo usuário web registrar-se
       End if
 
  // O botão  Register foi clicado
    :(vsbRegister#"")
       $0:=WWW Register
 
  // O botão de Informação foi clicado
    :(vsbInformation#"")
       SEND HTML FILE("userinfos.html")
 End case

As caraterísticas deste método são:

  • Os valores das variáveis 4D vtNav_appName, vtNav_appVersiom, vtNav_appCodeName e vtNav_userAgent (associadas aos objetos HTML do mesmo nome) são recuperados pelo comando WEB GET VARIABLES a partir dos objetos HTML criados pelo script JavaScript GetBrowserInformation.
  • As variáveis 4D vsbLogOn, vsbRegister e vsbInformation estão associadas aos três botões Submit. Note que estas variáveis são reiniciadas cada vez que a página se envia ao navegador. Quando o envio se realiza por um desses botões, o navegador retorna o valor do botão sobre o qual foi feito clique. Como as variáveis 4D são reinicializadas cada vez, assim a variável que já não for igual a string vazia indica em que botão clicar. As outras duas variáveis são strings vazias, não porque o navegador devolva strings vazias, mas porque o navegador não “disse” nada sobre elas; portanto, 4D deixa as variáveis sem mudanças. Por esta razão é necessário reiniciar estas variáveis todas as vezes que a página for enviada ao navegador.
    Esta é a maneira de diferenciar qual  botão Submit foi clicado quando existirem vários botões Submit na página web. Note que os botões 4D em um formulário 4D são variáveis numéricas. Entretanto, com HTML, todos os objetos são objetos texto.
Se associar uma variável 4D com um objeto SELECT, também associa uma variável texto. Em 4D, para testar qual elemento de uma lista drop down foi selecionado, você testa o valor numérico do array 4D. Com HTML, este é o valor do elemento selecionado que é devolvido na variável 4D associada ao objeto HTML.

Sem importar qual objeto está associado à variável 4D, o valor devolvido é de tipo Texto, de maneira que deve associar as variáveis 4D processo de tipo Alfa ou Texto.

A partir de 4D v15 R3, 4D Web Server integrado suporta os arquivos carregados na codificação de transferência fragmentada desde qualquer cliente Web. A codificação de transferência fragmentada é um mecanismo de transferência de dados especificado em HTTP/1.1. Permite que os dados sejam transferidos em una série de "pedaços" (partes) sem conhecer o tamanho dos dados finais.

Nota: o servidor web 4D também suporta a codificação de transferência fragmentada desde o servidor aos clientes Web (ver WEB SEND RAW DATA).

Para saber mais sobre a implementação do lado do cliente para transferências fragmentadas, consulte RFC7230 ou a página correspondente em Wikipedia.

O método COMPILER_WEB, se existir, é chamado sistematicamente quando o servidor  HTTP receber uma requisição dinâmica e chama o motor 4D. Este é o caso, por exemplo, quando o servidor 4D Web receber um formulário postado ou uma URL contendo a ação 4DCGI. Este método foi feito para conter digitação ou inicialização de variáveis diretivas usadas durando trocas Web. É usada pelo compilador quando o banco de dados for compilado. O método COMPILER_WEB é comum a todos os formulários Web. Como padrão, o método COMPILER_WEB não existe. Deve explicitamente criar esse método.

Serviços web: o método de projeto COMPILER_WEB é chamado, se existir, para cada petição SOAP aceitada. Deve utilizar este método para declarar todas as variáveis 4D associadas com os argumentos SOAP entrantes e para todos os métodos publicados como Serviços web. Na verdade, o uso de variáveis processo nos métodos de serviços web necessita que sejam declaradas antes de chamar ao método. Para maior informação sobre este ponto, consulte a descrição do comando SOAP DECLARATION



Ver também 

Ações URL e Formulário
Etiquetas HTML 4D
WEB GET BODY PART
WEB SEND BLOB
WEB SEND FILE

 
PROPRIEDADES 

Produto: 4D
Tema: Web Server

 
HISTÓRIA 

Modificado: 4D v15 R3

 
PALAVRAS CHAVES 

chunked transfer encoding, COMPILER_WEB

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)