API ir Visual FoxPro pavyzdžiai

API ir Visual FoxPro pavyzdžiai

OpenAPI adresas pateikiamas čia: RIVILE ERP_API(Swagger UI)

Kodo pavyzdys

Užduotis: Suformuoti pardavimų sąskaitos sukūrimą ir registravimą, naudojant POST užklausą į Rivile REST API.

Su viena užklausa galima sukurti dokumentą su eilutėmis, kai eilučių kiekis yra <= 100. Jei norite sukurti dokumentą su > 100 eilučių, rekomenduojame pirma sukurti dokumentą ir vėliau atskiromis užklausomis kurti dokumento eilutes.

Naudojant suformuotą pavyzdį naudoti savo API raktą ( <Jūsų_API_Raktas> ).

LOCAL loHttp, lcUrl, lcJsonData, lcResponse, lcApiKey

* Rivile Public REST API URL
lcUrl = "https://erp.rivile.cloud/public-api/v1/sale-invoices"

* API rakto tokenas. Jį sukurti ir pasiimti galite iš Rivile ERP sistemos.
lcApiKey = "<Jūsų_API_Raktas>"

* Sukuriame pardavimų sąskaitos duomenų JSON formatą (rankiniu būdu JSON struktūra)
lcJsonData = '{'+;
    '"clientId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",'+;
    '"clientName": "Rivilė, UAB",'+;
    '"documentNo": "ERP-002365",'+;
    '"isTaxIncluded": false,'+;
    '"currencyCode": "EUR",'+;
    '"notes": "Sąskaita iš elektroninės parduotuvės",'+;
    '"lines": ['+;
    '{'+;
    '"itemCode": "SM-S928BZYHEUB",'+;
    '"itemName": "Samsung Galaxy S21 Ultra",'+;
    '"uomAltCode": "VNT",'+;
    '"qtyAlt": 1,'+;
    '"price": 1000.00,'+;
    '"departmentCode": "SAND1"'+;
    '}'+;
    ']'+;
    '}'

* Sukuriame MSXML2.ServerXMLHTTP objektą
loHttp = CREATEOBJECT("MSXML2.ServerXMLHTTP.6.0")

TRY
    * Atidarome HTTP ryšį (POST metodas)
    loHttp.Open("POST", lcUrl, .F.)

    * Nustatome HTTP antraštes
    loHttp.SetRequestHeader("Content-Type", "application/json")
    loHttp.SetRequestHeader("X-SessionToken", lcApiKey)

    * Siunčiame POST užklausą su JSON duomenimis
    loHttp.Send(lcJsonData)

    * Patikriname atsakymo būseną
    IF loHttp.Status = 200
        lcResponse = loHttp.ResponseText
        ? "Atsakymas: ", lcResponse
    ELSE
        ? "Klaida: ", loHttp.Status, loHttp.StatusText
    ENDIF

CATCH TO loException
    ? "Įvyko klaida: ", loException.Message
ENDTRY

GET sąrašiniuose metoduose duomenų filtravimas

Galimas duomenų filtravimas, kuris leidžia sujungti kelis filtrus juos jungiant loginę funkciją AND .

Filtravimui galimi naudoti operatoriai:

  • CONTAINS: Tikrina, ar laukas turi nurodytą tekstą.
  • NOT_CONTAINS: Tikrina, ar laukas neturi nurodyto teksto.
  • EQUAL: Tikrina, ar laukas yra lygus nurodytam tekstui, skaičiui arba loginei reikšmei.
  • NOT_EQUAL: Tikrina, ar laukas nėra lygus nurodytam tekstui arba skaičiui.
  • GREATER_THAN: Tikrina, ar laukas yra didesnis nei nurodytas skaičius.
  • STARTS_WITH: Tikrina, ar laukas prasideda nurodytu tekstu.
  • ENDS_WITH: Tikrina, ar laukas baigiasi nurodytu tekstu.

Pavyzdys:

Užduotis: Vykdyti filtravimą klientų, kurių pavadinime yra fragmentas "Demo" ir jie yra aktyvūs.

API filtrų sąlyga:

[
  {    "operation": "CONTAINS",    "name": "name",    "value": "Demo"  } ,
  {    "operation": "EQUAL",    "name": "active",    "value": true  } 
]

Vykdant užklausą filtro reikšmę reikia užkoduoti (Encode).

API filtro rezultatas:

GET {{baseUrl}}/v1/clients?size=30&page=0&filter=%7B%22operation%22%3A%22CONTAINS%22%2C%22name%22%3A%22name%22%2C%22value%22%3A%22Demo%22%7D%2C%7B%22operation%22%3A%22EQUAL%22%2C%22name%22%3A%22active%22%2C%22value%22%3Atrue%7D

Kodas, skirtas sukurti filtrą ir suformuoti GET užklausą:

LOCAL lcFilters, lcUrlEncodedFilter, lcBaseUrl, lcQueryParams, lcFullUrl

* JSON filtro sąlygų konvertavimas į eilutę
lcFilters = '[{"operation":"CONTAINS","name":"name","value":"Demo"},' + ;
             '{"operation":"EQUAL","name":"active","value":true}]'

* Filtro eilutės konvertavimas į URL formatą
lcUrlEncodedFilter = URLEncode(lcFilters)

* Filtro apjungimas su puslapiavimo parametrais
lcQueryParams = "?size=30&page=0&filter=" + lcUrlEncodedFilter

* Pilnos GET užklausos sukonstravimas
lcBaseUrl = "https://erp.rivile.cloud/public-api/v1/clients"
lcFullUrl = lcBaseUrl + lcQueryParams
? lcFullUrl

* Funkcija URL kodavimui
FUNCTION URLEncode(tcString)
    LOCAL lcResult
    lcResult = ""
    FOR i = 1 TO LEN(tcString)
        lcChar = SUBSTR(tcString, i, 1)
        IF ISALPHA(lcChar) OR ISDIGIT(lcChar)
            lcResult = lcResult + lcChar
        ELSE
            lcResult = lcResult + "%" + TRANSFORM(ASC(lcChar), "@0")
        ENDIF
    ENDFOR
    RETURN lcResult
ENDFUNC

Užklausose įrašų skaičius negali viršyti 100 !

API