logologo
Başlangıç
Kılavuz
Geliştirme
Eklentiler
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Başlangıç
Kılavuz
Geliştirme
Eklentiler
API
logologo
İş Akışları
Genel Bakış
Hızlı Başlangıç

Tetikleyici

Genel Bakış
Veri Tablosu Olayı
Zamanlanmış Görev
Eylem Öncesi Olay
Eylem Sonrası Olay
Özel Eylem Olayı
Onay
Webhook

Düğüm

Genel Bakış

AI

LLM

Akış Kontrolü

Koşul
Çoklu Koşul Dalı
Döngü
Değişken
Paralel Dal
İş Akışını Çağır
Akış Çıktısı
JSON Değişken Eşleştirme
Gecikme
Bitir

Hesaplama

Hesaplama
Tarih Hesaplama
JSON Hesaplama

Veri İşlemi

Veri Ekle
Veri Güncelle
Veri Sorgula
Veri Sil
SQL İşlemi

Manuel İşlem

Manuel İşlem
Onay
Bilgi (CC)

Genişletilmiş Tür

HTTP İsteği
JavaScript Betiği
Bildirim
E-posta Gönder
Yanıt
Yanıt Mesajı
Değişken
Yürütme Kaydı
Sürüm Yönetimi
Gelişmiş Seçenekler

Eklenti Geliştirme

Genel Bakış
Tetikleyici Türünü Genişlet
Düğüm Türünü Genişlet
API Referansı
Previous PageDüğüm Türünü Genişlet
TIP

Bu belge AI tarafından çevrilmiştir. Herhangi bir yanlışlık için lütfen İngilizce sürümüne bakın

#API Referansı

#Sunucu Tarafı

Sunucu tarafı paket yapısında kullanabileceğiniz API'lar aşağıdaki kodda gösterilmiştir:

import PluginWorkflowServer, {
  Trigger,
  Instruction,
  EXECUTION_STATUS,
  JOB_STATUS,
} from '@nocobase/plugin-workflow';

#PluginWorkflowServer

İş akışı eklenti sınıfı.

Genellikle uygulamanın çalışma zamanında, app uygulama örneğine erişebildiğiniz herhangi bir yerde app.pm.get<PluginWorkflowServer>(PluginWorkflowServer) çağrısı yaparak iş akışı eklenti örneğini (aşağıda plugin olarak anılacaktır) alabilirsiniz.

#registerTrigger()

Yeni bir tetikleyici türü kaydetmek için kullanılır.

İmza

registerTrigger(type: string, trigger: typeof Trigger | Trigger })

Parametreler

ParametreTipAçıklama
typestringTetikleyici türü tanımlayıcısı
triggertypeof Trigger | TriggerTetikleyici türü veya örneği

Örnek

import PluginWorkflowServer, { Trigger } from '@nocobase/plugin-workflow';

function handler(this: MyTrigger, workflow: WorkflowModel, message: string) {
  // trigger workflow
  this.workflow.trigger(workflow, { data: message.data });
}

class MyTrigger extends Trigger {
  messageHandlers: Map<number, WorkflowModel> = new Map();
  on(workflow: WorkflowModel) {
    const messageHandler = handler.bind(this, workflow);
    // listen some event to trigger workflow
    process.on(
      'message',
      this.messageHandlers.set(workflow.id, messageHandler),
    );
  }

  off(workflow: WorkflowModel) {
    const messageHandler = this.messageHandlers.get(workflow.id);
    // remove listener
    process.off('message', messageHandler);
  }
}

export default class MyPlugin extends Plugin {
  load() {
    // get workflow plugin instance
    const workflowPlugin =
      this.app.pm.get<PluginWorkflowServer>(PluginWorkflowServer);

    // register trigger
    workflowPlugin.registerTrigger('myTrigger', MyTrigger);
  }
}

#registerInstruction()

Yeni bir düğüm türü kaydetmek için kullanılır.

İmza

registerInstruction(type: string, instruction: typeof Instruction | Instruction })

Parametreler

ParametreTipAçıklama
typestringTalimat türü tanımlayıcısı
instructiontypeof Instruction | InstructionTalimat türü veya örneği

Örnek

import PluginWorkflowServer, { Instruction, JOB_STATUS } from '@nocobase/plugin-workflow';

