フローエンジン、ワークフローエンジン
前書き
第1版:博主は2008年の仕事で、元同僚がマイクロソフトWWFに基づいて開発したワークフローエンジンを引き継ぎ、十数の国有企業、事業部門oaシステム、ERPシステムなどを開発した
第2版:博主は2012年にccflowワークフローエンジンの二次開発、バグ修正に参加し、ccflowフォーラムのスーパー版主だったが、当時はマイクロソフトのセルバーライト技術を使っていた (残念ながら淘汰された)。Ccflowの上司の周総も私たちの先輩で、現在、オープンソースのccflowワークフローエンジンはまだメンテナンス中で、注目を強く推奨しています
第3版:博主は2014年にマイクロソフトの最新「wwf」を使って自主的に「第三版ワークフローエンジン」を開発し、AvalonJs UEditorと協力して「低コードプラットフォーム」を開発し、数十社の国有企業、事業部門、計量部門を応用した
第四版: ブロガーは2018年にMicroi吾コード「フォームエンジン」を使って「ワークフローエンジン」を駆動し、採用した. NET core Vue完全自研「第4世代ワークフローエンジン」 (マイクロソフトWWFは.net coreをサポートしていないため、自研)
私のコードの第4世代のワークフローエンジンの優位性
- [プロセスのプロパティ] 、 [ノードのプロパティ] は、 [フォームエンジン] によって駆動され、柔軟性が向上します
- フロントエンドv 8イベント、バックエンドv 8イベントが豊富で、v 8関数を呼び出して送信するなど、複雑な業務ニーズを満たしています。
邮件、短信、微信呼び出しなどの通知FormEngine、ApiEngine複雑なビジネスロジックを実現- [プロセスエンジン] とビジネスフォーム
完全解耦サードパーティのフォームを統合し、二次開発を容易にします。フォームがなくても、 [プロセスエンジン] はFromDataJSONデータが流れます- プロセスデザイナーは完全にオープンソースです
- 現在、数百社のお客様にプロセス業務管理を適用しています
プレビュー図

