设为首页 收藏本站
查看: 871|回复: 0

[经验分享] SharePoint工作流解决方案QuickFlow系列(6)—事件总线(EventBus)

[复制链接]

尚未签到

发表于 2015-9-24 11:33:33 | 显示全部楼层 |阅读模式
  当你的客户深入应用SharePoint,创建了大量的站点,并且基于SharePoint开发了大量的工作流,这些工作流分布在不同的站点,那么客户经常会提出这样的需求:我在很多站点上都有工作流任务要处理,我每天都要在这些站点之间跑来跑去的去查看有没有要我审批的任务,有没有办法让我在统一的地方可以处理所有的任务?
  你就要想了:这么问题确实难搞的,SharePoint每个网站集上的工作流任务都是分开的,要把他们整到一起不是那么好实现。
  机灵一点的,就可以跟客户讲:SharePoint是by design的这种机制,任务是分散存储的,好在一般的任务都会有邮件提醒,收到邮件提醒就可以第一时间知道有需要自己处理的任务了,所以这个问题也不是一个很严重的问题。
  如果这个客户不是那么好说话,或者,你认为客户提的需求是合理的,那么就要考虑下实现的方案了:
  1)写个页面,将所有站点上当前用户的任务都查出来集中显示。
  缺点:说过站点很多了,这个性能。。。。低啊
  2)写个EventReceiver,利用Feature附加所有的任务列表上,在EventReceiver的ItemAdded和ItemUpdated以及ItemDeleted事件中,将任务同步到数据库,然后进行数据库查询,展示当前用户的任务。
  缺点?好像实现稍微复杂一些,哈哈
  如果你用了QuickFlow开发工作流,这个问题可以怎么解决呢?
  QuickFlow支持EventBus-事件总线机制,即工作流中产生的所有事件,如流程创建、流程完成、任务创建、任务完成都可以通过统一的机制捕获,这些东西你都能捕获了,实现任务集中展示不是很容易吗?
  EventBus机制的使用很简单,只要实现QuickFlow.EventBus.IWorkflowEventReceiver接口即可,如下:
  /// <summary>
     /// 工作流事件处理器
     /// </summary>
     class ExampleWorkflowEventReceiver: QuickFlow.EventBus.IWorkflowEventReceiver
     {
         #region IWorkflowEventReceiver Members
  public void OnError(QuickFlow.EventBus.WorkflowContextProperties p)
         {
             //throw new NotImplementedException();
         }
  public void OnTaskCancel(QuickFlow.EventBus.WorkflowContextProperties p)
         {
             //throw new NotImplementedException();
         }
  public void OnTaskCompleted(QuickFlow.EventBus.WorkflowContextProperties p)
         {
             //throw new NotImplementedException();
         }
  public void OnTaskCreated(QuickFlow.EventBus.WorkflowContextProperties p)
         {
             //throw new NotImplementedException();
         }
  public void OnWorkflowCancel(QuickFlow.EventBus.WorkflowContextProperties p)
         {
             //throw new NotImplementedException();
         }
  public void OnWorkflowCompleted(QuickFlow.EventBus.WorkflowContextProperties p)
         {
             //throw new NotImplementedException();
         }
  public void OnWorkflowCreated(QuickFlow.EventBus.WorkflowContextProperties p)
         {
            // throw new NotImplementedException();
         }
  #endregion
     }
  然后重载工作流基类的AppendEventReceivers方法,添加事件处理器:
  public sealed partial class MultiTaskInOneStep: FlowchartWorkflow
     {
         public MultiTaskInOneStep()
         {
             InitializeComponent();
         }
  protected override void AppendEventReceivers(QuickFlow.EventBus.WorkflowEventReceiverCollection receivers)
         {
             //base.AppendEventReceivers(receivers);
             receivers.Add(new ExampleWorkflowEventReceiver());
         }
  }
  
  有个朋友提出一个问题:
  QuickFlow会在c盘创建一个QuickFlow.log.txt文件,如何去掉这个文件呢?
  QuickFlow.log.txt是一个日志文件,里面记录了工作流的一些事件,这个日志文件的记录就是通过
  EventBus机制实现的。在FlowchartWorkflow类中附加了一个默认的日志记录事件处理器:QuickFlow.EventBus.TracingEventReceiver,如果要禁止这个日志文件的创建,只需要将这个事件处理器去掉即可:
  protected override void AppendEventReceivers(QuickFlow.EventBus.WorkflowEventReceiverCollection receivers)
{
            //base.AppendEventReceivers(receivers); //去掉基类自动附加的日志记录类
}
  后记:最新版本提供了另外外一种方式扩展EventBus,事件处理器可以通过配置文件的方式配置:
  修改C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\QuickFlow目录下的
  global.config文件即可:
  <?xml version="1.0" encoding="utf-8"?>
  <GlobalConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <EventReceivers>
  <Receiver Enabled="false" Name="Exception" Type="QuickFlow.EventBus.ExceptionEventReceiver,QuickFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ec1e0fe6e1745628" />
  <Receiver Enabled="true" Name="Tracing" Type="QuickFlow.EventBus.TracingEventReceiver,QuickFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ec1e0fe6e1745628" />
  </EventReceivers>
  </GlobalConfiguration>
  因此,不建议通过重载AppendEventReceivers的方式修改事件处理器。
  在实现事件处理器的时候,一般不需要处理所有事件,建议直接继承QuickFlow.EventBus.WorkflowEventReceiver,然后重载需要的方法即可。
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118161-1-1.html 上篇帖子: SharePoint 2010中托管元数据 下篇帖子: SharePoint 2013 术语和术语集介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表