logologo
Начало
Руководство
Разработка
Плагины
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Начало
Руководство
Разработка
Плагины
API
logologo

Введение

Что такое FlowEngine?
Связь FlowEngine и плагинов
Быстрый старт
План обучения

Руководство

Регистрация FlowModel
Создание FlowModel
Рендеринг FlowModel
Поток событий и конфигурация FlowModel
Персистентность FlowModel
Жизненный цикл FlowModel
Система контекста FlowModel
Реактивный механизм: Observable
FlowModel vs React.Component

Определения

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous PageModelDefinition
Next PageEventDefinition
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#FlowDefinition

FlowDefinition определяет базовую структуру и конфигурацию рабочего процесса и является одной из ключевых концепций движка рабочих процессов. Он описывает метаданные рабочего процесса, условия запуска, шаги выполнения и так далее.

#Определение типа

interface FlowDefinitionOptions<TModel extends FlowModel = FlowModel> {
  key: string;
  title?: string;
  manual?: boolean;
  sort?: number;
  on?: FlowEvent<TModel>;
  steps: Record<string, StepDefinition<TModel>>;
  defaultParams?: Record<string, any> | ((ctx: FlowModelContext) => StepParam | Promise<StepParam>);
}

#Способ регистрации

class MyModel extends FlowModel {}

// Зарегистрируйте рабочий процесс через класс модели
MyModel.registerFlow({
  key: 'pageSettings',
  title: 'Page settings',
  manual: false,
  sort: 0,
  on: 'click',
  steps: {
    step1: {
      use: 'actionName',
      title: 'First Step'
    }
  },
  defaultParams: {
    step1: { param1: 'value1' }
  }
});

#Описание свойств

#key

Тип: string
Обязательно: Да
Описание: Уникальный идентификатор рабочего процесса.

Рекомендуется использовать единый стиль именования xxxSettings, например:

  • pageSettings (настройки страницы)
  • tableSettings (настройки таблицы)
  • cardSettings (настройки карточки)
  • formSettings (настройки формы)
  • detailsSettings (настройки деталей)
  • buttonSettings (настройки кнопки)
  • popupSettings (настройки всплывающего окна)
  • deleteSettings (настройки удаления)
  • datetimeSettings (настройки даты и времени)
  • numberSettings (настройки числа)

Такой подход к именованию упрощает идентификацию и поддержку. Рекомендуется использовать его единообразно по всему проекту.

Пример:

key: 'pageSettings'
key: 'tableSettings'
key: 'deleteSettings'

#title

Тип: string
Обязательно: Нет
Описание: Человекочитаемое название рабочего процесса.

Рекомендуется придерживаться стиля, соответствующего key, используя именование Xxx settings, например:

  • Page settings (Настройки страницы)
  • Table settings (Настройки таблицы)
  • Card settings (Настройки карточки)
  • Form settings (Настройки формы)
  • Details settings (Настройки деталей)
  • Button settings (Настройки кнопки)
  • Popup settings (Настройки всплывающего окна)
  • Delete settings (Настройки удаления)
  • Datetime settings (Настройки даты и времени)
  • Number settings (Настройки числа)

Такой подход к именованию делает его более понятным и простым для восприятия, что упрощает отображение в пользовательском интерфейсе и командную работу.

Пример:

title: 'Page settings'
title: 'Table settings'
title: 'Delete settings'

#manual

Тип: boolean
Обязательно: Нет
Значение по умолчанию: false
Описание: Определяет, может ли рабочий процесс быть выполнен только вручную.

  • true: Рабочий процесс может быть запущен только вручную и не будет выполняться автоматически.
  • false: Рабочий процесс может выполняться автоматически (по умолчанию он выполняется автоматически, если свойство on отсутствует).

Пример:

manual: true  // Только ручной запуск
manual: false // Может выполняться автоматически

#sort

Тип: number
Обязательно: Нет
Значение по умолчанию: 0
Описание: Порядок выполнения рабочего процесса. Чем меньше значение, тем раньше он будет выполнен.

Отрицательные числа также могут быть использованы для управления порядком выполнения нескольких рабочих процессов.

Пример:

sort: -1  // Выполнить в первую очередь
sort: 0   // Порядок по умолчанию
sort: 1   // Выполнить позже

#on

Тип: FlowEvent<TModel>
Обязательно: Нет
Описание: Конфигурация события, которая позволяет запускать этот рабочий процесс с помощью dispatchEvent.

Используется только для объявления имени запускающего события (строка или { eventName }), не включает функцию-обработчик.

Поддерживаемые типы событий:

  • 'click' - Событие клика
  • 'submit' - Событие отправки
  • 'reset' - Событие сброса
  • 'remove' - Событие удаления
  • 'openView' - Событие открытия представления
  • 'dropdownOpen' - Событие открытия выпадающего списка
  • 'popupScroll' - Событие прокрутки всплывающего окна
  • 'search' - Событие поиска
  • 'customRequest' - Событие пользовательского запроса
  • 'collapseToggle' - Событие переключения сворачивания/разворачивания
  • Или любая пользовательская строка

Пример:

on: 'click'  // Запускается по клику
on: 'submit' // Запускается при отправке
on: { eventName: 'customEvent', defaultParams: { param1: 'value1' } }

#steps

Тип: Record<string, StepDefinition<TModel>>
Обязательно: Да
Описание: Определение шагов рабочего процесса.

Определяет все шаги, входящие в рабочий процесс, при этом каждый шаг имеет уникальный ключ.

Пример:

steps: {
  step1: {
    use: 'actionName',
    title: 'First Step',
    sort: 0
  },
  step2: {
    use: 'anotherAction',
    title: 'Second Step',
    sort: 1
  }
}

#defaultParams

Тип: Record<string, any> | ((ctx: FlowModelContext) => StepParam | Promise<StepParam>)
Обязательно: Нет
Описание: Параметры по умолчанию на уровне рабочего процесса.

При создании экземпляра модели (createModel) он заполняет начальные значения для параметров шагов "текущего рабочего процесса". Заполняются только отсутствующие значения, существующие не перезаписываются. Фиксированный формат возвращаемого значения: { [stepKey]: params }

Пример:

// Статические параметры по умолчанию
defaultParams: {
  step1: { param1: 'value1', param2: 'value2' },
  step2: { param3: 'value3' }
}

// Динамические параметры по умолчанию
defaultParams: (ctx) => {
  return {
    step1: { 
      param1: ctx.model.uid,
      param2: new Date().toISOString()
    }
  }
}

// Асинхронные параметры по умолчанию
defaultParams: async (ctx) => {
  const data = await fetchSomeData();
  return {
    step1: { data }
  }
}

#Полный пример

class PageModel extends FlowModel {}

PageModel.registerFlow({
  key: 'pageSettings',
  title: 'Page settings',
  manual: false,
  sort: 0,
  on: 'click',
  steps: {
    loadData: {
      use: 'loadDataAction',
      title: 'Load Data',
      sort: 0,
      preset: true
    },
    processData: {
      use: 'processDataAction', 
      title: 'Process Data',
      sort: 1,
      paramsRequired: true
    },
    saveData: {
      use: 'saveDataAction',
      title: 'Save Data', 
      sort: 2,
      hideInSettings: false
    }
  },
  defaultParams: {
    loadData: { 
      source: 'api',
      cache: true 
    },
    processData: { 
      format: 'json' 
    }
  }
});