Уведомление о переводе ИИ
Эта документация была автоматически переведена ИИ.
StepDefinition
StepDefinition определяет отдельный шаг в рабочем процессе. Каждый шаг может представлять собой действие, обработку события или другую операцию. Шаг — это базовая единица выполнения рабочего процесса.
Определение типа
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>);
}
Использование
class MyModel extends FlowModel {}
MyModel.registerFlow({
key: 'pageSettings',
steps: {
step1: {
use: 'actionName',
title: 'First Step',
sort: 0,
preset: true
},
step2: {
handler: async (ctx, params) => {
// Пользовательская логика обработки
return { result: 'success' };
},
title: 'Second Step',
sort: 1
}
}
});
Описание свойств
key
Тип: string
Обязательно: Нет
Описание: Уникальный идентификатор шага в рабочем процессе.
Если не указано, будет использоваться имя ключа шага в объекте steps.
Пример:
steps: {
loadData: { // ключ — 'loadData'
use: 'loadDataAction'
}
}
use
Тип: string
Обязательно: Нет
Описание: Имя зарегистрированного ActionDefinition для использования.
Свойство use позволяет ссылаться на зарегистрированное действие, избегая дублирования определений.
Пример:
// Сначала зарегистрируйте действие
MyModel.registerAction({
name: 'loadDataAction',
handler: async (ctx, params) => {
// Логика загрузки данных
}
});
// Используйте в шаге
steps: {
step1: {
use: 'loadDataAction', // Ссылка на зарегистрированное действие
title: 'Load Data'
}
}
title
Тип: string
Обязательно: Нет
Описание: Заголовок шага для отображения.
Используется для отображения в пользовательском интерфейсе и отладки.
Пример:
title: 'Load Data'
title: 'Process Information'
title: 'Save Results'
sort
Тип: number
Обязательно: Нет
Описание: Порядок выполнения шага. Чем меньше значение, тем раньше он выполняется.
Используется для управления порядком выполнения нескольких шагов в одном рабочем процессе.
Пример:
steps: {
step1: { sort: 0 }, // Выполняется первым
step2: { sort: 1 }, // Выполняется следующим
step3: { sort: 2 } // Выполняется последним
}
handler
Тип: (ctx: FlowRuntimeContext<TModel>, params: any) => Promise<any> | any
Обязательно: Нет
Описание: Функция-обработчик для шага.
Когда свойство use не используется, вы можете определить функцию-обработчик напрямую.
Пример:
handler: async (ctx, params) => {
// Получить информацию о контексте
const { model, flowEngine } = ctx;
// Логика обработки
const result = await processData(params);
// Вернуть результат
return { success: true, data: result };
}
defaultParams
Тип: Record<string, any> | ((ctx: FlowRuntimeContext<TModel>) => Record<string, any> | Promise<Record<string, any>>)
Обязательно: Нет
Описание: Параметры шага по умолчанию.
Заполняет параметры значениями по умолчанию перед выполнением шага.
Пример:
// Статические параметры по умолчанию
defaultParams: {
timeout: 5000,
retries: 3,
format: 'json'
}
// Динамические парам етры по умолчанию
defaultParams: (ctx) => {
return {
userId: ctx.model.uid,
timestamp: Date.now()
}
}
// Асинхронные параметры по умолчанию
defaultParams: async (ctx) => {
const config = await loadConfig();
return {
apiUrl: config.apiUrl,
apiKey: config.apiKey
}
}
uiSchema
Тип: Record<string, ISchema> | ((ctx: FlowRuntimeContext<TModel>) => Record<string, ISchema> | Promise<Record<string, ISchema>>)
Обязательно: Нет
Описание: Схема конфигурации пользовательского интерфейса для шага.
Определяет, как шаг отображается в интерфейсе, и его конфигурацию формы.
Пример:
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'
}
}
}