class LogInstruction extends Instruction {
  run(node, input, processor) {
    console.log('my instruction runs!');
    return {
      status: JOB_STATUS.RESOVLED,
    };
  },
};

export default class MyPlugin extends Plugin {
  load() {
    // get workflow plugin instance
    const workflowPlugin = this.app.pm.get<PluginWorkflowServer>(PluginWorkflowServer);

    // register instruction
    workflowPlugin.registerInstruction('log', LogInstruction);
  }
}

#trigger()

Belirli bir iş akışını tetikler. Esas olarak özel tetikleyicilerde, belirli bir özel olay dinlendiğinde ilgili iş akışını tetiklemek için kullanılır.

İmza

trigger(workflow: Workflow, context: any)

Parametreler

ParametreTipAçıklama
workflowWorkflowModelTetiklenecek iş akışı nesnesi
contextobjectTetikleme anında sağlanan bağlam verisi
İpucu

context şu anda zorunlu bir öğedir. Sağlanmazsa, iş akışı tetiklenmez.

Örnek

import { Trigger } from '@nocobase/plugin-workflow';

class MyTrigger extends Trigger {
  timer: NodeJS.Timeout;

  on(workflow) {
    // register event
    this.timer = setInterval(() => {
      // trigger workflow
      this.plugin.trigger(workflow, { date: new Date() });
    }, workflow.config.interval ?? 60000);
  }
}

#resume()

Bekleyen bir iş akışını belirli bir düğüm göreviyle yürütmeye devam eder.

  • Yalnızca bekleyen durumda (EXECUTION_STATUS.STARTED) olan iş akışları yürütmeye devam edebilir.
  • Yalnızca bekleyen durumda (JOB_STATUS.PENDING) olan düğüm görevleri yürütmeye devam edebilir.

İmza

resume(job: JobModel)

Parametreler

ParametreTipAçıklama
jobJobModelGüncellenmiş görev nesnesi
İpucu

Aktarılan görev nesnesi genellikle güncellenmiş bir nesnedir ve status değeri genellikle JOB_STATUS.PENDING dışında bir değere güncellenir, aksi takdirde beklemeye devam edecektir.

Örnek

Detaylar için kaynak koduna bakınız.

#Trigger

Özel tetikleyici türlerini genişletmek için kullanılan tetikleyici temel sınıfıdır.

ParametreTipAçıklama
constructor(public readonly workflow: PluginWorkflowServer): TriggerYapıcı fonksiyon
on?(workflow: WorkflowModel): voidBir iş akışı etkinleştirildikten sonraki olay işleyicisi
off?(workflow: WorkflowModel): voidBir iş akışı devre dışı bırakıldıktan sonraki olay işleyicisi

on ve off metotları, bir iş akışı etkinleştirildiğinde/devre dışı bırakıldığında olay dinleyicilerini kaydetmek/kaydını silmek için kullanılır. Aktarılan parametre, ilgili tetikleyicinin iş akışı örneğidir ve ilgili yapılandırmaya göre işlenebilir. Bazı tetikleyici türleri, olayları zaten global olarak dinliyorsa bu iki metodu uygulamak zorunda kalmayabilir. Örneğin, zamanlanmış bir tetikleyicide, on metodunda bir zamanlayıcı kaydedebilir ve off metodunda zamanlayıcının kaydını silebilirsiniz.

#Instruction

Özel talimat türlerini genişletmek için kullanılan talimat temel sınıfıdır.

ParametreTipAçıklama
constructor(public readonly workflow: PluginWorkflowServer): InstructionYapıcı fonksiyon
runRunnerDüğüme ilk girişteki yürütme mantığı
resume?RunnerKesintiden sonra düğüme girişteki yürütme mantığı
getScope?(node: FlowNodeModel, data: any, processor: Processor): anyİlgili düğüm tarafından oluşturulan dal için yerel değişken içeriği sağlar

İlgili Tipler

export type Job =
  | {
      status: JOB_STATUS[keyof JOB_STATUS];
      result?: unknown;
      [key: string]: unknown;
    }
  | JobModel
  | null;

export type InstructionResult = Job | Promise<Job>;

export type Runner = (
  node: FlowNodeModel,
  input: JobModel,
  processor: Processor,
) => InstructionResult;

export class Instruction {
  run: Runner;
  resume?: Runner;
}

getScope metodu için, dallar için yerel değişken içeriği sağlamak amacıyla döngü düğümünün uygulamasını inceleyebilirsiniz.

