Šiame skyriuje apžvelgiamos praktinės galimybės paimti duomenis iš Rivile ERP per REST (GET) ir juos panaudoti populiariausiose analitikos priemonėse.
Pastaba: techninės API naudojimo detalės (autentifikacija, filtravimas, pavyzdžiai įvairiomis kalbomis) yra API skyriuje:
Analitikai skirti duomenų šaltiniai (data sources) pasiekiami per du loginius endpoint'us:
Paskirtis: gauti konkretaus duomenų šaltinio filtravimo schemą (laukus, tipus, leistinas reikšmes) tam, kad jūs teisingai suformuotumėte filter parametrą duomenų užklausoms. Visada vadovaukitės šio endpoint’o atsakymu – schemos gali keistis.
Užklausos forma:
GET https://api.rivile.cloud/bi/schemas/{dataSource}
X-SessionToken: <JŪSŲ_API_RAKTAS>
Pavyzdinė užklausa:
GET https://api.rivile.cloud/bi/schemas/PRODUCT
X-SessionToken: <JŪSŲ_API_RAKTAS>
Pavyzdinis atsakymas (trumpinta, JSON Schema):
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["PRODUCT", "SERVICE", "ALL"],
"default": "ALL"
},
"active": { "type": "boolean", "default": true },
"createdFrom": { "type": "string", "format": "date" },
"createdTo": { "type": "string", "format": "date" },
"suppliers": {
"type": "array",
"items": { "type": "string", "format": "uuid" },
"maxItems": 500,
"minItems": 1,
"uniqueItems": true
}
},
"additionalProperties": false
}
Pastaba: schemoje pateikiami laukai, pagal kuriuos leidžiama filtruoti duomenis formuojant ištraukimo užklausas.
filter (URL‑encoded JSON) pagal 1‑ojo endpoint’o schemą.GET https://api.rivile.cloud/bi/collect?type={dataSource}&filter={urlEncodedJson}
X-SessionToken: <JŪSŲ_API_RAKTAS>filter visada turi būti tinkamai URL‑užkoduotas. Rekomenduojama pirma suformuoti JSON objektą ir tik tada jį užkoduoti URL parametru.GET https://api.rivile.cloud/bi/collect?type=PRODUCT&filter=%7B%22type%22%3A%22ALL%22%7D
X-SessionToken: <JŪSŲ_API_RAKTAS>{
"status": "SUCCESS",
"success": {
"data": {
"companyId": "e1bb7ce7-c380-45b1-ba04-6685538007e5",
"products": [{productObject}]
}
}
}Pastaba: realų sąrašą duomenų šaltinių ir tikslų laukų rinkinį (schema) visada gaukite iš 1-ojo endpoint’o – pavyzdžiai žemiau skirti orientacijai.
GET /bi/schemas/{dataSource} ir išsaugokite jus dominančio duomenų šaltinio filtravimo schemą.filter JSON objektą (tik palaikomiems laukams ir leistinoms reikšmėms) ir jį URL‑užkoduokite.GET /bi/collect?type={dataSource}&filter={urlEncodedJson}.GET https://api.rivile.cloud/bi/schemas/PAYMENTS (antraštė X-SessionToken: <API_RAKTAS>), pagal atsakymą apsibrėžkite filtrus.https://api.rivile.cloud/bi/collect?type=PAYMENTS&filter=%7B%22from%22%3A%222025-01-01%22%2C%22to%22%3A%222025-12-31%22%7DX-SessionToken: <API_RAKTAS> (Authentication: Anonymous, nes raktą perduodame antraštėje).success.data mazgo išskleiskite atitinkamą masyvą (pvz., payments), konvertuokite į Table.BaseUrl = "https://api.rivile.cloud", ApiKey, FromDate, ToDate.let
BaseUrl = "https://api.rivile.cloud",
// ApiKey, FromDate, ToDate – tai Parameter'iai, juos naudokite tiesiogiai
FilterObj = [ from = FromDate, to = ToDate ],
FilterText = Uri.EscapeDataString( Text.FromBinary( Json.FromValue(FilterObj) ) ),
Url = BaseUrl & "/bi/collect?type=PAYMENTS&filter=" & FilterText,
Source = Json.Document(Web.Contents(Url, [Headers=[#"X-SessionToken"=ApiKey]])),
Data = Source[success][data],
Lines = Data[payments],
Table = Table.FromList(Lines, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
Expanded = Table.ExpandRecordColumn(
Table,
"Column1",
Record.FieldNames(
Table.FirstValue(
Table.TransformColumns(Table.FirstN(Table,1), {{"Column1", each _, type record}})[Column1]
)
)
)
in
Expandedfunction loadRivileSales() {
var url = 'https://api.rivile.cloud/bi/collect?type=PAYMENTS&filter=' +
encodeURIComponent(JSON.stringify({from:'2025-01-01', to:'2025-12-31'}));
var resp = UrlFetchApp.fetch(url, {headers: {'X-SessionToken': PropertiesService.getScriptProperties().getProperty('API_KEY')}});
var json = JSON.parse(resp.getContentText());
var rows = json.success.data.payments || [];
var sheet = SpreadsheetApp.getActive().getSheetByName('payments') || SpreadsheetApp.getActive().insertSheet('payments');
sheet.clear();
if (rows.length === 0) return;
var headers = Object.keys(rows[0]);
sheet.getRange(1,1,1,headers.length).setValues([headers]);
sheet.getRange(2,1,rows.length,headers.length).setValues(rows.map(r => headers.map(h => r[h] ?? '')));
}API_KEY Script Properties, sukurkite laikmatį (Trigger) periodiniam atnaujinimui ir naudokite šį Sheets kaip Looker Studio šaltinį.GET /bi/collect kas N minučių ir įrašykite rezultatus į lenteles (pvz., fact_sales, dim_client, dim_product). Tableau jungiasi prie DB ir atnaujina Extract.https://api.rivile.cloud/bi/collect?type=INVENTORY_STOCK&filter=... su X-SessionToken antrašte ir grąžina data duomenis.Paskirtis: asociatyvus variklis, lankstus duomenų derinimas iš kelių šaltinių.
Kaip jungtis: Qlik Script (REST connector) nurodant endpoint'ą, antraštes, puslapiavimą.
Kaip pasiimti ERP duomenis per endpoint (skripto pavyzdys):
LET vBaseUrl = 'https://api.rivile.cloud';
LET vApiKey = '$(include=api_key.txt)'; // arba nustatykite kaip kintamąjį saugiai
LET vFrom = '2025-01-01';
LET vTo = '2025-12-31';
LET vFilter = Replace(Replace(JsonSerialize('{
"from":"$(vFrom)",
"to":"$(vTo)"
}'), chr(10), ''), ' ', '');
LET vUrl = '$(vBaseUrl)/bi/collect?type=PAYMENTS&filter=' & UrlEncode(vFilter);
RESTConnectorMasterTable:
SQL SELECT
"status",
"success/data/payments" AS payments
FROM JSON (wrap on) "$(vUrl)"
WITH CONNECTION (HTTPHEADER "X-SessionToken" "$(vApiKey)");
Payments:
LOAD *
RESIDENT RESTConnectorMasterTable;
DROP TABLE RESTConnectorMasterTable;
Pastaba: prieš naudojant aukščiau esantį skriptą, Qlik aplinkoje sukurkite REST Connection (pvz., RivileREST) ir skripto pradžioje pridėkite LIB CONNECT TO 'RivileREST';. WITH CONNECTION bloke nurodykite URL "$(vUrl)" ir antraštę HTTPHEADER "X-SessionToken" "$(vApiKey)". Realioje apklausoje REST Connector dažniausiai sukuria „Master/Child“ lenteles, kurias reikia sujungti pagal generuojamus raktus (__KEY__, __FK__).