Para saber mais sobre REST e como configurar o TOTVS TEC como um servidor REST consulte a página REST ADVPL.
Pagetitle |
---|
| LGX - LXMLOBJECT |
---|
| LGX - LXMLOBJECT |
---|
|
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 |
---|
|
Método GET: ACTIVATEValida 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 |
---|
|
Método GET: ATTR_VALUERetorna 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
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|
l_Xpath | CHAR | Caminho do nó desejado (Expressão XPATH). | Sim |
| l_attributeName | CHAR | Nome do atributo desejado. | Sim |
|
Retorno
Tipo | Descrição |
---|
CHAR | Retorna uma string vazia, se obteve erro. Caso contrário, o conteúdo do atributo informado. |
|
...
...
...
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 >," |
|
...
...
...
...
Parâmetros
...
...
...
Mensagem de erro detalhando a inconsistência ocorrida na execução do método ACTIVATE. |
|
Expandir |
---|
|
Método GET: NODE_LENGTHRetorna a quantidade de nós filhos do nó pai informado. Sintaxe
Bloco de código |
---|
_ADVPL_get_property(< l_reference >,"NODE_LENGTH", < l_Xpath >) => INTEGER |
Parâmetros
Nome | Tipo | Descrição | Obrigatório? |
---|
l_Xpath | CHAR | Caminho do nó desejado (Expressão XPATH). | Sim |
Retorno
Tipo | Descrição |
---|
INTEGER | Quantidade de nós filhos do nó pai informado. |
|
...
...
...
Retorna o valor de um caminho de nó informado. Sintaxe
Bloco de código |
---|
_ADVPL_get_property(< l_reference >," |
|
...
NODE_VALUE", < l_Xpath >) => CHAR |
|
...
...
Método GET:POST
Obrigatório? |
---|
l_Xpath | CHAR | Caminho do nó desejado (Expressão XPATH). | Sim |
Retorno
Tipo | Descrição |
---|
CHAR | Retorna uma string vazia, se obteve erro. Caso contrário, o conteúdo do nó informado. |
|
Expandir |
---|
|
Método GET: SERIALIZESerializa o conteúdo XML, ou seja, retorna o XML no formato STRING |
...
. Sintaxe
Bloco de código |
---|
_ADVPL_get_property( |
|
...
...
...
Parâmetros
...
...
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 |
---|
language | ruby |
---|
theme | Confluence |
---|
linenumbers | true |
---|
|
#------------------------#
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.
CHAR | Conteú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 |
---|
|
Método SET: ADD_ATTRAdiciona 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
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|
l_Xpath | CHAR | Caminho do nó desejado (Expressão XPATH). | Sim |
| l_attributeName | CHAR | Nome do atributo desejado. | Sim |
| l_attributeValue | CHAR | Valor do atributo. | Sim |
|
|
Expandir |
---|
|
Método SET: ADD_NODEAdiciona 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
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|
l_Xpath | CHAR | Caminho do nó desejado (Expressão XPATH). | Sim |
| l_nodeName | CHAR | Nome do nó filho. | Sim |
| l_nodeValue | CHAR | Valor do nó filho. | Sim |
|
|
Expandir |
---|
|
Método SET: ATTR_VALUEAlterar 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> ) |
|
...
Método PUT
Efetua uma requisição PUT
e retorna verdadeiro se a requisição foi efetuada com sucesso.
Sintaxe
...
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|
l_ |
|
...
...
do nó desejado (Expressão XPATH). | Sim |
| l_attributeName | CHAR | Nome do atributo desejado. | Sim |
| l_ |
|
...
...
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 |
---|
title | Exemplo SQLCODE |
---|
linenumbers | true |
---|
|
#------------------------------------------------------------------------------#
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.
...
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 |
---|
language | ruby |
---|
theme | Confluence |
---|
linenumbers | true |
---|
|
#------------------------------------------------------------------------------#
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.
...
...
Retorna o resultado da requisição REST executada.
Sintaxe
Bloco de código |
---|
_ADVPL_get_property(< l_reference >,"RESULT") => CHAR |
Retorno
...
...
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.
...
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
Novo valor para o atributo. | Sim |
|
|
Expandir |
---|
|
Método SET: DEACTIVATEDesativa/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 |
---|
|
Método SET: NODE_VALUEAltera 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
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|
l_Xpath | CHAR | Caminho do nó pai desejado (Expressão XPATH). | Sim |
| l_nodeName | CHAR | Nome do nó filho desejado. | Sim |
| l_nodeValue | CHAR | Novo valor para o nó filho. | Sim |
|
...
language | ruby |
---|
theme | Confluence |
---|
linenumbers | true |
---|
...
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 |
---|
language | ruby |
---|
theme | Confluence |
---|
title | Código de exemplo do componente LXMLObject |
---|
linenumbers | true |
---|
collapse | true |
---|
|
#------------------------------#
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 |
Componente disponível a partir do LOGIX 12.1.
...