Páginas filhas
  • LGX - LXMLOBJECT

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Pagetitle

...

LGX - LXMLOBJECT
LGX - LXMLOBJECT

...

Para saber mais sobre REST e como configurar o TOTVS TEC como um servidor REST consulte a página REST ADVPL.

Classe que permite

...

manipular conteúdos XML utilizando expressão XPATH.


Hierarquia


Métodos GET


Métodos acessíveis através da função _ADVPL_get_property que permite recuperar e manipular os valores do componente: 


Expandir
titleACTIVATE

Método GET: ACTIVATE

Valida e efetua a interpretação de um determinado conteúdo XML.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"GET", "HOST" ) => CHAR

Parâmetros


Tipo

Descrição

CHAR
Conteúdo XML.

Retorno


Tipo

Descrição

SMALLINT

TRUE ou 1 - Leitura e interpretação do conteúdo XML realizado com sucesso.

FALSE ou 0 - Falha na leitura e interpretação do conteúdo XML.


Observação


  • Para recuperar a mensagem de erro, no caso de ocorrer falha, utilize o método ERROR_MESSAGE.


Expandir
title

...

ATTR_VALUE

Método GET: ATTR_VALUE

Retorna o valor de um atributo do nó informado.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"ATTR_VALUE", < l_Xpath >, < l_attributeName >) => CHAR

Parâmetros


NomeTipoDescriçãoObrigatório?Padrão
l_XpathCHARCaminho do nó desejado (Expressão XPATH).Sim
l_attributeNameCHARNome do atributo desejado.Sim

Retorno


TipoDescrição
CHARRetorna uma string vazia, se obteve erro. Caso contrário, o conteúdo do atributo informado.




Expandir
title

...

ERROR_MESSAGE

Método GET:

...

Retorna o valor de um caminho de nó informado.

Sintaxe

ERROR_MESSAGE 
Âncora
getErrorMessage
getErrorMessage

Retorna a mensagem de erro resultante de falha na execução do método ACTIVATE.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"

...

ERROR_

...

MESSAGE") => CHAR

...

Retorno

...


TipoDescrição

...

CHAR

...

Retorno

Mensagem de erro detalhando a inconsistência ocorrida na execução do método ACTIVATE.




Expandir
titleNODE_LENGTH

Método GET: NODE_LENGTH

Retorna a quantidade de

...

titleGET

Método GET:NODE_LENGTH

...

nós filhos do nó pai informado.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"NODE_LENGTH", < l_Xpath >) => INTEGER

Parâmetros


NomeTipoDescriçãoObrigatório?
l_XpathCHARCaminho do nó desejado (Expressão XPATH).Sim

Retorno


TipoDescrição
INTEGERQuantidade de nós filhos do nó pai informado.




Expandir
title

...

NODE_VALUE

Método GET:

...

NODE_VALUE

...

Retorna o valor de um caminho de nó informado.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"

...

NODE_VALUE", < l_Xpath >) => CHAR

Parâmetros


NomeTipoDescriçãoObrigatório?
l_XpathCHARCaminho do nó desejado (Expressão XPATH).Sim

Retorno


TipoDescrição
CHAR

...

Retorna uma string vazia, se obteve erro. Caso contrário, o conteúdo do nó informado.




Expandir
title

...

SERIALIZE

Método GET:

...

SERIALIZE

Serializa o conteúdo XML, ou seja, retorna o XML no formato STRING.

Sintaxe


Bloco de código
_ADVPL_get_property(

...

< l_

...

reference 

...

>,"SERIALIZE") => 

...

CHAR

...

Retorno

...

Nome


TipoDescrição

...

Obrigatório?

...

Padrão

...

1 Por ser uma lista de valores, os cabeçalhos precisam ser informados no formato "{""Header1: Content1," "Header2: Content2""}".

   Exemplo: "{""Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==""}".

Retorno

...

Tipo

...

Descrição

...

Exemplo

