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

Giriş

FlowEngine Nedir?
FlowEngine ve Eklenti İlişkisi
Hızlı Başlangıç
Öğrenme Yol Haritası

Kılavuz

FlowModel Kaydı
FlowModel Oluşturma
FlowModel İşleme
FlowModel Olay Akışı ve Yapılandırma
FlowModel Kalıcılığı
FlowModel Yaşam Döngüsü
FlowModel Bağlam Sistemi
Reaktif Mekanizma: Observable
FlowModel vs React.Component

Tanımlar

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous PageActionDefinition
TIP

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

#StepDefinition

StepDefinition, bir iş akışındaki tek bir adımı tanımlar. Her adım bir eylem, olay işleme veya başka bir işlem olabilir. Adım, bir iş akışının temel yürütme birimidir.

#Tip Tanımı

interface StepDefinition<TModel extends FlowModel = FlowModel>
  extends Partial<Omit<ActionDefinition<TModel, FlowRuntimeContext<TModel>>, 'name'>> {
  key?: string;
  isAwait?: boolean;
  use?: string;
  sort?: number;
  preset?: boolean;
  paramsRequired?: boolean;
  hideInSettings?: boolean;
  uiMode?: StepUIMode | ((ctx: FlowRuntimeContext<TModel>) => StepUIMode | Promise<StepUIMode>);
}

#Kullanım

class MyModel extends FlowModel {}

MyModel.registerFlow({
  key: 'pageSettings',
  steps: {
    step1: {
      use: 'actionName',
      title: 'First Step',
      sort: 0,
      preset: true
    },
    step2: {
      handler: async (ctx, params) => {
        // Özel işleme mantığı
        return { result: 'success' };
      },
      title: 'Second Step',
      sort: 1
    }
  }
});

#Özellik Açıklamaları

#key

Tip: string
Zorunlu: Hayır
Açıklama: Adımın iş akışı içindeki benzersiz tanımlayıcısıdır.

Eğer bir key belirtmezseniz, steps nesnesindeki adımın anahtar adı kullanılır.

Örnek:

steps: {
  loadData: {  // 'loadData' anahtarı
    use: 'loadDataAction'
  }
}

#use

Tip: string
Zorunlu: Hayır
Açıklama: Kullanılacak kayıtlı bir ActionDefinition'ın adıdır.

use özelliği, kayıtlı bir eylemi referans almanızı sağlayarak tekrar tanımlama ihtiyacını ortadan kaldırır.

Örnek:

// Önce eylemi kaydedin
MyModel.registerAction({
  name: 'loadDataAction',
  handler: async (ctx, params) => {
    // Veri yükleme mantığı
  }
});

// Bir adımda kullanın
steps: {
  step1: {
    use: 'loadDataAction',  // Kayıtlı eylemi referans alın
    title: 'Load Data'
  }
}

#title

Tip: string
Zorunlu: Hayır
Açıklama: Adımın arayüzde gösterilecek başlığıdır.

Kullanıcı arayüzünde gösterim ve hata ayıklama amacıyla kullanılır.

Örnek:

title: 'Load Data'
title: 'Process Information'
title: 'Save Results'

#sort

Tip: number
Zorunlu: Hayır
Açıklama: Adımın yürütme sırasını belirler. Değer ne kadar küçükse, adım o kadar önce yürütülür.

Aynı iş akışındaki birden fazla adımın yürütme sırasını kontrol etmek için kullanılır.

Örnek:

steps: {
  step1: { sort: 0 },  // İlk yürütülür
  step2: { sort: 1 },  // Sonraki yürütülür
  step3: { sort: 2 }   // En son yürütülür
}

#handler

Tip: (ctx: FlowRuntimeContext<TModel>, params: any) => Promise<any> | any
Zorunlu: Hayır
Açıklama: Adımın işleme fonksiyonudur.

use özelliği kullanılmadığında, işleme fonksiyonunu doğrudan burada tanımlayabilirsiniz.

Örnek:

handler: async (ctx, params) => {
  // Bağlam bilgilerini alın
  const { model, flowEngine } = ctx;
  
  // İşleme mantığı
  const result = await processData(params);
  
  // Sonucu döndürün
  return { success: true, data: result };
}

#defaultParams

Tip: Record<string, any> | ((ctx: FlowRuntimeContext<TModel>) => Record<string, any> | Promise<Record<string, any>>)
Zorunlu: Hayır
Açıklama: Adım için varsayılan parametrelerdir.

Adım yürütülmeden önce parametreleri varsayılan değerlerle doldurur.

Örnek:

// Statik varsayılan parametreler
defaultParams: {
  timeout: 5000,
  retries: 3,
  format: 'json'
}

// Dinamik varsayılan parametreler
defaultParams: (ctx) => {
  return {
    userId: ctx.model.uid,
    timestamp: Date.now()
  }
}

// Asenkron varsayılan parametreler
defaultParams: async (ctx) => {
  const config = await loadConfig();
  return {
    apiUrl: config.apiUrl,
    apiKey: config.apiKey
  }
}

#uiSchema

Tip: Record<string, ISchema> | ((ctx: FlowRuntimeContext<TModel>) => Record<string, ISchema> | Promise<Record<string, ISchema>>)
Zorunlu: Hayır
Açıklama: Adımın kullanıcı arayüzü (UI) yapılandırma şemasıdır.

Adımın arayüzde nasıl görüntüleneceğini ve form yapılandırmasını tanımlar.

Örnek:

