Čia dažniausiai atsakymas į klientą, kodėl procesas nutrūko arba auditas rodo ne tą naudotoją.
| Rūšis | Elgsena |
|---|---|
| Async | Vyksta nepriklausomai nuo pagrindinių ERP procesų (dokumento kūrimas, patvirtinimas, atšaukimas…). Fono logika. |
| Sync | Kol vyksta — sistema ir vartotojas laukia pabaigos. |
// Sync kontekste: vartotojas laukia — vengkite ilgų ciklų be progreso žinučių.
// Async / fonas: tinka masyvams, išoriniams API; vis tiek ribokite partijas ir loginkite etapus.
await log.info("Pradedu async dalį, ids: " + (initial.ids?.length ?? 0));
Jei operacija gali užtrukti ilgiau nei keliasdešimt sekundžių — vertinkite duomenų kelią ir ar ne eilės tema (Tema 11).
Scenarijus gali kviesti kitą automatizavimą, tas — trečią. Rizika — begalinis ciklas. Platforma skaičiuoja pakartojimus: jei ciklas pasikartoja trečią kartą, vykdymas nutraukiamas.
Įprastai vykdymas vyksta inicijuotojo naudotojo vardu — auditas rodo jį. Scheduler tipo automatizavimai — pakeitimai fiksuojami kaip automation naudotojo vardu.
Čia sutelktos vykdymo sesijos, atminties ir ciklo taisyklės. Kurį duomenų kelią rinktis pagal apimtį ir laiką (reporting vs automatizavimas vs data export ir pan.) — atskiroje temoje apie keturis kelius ir asinchroninį eksportą; ten nebekartojame šios temos lentelių, o sprendžiame kliento klausimą architektūriškai.
API leidžia patikrinti, kiek laiko liko iki sesijos pabaigos (sekundėmis):
const remainingSeconds = await getRemainingSessionTime();
// Jei mažai — saugiau skaidyti darbą arba baigti kontroliuotai
const response = await callErpAutomation(
"childAutomation",
{ param1: "param1", param2: true, param3: 3.14 }
);
// response.status: SUCCESS | FAILED | CANCELED
// response.data: Object | String
c-001
— ilgesnis foninis darbas: lygiagretumas su riba maxConcurrency (mažiau „užkemša“ eilę nei begalinis paralelizmas, bet vis tiek didina atminties apkrovą).
aa260126
— ciklas per dokumentus: vienam dokumentui mutate klaida įrašoma į failed ir vykdymas tęsiamas (continue).
const maxConcurrency = 10;
// … executing.add(task); jei executing.size >= maxConcurrency — await Promise.race(executing);
} catch (error) {
failed.push(errInfo);
continue; // kitas dokumentas
}
Vienas incidentas: „procesas nutrūko“ — ar tai sesija, atmintis, ciklas ar netinkamas kelias?