Bloco de código
languageruby
themeConfluence
linenumberstrue
#------------------------#
 FUNCTION LREST_getPOST()
#------------------------#
    DEFINE l_status SMALLINT
 
    LET l_status = _ADVPL_get_property(m_rest_reference,"POST","/posts","{}")
 
    IF  l_status THEN
        CALL CONOUT("OK.:",_ADVPL_get_property(m_rest_reference,"RESULT"))
    ELSE
        CALL CONOUT("NOK:",_ADVPL_get_property(m_rest_reference,"ERROR_MESSAGE"))
    END IF
 END FUNCTION

Observação

  • Para recuperar o resultado da requisição, utilize o método RESULT.
  • Para recuperar a mensagem de erro, no caso da requisição não ter sido executada, utilize o método ERROR_MESSAGE.

...

titlePUT

Método PUT

Efetua uma requisição PUT e retorna verdadeiro se a requisição foi efetuada com sucesso.

Sintaxe

Bloco de código
_ADVPL_get_property(< l_reference >,"PUT", < l_path >, [ l_headers ]) => SMALLINT

Parâmetros

...

1 Por ser uma lista de valores, os cabeçalhos precisam ser informados no formato {{"Header1: Content1"},{"Header2: Content2"}}. Exemplo: {{"Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="}}.

Retorno

...

Exemplo

Bloco de código
titleExemplo SQLCODE
linenumberstrue
#------------------------------------------------------------------------------#
FUNCTION LREST_getPUT()
#------------------------------------------------------------------------------#
    DEFINE l_status SMALLINT

    LET l_status = _ADVPL_get_property(m_rest_reference,"PUT","/posts/1")

    IF  l_status THEN
        CALL CONOUT("OK.:",_ADVPL_get_property(m_rest_reference,"RESULT"))
    ELSE
        CALL CONOUT("NOK:",_ADVPL_get_property(m_rest_reference,"ERROR_MESSAGE"))
    END IF
END FUNCTION

Observação

  • Para recuperar o resultado da requisição, utilize o método RESULT.
  • Para recuperar a mensagem de erro, no caso da requisição não ter sido executada, utilize o método ERROR_MESSAGE.

...

titleDELETE

Método GET:DELETE

Efetua uma requisição DELETE e retorna verdadeiro se a requisição foi efetuada com sucesso.

Sintaxe

Bloco de código
_ADVPL_get_property(< l_reference >,"DELETE", < l_path >, [ l_headers ]) => SMALLINT

Parâmetros

...

1 Por ser uma lista de valores, os cabeçalhos precisam ser informados no formato {{"Header1: Content1"},{"Header2: Content2"}}.

   Exemplo: {{"Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="}}.

Retorno

...

Exemplo

Bloco de código
languageruby
themeConfluence
linenumberstrue
#------------------------------------------------------------------------------#
FUNCTION LREST_getDELETE()
#------------------------------------------------------------------------------#
    DEFINE l_status SMALLINT

    LET l_status = _ADVPL_get_property(m_rest_reference,"DELETE","/posts/1")

    IF  l_status THEN
        CALL CONOUT("OK.:",_ADVPL_get_property(m_rest_reference,"RESULT"))
    ELSE
        CALL CONOUT("NOK:",_ADVPL_get_property(m_rest_reference,"ERROR_MESSAGE"))
    END IF
END FUNCTION

Observação

  • Para recuperar o resultado da requisição, utilize o método RESULT.
  • Para recuperar a mensagem de erro, no caso da requisição não ter sido executada, utilize o método ERROR_MESSAGE.

...

titleRESULT

...

Retorna o resultado da requisição REST executada.

Sintaxe

Bloco de código
_ADVPL_get_property(< l_reference >,"RESULT") => CHAR

Retorno

...

titleERROR_MESSAGE

...

Retorna a mensagem de erro resultante de uma requisição REST mal sucedida.

Sintaxe

Bloco de código
_ADVPL_get_property(< l_reference >,"ERROR_MESSAGE") => CHAR

