Integrare cu solutii prin API REST
Interfata REST (Representational State Transfer) pentru solutia SmartCash RMS este implementata prin serviciul web SmartCash Everywhere REST Server, care poate functiona ca aplicatie de sine statatoare pentru incarcari medii sau ca aplicatie ISAPI pe un server web Microsoft IIS pentru incarcari mari. Serverul asculta la un port TCP definit de utilizator și poate prelua apeluri HTTP/HTTPS GET sau POST.
Interfata REST include trei tipuri de metode:
Metode de citire: Acestea permit extragerea informatiilor despre nomenclatoarele primare, stocuri sau documente emise, folosind comanda HTTP GET (ex. GetArticleInfo, GetNextModifiedArticles).
Metoda universala de confirmare: Aceasta se ocupa cu prelucrarea datelor primite și folosește comanda HTTP POST si anume ConfirmReceivingDataByTypeOf.
Metode de scriere: Acestea permit scrierea de date in baza de centralizare date MSSQL Magister cat si Firebird, utilizând comanda HTTP POST (ex. AddNewInternalDelivery, SaveCustomer etc.).
Astfel, interfata REST faciliteaza obtinerea și gestionarea informatiilor intr-un lant de magazine SmartCash, cum ar fi modificari de preturi, stocuri in timp real, informatii despre clienti etc.
Sincronizare cataloage
Pentru sincronizarea unei aplicatii terte cu nomenclatoarele primare (articole, clienti, furnizori sau magazine) și tabelele de stoc din sistemul SmartCash RMS, se utilizeaza urmatoarea logica:
- Apelarea metodei GetNextModified…: Se apeleaza ciclic metoda GetNextModified… specifica fiecarui tip de nomenclator, care returneaza noutatile de la ultima confirmare a primirii setului de date. Aceasta metoda este paginata, limitând rezultatul la aproximativ 5.000 de inregistrari pentru a se putea gestiona seturi mari de date. Apelul se repeta recursiv pâna când nu mai exista rezultate.
- Confirmarea Primirii Datelor: Dupa salvarea datelor in aplicatia terta, se apeleaza metoda ConfirmReceivingDataByTypeOf cu parametrul corespunzator și versiunea de actualizare (RECVERSION) returnata anterior. Acest pas confirma primirea modificarilor. Procesul se repeta pana cand metoda GetNextModified… returneaza un rezultat nul, indicând finalizarea ciclului de preluare a nomenclatorului.
Folosind aceste metode este posibila obtinerea de informatii in format JSON, legate de nomenclatoarele primare ale unui lant de magazine, stoc sau documente emise in lantul de magazine, precum si scrierea de date necesare integrarii cu un lant de magazine.
Datorita volumului mare de inregistrari, nomenclatoarele de clienti și articole, precum și tabelele de stoc, trebuie receptionate printr-o interfata paginata.
Sincronizarea catalogului de articole poate fi de trei feluri:
- Unidirectionala, cu politica de preturi si promotii mentinute in SmartCash SHOP – catalogul de articole este preluat de catre aplicatia terta;
- Unidirectionala, cu politica de preturi si promotii mentinute in o aplicatie terta (ERP) – catalogul de articole este trimis din ERP catre SmartCash SHOP;
- Bidirectionala – catalogul de articole este mentinut in aplicatia terta (ERP) iar promotiile si fidelizarile sunt intretinute in aplicatia SmartCash SHOP.
Serverul SmartCash Everywhere permite returnarea rezultatelor de tip set de inregistrari (tabela de inregistrari) intr-o sintaxa JSON sub forma de array de perechi de valori, de tipul Camp – Valoare, cu eticheta generala DATASET, similar cu formatul XML clasic de nominalizare al campurilor. Pentru anumite tipuri de operatii, pe langa nodul cu eticheta general DATASET, poate fi furnizat un nod suplimentar cu eticheta generica METRICS. In acest nod pot fi returnate sume totale de control specifice tipului respectiv de document (de ex. numarul total de bonuri emise in cazul metodei GetNextRetailSale, etc.).
Pentru identificarea campurilor se va folosi intotdeauna denumirea acestora si nu ordinea in care sunt livrate in momentul primirii raspunsului deoarece aceasta nu este intotdeauna identica (poate fi diferita in urma unui upgrade al aplicatiilor)!
Pentru fiecare inregistrare din nodul DATASET este furnizat automat campul REC care are valoarea egala cu numarul liniei de inregistrare din dataset. Citirea ultimului array permite astfel aflarea rapida a numarului de inregistrari dintr-un dataset.
Gestionarea actualizarilor succesive de date de tip set de inregistrari folosind interfata REST SmartCash
Pentru a simplifica integrarea cu platforma SmartCash RMS, serverul SmartCash Everywhere mentine permanent contoare interne de versiune pentru orice tip de date transmise catre o aplicatie terta prin interfata REST. Astfel la orice apelare a unei metode de tip GetNext, etc… serverul intoarce doar cele mai noi (sau cea mai noua) inregistrari sosite de la ultima apelare a metodei respective si confirmare a primirii datelor. Intretinerea acestor contoare este realizata automat, fara ca programatorul aplicatiei conectate sa trebuiasca sa salveze date locale de sincronizare.
Pentru a permite mai multor aplicatii sa interogheze acelasi server REST pentru aceleasi tipuri de date, toate metodele implementate au ca prim parametru ID-ul unic alocat aplicatiei respective in raport cu sistemul SmartCash. Acest ID (Integer) se stabileste la inceputul integrarii si ramane neschimbat, trebuind a fi utilizat pentru orice apel de metoda REST SmartCash.
Procesul de manipulare a datelor in cazul general al apelului unei metode SmartCash de tip GetNextModified… este urmatorul:
- Aplicatia terta apeleaza metoda furnizand toti parametrii solicitati;
- Serverul SmartCash Everywhere prelucreaza interogarea si intoarce in general un set de inregistrari.
Orice rezultat returnat contine campul RECVERSION, de tip intreg, crescator, reprezentand
versiunea setului de date returnat. Daca in sursa de date originale nu survin modificari, este
returnata mereu acceasi valoare. In cazul in care se produc modificari, campul este incrementat,
corespunzator cu noul set de date ce este transmis; - Aplicatia terta parseaza rezultatul JSON si aplica datele sosite, corespunzator cu propriile necesitati
in sistemul propriu. Pe durata acestui proces aplicatia terta trebuie sa pastreze intr-o variabila
valoarea din campul RECVERSION returnata la pasul 2; - Dupa finalizarea pasului 3, aplicatia terta trebuie sa apeleze totdeauna metoda
ConfirmReceivingDataByTypeOf, furnizand ca parametru de confirmare valoarea primita anterior in
campul RECVERSION; - Serverul SmartCash Everywhere marcheaza apoi intern datele ca primite, urmand ca la o noua
apelare, ulterioara a aceleiasi metode de catre aplicatia terta sa transmita doar acele date
modificate care au un index de modificare superior celui tocmai salvat.
Pentru nomenclatoarele de furnizori sau magazine, deoarece contin un numar redus de inregistrari sunt implementate metode simple, nepaginate, care intorc la un singur apel toate inregistrarile modificate de la ultima apelare. Aceste metode au titulatura GetModified… si pentru aceste metode poate fi utilizat algoritmul precedent, cu mentiunea ca ele intorc desigur o singura pagina la un apel, apelarea ulterioara aducand totdeauna o pagina goala.
Ori de cate ori se doreste reinitializarea (resincronizarea) datelor legate de tipul respectiv de nomenclator, se activeaza functia de “Reinitializare Catalog…” sau “Reinitializare Stoc” in centrala de magazine SmartCash RMS. In acest mod toate articolele nomenclatorului respectiv sunt marcate pentru replicare, iar apelarea in continuare a metodei GetNextModified… corespunzatoare va aduce toate articolele din nou pe interfata.