Syncing data service Last updated: 04. Jun 2025
A comprehensive data synchronization service that fetches data from external APIs and synchronizes it with local site data, including price updates and campaign management.
Example
Code #/Services/SyncService.js
let config = docly.getFile("#/Config");
if (config == null) throw new Error("#/Config - filen ble ikke funnet!");
if (!config.SyncToken) throw new Error("Sync authorization token er ikke angitt i configfilen!");
if (!config.SyncUrl) throw new Error("Sync end point er ikke angitt i configfilen!");
if (!config.SyncTo) throw new Error("Sync 'target mappe' er ikke angitt i configfilen!");
let result = docly.httpPost(config.SyncUrl, { "token" : config.SyncToken });
let info = docly.getJson("#/Logs/Scheduled task - Produktsync.json");
let produkter = docly.getFiles("/", "*", 5, "MAX");
let errors = [];
let updates = [];
let notmodified = [];
for(let p of result) {
//let targetpath = config.SyncTo + "/" + p.Name;
let values = p.Values;
let sourceid = values.ROWID;
let target = produkter.find(x => x.produktbookingid == sourceid);
let kampanje = values.Kampanje?.length > 0;
let kampanjepris = "";
let kampanjeslutt = "";
if (target == null) {
errors.push({ id:sourceid, navn:p.Name, message: `Fant ikke produktet`, kampanje:kampanje });
} else {
let nypris = values.Grunnpris;
// Sjekk evt. om det er en gjeldende kampanje på produktet
let n = new Date();
let now = docly.format(n, "yyyy-MM-dd") + "T" + docly.format(n, "HH:mm");
for(let k of values.Kampanje) {
if (k.FraDato <= now && k.TilDato >= now) {
kampanjepris = k.KampanjeGrunnpris;
kampanjeslutt = k.TilDato;
}
}
let gammelPris = target.Pris;
let gammelKampanjepris = target.Kampanjepris;
let gammelKampanjeslutt = target.Kampanjeslutt;
if (nypris != gammelPris || kampanjepris != gammelKampanjepris || gammelKampanjeslutt != kampanjeslutt) {
updates.push({
id:sourceid,
navn:p.Name,
nypris : nypris,
gammelpris : gammelPris,
kampanjepris : kampanjepris,
gammelKampanjepris : gammelKampanjepris,
kampanjeslutt : kampanjeslutt,
gammelKampanjeslutt : gammelKampanjeslutt
});
//return target;
let targetpath = target.folderpath + "/" + target.filename;
docly.patchFile(targetpath, { "Pris" : nypris, "Kampanjepris" : kampanjepris, "Kampanjeslutt" : kampanjeslutt });
}
else
{
notmodified.push({ id:sourceid, navn:p.Name, kampanje:kampanje });
}
}
}
delete info.LastResult;
return { produkter : result.length, updates: updates, notmodified:notmodified, errors: errors, info : info };