uiSchema: {
  'x-component': 'Form',
  'x-component-props': {
    layout: 'vertical'
  },
  properties: {
    name: {
      type: 'string',
      title: 'Name',
      'x-component': 'Input'
    },
    age: {
      type: 'number',
      title: 'Age',
      'x-component': 'InputNumber'
    }
  }
}

#beforeParamsSave

Tip: (ctx: FlowSettingsContext<TModel>, params: any, previousParams: any) => void | Promise<void>
Zorunlu: Hayır
Açıklama: Parametreler kaydedilmeden önce çalışan bir kanca fonksiyonudur.

Adım parametreleri kaydedilmeden önce çalışır; parametre doğrulama veya dönüştürme gibi işlemler için kullanabilirsiniz.

Örnek:

beforeParamsSave: (ctx, params, previousParams) => {
  // Parametre doğrulama
  if (!params.name) {
    throw new Error('Name is required');
  }
  
  // Parametre dönüştürme
  params.name = params.name.trim().toLowerCase();
}

#afterParamsSave

Tip: (ctx: FlowSettingsContext<TModel>, params: any, previousParams: any) => void | Promise<void>
Zorunlu: Hayır
Açıklama: Parametreler kaydedildikten sonra çalışan bir kanca fonksiyonudur.

Adım parametreleri kaydedildikten sonra çalışır; diğer işlemleri tetiklemek için kullanabilirsiniz.

Örnek:

afterParamsSave: (ctx, params, previousParams) => {
  // Logları kaydedin
  console.log('Step params saved:', params);
  
  // Diğer işlemleri tetikleyin
  ctx.model.emitter.emit('paramsChanged', params);
}

#uiMode

Tip: StepUIMode | ((ctx: FlowRuntimeContext<TModel>) => StepUIMode | Promise<StepUIMode>)
Zorunlu: Hayır
Açıklama: Adımın kullanıcı arayüzü (UI) görüntüleme modunu belirler.

Adımın arayüzde nasıl görüntüleneceğini kontrol eder.

Desteklenen modlar:

  • 'dialog' - Diyalog modu
  • 'drawer' - Çekmece modu
  • 'embed' - Gömülü mod
  • Veya özel bir yapılandırma nesnesi

Örnek:

// Basit mod
uiMode: 'dialog'

// Özel yapılandırma
uiMode: {
  type: 'dialog',
  props: {
    width: 800,
    title: 'Step Configuration'
  }
}

// Dinamik mod
uiMode: (ctx) => {
  return ctx.model.isMobile ? 'drawer' : 'dialog';
}

#preset

Tip: boolean
Zorunlu: Hayır
Açıklama: Bu adımın önceden ayarlanmış (preset) bir adım olup olmadığını belirtir.

preset: true olarak işaretlenmiş adımların parametreleri oluşturulurken doldurulmalıdır. Bu işaretlemeye sahip olmayan adımların parametreleri ise model oluşturulduktan sonra da doldurulabilir.

Örnek:

steps: {
  step1: {
    preset: true,  // Oluşturma sırasında parametreler doldurulmalıdır
    use: 'requiredAction'
  },
  step2: {
    preset: false, // Parametreler daha sonra doldurulabilir
    use: 'optionalAction'
  }
}

#paramsRequired

Tip: boolean
Zorunlu: Hayır
Açıklama: Adım parametrelerinin zorunlu olup olmadığını belirtir.

Eğer true olarak ayarlanırsa, model eklenmeden önce bir yapılandırma iletişim kutusu açılır.

Örnek:

paramsRequired: true  // Model eklenmeden önce parametreler yapılandırılmalıdır
paramsRequired: false // Parametreler daha sonra yapılandırılabilir

#hideInSettings

Tip: boolean
Zorunlu: Hayır
Açıklama: Adımın ayarlar menüsünde gizlenip gizlenmeyeceğini kontrol eder.

Örnek:

hideInSettings: true  // Ayarlarda gizle
hideInSettings: false // Ayarlarda göster (varsayılan)

#isAwait

Tip: boolean
Zorunlu: Hayır
Varsayılan: true
Açıklama: İşleyici fonksiyonunun tamamlanmasını bekleyip beklemeyeceğini belirtir.

Örnek:

isAwait: true  // İşleyici fonksiyonunun tamamlanmasını bekler (varsayılan)
isAwait: false // Beklemez, asenkron olarak yürütülür

#Tam Örnek

class DataProcessingModel extends FlowModel {}

DataProcessingModel.registerFlow({
  key: 'dataProcessing',
  title: 'Data Processing',
  steps: {
    loadData: {
      use: 'loadDataAction',
      title: 'Load Data',
      sort: 0,
      preset: true,
      paramsRequired: true,
      defaultParams: {
        source: 'api',
        timeout: 5000
      },
      uiMode: 'dialog'
    },
    processData: {
      handler: async (ctx, params) => {
        const data = await ctx.model.getData();
        return processData(data, params);
      },
      title: 'Process Data',
      sort: 1,
      defaultParams: (ctx) => ({
        userId: ctx.model.uid,
        timestamp: Date.now()
      }),
      beforeParamsSave: (ctx, params) => {
        if (!params.processor) {
          throw new Error('Processor is required');
        }
      },
      afterParamsSave: (ctx, params) => {
        ctx.model.emitter.emit('dataProcessed', params);
      }
    },
    saveData: {
      use: 'saveDataAction',
      title: 'Save Data',
      sort: 2,
      hideInSettings: false,
      uiMode: {
        type: 'drawer',
        props: {
          width: 600,
          title: 'Save Configuration'
        }
      }
    }
  }
});