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 PageActionDefinition
TIP

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

#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
必須: 否
説明: ステップの表示タイトルです。

UI表示やデバッグに使用されます。

例:

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>>)
必須: 否
説明: ステップのUI設定スキーマです。

インターフェースでのステップの表示方法とフォーム設定を定義します。

例:

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

タイプ: (ctx: FlowSettingsContext<TModel>, params: any, previousParams: any) => void | Promise<void>
必須: 否
説明: パラメーター保存前に実行されるフック関数です。

ステップパラメーターが保存される前に実行され、パラメーターの検証や変換に使用できます。

例:

beforeParamsSave: (ctx, params, previousParams) => {
  // パラメーター検証
  if (!params.name) {
    throw new Error('Name is required');
  }
  
  // パラメーター変換
  params.name = params.name.trim().toLowerCase();
}

#afterParamsSave

タイプ: (ctx: FlowSettingsContext<TModel>, params: any, previousParams: any) => void | Promise<void>
必須: 否
説明: パラメーター保存後に実行されるフック関数です。

ステップパラメーターが保存された後に実行され、他の操作をトリガーするために使用できます。

例:

afterParamsSave: (ctx, params, previousParams) => {
  // ログを記録
  console.log('Step params saved:', params);
  
  // 他の操作をトリガー
  ctx.model.emitter.emit('paramsChanged', params);
}

#uiMode

タイプ: StepUIMode | ((ctx: FlowRuntimeContext<TModel>) => StepUIMode | Promise<StepUIMode>)
必須: 否
説明: ステップのUI表示モードです。

インターフェースでのステップの表示方法を制御します。

サポートされているモード:

  • 'dialog' - ダイアログモード
  • 'drawer' - ドロワーモード
  • 'embed' - 埋め込みモード
  • またはカスタム設定オブジェクト

例:

// シンプルなモード
uiMode: 'dialog'

// カスタム設定
uiMode: {
  type: 'dialog',
  props: {
    width: 800,
    title: 'Step Configuration'
  }
}

// 動的なモード
uiMode: (ctx) => {
  return ctx.model.isMobile ? 'drawer' : 'dialog';
}

#preset

タイプ: boolean
必須: 否
説明: プリセットステップであるかどうかを示します。

preset: true のステップのパラメーターは、作成時に記入する必要があります。このフラグがないステップは、モデル作成後に記入できます。

例:

steps: {
  step1: {
    preset: true,  // 作成時にパラメーターを記入する必要があります
    use: 'requiredAction'
  },
  step2: {
    preset: false, // パラメーターは後で記入できます
    use: 'optionalAction'
  }
}

#paramsRequired

タイプ: boolean
必須: 否
説明: ステップパラメーターが必須であるかどうかを示します。

true の場合、モデルを追加する前に設定ダイアログが開きます。

例:

paramsRequired: true  // モデルを追加する前にパラメーターを設定する必要があります
paramsRequired: false // パラメーターは後で設定できます

#hideInSettings

タイプ: boolean
必須: 否
説明: 設定メニューでステップを非表示にするかどうかを示します。

例:

hideInSettings: true  // 設定で非表示
hideInSettings: false // 設定で表示(デフォルト)

#isAwait

タイプ: boolean
必須: 否
デフォルト値: true
説明: ハンドラー関数の完了を待つかどうかを示します。

例:

isAwait: true  // ハンドラー関数の完了を待ちます(デフォルト)
isAwait: false // 待たずに非同期で実行

#完全な例

class DataProcessingModel extends FlowModel {}

DataProcessingModel.registerFlow({
  key: 'dataProcessing',
  title: 'Data Processing',
  steps: {
    loadData: {
      use: 'loadDataAction',
      title: 'データの読み込み',
      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: 'データの処理',
      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: 'データの保存',
      sort: 2,
      hideInSettings: false,
      uiMode: {
        type: 'drawer',
        props: {
          width: 600,
          title: '保存設定'
        }
      }
    }
  }
});