Šiame skyriuje apžvelgiamos praktinės galimybės paimti didelius kiekius duomenų iš Rivile ERP per REST užklausą 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) yra pasiekiami per užklausą GET https://api.rivile.cloud/bi/collect. Tačiau prieš imant duomenis, būtina nurodyti duomenų filtravimo sąlygas.
Filtravimo sąlygos priklauso nuo duomenų šaltinio. Pavyzdžiui, prekės, skolos ir sąskaitos faktūros yra skirtingi objektai, todėl jiems taikomi skirtingi filtrai.
Pastaba: realų sąrašą duomenų šaltinių ir tikslų laukų rinkinį (schema) visada gaukite iš GET /bi/schemas/.
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}.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 API prieigos (endpoint'o) atsakymu, nes schemos ateityje gali keistis ar pasipildyti.
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 (sutrumpinta forma):
{
"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
}
}
}
Pateiktoje schemoje yra properties, kuriame pateikiami atributai (type, active, createdFrom, createdTo, suppliers). Iš šių atributų galima suformuoti filtrą. Filtras konstruojamas kaip JSON objektas.
Pvz.:
{"type":"PRODUCT", "active":true} toks filtras ištrauks tik aktyvias prekes.{"type":"SERVICE", "createdFrom": "2025-01-01", "createdTo": "2025-12-31"} toks filtras ištrauks tik paslaugas, kurios buvo sukurtos 2025 metais.{"type":"ALL", "suppliers": ['UUID-1','UUID-2',...'UUID-500']} toks filtras ištrauks visas prekes ir paslaugas pagal tiekėjų UUID. Norint šį filtrą perduoti kaip GET užklausos filter parametrą, reikės gautą JSON eilutę paversti į URL‑encoded eilutę.
Pvz.: iš {"type":"ALL"} gauti %7B%22type%22%3A%22ALL%22%7D.
type), panaudojus suformuotą filter reikšmę.GET https://api.rivile.cloud/bi/collect?type={dataSource}&filter={urlEncodedFilterJson}
X-SessionToken: <JŪSŲ_API_RAKTAS>filter visada turi būti tinkamai URL‑užkoduotas.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": {
"products": [{productObject}, {productObject}, ..., {productObject}]
}
}
}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 į lentelę (Table).BaseUrl = "https://api.rivile.cloud", ApiKey, FromDate, ToDate.let
BaseUrl = "https://api.rivile.cloud",
// ApiKey, FromDate, ToDate – tai parametrai; 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 aplinkoje REST Connector dažniausiai sukuria „Master/Child“ lenteles, kurias reikia sujungti pagal generuojamus raktus (__KEY__, __FK__).