NOTAS GERAIS:
- Este artigo se aplica ao Elipse E3, versões 4.5 ou superior.
- Para maiores detalhes sobre a biblioteca E3DataAccess, recomendamos a leitura dos seguintes artigos: Conectando uma aplicação VBA a um E3Server com a biblioteca de comunicação E3DataAccess e BUG-0013588: Tipos incompatÃveis ao chamar métodos GetValue/SetValue do componente E3DataAccess.
Introdução
Neste artigo, são utilizadas as linguagens JavaScript e VBScript para demonstrar o uso da biblioteca E3DataAccess. No exemplo, os scripts foram usados em uma página HTML, e como cliente foi utilizado o browser Internet Explorer versão 11.
Linguagens como o JavaScript não oferecem suporte a passagem de parâmetros por referência, por isso o JavaScript foi utilizado em conjunto com VBScript para utilização de alguns dos métodos da biblioteca E3DataAccess.
A partir da versão 11 do Internet Explorer, o VBScript tem suporte limitado. Para maiores informações, acesse a documentação da Microsoft. Para permitir uso do VBScript, o seguinte trecho foi adicionado à página.
< meta http-equiv="x-ua-compatible" content="IE=10"/ >
Como o JavaScript não suporta a passagem de parâmetros por referência, a classe E3Item foi criada em VBScript para a utilização dos métodos ReadValue e WriteValue. Esta classe contém duas funções: Read(ItemName), que recebe como parâmetro o nome do tag do servidor e então utiliza a função ReadValue para realizar a leitura desse tag; e Write(ItemName, vTimestamp, vQuality, vValue), que recebe como parâmetros o nome do tag do servidor onde serão salvos os demais parâmetros Timestamp, Qualidade e Valor, e escreve esses dados no servidor através da função WriteValue.
Class E3Item    Public Value    Public Timestamp    Public Quality    Public Function Read(ItemName)         Read = E3DataAccess.ReadValue(ItemName, Timestamp, Quality, Value)    End Function    Public Function Write(ItemName, vTimestamp, vQuality, vValue)        Write = E3DataAccess.WriteValue(ItemName, vTimestamp, vQuality, vValue)        If Write Then            Timestamp = vTimestamp            Quality = vQuality            Value = vValue        End If    End Function End Class
Métodos da Biblioteca E3DataAccess
1. Método ReadValue
Para realizar a leitura, foi criada a função Read() em JavaScript:
function Read() {    E3DataAccess.Server = document.E3Config.editServer.value;    var msg;   //Cria instancia var da = createNewE3Item();   if (da.Read(document.E3Config.editTag.value))   {       document.E3Config.editValue.value = da.Value;       msg = document.E3Config.editTag.value + ": " + da.Timestamp + ", " + da.Quality + ", " + da.Value;   }   else   {       msg = "Error in reading value from server: " + E3DataAccess.Server + " for item: " + document.E3Config.editTag.value; } WriteText(msg);   }   WriteText(msg); }
Esta função cria uma instância da classe E3Item, envia para a função Read da classe o nome do tag configurado pelo usuário no HTML, e então conecta-se ao E3Server, realizando a leitura dos parâmetros Value, TimeStamp e Quality através do método ReadValue da biblioteca E3DataAccess. Feito isso, os valores estão prontos para serem utilizados no JavaScript e são disponibilizados para o usuário.
2. Método WriteValue
Semelhantemente ao procedimento de leitura, a escrita utiliza a função Write, criada em JavaScript:
function Write() {    E3DataAccess.Server = document.E3Config.editServer.value;    var msg;    //Cria instancia    var da = createNewE3Item();    //Formata data para salvar    var date = new Date();    var month = date.getMonth()+ 1; var dateString = month + "/" + date.getDate() + "/"                     + date.getFullYear() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();    if (da.Write(document.E3Config.editTag.value, dateString, 192,document.E3Config.editValue.value))    {        msg = "Writing to server: '" + E3DataAccess.Server + "' for item: '" + document.E3Config.editTag.value + "' succeeded";    }    else    {         msg = "Error in writing value to server: '" + E3DataAccess.Server + "' for item: '" + document.E3Config.editTag.value + "' = "                   + document.E3Config.editValue.value;    }    WriteText(msg); }
Esta função também cria uma instância da classe E3Item, passa os parâmetros informados pelo usuário para a função Write da classe, e utiliza o método WriteValue da biblioteca E3DataAccess para realizar escrita no tag, passando assim os parâmetros para o E3Server.
3. Método ExecuteQuery
Também é possÃvel realizar consultas utilizando o método ExecuteQuery da biblioteca E3DataAccess. Para isso, foi criada a função GetQueryValues() em JavaScript:
function GetQueryValues() {    E3DataAccess.Server = document.E3Config.editServer.value;    var da = createNewE3Query();    if (document.E3Config.editQuery.value != "")   {        da.ProcessQuery(document.E3Config.editQuery.value, "dvTableRended");        document.getElementById("dvTableRended").innerHTML = da.Content;    }    else    {        document.getElementById("dvTableRended").innerHTML = Date() + " - Error empty query.";    } }
Esta função cria uma instância da classe E3Query, criada em VBScript conforme exemplo acima, utilizando a função ProcessQuery. Através desta outra função, ela irá utilizar o método ExecuteQuery da biblioteca para realizar a consulta no E3Server.
Class E3Query
Public ContentPublic Function ProcessQuery(queryName, tablePlacement)
If queryName <> "" Then
Dim vNames, vValues, arrResult
If E3DataAccess.ExecuteQuery(queryName, vNames, vValues, arrResult) Then
Call RenderTable(arrResult, tablePlacement)
Else
Document.getElementById(tablePlacement).innerHTML = Now & " - Error in the query result."
End If
Else
Document.getElementById(tablePlacement).innerHTML = Now & " - Error empty query."
End If
End Function
4. Métodos RegisterCallBack e UnregisterCallBack
Para a utilização destes métodos, foi criada a função RegisterCallback() em JavaScript. Ao contrário das funções anteriormente criadas, esta função não precisa fazer nenhuma chamada a métodos desenvolvidos em VBScript, utilizando diretamente o método RegisterCallBack da biblioteca E3DataAccess via JavaScript.
 function RegisterCallback() {    E3DataAccess.Server = document.E3Config.editServer.value;    if (document.E3Config.editTag.value != "")    {        var result;        result = E3DataAccess.RegisterCallback(document.E3Config.editTag.value);       WriteText("Register tag: " + document.E3Config.editTag.value + " result: " + result);     }     else     {         window.alert("Error! There is no tag item for register. Type one before proceed.");     }
Assim como o método RegisterCallback, também foi criada a função UnregisterCallback, em JavaScript, conforme visto abaixo.
 function UnregisterCallback()
{
if (document.E3Config.editTag.value != "")Â Â Â if (document.E3Config.editTag.value != "")
{
var result;
result = E3DataAccess.UnregisterCallback(document.E3Config.editTag.value);
WriteText("Unregister tag: " + document.E3Config.editTag.value + " result: " + result);
}
else
{
window.alert("Error! There is no tag item for unregister. Type one before proceed.");
}
}
Testando a Aplicação
Para testar a aplicação, primeiramente deve-se executar o domÃnio com a aplicação E3, abrir a página HTML no Internet Explorer (como Administrador), e permitir acesso do ActiveX.
Feito isso, na página HTML aberta, basta informar o caminho do tag do E3Server que deseja ler/escrever.

Figura 1. Leitura do tag do servidor
Para realizar a consulta, basta inserir (em Session Query) o caminho desta no servidor.

Figura 2. Consulta do servidor.
Finalmente, para utilizar os métodos RegisterCallBack e UnregisterCallBack, basta inserir o caminho do tag no servidor e clicar em Register ou Unregister; assim, sempre que houver um evento com este tag, ele será mostrado na tela.

Figura 3. RegisterCallBack no Tag2 do servidor.
Para maiores detalhes da implementação, a aplicação exemplo E3 e a página HTML utilizada estão em anexo a este artigo.
