Dieses Dokument wurde von KI übersetzt. Für genaue Informationen lesen Sie bitte die englische Version.
Wenn ein Plugin RunJS-Funktionen hinzufügt oder erweitert, wird empfohlen, das „Kontext-Mapping / die ctx-Dokumentation / den Beispielcode“ über die offiziellen Erweiterungspunkte zu registrieren. Dies stellt sicher, dass:
ctx.xxx.yyy bereitstellen kann.ctx-API-Referenzen + Beispiele erhält.Dieses Kapitel stellt zwei Erweiterungspunkte vor:
registerRunJSContextContribution(...)registerRunJSSnippet(...)registerRunJSContextContributionWird verwendet, um RunJS-„Beiträge“ (Contributions) zu registrieren. Typische Verwendungszwecke sind:
RunJSContextRegistry-Mappings (modelClass -> RunJSContext, einschließlich scenes).RunJSDocMeta (Beschreibungen/Beispiele/Vervollständigungsvorlagen für die ctx-API) für FlowRunJSContext oder benutzerdefinierte RunJSContext.setupRunJSContexts() gesammelt ausgeführt.setupRunJSContexts() bereits abgeschlossen ist, wird eine verspätete Registrierung sofort ausgeführt (ein erneuter Setup-Durchlauf ist nicht erforderlich).RunJSVersion höchstens einmal ausgeführt.registerRunJSSnippetWird verwendet, um Beispiel-Code-Snippets für RunJS zu registrieren, die für folgende Zwecke genutzt werden:
Es wird empfohlen, folgendes Format zu verwenden: plugin/<pluginName>/<topic>, zum Beispiel:
plugin/plugin-my/fooplugin/plugin-my/api-request-exampleVermeiden Sie Konflikte mit den Namespaces global/* oder scene/* des Kernsystems.
ref-Einträge nicht überschrieben (gibt false zurück, ohne einen Fehler auszulösen).{ override: true }.RunJSDocMeta: Beschreibungen/Vervollständigungsvorlagen (kurz, strukturiert).scenes korrekt ausgefüllt ist, um die Relevanz von Vervollständigungen und Beispielen zu erhöhen.hidden(ctx)Bestimmte ctx-APIs sind stark szenenabhängig (z. B. ist ctx.popup nur verfügbar, wenn ein Popup oder eine Schublade geöffnet ist). Wenn Sie diese nicht verfügbaren APIs bei der Vervollständigung ausblenden möchten, können Sie hidden(ctx) für den entsprechenden Eintrag in RunJSDocMeta definieren:
true: Blendet den aktuellen Knoten und seinen Unterbaum aus.string[]: Blendet bestimmte Unterpfade unter dem aktuellen Knoten aus (unterstützt die Rückgabe mehrerer Pfade; Pfade sind relativ; Unterbäume werden basierend auf Präfix-Übereinstimmung ausgeblendet).hidden(ctx) unterstützt async: Sie können await ctx.getVar('ctx.xxx') verwenden, um die Sichtbarkeit zu bestimmen (nach eigenem Ermessen). Es wird empfohlen, diese Logik schnell und nebenwirkungsfrei zu halten (vermeiden Sie z. B. Netzwerkanfragen).
Beispiel: Zeige ctx.popup.* Vervollständigungen nur an, wenn popup.uid existiert.
Beispiel: Popup ist verfügbar, aber einige Unterpfade sind ausgeblendet (nur relative Pfade; z. B. Ausblenden von record und parent.record).
Hinweis: Der CodeEditor aktiviert immer die Filterung der Vervollständigung basierend auf dem tatsächlichen ctx (Fail-Open, löst keine Fehler aus).
info/meta und Kontext-Informations-API (für Vervollständigungen und LLMs)Zusätzlich zur statischen Wartung der ctx-Dokumentation über FlowRunJSContext.define() können Sie zur Laufzeit über FlowContext.defineProperty/defineMethod info/meta injizieren. Sie können dann über die folgenden APIs serialisierbare Kontextinformationen für den CodeEditor oder LLMs ausgeben:
await ctx.getApiInfos(options?): Statische API-Informationen.await ctx.getVarInfos(options?): Informationen zur Variablenstruktur (bezogen aus meta, unterstützt Pfad-/maxDepth-Erweiterung).await ctx.getEnvInfos(): Snapshot der Laufzeitumgebung.defineMethod(name, fn, info?)info unterstützt (alle optional):
description / detail / examplesref: string | { url: string; title?: string }params / returns (JSDoc-ähnlich)Hinweis:
getApiInfos()gibt statische API-Dokumentationen aus und enthält keine Felder wiedeprecated,disabledoderdisabledReason.
Beispiel: Bereitstellung von Dokumentationslinks für ctx.refreshTargets().
defineProperty(key, { meta?, info? })meta: Wird für die Benutzeroberfläche der Variablen-Auswahl verwendet (getPropertyMetaTree / FlowContextSelector). Es bestimmt die Sichtbarkeit, Baumstruktur, Deaktivierung usw. (unterstützt Funktionen/async).
title / type / properties / sort / hidden / disabled / disabledReason / buildVariablesParamsinfo: Wird für die statische API-Dokumentation (getApiInfos) und Beschreibungen für LLMs verwendet. Es beeinflusst nicht die Benutzeroberfläche der Variablen-Auswahl (unterstützt Funktionen/async).
title / type / interface / description / examples / ref / params / returnsWenn nur meta bereitgestellt wird (ohne info):
getApiInfos() gibt diesen Schlüssel nicht zurück (da statische API-Dokumente nicht aus meta abgeleitet werden).getVarInfos() baut die Variablenstruktur basierend auf meta auf (verwendet für Variablen-Auswähler/dynamische Variablenbäume).Wird verwendet, um „verfügbare Kontext-Fähigkeitsinformationen“ auszugeben.
Häufige Parameter:
getApiInfos({ version }): Version der RunJS-Dokumentation (Standard ist v1).getVarInfos({ path, maxDepth }): Kürzung und maximale Erweiterungstiefe (Standard ist 3).Hinweis: Die von den obigen APIs zurückgegebenen Ergebnisse enthalten keine Funktionen und eignen sich zur direkten Serialisierung für LLMs.
await ctx.getVar(path)Wenn Sie nur einen „Variablenpfad-String“ haben (z. B. aus einer Konfiguration oder Benutzereingabe) und den Laufzeitwert dieser Variable direkt abrufen möchten, verwenden Sie getVar:
const v = await ctx.getVar('ctx.record.roles.id')path ist ein Ausdruckspfad, der mit ctx. beginnt (z. B. ctx.record.id / ctx.record.roles[0].id).Zusätzlich: Methoden oder Eigenschaften, die mit einem Unterstrich _ beginnen, werden als private Mitglieder behandelt und erscheinen nicht in der Ausgabe von getApiInfos() oder getVarInfos().