转自http://www.cnblogs.com/flashelf/articles/522348.html

业务描述
就是一个简单的报销单流转审批的业务
业务讲解
角色/功能
  1. 报销者

      申请、填写、修改、报销单

  2. 财务

      默认1000元以下金额由财务进行审核, 功能:打回(让报销者重新填写)、中止(工作流)、同意(流转到出纳)、加签(遇到特殊情况可以让老板加签就是让老板在审核一下)

  3. 老板

      默认 1000 元以上有老板审核,功能和财务基本一样(没加签)

  4. 出纳

      如果一个报销单,财务或老板审批完成有财务给钱,功能:没钱(等待,自己流转到自己),有钱(流转到取钱确认)

说明
除了“报销者” 都可以填写审核意见
工作流设计
明显是一个很标准的状态机的工作流
ExternalDataExchangeService 接口设计 (MyWorkflows.IBILLService.cs,MyWorkflows.IBILLService)
  由需求中可知分析出 7 种事件


具体分析
  1. 小金额

      由财务和老板的功能分析得出 (财务 默认1000元以下金额由财务进行审核,老板 默认 1000 元以上有老板审核)

  2. 大金额

      同上

  3. 打回重新修改

      财务老板都有 "打回"

  4. 向下流转

      这个不用说了,状态机工作流必然有的向下流转的

  5. 结束工作流

      财务和老板都有 "中止"

  6. 等待

      出纳分析得出(没钱的时候)

  7. 加签

      由财务业务分析得出(遇到特殊情况可以让老板加签)

代码 IBILLService 工作流设计时使用

[ExternalDataExchange]
    
public   interface  IBILLService
    {
        
///   <summary>
        
///  小金额
        
///   </summary>
         event  EventHandler < ExternalDataEventArgs >  BillInitMoneyMin;
        
///   <summary>
        
///  大金额
        
///   </summary>
         event  EventHandler < ExternalDataEventArgs >  BillInitMoneyMax;
        
///   <summary>
        
///  打回重新修改
        
///   </summary>
         event  EventHandler < ExternalDataEventArgs >  BillUpdated;
        
///   <summary>
        
///  向下流转
        
///   </summary>
         event  EventHandler < ExternalDataEventArgs >  BillNext;
        
///   <summary>
        
///  结束工作流
        
///   </summary>
         event  EventHandler < ExternalDataEventArgs >  BillCanceled;
        
///   <summary>
        
///  等待
        
///   </summary>
         event  EventHandler < ExternalDataEventArgs >  BillWait;
        
///   <summary>
        
///  加签
        
///   </summary>
         event  EventHandler < ExternalDataEventArgs >  BillInsert;        
    }


代码 IBILLService 的实现 BillServer
(也在 IBILLService)

 

///   <summary>
    
///  IBILLService 实现,本类在 web项目  <ExternalDataExchangeService/>  节配置加载
    
///   </summary>
    [Serializable]
    