#EXECUTION_STATUS

İş akışı yürütme planı durumları için bir sabitler tablosudur ve ilgili yürütme planının mevcut durumunu tanımlamak için kullanılır.

Sabit AdıAnlamı
EXECUTION_STATUS.QUEUEINGKuyrukta
EXECUTION_STATUS.STARTEDBaşlatıldı
EXECUTION_STATUS.RESOLVEDBaşarıyla Tamamlandı
EXECUTION_STATUS.FAILEDBaşarısız
EXECUTION_STATUS.ERRORYürütme Hatası
EXECUTION_STATUS.ABORTEDİptal Edildi
EXECUTION_STATUS.CANCELEDİptal Edildi
EXECUTION_STATUS.REJECTEDReddedildi
EXECUTION_STATUS.RETRY_NEEDEDBaşarısız, Tekrar Deneme Gerekiyor

İlk üçü dışındaki tüm durumlar başarısız bir durumu temsil eder, ancak farklı başarısızlık nedenlerini açıklamak için kullanılabilir.

#JOB_STATUS

İş akışı düğüm görevi durumları için bir sabitler tablosudur ve ilgili düğüm görevinin mevcut durumunu tanımlamak için kullanılır. Düğüm tarafından üretilen durum, aynı zamanda tüm yürütme planının durumunu da etkiler.

Sabit AdıAnlamı
JOB_STATUS.PENDINGBeklemede: Yürütme bu düğüme ulaştı, ancak talimat askıya almayı ve beklemeyi gerektiriyor
JOB_STATUS.RESOLVEDBaşarıyla Tamamlandı
JOB_STATUS.FAILEDBaşarısız: Bu düğümün yürütülmesi yapılandırılmış koşulları karşılayamadı
JOB_STATUS.ERRORHata: Bu düğümün yürütülmesi sırasında yakalanmamış bir hata oluştu
JOB_STATUS.ABORTEDİptal Edildi: Bu düğümün yürütülmesi, bekleme durumundayken başka bir mantık tarafından sonlandırıldı
JOB_STATUS.CANCELEDİptal Edildi: Bu düğümün yürütülmesi, bekleme durumundayken manuel olarak iptal edildi
JOB_STATUS.REJECTEDReddedildi: Bu düğümün devamı, bekleme durumundayken manuel olarak reddedildi
JOB_STATUS.RETRY_NEEDEDBaşarısız, Tekrar Deneme Gerekiyor

#İstemci Tarafı

İstemci tarafı paket yapısında kullanabileceğiniz API'lar aşağıdaki kodda gösterilmiştir:

import PluginWorkflowClient, {
  Trigger,
  Instruction,
} from '@nocobase/plugin-workflow/client';

#PluginWorkflowClient

#registerTrigger()

Tetikleyici türüne karşılık gelen yapılandırma panelini kaydeder.

İmza

registerTrigger(type: string, trigger: typeof Trigger | Trigger): void

Parametreler

ParametreTipAçıklama
typestringTetikleyici türü tanımlayıcısı, kayıt için kullanılan tanımlayıcı ile tutarlı olmalıdır
triggertypeof Trigger | TriggerTetikleyici türü veya örneği

#registerInstruction()

Düğüm türüne karşılık gelen yapılandırma panelini kaydeder.

İmza

registerInstruction(type: string, instruction: typeof Instruction | Instruction): void

Parametreler

ParametreTipAçıklama
typestringDüğüm türü tanımlayıcısı, kayıt için kullanılan tanımlayıcı ile tutarlı olmalıdır
instructiontypeof Instruction | InstructionDüğüm türü veya örneği

#registerInstructionGroup()

Düğüm türü gruplarını kaydeder. NocoBase varsayılan olarak 4 düğüm türü grubu sunar:

  • 'control': Kontrol
  • 'collection': Koleksiyon işlemleri
  • 'manual': Manuel işlem
  • 'extended': Diğer uzantılar

Başka grupları genişletmeniz gerekirse, bunları kaydetmek için bu metodu kullanabilirsiniz.

İmza

registerInstructionGroup(type: string, group: { label: string }): void

Parametreler

ParametreTipAçıklama
typestringDüğüm grubu tanımlayıcısı, kayıt için kullanılan tanımlayıcı ile tutarlı olmalıdır
group{ label: string }Grup bilgisi, şu anda sadece başlığı içerir

