Skip to main content
Logické funkce běží v izolovaných, krátce žijících procesech Node.js — jakmile běh skončí, nic, co bylo v paměti, nepřežije. Když potřebujete něco zapamatovat mezi běhy (kešovat nákladnou odpověď z API, uložit kurzor pro inkrementální synchronizace, odložit práci nebo předat stav z jedné funkce do druhé), uložte to do vestavěného úložiště typu klíč–hodnota. Každá aplikace má svůj vlastní izolovaný jmenný prostor: položky jsou svázané s ověřenou aplikací, takže vaše klíče nikdy nemohou kolidovat s klíči jiné aplikace ani je jiná aplikace nemůže číst.

Get, set, delete

Importujte kv z twenty-sdk/logic-function. Hodnoty mohou být libovolná JSON-serializovatelná data.
src/logic-functions/sync-linear-issues.ts

Rozsahy

Každá položka má rozsah, který se předává jako volba při každém volání. Výchozí hodnota je WORKSPACE.
  • WORKSPACE (výchozí) — položka je soukromá pro aktuální instalaci vaší aplikace v pracovním prostoru. Každý pracovní prostor, který aplikaci nainstaluje, získá vlastní nezávislou sadu klíčů. To je to, co chcete pro keše, kurzory a stav na úrovni pracovního prostoru.
  • SERVER — položka je sdílena napříč všemi instalacemi vaší aplikace na serveru. Serverové položky se chovají jako nároky (claims): uloženou hodnotou je vždy workspaceId, které klíč nárokuje (vynechte value při set, abyste klíč nárokovali pro aktuální pracovní prostor) a pouze tento pracovní prostor ji může přepsat nebo smazat. Každá instalace může položku číst.
Serverové nároky existují pro směrování napříč pracovními prostory. Server-route resolver běží v pracovním prostoru vlastníka registrace aplikace, ale příchozí webhook obvykle nese pouze externí id účtu — nikoli Twenty workspaceId. Nechte každý pracovní prostor, aby si při připojení nárokoval své externí id, a poté ho v routě rozřešte:
Protože serverový klíč může být nárokován pouze pro vlastní pracovní prostor volajícího a nikdy nemůže být přepsán jiným, pracovní prostor nemůže převzít mapování, které patří někomu jinému. kv.set vyvolá výjimku, když je klíč už nárokován jiným pracovním prostorem.

Použití: kešujte nákladné volání

Typickým použitím je kešování pomalé nebo omezované (rate-limited) odpovědi třetí strany, aby opakované běhy znovu použily výsledek místo placení nákladů při každém spuštění.
src/logic-functions/getExchangeRate.logic-function.ts

Vzorové postupy a tipy

  • Jmenné prostory. Přidávejte prefixy ke klíčům, abyste oddělili různé oblasti — sync-cursor:linear, cache:exchange-rate:USD:EUR, lock:nightly-report.
  • Expirace (TTL). Úložiště nemá vestavěnou expiraci. Uložte časové razítko dovnitř hodnoty (jako v příkladu s keší) a při čtení ho kontrolujte, nebo čistěte zastaralé klíče z funkce spouštěné cronem.
  • Co ukládat. Jakákoli JSON-serializovatelná hodnota — čísla, řetězce, pole, objekty. Držte záznamy malé; toto je určeno pro koordinaci a kešování, ne pro velké objekty blob nebo soubory. Pro soubory použijte pole FILES a uploadFile.
  • Viditelnost. Položky žijí v databázi instance, ne jako záznamy pracovního prostoru — nikdy se neobjevují v uživatelském rozhraní pracovního prostoru, nejsou součástí datového modelu vaší aplikace a nevyžadují žádná oprávnění k rolím ani objektům.

Alternativa: dotazovatelný objekt úložiště

Vestavěné úložiště je záměrně neprůhledné: položky nejsou záznamy, takže je nemůžete procházet v UI, propojovat s jinými objekty nebo filtrovat pomocí dotazů na záznamy. Kdykoli něco z toho potřebujete — například viditelný log synchronizace nebo stav na úrovni záznamu — definujte místo toho malý technický objekt s jedinečným polem key a polem value typu RAW_JSON a dotazujte ho přes typovaný API klient. Viz Objects pro referenci k defineObject a Data → Unique indexes pro vynucení jedinečnosti klíče.
  • Omezení na záznam. Přidejte relaci z objektu úložiště na cílový objekt namísto zakódování id do klíče.
  • Viditelnost a oprávnění. Řádky žijí v databázi pracovního prostoru jako jakýkoli jiný záznam, takže je lze dotazovat přes API a respektují role vaší aplikace. Aby se úložiště neobjevovalo v hlavním rozhraní, neuvádějte ho v navigačním menu.
Na rozdíl od vestavěného úložiště je vlastní objekt vždy omezený na jeden pracovní prostor — nemůže sdílet položky napříč instalacemi tak, jako to dělají klíče SERVER.