プロセスエンジン関連の物理テーブルの説明
- Wf_flow design:フローチャート設計表は、フローチャートがデータに対応しています
- WF_Node:プロセスノード属性テーブル
- WF_Line:フロー条件 (ライン) 属性テーブル
- WF_Flow:プロセス・インスタンス・テーブル。プロセスを開始すると、インスタンス・データが生成され、インスタンス・データはWF_WorkテーブルのN件の作業データに対応します
- WF_Work:プロセスワークのto-do表は、プロセスインスタンスを開始すると、3つのto-doが生成され、3つのWF_Workデータが書き込まれます
- WF_History:プロセス軌跡表は、プロセスの各ステップ、一人一人のすべての操作、例えば同意、拒否、撤回などを詳細に記録する
V 8イベント
V 8イベント順序
1.ユーザーが開始プロセスまたは処理をクリックします 2.フォームがv 8イベント (フロントエンド) に入る 3.ユーザーが【送信】ボタンをクリック 4. ノーロードスタートv 8イベント (フロント・エンド) 5.フォーム送信前のv 8イベント (フロントエンド) 6.フォーム送信前のv 8イベント (バックエンド) 7.フォーム送信後のv 8イベント (バックエンド) 8.フォーム送信後のv 8イベント (フロントエンド) 9.バックエンド処理作業インターフェースの呼出 10. 条件判断v 8 (バクエンド) 10. ノードスタートv 8イジェント (バックエンド) 11. ノーロード终了v 8イジェント (バックエンド) 12. ノーロード终了v 8イベント (フロント・エンド)
すべてのイベントにアクセスできる組み込み関数
- V8.WF.ApprovalType:ユーザーがクリックした承認タイプ、文字列。可能な値: 'Agree'(同意)、 'Disagree' (拒否) 、 'Recall'(撤回)、 'Auto' (開始プロセス (開始ノード)/ビジネスノード/自動終了ノード)
- V8.WF.ApprovalIdea:ユーザーが記入した承認意見、文字列
- V8.WF.AddUsers:ユーザーが追加した承認者、配列
- V8.WF.Select users:ユーザーが選択した承認者、配列
- V8.WF.Current flow design:現在のプロセス設計図エンティティ、objectタイプ
- V8.WF.Current node:現在のノードエンティティ、object型
- V8.WF.Backnode id:ユーザーが拒否をクリックし、どのノードに戻るかを選択した場合、これがそのノードIdです
ノード開始v 8イベント (フロントエンド)
- すべてのフロントエンドのv 8関数を使用できます。
if(V8.Form.Money > 1000){
V8.Tips('金额不能大于1000!', false);//前端提示
V8.Result= false;//阻止表单和流程提交
return;
}
//金额加1
V8.Form.Money = V8.Form.Money + 1;
//强制指定下一节点审批人
V8.WF.ForceSelectUsers=['userid'];
//这里可以还执行大部分V8内置函数,如同步接口请求等ノード開始v 8イベント (バックエンド)
- すべてのバックエンドのv 8関数を使用できます。
- V8.Result = { Code : 0, Msg: 'プロセスの送信をブロックする' }; ロールバックトランザクションを行い、プロセスの送信をブロックする
条件判断v 8イベント (バックエンド)
- すべてのバックエンドのv 8関数を使用できます。
//这里赋值的V8.LineValue,就是[条件属性]设置的[条件值]
if(V8.Form.Money <= 100){
V8.LineValue = 1;
}else{
V8.LineValue = 2;
}ノード終了v 8イベント (フロントエンド)
- すべてのフロントエンドのv 8関数を使用できます。
- V8.WF.WorkResult:プロセスの実行が成功した後に返されるデータ (どのノード、どの承認者に送信されたかなど)
ノード終了v 8イベント (バックエンド)
- すべてのバックエンドのv 8関数を使用できます。
- V8.WF.Next node:次のノードエンティティへのアクセス
- V8.WF.Next todousers:受信者にアクセスします。フォーマット:[{Id:'',Name:''}]
機能の紹介
私のto-do
- WF_Workテーブルを取得して、私が処理する仕事を待っています。
私が始めたのは
- WF_Flowテーブルで開始したプロセスの例を取得します。
私が処理した
- WF_Workテーブルを取得して、私が処理した仕事。
- なぜ私が処理した仕事をWF_Flowテーブルから取得しないのかは、各ノードのフィールド権限制御を実現するためと同時に、撤回機能を実現するためである。
私のcc
- WF_History表を取得し、私の仕事をccに入れた。
- WF_Flowテーブルからccを取得しないのは、各ノードのフィールド権限制御を実現するためです。
私が関係しているのは
- WF_Workテーブルを取得して、私が受け取ったto-doの仕事は、私が処理した仕事ではありません。
すべてのインスタンス
- 管理者権限、WF_Flowテーブルで全員が開始したすべてのプロセスインスタンス (非作業) を取得します
撤回
- AノードがBノードに提出された後、Bノードが承認されるまで、Aノードの提出者はいつでも自分の手に撤回し、フォームデータを再編集して再提出することができる。
- Bノードが承認された後、Aノードはそれ以上撤回できないが、BノードはCノードが承認される前に自分のBノードに撤回できる。
- Aノードは実際に撤回したいが、Cノードを探して拒否し、Aノードに戻るしかない。
- 注意:撤回時には、実行ノードもv 8を開始し、v 8を終了します。
- 将来的にはフローのプロパティに提出者がいつでも任意に撤回できるように追加することも可能です
関連v 8
//在前端V8中执行,将某条数据打开Form表单并可以发起流程,第三个object参数若不传,即为查看流程
V8.OpenFormWF(V8.Form, 'Edit', {
//StartWork:发起流程,ViewWork:查看流程。当为ViewWork时,可以不传FlowDesignId
WorkType:'StartWork',
FlowDesignId:'',//流程图Id
});