public   class  BillServer : IBILLService
    {
        
public  BillServer()
        {
        
            System.Diagnostics.Debug.WriteLine(
" Create OrderService " );
       
        }
        
///   <summary>
        
///  事件检索字典(不一定非要这么设计,不过个人感觉这么方便触发事件比较简单而且容易被配置化)
        
///  不过这么做事件子可以被映射一次如果需要映射多次自己改
        
///   </summary>
        Dictionary < string , EventHandler < ExternalDataEventArgs >>  _EventList  =   new  Dictionary < string , EventHandler < ExternalDataEventArgs >> ();

        
///   <summary>
        
///  事件触发函数
        
///   </summary>
        
///   <param name="name"></param>
        
///   <param name="instanceId"></param>
         public   void  RaiseEvent( string  name, Guid instanceId)
        {
            
if  (_EventList[name]  !=   null )
            {
                EventHandler
< ExternalDataEventArgs >  eventHand  =  _EventList[name];
                ExternalDataEventArgs ede 
=   new  ExternalDataEventArgs(instanceId);
                
// ede.WorkItem = parms;
                
                eventHand(
this , ede);
            }
        }
        
        
        
#region  IBILLService 成员

        
public   event  EventHandler < ExternalDataEventArgs >  BillInitMoneyMin
        {
            add
            {
                _EventList.Add(
" BillInitMoneyMin " , value);
            }
            remove
            {
                _EventList.Remove(
" BillInitMoneyMin " );
            }
        }

        
public   event  EventHandler < ExternalDataEventArgs >  BillInitMoneyMax
        {
            add
            {
                _EventList.Add(
" BillInitMoneyMax " , value);
            }
            remove
            {
                _EventList.Remove(
" BillInitMoneyMax " );
            }
        }


        
public   event  EventHandler < ExternalDataEventArgs >  BillUpdated
        {
            add
            {
                _EventList.Add(
" BillUpdated " ,value);
                
            }
            remove
            {
                _EventList.Remove(
" BillUpdated " );
            }
        }


        
public   event  EventHandler < ExternalDataEventArgs >  BillNext
        {
            add
            {
                _EventList.Add(
" BillNext " , value);
            }
            remove
            {
                _EventList.Remove(
" BillNext " );
            }
        }

        
public   event  EventHandler < ExternalDataEventArgs >  BillCanceled
        {
            add
            {
                _EventList.Add(
" BillCanceled " , value);
            }
            remove
            {
                _EventList.Remove(
" BillCanceled " );
            }
        }

        
public   event  EventHandler < ExternalDataEventArgs >  BillWait
        {
            add
            {
                _EventList.Add(
" BillWait " , value);
            }
            remove
            {
                _EventList.Remove(
" BillWait " );
            }        
        }

        
public   event  EventHandler < ExternalDataEventArgs >  BillInsert
        {
            add
            {
                _EventList.Add(
" BillInsert " , value);
            }
            remove
            {
                _EventList.Remove(
" BillInsert " );
            }        
        }
        
#endregion
    }
正常业务不可能没其他数据的虚拟了一个数据实体类保存,报销金额啥的 BillModel (也在 IBILLService)

 

    [Serializable]
    
public   class  BillModel
    {
        
string  _userName;
        
///   <summary>
        
///  报销人
        
///   </summary>
         public   string  UserName
        {
            
get  {  return  _userName; }
            
set  { _userName  =  value; }
        }
        
string  _billId;
        
///   <summary>
        
///  报销编号,数据库里的
        
///   </summary>
         public   string  BillId
        {
            
get  {  return  _billId; }
            
set  { _billId  =  value; }
        }
        
        
decimal  _money;
        
///   <summary>
        
///  报销金额
        
///   </summary>
         public   decimal  Money
        {
            
get  {  return  _money; }
            
set  { _money  =  value; }
        }

        
private   string  fremark;
        
///   <summary>
        
///  财务批示
        
///   </summary>
         public   string  Fremark
        {
            
get  {  return  fremark; }
            
set  { fremark  =  value; }
        }
        
private   string  bremark;
        
///   <summary>
        
///  老板批示
        
///   </summary>
         public   string  Bremark
        {
            
get  {  return  bremark; }
            
set  { bremark  =  value; }
        }
        
private   string  premark;
        
///   <summary>
        
///  出纳批示
        
///   </summary>
         public   string  Premark
        {
            
get  {  return  premark; }
            
set  { premark  =  value; }
        }
        
private   string  lastRemark;
        
///   <summary>
        
///  最后批示
        
///   </summary>
         public   string  LastRemark
        {
            
get  {  return  lastRemark; }
            
set  { lastRemark  =  value; }
        }
        
    }


工作流设计 (MyWorkflows.BillWorkflow.cs)

 

上图中的所有 EventDrivenActivity 里面都子有一个 HandleExternalEventActivity(外部事件) 和一个 SetStateActivity(设置流转)
一下说明工作流和 IBILLService 的对应关系

stateInit/eveTo01 对应 BillInitMoneyMin
stateInit/eveTo01 对应 BillInitMoneyMax
statePayBox/eveWait 对应 BillWait
其他名称(name)是OK 的如 eveomOk,evePok 等对应 BillNext
是 Update 的对应 BillUpdated
是 BillCanceled 对应 BillCanceled
还有一个加签在以后代码中/动态加入,不再设计器中表现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值