Krok Najit nebo zalozit kontakt a druhy vstup vlastniho skriptu

Chybelo k tomu, aby sla postavit cela cesta objednavka -> faktura.

- Novy skript idoklad.upsert-contact: dohleda odberatele podle ICO nebo
  e-mailu, a kdyz neni, zalozi ho a vrati nove ID. Vystup `created` rekne,
  co se stalo, takze na to jde navazat podminkou.
  Proc jeden krok a ne dvojice ve vetvich podminky: vetev nepridava nic do
  sekvence za podminkou, protoze nemusela probehnout. ID odberatele by za
  podminkou nebylo k dispozici, i kdyz ho ve skutecnosti daji obe vetve.
  Zaklada se az kdyz hledani nic nenaslo - opacne poradi by pri kazde
  objednavce vyrobilo dalsiho odberatele se stejnym ICO.
- Krok Vlastni skript ma druhy vstup "Co pridat ke vstupu". Skript casto
  potrebuje krome hlavniho objektu jednu hodnotu z predchoziho kroku,
  typicky ID odberatele. Prijde v input.extra, aby se hlavni data nemichala
  s tim, co jsme doplnili my.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-08-20 08:50:03 +02:00
co-authored by Claude Opus 5
parent e4779caf82
commit 13c0c03ed4
3 changed files with 167 additions and 3 deletions
+9
View File
@@ -1762,6 +1762,15 @@ export const services: Service[] = [
required: true,
hint: 'Objekt, který skript dostane jako input. Třeba {{_body}}.',
},
{
id: 'extra',
label: 'Co přidat ke vstupu',
kind: 'json',
required: false,
hint:
'Hodnoty z předchozích kroků, například ' +
'{"partnerId": "{{st_kontakt.contactId}}"}. Skript je najde v input.extra.',
},
],
outputFields: [
{ id: 'transform.result', name: 'result', type: 'object', required: true },
+12 -3
View File
@@ -544,7 +544,16 @@ const handlers: Record<string, Handler> = {
}
const source = inputs.source ? safeJson(inputs.source) : {};
const result = runSandbox(script.code, source);
/*
* Skript casto potrebuje krome hlavniho objektu i jednu hodnotu
* z predchoziho kroku - typicky ID odberatele. Prijde v `input.extra`,
* aby se hlavni data nemichala s tim, co jsme doplnili my.
*/
const extra = inputs.extra?.trim() ? safeJson(inputs.extra) : undefined;
const payload = extra === undefined ? source : { ...source, extra };
const result = runSandbox(script.code, payload);
noteRun(script.id, script.tenantId, result.ok);
if (!result.ok) {
@@ -552,7 +561,7 @@ const handlers: Record<string, Handler> = {
ok: false,
summary: `${script.name}: ${result.error?.split('\n')[0] ?? 'chyba'}`,
// Cely vstup i chyba. Bez vstupu se chyba v prevodu hleda naslepo.
detail: JSON.stringify({ vstup: source, chyba: result.error }, null, 2),
detail: JSON.stringify({ vstup: payload, chyba: result.error }, null, 2),
outputs: {},
};
}
@@ -560,7 +569,7 @@ const handlers: Record<string, Handler> = {
return {
ok: true,
summary: `${script.name}: hotovo za ${result.durationMs} ms`,
detail: JSON.stringify({ vstup: source, vystup: result.value }, null, 2),
detail: JSON.stringify({ vstup: payload, vystup: result.value }, null, 2),
outputs: { result: result.value },
};
},