scripts/*.json pavyzdžiaiPo redagavimo ir TypeScript konteksto čia sutariame kaip tas pats kodas saugomas JSON eksporte (scripts/ kataloge). Bendras ERP objekto lauko tipų ir datų skaitymas — Tema 2. Laukai, forma, initial, output, log.*, tada — tikri repo failai su fragmentais. Išvedimas, šaltiniai ir rql — Tema 3, sukūrimas, tipai, dialogas — Tema 4; pilna API linija — Tema 7.
Repozitorijos kataloge scripts/ saugomi automatizavimo apibrėžimų eksportai (JSON). Vykdomas JavaScript — lauke values.scriptContent; vartotojo forma (kai įjungta) — paramsFormSchema ir paramsFormEnabled; bandomasis kontekstas — exampleData. Tai leidžia laikyti tą pačią logiką versijų kontrolėje ir kartu su technine dokumentacija.
Žemiau — tas pats turinys, kurį anksčiau rasdavote tik gilintis į
readme.html
: sutraukta, su paaiškinimais ir kodo pavyzdžiais. Pilnos lentelės, papildomos pastabos ir „santrauka pagal failus“ toliau atnaujinamos žinyne — čia laikome vedėjo ir naujoko įėjimo sluoksnį.
initialPaleidus veiksmą iš UI, platforma suformuoja objektą initial. Dažni laukai:
initial.ids (pažymėtų įrašų ID masyvas), initial.id (vienas įrašas), initial.filterString, initial.sortString.paramsFormEnabled: true): laukai pagal paramsFormSchema — pvz. initial.departmentIn arba initial.fileName / initial.fileName.publicLink po FILEUPLOAD.initial.acceptLanguage vertimams (žr. ss-ocr-read-email JSON žinyne).Pažymėtos detalios eilutės — checkedLinesIds[]. Iš dokumento arba ataskaitos paleistai automatizacijai kartu su initial kontekstu perduodamas varnelėmis pažymėtų eilučių identifikatorių masyvas checkedLinesIds[]. Dokumente tai yra detalių eilučių identifikatoriai; initial.ids naudojamas sąraše pažymėtiems įrašams.
Masyve pateikiamas automatizacijos paleidimo metu aktualus pasirinkimas: viena, kelios arba visos pažymėtos eilutės. Pakeitus pažymėjimą ir pakartotinai paleidus automatizaciją, perduodamas atnaujintas pasirinkimas. Automatizacijos logikoje šiuos identifikatorius galima naudoti, pavyzdžiui, tik pasirinktų eilučių kainoms perskaičiuoti arba neatitikčių kortelėms kurti. Veiksmų taikymą pasirinktoms eilutėms turi numatyti pati automatizacijos logika.
Formos fragmentas (vienas failo laukas — kaip c-001):
[
{
"blockType": "FILEUPLOAD",
"meta": { "fieldName": "fileName", "accept": ".xlsx" }
}
]
Scenarijuje dažnai skaitote initial.fileName arba viešą nuorodą: initial.fileName?.publicLink ?? initial.fileName.
| Laukas | Paskirtis |
|---|---|
paramsFormSchema |
Formos blokai: blockType, meta.fieldName, required, accept, RQL getItems ir pan. |
exampleData |
JSON eilutė su pavyzdiniu initial testui, pvz. ids + departmentIn (aa260126). |
placeId |
Kur sistemoje rodomas veiksmas (clients-list, inventory-adjustments-list, …). |
triggerTypeId / cronExpression |
Trigerio tipas; 0 — dažnai rankinis / kontekstinis; suplanuotiems — CRON eilutė (žr. ss-ocr-read-email žinyne). |
UserError) ir technika (try / catch)Verslo taisyklė (niekas nepažymėta, trūksta privalomo lauko) — throw new UserError("…"): vartotojui aiški žinutė, be stack trace „baimės“.
if (initial?.ids?.length < 1) {
throw new UserError("Nepažymėtas nei vienas dokumentas");
}
Techninė klaida aplink mutate, rql, fetchData — tipinis šablonas:
try {
const result = await mutate("updateClient", { /* … */ });
} catch (error) {
await log.error("Klaida: " + (error?.message ?? error));
throw error;
}
Cikle per dokumentus vienam nepavykus — galima kaupti failed ir tęsti (continue) — žr. aa260126 repo faile. c-001 naudoja logException(tag, exception) su message / stack / name serializacija į log.error.
Antipavyzdys iš repo:
catch (execption)neatitinkaexceptionkintamojo vardo — tikroji klaida gali būti paslėpta. Laikykitės vieno vardo (errorarbaexception) visame faile.
outputPabaigoje priskiriate output (objektas) — matoma UI ir istorijoje. Tipiniai laukai iš šio projekto pavyzdžių:
message — trumpas tekstas vartotojui (pvz. c-001: „Veiksmas atliktas“).created / struktūrizuota santrauka — kas sukurta (aa260126).failed, failedCount — dalinis nesėkmės atvejis.executionStatus (SUCCESS / WARNING / CANCELED), documentsCount — žr. Automatizavimo scenarijų API.log.* ir kada rašyti| Situacija | Ką daryti | Pavyzdys faile |
|---|---|---|
| Sėkmingas žingsnis | await log.info(…) su santrauka |
aa260126 po sėkmingo mutate |
| Diagnostika / payload | log.trace (atsargiai gamyboje) |
Įvesties objektai prieš sunkią operaciją |
| Įspėjimas, bet ne stabdymas | log.warn |
ss-ocr-read-email |
| Klaida | log.error su kontekstu (docRef, functionName, …) |
aa260126, c-001 per logException |
Jei API dokumente log.* yra asinchroniniai, saugiau await log.info(…), kad įrašas spėtų užsirašyti prieš baigiant sesiją.
scripts/*.json| Failas | Ką pamatysite |
|---|---|
c-001 |
FILEUPLOAD, fetchData, Excel, lygiagretumas, logException, output.message |
aa260126 |
initial.ids, forma departmentIn, UserError, ciklas, mutate, output su santrauka |
jm16750 |
initial.fileName.publicLink, eilutės, output su dideliu JSON (atsargiai gamyboje) |
ss-ocr-read-email |
CRON, parametrai, try/catch el. paštui, vertimų helperiai |
Pilnas žinynas (scripts/readme.html) — visos pastabos, papildomos lentelės ir nuorodos į docs/ bei 24 verslo scenarijus.
scripts/)Čia naudojami eksportuoti apibrėžimai (JSON): vykdomas kodas — values.scriptContent, forma — paramsFormSchema, bandymui — exampleData. Teoriją, lenteles ir bendrus šablonus žr. skyriuje 1; pilną indeksuotą žinyną —
scripts/readme.html
.
c-001 · klientai iš „Excel“ — initial.fileName, fetchData, rql, dataParser.excelSheetToJson, lygiagretus eilučių apdorojimas.aa260126 · pajamavimas → išlaidavimas — sąrašo initial.ids, UserError, mutate, output.const fileDataResponse = await fetchData(undefined, {
url: initial.fileName,
method: "GET",
raw: false,
});
const clientsFileData = await dataParser.excelSheetToJson(
fileDataResponse.body,
0,
5
);
const ids = initial?.ids;
if (initial?.ids?.length
scriptContent, initial, UserError, output, log.* — skyrius 1; išplėtimas —
scripts/readme.html
.c-001 ir aa260126 — tipiniai šablonai failui iš sąrašo ir sąrašo pažymėjimams.Atverkite vieną iš nuorodų į JSON ir IDE raskite scriptContent — trumpai paaiškinkite kolegai vieną matomą šabloną (fetchData arba UserError).
c-001 arba aa260126); tada žinyne
readme.html
peržvelkite tą patį failą pagal „santrauką pagal failus“.exampleData, kuris atitinka initial bandyme.