Passa al contenuto principale

Sync e sincronizzazione massiva

Modulo Sync: "Use this api module, for bulk syncronization operation with your software" (pagina Help).

GET /api/sync/{Resource}​

VoceValore
DescrizioneRestituisce i record della risorsa variati dopo LastUtcRun
AutenticazioneBearer
Risposta 200Array JSON di record, con TotalRowsCount
ParametroDescrizione
LastUtcRunData/ora UTC nel formato YYYY-MM-DD HH:MM:SS.000; 1900-01-01 00:00:00.000 restituisce tutto
PageSize, PageNumberPaginazione
curl -G "<BASE_URL>/api/sync/CliFor" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
--data-urlencode "LastUtcRun=<YYYY-MM-DD HH:MM:SS.000>" \
--data-urlencode "PageSize=500" --data-urlencode "PageNumber=1"

Procedura completa: Sincronizzazioni incrementali.

POST /api/sync/{Resource}​

VoceValore
DescrizioneInvio massivo di record alla risorsa
AutenticazioneBearer (utente abilitato alla scrittura)
Content-Typeapplication/json; charset=utf-8
CorpoArray di record della risorsa
Risposta200 se il blocco è accettato
Operazione di scrittura

Usala solo con un utente abilitato e, per le prove, su un tenant di prova concordato.

Regole di invio​

AspettoRegola
BlocchiDividi i record in blocchi di alcune centinaia; per i documenti, che contengono anche le righe, usa blocchi più piccoli
Righe documentoArray StoricoDocumentiR annidato in ogni record di StoricoDocumentiT
Cancellazione logicaflg_isdeleted: false sui record attivi
ControlloDopo l'invio, GET /api/resources/{Resource} e confronto di TotalRowsCount
ErroriFermati al primo codice diverso da 200 e registra il corpo della risposta

Ordine di pubblicazione e codice: Integrazione ERP.

const int Blocco = 500;
for (var i = 0; i < records.Count; i += Blocco)
{
var blocco = records.Skip(i).Take(Blocco).ToList();
using var resp = await http.PostAsJsonAsync("api/sync/MarcaArticoli", blocco);
if (!resp.IsSuccessStatusCode)
throw new InvalidOperationException($"HTTP {(int)resp.StatusCode}: {await resp.Content.ReadAsStringAsync()}");
}