自定义Workflow的代码实现

代码结构
这里写图片描述

详细代码

StateBase.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using wg.workflow.Interface;

namespace wg.workflow.Core
{
    public class StateDefintion
    {
        public const string Start = "Start";
        public const string End = "End";
    }

    public class StateBase : IState, IEquatable<IState>
    {
        public readonly string StateId;

        public IAction EnterAction { get; set; }

        public IAction ExitAction { get; set; }

        private Dictionary<string, ITransition> _transitionDic;

        public StateBase(string stateId)
        {
            StateId = stateId;
            _transitionDic = new Dictionary<string, ITransition>();
        }

        public string GetStateId()
        {
            return StateId;
        }

        private ITransition FindTransition(string transitionId)
        {
            return _transitionDic.ContainsKey(transitionId) ? _transitionDic[transitionId] : null;
        }

        public IState GoNext(string transitionId, object args)
        {
            var transition = FindTransition(transitionId);
            if (null == transition)
                return null;
            if (null != transition.Actions)
            {
                foreach (var action in transition.Actions)
                {
                    action.Execute(args);
                }
            }

            return transition.To;
        }

        public bool IsTransitionRegistered(string transitionId)
        {
            return FindTransition(transitionId) != null;
        }

        public IList<string> ListTransitions()
        {
            return _transitionDic.Keys.ToList();
        }

        public bool RegisterTransition(ITransition transition)
        {
            if (null == transition || _transitionDic.ContainsKey(transition.TransitionId))
                return false;
            _transitionDic.Add(transition.TransitionId, transition);
            return true;
        }

        public void Enter(object args)
        {
            EnterAction?.Execute(args);
        }

        public void Exit(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WF资料<br>├─Activity<br>│ │ 1_Activity 类.doc<br>│ │ 2_状态机与顺序工作流的继承结构.doc<br>│ │ 3_顺序工作流容器 SequentialWorkflowActivity .doc<br>│ │ EventDriven绑定容器 EventHandlingScopeActivity.doc<br>│ │ 事件容器 EventDrivenActivity.doc<br>│ │ 代码结点 CodeActivity.doc<br>│ │ 同步容器 SynchronizationScopeActivity.doc<br>│ │ 并行容器 ParallelActivity.doc<br>│ │ 延时结点 DelayActivity.doc<br>│ │ 抛出异常 ThrowActivity.doc<br>│ │ 暂停结点 SuspendActivity.doc<br>│ │ 监听容器 ListenActivity.doc<br>│ │ 终止结点 TerminateActivity.doc<br>│ │ 自定义Activity .doc<br>│ │ 调用子流程 InvokeWorkflowActivity.doc<br>│ │ 顺序容器 SequenceActivity.doc<br>│ │ <br>│ ├─DependencyProperty<br>│ │ DependencyProperty 使用.doc<br>│ │ <br>│ ├─WebService<br>│ │ InvokeWebServiceActivity.doc<br>│ │ WebService发布.doc<br>│ │ <br>│ ├─取消容器<br>│ │ 取消容器 CancellationHandlerActivity.doc<br>│ │ <br>│ ├─异常、事物、补偿容器<br>│ │ 事物容器 TransactionScopeActivity.doc<br>│ │ 事物补偿容器 CompensatableTransactionScopeActivity.doc<br>│ │ 异常捕获 FaultHandlersActivity、FaultHandlerActivity.doc<br>│ │ 异常捕获与补偿的应用.doc<br>│ │ 补偿 CompensatableSequence 、CompensationHandlerActivity 、CompensateActivity.doc<br>│ │ <br>│ ├─状态机工作流 StateMachineWorkflowActivity<br>│ │ StateActivity中多个EventDrivenActivity的使用说明.doc<br>│ │ 状态容器 StateActivity.doc<br>│ │ 状态机工作流容器 StateMachineWorkflowActivity.doc<br>│ │ 记录状态历史.doc<br>│ │ <br>│ ├─规则组件、容器<br>│ │ CAG容器 ConditionedActivityGroup.doc<br>│ │ Condition条件规则说明.doc<br>│ │ PolicyActivity与RuleSet.doc<br>│ │ 代码实现RuleSet.doc<br>│ │ 创建工作流时动态添加rules规则文件.doc<br>│ │ 复本容器 ReplicatorActivity.doc<br>│ │ 条件容器 IfElseActivity、 WhileActivity .doc<br>│ │ <br>│ └─通信服务 ExternalDataExchange<br>│ CorrelationToken关联CallExternalMethod与HandleExternalEvent.doc<br>│ ExternalDataExchange 服务.doc<br>│ 外部事件 HandleExternalEventActivity 控件.doc<br>│ 外部方法 CallExternalMethodActivity.doc<br>│ 对事件队列发送终止信息.doc<br>│ <br>├─引擎与实例<br>│ WorkflowRuntime 使用.doc<br>│ WorkflowRuntime与宿主,服务,工作流模板类,设计器,实例的关系图.doc<br>│ 从xoml加载工作流.doc<br>│ 保存工作流类到xoml字串.doc<br>│ 修改实例 WorkflowChanges.doc<br>│ 动态编译xoml文件.doc<br>│ 实例 WorkflowInstance.doc<br>│ 实例(状态机) StateMachineWorkflowInstance.doc<br>│ 引擎服务.doc<br>│ 编译成DLL的工作流的XOML文件.doc<br>│ 返射方式加载工作流.doc<br>│ <br>└─服务<br> ├─ManualWorkflowSchedulerService 服务<br> │ ManualWorkflowSchedulerService 手动调度服务.doc<br> │ <br> ├─PersistenceService 持久化服务<br> │ │ SqlWorkflowPersistenceService .doc<br> │ │ <br> │ └─SqlPersistenceService数据库脚本文件<br> │ SqlPersistenceService_Logic.sql<br> │ SqlPersistenceService_Schema.sql<br> │ 说明.txt<br> │ <br> ├─TrackingService 跟踪服务<br> │ │ SqlTrackingQuery 状态查询类.doc<br> │ │ SqlTrackingService 跟踪服务.doc<br> │ │ TrackData 添加用户跟踪.doc<br> │ │ TrackingProfile 跟踪服务筛选器.doc<br> │ │ TrackingService 、TrackingChannel 自定义跟踪服务.doc<br> │ │ <br> │ └─Tracking数据库脚本文件<br> │ Tracking_Logic.sql<br> │ Tracking_Schema.sql<br> │ 说明.txt<br> │ <br> └─TypeProvider 服务

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值