フローエンジン、ワークフローエンジン
前書き
第1版:博主は2008年の仕事で、元同僚がマイクロソフトWWFに基づいて開発したワークフローエンジンを引き継ぎ、十数の国有企業、事業部門oaシステム、ERPシステムなどを開発した
第2版:博主は2012年にccflowワークフローエンジンの二次開発、バグ修正に参加し、ccflowフォーラムのスーパー版主だったが、当時はマイクロソフトのセルバーライト技術を使っていた (残念ながら淘汰された)。Ccflowの上司の周総も私たちの先輩で、現在、オープンソースのccflowワークフローエンジンはまだメンテナンス中で、注目を強く推奨しています
第3版:博主は2014年に会社の要求に応じてマイクロソフトの最新WWFを使って第3版のワークフローエンジンを自主的に開発し、AvalonJs UEditorと協力して低コードプラットフォームを開発し、数十社の国有企業、事業単位、計量単位を応用した。
第四版: ブロガーは2018年にMicroi吾コード表単エンジンを使ってワークフローエンジンを駆動し、採用した. NET core Vue完全自研第4世代ワークフローエンジン (マイクロソフトWWFは.net coreをサポートしていないため、自研)
私のコードの第4世代のワークフローエンジンの優位性
- プロセス属性、ノード属性はフォームエンジンによって駆動され、柔軟性が高い
- フロントエンドイベント、バックエンドイベントが豊富で、複雑な業務ニーズに対応
- 統合されたフロントとバックエンドのv2エンジンに合わせて、実現できない複雑なシーンはありません
- プロセスエンジンはビジネスフォームと結合し、サードパーティのフォーム、二次開発を統合できます
- プロセスデザイナーのソースコードはMicroi吾コード個人版で完全にオープンソース (オープンソース版/個人版/企業版の違い:https://microi.net/microi-price)
- 現在、すでに百社のお客様にプロセス業務管理を適用しています
プレビュー図
プロセスエンジン関連の物理テーブルの説明
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イベント順序
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: ユーザーがクリックした承認タイプ。可能な値: 'Auto' (開始プロセス (開始ノード)/ビジネスノード) 、 'Auto' (同意)、 'Disagree' (拒否) 、 'Recall'(撤回) V8.WF.ApprovalIdea: ユーザーが記入した承認意見 V8.WF.AddUsers: ユーザーが追加した承認者 V8.WF.Select users: ユーザーが選択した承認者 V8.WF.Current flow design: 現在のフロー設計図の実体 V8.WF.Current node: 現在のノードエンティティ V8.WF.Backnode Id: ユーザーが拒否をクリックし、どのノードに戻るかを選択した場合、これがそのノードIdです
ノード開始イベントv 8 (フロントエンド)
if(V8.Form.Money > 1000){
V8.Tips('金额不能大于1000!', false);//前端提示
V8.Result= false;//阻止表单和流程提交
}
//金额加1
V8.Form.Money = V8.Form.Money + 1;
//强制指定下一节点审批人
V8.WF.ForceSelectUsers=['userid'];
//这里可以还执行大部分V8内置函数,如同步接口请求等
ノード開始イベントv 8 (バックエンド)
V8.Result = { Code : 0, Msg: 'プロセスの送信をブロックする' }; ロールバックトランザクションを行い、プロセスの送信をブロックする
条件判断v 8 (バックエンド)
//在服务器端执行
//这里赋值LineValue就是条件属性设置的【条件值】
if(V8.Form.Money <= 100){
V8.LineValue = 1;
}else{
V8.LineValue = 2;
}
ノード終了イベントv 8 (フロントエンド)
V8.WF.WorkResult: プロセスの実行が成功した後に返されるデータ、例えば、どのノード、どの承認者に送信されたか
ノード終了イベントv 8 (バックエンド)
V8.WF.Next node: 次のノードエンティティへのアクセス V8.WF.Next todousers: アクセス受信者、フォーマット:[{Id:'',Name:''}]
撤回
- AノードがBノードに提出された後、Bノードが承認されるまで、Aノードの提出者はいつでも自分の手に撤回し、フォームデータを再編集して再提出することができる。
- Bノードが承認された後、Aノードはそれ以上撤回できないが、BノードはCノードが承認される前に自分のBノードに撤回できる。
- Aノードは実際に撤回したいが、Cノードを探して拒否し、Aノードに戻るしかない。
- 注意:撤回時には、実行ノードもv 8を開始し、v 8を終了します。
- 将来的にはフローのプロパティに提出者がいつでも任意に撤回できるように追加することも可能です
機能の紹介
私のto-do
WF_Workテーブルを取得して、私が処理する仕事を待っています。
私が始めたのは
WF_Flowテーブルで開始したプロセスの例を取得します。
私が処理した
WF_Workテーブルを取得して、私が処理した仕事。 なぜ私が処理した作业をWF_Flowテーブルから取得しないのかは、ノードごとのフィールド権限制御を実现するとともに、机能を撤回するためです。
私のcc
WF_History表を取得し、私の仕事をccに入れたことがある。 WF_Flowテーブルからccを取得しないのは、ノードごとのフィールド権限制御を実現するためです。
私が関係しているのは
WF_Work表を取得して、私が受け取ったto-doの仕事は、私が処理する仕事ではありません。
すべてのインスタンス
管理者権限、WF_Flowテーブルで全員が開始したすべてのプロセスインスタンス (非作業) を取得します
関連スクリーンショット
関連v 8
//将某条数据打开Form表单并可以发起流程,第三个object参数若不传,即为查看流程
V8.OpenFormWF(V8.Form, 'Edit', {
//StartWork:发起流程,ViewWork:查看流程。当为ViewWork时,可以不传FlowDesignId
WorkType:'StartWork',
FlowDesignId:'',//流程图Id
});