V_REST()

Objektas REST užklausoms formuoti.

(nuo 115 RIV_GAMA versijos)

Sintaksė

V_REST([cObject])

Grąžina

Simbolinę reikšmę

Parametrai

Parametras Aprašymas Formatas
cObject Konkretus objektas, kuris turės būti naudojamas siuntimui
Vienas iš:
MSXML2.XMLHTTP.6.0
MSXML2.ServerXMLHTTP.6.0
MSXML2.ServerXMLHTTP
Microsoft.XMLHTTP
C

Realizuotas supaprastintas klaidų apdorojimo mechanizmas.

Papildomos užklausos "Request Header" savybės:
* Accept - Header: „Accept“
* ApiKey - Header: „ApiKey“
* Authorization - Header: „Authorization“
* Connection - Header: „Connection“
* Content_type - Header: „Content-Type“
* User_agent - Header: „User-agent“
* Timeout – visi naudojami timeouts
* SetRequestHeader(cHeader,cValue) – metodas leidžiantis nustatyti papildomą nestandartinį Header metodą. Pavyzdžiui, user, password, X-API-Key ir pan.
* ignore_cert - nereikalauti sertifikato bei ignoruoti SSL sertifikatų klaidas. Pagal nutylėjimą sertifikatai tikrinami.
* beforeSend - komanda leidžianti atlikti papildomus nustatymus prieš siuntimo komandą (SEND). Pavyzdžiui: loRest.beforeSend="this.rest.setOption(2,13056)"

Siuntimas vykdomas metodu: Send([cMethod], cUrl, [cBodyPayload]) - grąžina .T. jei nebuvo klaidų (intervalas 200-299)
* cMethod - metodas pagal nutylėjimą "GET"
* cUrl - nuoroda (privalomas parametras)
* cBodyPayload - pagal nutylėjimą tuščias

Atsakymai grąžinami:
* message - klaidos tekstas
* responseText - tekstinis atsakymas
* responseJson() - atsakymas Json objektu
* responseHeader(cHeaderTag) - atsakymo "Header" dalis, pagal nurodytą tag'ą
* rest – tiesioginis siuntimo objektas, kurio pagalba buvo vykdoma užklausa

Pavyzdys1

USD kurso paėmimas už einamą dieną:

lcValiuta='USD'
loKursas=v_rest()
loKursas.Send("GET","https://www.lb.lt/lt/currency/daylyexport/?csv=1&class=Eu&type=day&currency="+m.lcValiuta+"&date_day="+DTOC(DATE()))
lcKursas=CHRTRAN(GETWORDNUM(GETWORDNUM(loKursas.responseText,2,CHR(13)),3,';'),'"','')
lcData=CHRTRAN(GETWORDNUM(GETWORDNUM(loKursas.responseText,2,CHR(13)),4,';'),'"','')
messagebox("Valiuta: "+lcValiuta+chr(13)+"Data: "+lcData+chr(13)+"Kursas: "+lcKursas)

Gaunamas rezultatas:

v_rest1

Pavyzdys2

Programa patikrinanti PVM kodo galiojimą tiesiogiai VIES VAT sistemoje:

* PVM kodo reikšmė
m.lcPVMKodas=UPPER(ALLTRIM("LT214118411"))

* Parengiamas užklausos tekstas
m.lcBody=;
[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:ec.europa.eu:taxud:vies:services:checkVat:types">]+;
[   <soapenv:Header/>]+;
[   <soapenv:Body>]+;
[      <urn:checkVat>]+;
[         <urn:countryCode>]+LEFT(m.lcPVMKodas,2)+[</urn:countryCode>]+;
[         <urn:vatNumber>]+SUBSTR(m.lcPVMKodas,3)+[</urn:vatNumber>]+;
[      </urn:checkVat>]+;
[   </soapenv:Body>]+;
[</soapenv:Envelope>]

* Paruošiamas užklausos objektas su reikiamais nustatymais
m.loHttp=v_rest("MSXML2.ServerXMLHTTP")
m.loHttp.Content_type=[text/xml; charset="UTF-8"]
m.loHttp.User_agent=[SOAP Toolkit 3.0]
m.loHttp.setRequestHeader([SOAPAction],[""])

* Įvykdoma užklausa perduodant duomenis
IF !m.loHttp.SEND("POST","https://ec.europa.eu/taxation_customs/vies/services/checkVatService",m.lcBody)
    l_MESSAGEBOX("Užklausos siuntimo klaida!",16,"Klaida")
    RETURN .F.
ENDIF

* Iš gauto atsakymo patikriname ar PVM kodas galioja
IF LOWER(ALLTRIM(m.loHttp.rest.responseXML.selectSingleNode("soap:Envelope/soap:Body/checkVatResponse/valid").text))#"true"
    l_MESSAGEBOX("Toks PVM kodas negalioja!",16,"Klaida")
    RETURN .F.
ENDIF

* Iš gauto atsakymo pasiimame įmonės pavadinimą
m.lcResult=m.loHttp.rest.responseXML.selectSingleNode("soap:Envelope/soap:Body/checkVatResponse/name").text

* Parodome rezultatą
=f_info("Šis galiojantis PVM kodas priklauso: "+chr(13)+chr(10)+m.lcResult,.T.)