Retorno

...

Métodos SET

Métodos acessíveis através da função _ADVPL_set_property que permite alterar e manipular os valores do componente.

...

titleHOST

Método SET:HOST

Define o endereço base para as requisições REST.

Sintaxe

Bloco de código
CALL _ADVPL_set_property(< l_reference >,"HOST", < l_host >)

Parâmetros

...

Exemplo

...

languageruby
themeConfluence
linenumberstrue

...

CHARConteúdo XML serializado com todas as alterações realizadas.





Métodos SET


Métodos acessíveis através da função _ADVPL_set_property que permite alterar e manipular os valores do componente.


Expandir
titleADD_ATTR

Método SET: ADD_ATTR

Adiciona um novo atributo para o nó informado.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"ADD_ATTR", < l_Xpath >, < l_attributeName >, < l_attributeValue> ) 

Parâmetros


NomeTipoDescriçãoObrigatório?Padrão
l_XpathCHARCaminho do nó desejado (Expressão XPATH).Sim
l_attributeNameCHARNome do atributo desejado.Sim
l_attributeValueCHARValor do atributo.Sim




Expandir
titleADD_NODE

Método SET: ADD_NODE

Adiciona um novo nó filho para o nó pai informado.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"ADD_NODE", < l_Xpath >, < l_nodeName >, < l_nodeValue> ) 

Parâmetros


NomeTipoDescriçãoObrigatório?Padrão
l_XpathCHARCaminho do nó desejado (Expressão XPATH).Sim
l_nodeNameCHARNome do nó filho.Sim
l_nodeValueCHARValor do nó filho.Sim




Expandir
titleATTR_VALUE

Método SET: ATTR_VALUE

Alterar o valor de um determinado atributo do nó informado.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"ATTR_VALUE", < l_Xpath >, < l_attributeName >, < l_attributeValue> ) 

Parâmetros


NomeTipoDescriçãoObrigatório?Padrão
l_XpathCHARCaminho do nó desejado (Expressão XPATH).Sim
l_attributeNameCHARNome do atributo desejado.Sim
l_attributeValueCHARNovo valor para o atributo.Sim




Expandir
titleDEACTIVATE

Método SET: DEACTIVATE

Desativa/destrói a instância do componente LXMLOBJECT obtido na execução do método ACTIVATE.

Sintaxe


Bloco de código
_ADVPL_set_property(< l_reference >,"DEACTIVATE")



Expandir
titleNODE_VALUE

Método SET: NODE_VALUE

Altera o valor de um determinado nó filho para um nó pai informado.

Sintaxe


Bloco de código
_ADVPL_get_property(< l_reference >,"NODE_VALUE", < l_Xpath >, < l_nodeName >, < l_nodeValue> ) 

Parâmetros


NomeTipoDescriçãoObrigatório?Padrão
l_XpathCHARCaminho do nó pai desejado (Expressão XPATH).Sim
l_nodeNameCHARNome do nó filho desejado.Sim
l_nodeValueCHARNovo valor para o nó filho.Sim




Sintaxe


Bloco de código
LET m_xmlobject_reference = _ADVPL_create_component(NULL,"LXMLOBJECT")

Exemplo


Clique no link na lateral direita para expandir o código de exemplo.

Bloco de código
languageruby
themeConfluence
titleCódigo de exemplo do componente LXMLObject
linenumberstrue
collapsetrue
#------------------------------#
 FUNCTION LXMLObjectTest()