Örnek

export default class YourPluginClient extends Plugin {
  load() {
    const pluginWorkflow = this.app.pm.get(PluginWorkflowClient);

    pluginWorkflow.registerInstructionGroup('ai', { label: `{{t("AI", { ns: "${NAMESPACE}" })}}` });
  }
}

#Trigger

Özel tetikleyici türlerini genişletmek için kullanılan tetikleyici temel sınıfıdır.

ParametreTipAçıklama
titlestringTetikleyici türü adı
fieldset{ [key: string]: ISchema }Tetikleyici yapılandırma öğeleri koleksiyonu
scope?{ [key: string]: any }Yapılandırma öğesi Şemasında kullanılabilecek nesneler koleksiyonu
components?{ [key: string]: React.FC }Yapılandırma öğesi Şemasında kullanılabilecek bileşenler koleksiyonu
useVariables?(config: any, options: UseVariableOptions ) => VariableOptionsTetikleyici bağlam verisi için değer erişimcisi
  • useVariables ayarlanmamışsa, bu tetikleyici türünün değer alma işlevi sağlamadığı ve iş akışı düğümlerinde tetikleyicinin bağlam verilerinin seçilemeyeceği anlamına gelir.

#Instruction

Özel düğüm türlerini genişletmek için kullanılan talimat temel sınıfıdır.

ParametreTipAçıklama
groupstringDüğüm türü grubu tanımlayıcısı, şu anda mevcut seçenekler: 'control'/'collection'/'manual'/'extended'
fieldsetRecord<string, ISchema>Düğüm yapılandırma öğeleri koleksiyonu
scope?Record<string, Function>Yapılandırma öğesi Şemasında kullanılabilecek nesneler koleksiyonu
components?Record<string, React.FC>Yapılandırma öğesi Şemasında kullanılabilecek bileşenler koleksiyonu
Component?React.FCDüğüm için özel render bileşeni
useVariables?(node, options: UseVariableOptions) => VariableOptionDüğümün düğüm değişkeni seçeneklerini sağlama metodu
useScopeVariables?(node, options?) => VariableOptionsDüğümün dal yerel değişkeni seçeneklerini sağlama metodu
useInitializers?(node) => SchemaInitializerItemTypeDüğümün başlatıcı seçeneklerini sağlama metodu
isAvailable?(ctx: NodeAvailableContext) => booleanDüğümün kullanılabilir olup olmadığını belirleme metodu

İlgili Tipler

export type NodeAvailableContext = {
  workflow: object;
  upstream: object;
  branchIndex: number;
};
  • useVariables ayarlanmamışsa, bu düğüm türünün değer alma işlevi sağlamadığı ve iş akışı düğümlerinde bu tür düğümün sonuç verilerinin seçilemeyeceği anlamına gelir. Sonuç değeri tekil (seçilemez) ise, ilgili bilgiyi ifade eden statik bir içerik döndürebilirsiniz (bakınız: hesaplama düğümü kaynak kodu). Seçilebilir olması gerekiyorsa (örneğin, bir Nesnenin bir özelliği), ilgili seçim bileşeni çıktısını özelleştirebilirsiniz (bakınız: veri oluşturma düğümü kaynak kodu).
  • Component, düğüm için özel bir render bileşenidir. Varsayılan düğüm render'ı yeterli olmadığında, özel düğüm görünümü render'ı için tamamen geçersiz kılınabilir. Örneğin, bir dal türünün başlangıç düğümü için daha fazla eylem düğmesi veya başka etkileşimler sağlamanız gerekiyorsa, bu metodu kullanmanız gerekir (bakınız: paralel dal kaynak kodu).
  • useInitializers, blokları başlatmak için bir metod sağlamak amacıyla kullanılır. Örneğin, manuel bir düğümde, yukarı akış düğümlerine göre ilgili kullanıcı bloklarını başlatabilirsiniz. Bu metod sağlanırsa, manuel düğümün arayüz yapılandırmasında blokları başlatırken kullanılabilir olacaktır (bakınız: veri oluşturma düğümü kaynak kodu).
  • isAvailable, bir düğümün mevcut ortamda kullanılıp kullanılamayacağını (eklenip eklenemeyeceğini) belirlemek için kullanılır. Mevcut ortam, mevcut iş akışını, yukarı akış düğümlerini ve mevcut dal indeksini içerir.