zoukankan      html  css  js  c++  java
  • 谈谈SPWorkflowTask.AlterTask方法

    们知道,SharePoint工作流通过任务驱动,在真实场景中们可希望工作流的任务处理方式能够更加灵活,比如批量处理、通过Office Communicator等IM软处理任务等等,这时候我们就需以编程方式在部完成任务。

    按照正想法,SharePoint任务列表也个SPList,所以我这样尝试:

    SPSite site = new SPSite("http://windstyle");
    SPWeb web = site.OpenWeb();
    web.AllowUnsafeUpdates = true;
    SPList taskList = web.Lists["任务"];
    SPListItem task = taskList.Items[0];
    task["状态"] = "已完成";
    task["Completed"] = true;
    task.Update();
    web.AllowUnsafeUpdates = false;

    执行之,发现任务确实已经被设置已完成状态,但工作流却没有继续执行,也就是说,工作流OnTaskChanged活动并没有捕捉到任务被更改

    其实SharePoint对象模型提供了更改工作流任务属性方法,即SPWorkflowTask.AlterTask,此方法不仅能够更改工作流任务属性,还更改通知相应工作流,使得相应工作流能够继续执行。

    此方法法也简单:

    SPSite site = new SPSite(http://henry/);
    SPWeb web = site.OpenWeb();
    SPList doclib = web.Lists["合同管理"];
    SPListItem doc = doclib.Items[0];
    SPWorkflowTaskCollection tasks = doc.Workflows[doc.Workflows.Count-1].Tasks; //找具体SPWorkflowTask
    Hashtable ht = new Hashtable();
    ht.Add(SPBuiltInFieldId.Completed, true); //任务设置完成状态
    ht.Add(SPBuiltInFieldId.TaskStatus, "已完成");//任务任务列表显示状态设置“已完成”
    ht.Add(SPBuiltInFieldId.PercentComplete, 1); //任务任务列表完成百分比设置“100%”
    ht.Add(SPBuiltInFieldId.WorkflowOutcome, "Some output infomation"); //设置任务输出消息,等同于使Visual Studio设计工作流时,CompleteWorkflow活动TaskOutput属性
    SPWorkflowTask.AlterTask(tasks[0], ht, true);

     

    从上段代码可以看出,以编程方式来完成任务并不困难,其中比较麻烦的如何找到工作流任务。因SPListItem.Workflows可能包含不止个SPWorkflow,这些 SPWorkflow可能源于同个SPWorkflowTemplate,也能源于不同SPWorkflowTemplate。而且还可能包含源于同个SPWorkflowTemplate个SPWorkflow,当然,们知道,同个工作流模板个SPListItem上只能启动一个工作流实例,所以这些SPWorkflow中只有一个的IsCompleted属性为true。

    所以编写代码完成工作流任务时,注意获取到正工作流任务,然后就可以轻松完成任务了

  • 相关阅读:
    Web前端工程师技能列表
    CSS框架的相关汇总(CSS Frameworks)
    一个有趣的发现
    (转丁学)Firefox2的一个bug和脑子进了水的IE
    深入语义:列表Tag(ul/ol)和表格Tag(table)的抉择
    css命名简单框架
    腾讯的三栏布局考题
    土豆网前端概况
    伪绝对定位(译)
    右下角浮动广告代码DEMO
  • 原文地址:https://www.cnblogs.com/ericgisser/p/moss_alerttask.html
Copyright © 2011-2022 走看看