Botão para Remover campos do E3 Browser [RESOLVIDO]

Boa Tarde

Criei um E3 Browser com um botão que permite o usuário acrescentar campos selecionados através de um combox . Utilizei o ADDFIELD
Eu gostaria de disponibilizar para os usuários um botão para remover os campos do E3 Browser. Tentei usar o REMOVEFIELD , porém é removido apenas um campo de cada vez. Ou o ClearFields mas na próxima consulta reaparecem os campos apagados.
Como posso criar um botão que apague os Campos Adicionados ?
Grato

Boa tarde @aascaneo

Para fazer o que deseja, acredito que um cenário, é fazer a edição direta do SQL da consulta, adicionando ou removendo as colunas na string da consulta, e após configurar, pedir ao E3Browser para recriar os campos de acordo com a consulta, exemplo de código:

  1. Deve-se habilitar a edição do SQL da consulta;

  2. Configurar um botão que faça a leitura da string SQL armazenada em um tag interno, por exemplo, e mostre o resultado no E3Browser, como exemplo de script abaixo:

    Set objBrowser = Screen.Item(“E3Browser1”)
    Set objConsulta = objBrowser.Item(“Consulta1”)

    'Edita e executa consulta
    'objConsulta.SQL = “SELECT E3TimeStamp, Coluna01, Coluna02 FROM Tabela ORDER BY Tabela.E3TimeStamp ASC”
    objConsulta.SQL = Application.Item(“TagStringConsulta”).Value

    'Reestrutura o E3BRowser
    objBrowser.RetrieveE3QueryFields()
    objBrowser.Requery()

Outro exemplo do código, neste a tabela é fixa, e somente as colunas são “editáveis”:

Set objBrowser = Screen.Item("E3Browser1")
Set objConsulta = objBrowser.Item("Consulta1")

'Edita e executa consulta
'objConsulta.SQL = "SELECT E3TimeStamp, Coluna01, Coluna02 FROM Tabela ORDER BY Tabela.E3TimeStamp  ASC"
objConsulta.SQL = "SELECT "& Application.Item("TagStringConsulta").Value &" FROM Tabela ORDER BY Tabela.E3TimeStamp  ASC"

'Reestrutura o E3BRowser
objBrowser.RetrieveE3QueryFields()
objBrowser.Requery()

Neste cenário, o adicionar ou remover colunas, trabalharia com os textos das colunas do Tag Interno.

Informações:

  1. Para armazenar a última consulta/configuração realizada é necessário utilizar um tag/banco de dados/arquivo;
  2. O tag pode ficar no servidor de dados ou Viewer, isso vai depender da necessidade da informação, exemplo simples, global/para todos os operadores, o tag deve ficar no servidor, apenas para um operador, enquanto o Viewer estiver aberto, o tag pode ficar no Viewer.

Oi @aascaneo,

Apenas passando mais opções, está mesma configuração/cenário, também poderia ser enviada para a consulta, através de variável interna da consulta, exemplo:

  1. Deve-se configurar a consulta, e no lugar das colunas adicionar uma variável interna, exemplo do SQL da consulta:

    SELECT <%Colunas%>
    FROM Tabela
    ORDER BY Tabela.E3TimeStamp ASC

  2. Neste exemplo, o código de carregamento das colunas, que também poderia vir de uma tag/banco/arquivo/outros, teria uma pequena alteração, ficando conforme exemplo abaixo:

    Set objBrowser = Screen.Item(“E3Browser1”)
    Set objConsulta = objBrowser.Item(“Consulta1”)

    'Edita e executa consulta
    Call objConsulta.SetVariableValue(“Colunas”, “Tabela.E3TimeStamp, Tabela.Coluna01, Tabela.Coluna02”)

    'Reestrutura o E3BRowser
    objBrowser.RetrieveE3QueryFields()
    objBrowser.Requery()

Qualquer dúvida não deixe de postar.

Atenciosamente,
Marco Antonio

Oi @aascaneo,

Mais uma opção para fazer o que deseja, é trabalhar com a visibilidade das colunas do E3Browser, conforme exemplo do artigo KB-64290: Alterando a visibilidade de uma coluna no E3Browser.

Qualquer dúvida não deixe de postar.

Atenciosamente,
Marco Antonio

Bom Dia, script que estou utilizando é o que segue abaixo:

Sub CommandButton1_Click()

Field = Screen.Item(“ComboBox2”).Value

if Field = “” or Field = “-Selecione uma Area-” or Field = “-Selecione uma Variavel-” OR Screen.Item(“Texto1”).Value = “” OR Screen.Item(“Texto2”).Value = “” then

MSGBOX “SELECIONE UMA VARIAVEL E DEFINE DATA E HORÁRIO”

else

Screen.Item(“E3Browser1”).Item(“Consulta1”).AddField Field
'Screen.Item(“E3Browser2”).Item(“Consulta1”).Where = “Field >= <%Valor%>”

Screen.Item(“E3Browser1”).Item(“Consulta1”).SetVariableValue “DataInicial”,Screen.Item(“Texto1”).Value
Screen.Item(“E3Browser1”).Item(“Consulta1”).SetVariableValue “DataFinal”,Screen.Item(“Texto2”).Value
'Screen.Item(“E3Browser2”).Item(“Consulta1”).SetVariableValue “Valor”,Screen.Item(“Setpoint3”).Value

Screen.Item(“E3Browser1”).RetrieveE3QueryFields()

Screen.Item(“E3Browser1”).Requery()

END IF
End Sub

Feito desta maneira eu consigo selecionar os campos que desejo apresentar na consulta. Porém, eu gostaria de poder limpar a consulta.

Grato

Bom dia @aascaneo

Particularmente, gosto de trabalhar com o SQL da consulta, selecionando os itens desejados, que apresentei nos primeiros post’s, mas para a sua configuração, acredito que pode tentar usar o método “RemoveField” que informou no seu primeiro pots, em conjunto com o método que retorna os fields da consulta (GetE3QueryFields), ficando o código da seguinte forma:

'Limpa campos da consulta
Set E3Browser = Screen.Item(“E3Browser1”)
Set Consulta = E3Browser.Item(“Consulta1”)
For Each field in Consulta.GetE3QueryFields()
Consulta.RemoveField(field.ColumnName)
Next
E3Browser.RetrieveE3QueryFields()

Qualquer dúvida não deixe de postar.

Atenciosamente,
Marco Antonio

Muito Obrigado!
O problema foi solucionado

Bom dia @aascaneo!

Obrigado pelo retorno!

Qualquer outra dúvida, não deixe de postar.

Atenciosamente,
Marco Antonio