#------------------------------#
    DEFINE l_xml         TEXT
    DEFINE l_xml_obj_ref VARCHAR(10)
    DEFINE l_break       CHAR(002)
    DEFINE l_value       CHAR(100)
    DEFINE l_status      SMALLINT

    IF LOG_isSrvUnix() = "U" THEN
       LET l_break = ASCII(10)
    ELSE
       LET l_break = ASCII(13)
       LET l_break = l_break CLIPPED, ASCII(10)
    END IF

    LET l_xml = '<?xml version="1.0"?>' || l_break
    LET l_xml = l_xml CLIPPED || '<bookStore name="Saraiva" country="BR">' || l_break
    LET l_xml = l_xml CLIPPED || '  <foundation>' || l_break
    LET l_xml = l_xml CLIPPED || '    <founder>Seu Saraiva</founder>' || l_break
    LET l_xml = l_xml CLIPPED || '    <year>1914</year>' || l_break
    LET l_xml = l_xml CLIPPED || '  </foundation>' || l_break
    LET l_xml = l_xml CLIPPED || '  <books>' || l_break
    LET l_xml = l_xml CLIPPED || '    <book isNew="true">' || l_break
    LET l_xml = l_xml CLIPPED || '      <title>A Game of Thrones</title>' || l_break
    LET l_xml = l_xml CLIPPED || '      <author>George R. R. Martin</author>' || l_break
    LET l_xml = l_xml CLIPPED || '      <price>9.99</price>' || l_break
    LET l_xml = l_xml CLIPPED || '      <origin>US</origin>' || l_break
    LET l_xml = l_xml CLIPPED || '    </book>' || l_break
    LET l_xml = l_xml CLIPPED || '    <book isNew="false">' || l_break
    LET l_xml = l_xml CLIPPED || '      <title>A Clash of Kings</title>' || l_break
    LET l_xml = l_xml CLIPPED || '      <author>George R. R. Martin</author>' || l_break
    LET l_xml = l_xml CLIPPED || '      <price>9.99</price>' || l_break
    LET l_xml = l_xml CLIPPED || '      <origin>US</origin>' || l_break
    LET l_xml = l_xml CLIPPED || '    </book>' || l_break
    LET l_xml = l_xml CLIPPED || '  </books>' || l_break
    LET l_xml = l_xml CLIPPED || '</bookStore>' || l_break

    LET l_xml_obj_ref = _ADVPL_create_component(NULL,"LXMLOBJECT")

    # GET ACTIVATE: valida e inicia a interpretação do XML.
    LET l_status = _ADVPL_get_property(l_xml_obj_ref,"ACTIVATE",l_xml)

    IF  l_status THEN
        CALL CONOUT("LXMLOBJECT GET ACTIVATE1    OK")
    ELSE
        CALL CONOUT("LXMLOBJECT GET ACTIVATE1   NOK")
        CALL CONOUT("ERROR = "+_ADVPL_get_property(l_xml_obj_ref,"ERROR_MESSAGE"))
        RETURN FALSE
    END IF

    # GET ATTR_VALUE: Recupera o valor de determinado atributo de um nó informado.
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"ATTR_VALUE","/bookStore/books/book[1]","isNew")

    IF  l_value = "true" THEN
        CALL CONOUT("LXMLOBJECT ATTR_VALUE (/bookStore/books/book[1] isNew)     OK " || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT ATTR_VALUE (/bookStore/books/book[1] isNew)     NOK " || l_value CLIPPED)
    END IF

    # GET ATTR_VALUE: Recupera o valor de determinado atributo de um nó informado.
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"ATTR_VALUE","/bookStore/books/book[2]","isNew")

    IF  l_value = "false" THEN
        CALL CONOUT("LXMLOBJECT ATTR_VALUE (/bookStore/books/book[2] isNew)      OK " || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT ATTR_VALUE (/bookStore/books/book[2] isNew)     NOK " || l_value CLIPPED)
    END IF

    # GET NODE_VALUE: Recupera o valor de determinado nó filho de um nó pai informado.
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"NODE_VALUE","/bookStore/books/book[1]/title")

    IF  l_value = "A Game of Thrones" THEN
        CALL CONOUT("LXMLOBJECT GET NODE_VALUE /bookStore/books/book[1]/title  OK " || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT GET NODE_VALUE /bookStore/books/book[1]/title NOK " || l_value CLIPPED)
    END IF

    # GET NODE_VALUE: Recupera o valor de determinado nó filho de um nó pai informado.
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"NODE_VALUE","/bookStore/books/book[2]/title")

    IF  l_value = "A Clash of Kings" THEN
        CALL CONOUT("LXMLOBJECT GET NODE_VALUE /bookStore/books/book[2]/title  OK" || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT GET NODE_VALUE /bookStore/books/book[2]/title NOK " || l_value CLIPPED)
    END IF

    # GET NODE_VALUE: Recupera o valor de determinado nó filho de um nó pai informado.
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"NODE_LENGTH","/bookStore/books")

    IF  l_value = 2 THEN
        CALL CONOUT("LXMLOBJECT GET NODE_LENGTH (/bookStore/books)  OK " || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT GET NODE_LENGTH (/bookStore/books) NOK " || l_value CLIPPED)
    END IF

    # SET ADD_ATTR: Adiciona um novo atributo no nó informado.
    CALL _ADVPL_set_property(l_xml_obj_ref,"ADD_ATTR","/bookStore/books/book[1]","isOld","true")
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"ATTR_VALUE","/bookStore/books/book[1]","isOld")

    IF  l_value = "true" THEN
        CALL CONOUT("LXMLOBJECT SET ADD_ATTR (/bookStore/books/book[1] isOld=true)    OK " || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT SET ADD_ATTR (/bookStore/books/book[1] isOld=true)   NOK " || l_value CLIPPED)
    END IF

    # SET ADD_NODE: Adiciona um novo no nó filho no nó pai informado.
    CALL _ADVPL_set_property(l_xml_obj_ref,"ADD_NODE","/bookStore/books/book[2]","year","1999")
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"NODE_VALUE","/bookStore/books/book[2]/year")

    IF  l_value = "1999" THEN
        CALL CONOUT("LXMLOBJECT SET ADD_NODE (/bookStore/books/book[2] year=1999)    OK " || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT SET ADD_NODE (/bookStore/books/book[2] year=1999)   NOK " || l_value CLIPPED)
    END IF

    # SET ATTR_VALUE: Altera o valor de um atributo do nó informado.
    CALL _ADVPL_set_property(l_xml_obj_ref,"ATTR_VALUE","/bookStore/books/book[1]","isOld","false")
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"ATTR_VALUE","/bookStore/books/book[1]","isOld")

    IF  l_value = "false" THEN
        CALL CONOUT("LXMLOBJECT SET ATTR_VALUE (/bookStore/books/book[1] isOld=false)  OK " || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT SET ATTR_VALUE (/bookStore/books/book[1] isOld=false) NOK " || l_value CLIPPED)
    END IF

    # SET NODE_VALUE: Altera o valor de um atributo do nó informado.
    CALL _ADVPL_set_property(l_xml_obj_ref,"NODE_VALUE","/bookStore/books/book[2]/title","O Alquimista 2")
    LET l_value = _ADVPL_get_property(l_xml_obj_ref,"NODE_VALUE","/bookStore/books/book[2]/title")

    IF  l_value = "O Alquimista 2" THEN
        CALL CONOUT("LXMLOBJECT SET NODE_VALUE (/bookStore/books/book[2]/title = 'O Alquimista 2')  OK " || l_value CLIPPED)
    ELSE
        CALL CONOUT("LXMLOBJECT SET NODE_VALUE (/bookStore/books/book[2]/title = 'O Alquimista 2') NOK " || l_value CLIPPED)
    END IF

    # GET SERIALIZE: Tranfere todo conteúdo DO XML para um STRING
    LET l_xml = _ADVPL_get_property(l_xml_obj_ref,"SERIALIZE")
    CALL CONOUT("LXMLOBJECT 

...

GET SERIALIZE: " || l_xml CLIPPED)

    RETURN TRUE
END FUNCTION

Informações


Componente disponível a partir do LOGIX 12.1.

...

29.