使用CSOM在Sharepoint中以编程方式更新任务项

时间:2014-09-09 11:54:51

标签: task sharepoint-workflow

我想在CSOM中以编程方式更新任务项。项目正在更新,但工作流程未触发。我只需要在sharepoint中打开项目并保存即可。然后工作流程就会触发。

                    List requestTasksList = MyWeb.Lists.GetByTitle("TestRequest Tasks");

                    List<TestRequestModel> testRequestList = new List<TestRequestModel>();

                    ListItemCollection ColListItems = requestTasksList.GetItems(Spqur);

                    ctx.Load(ColListItems);
                    ctx.ExecuteQuery();

                    foreach (ListItem task in ColListItems)
                    {
                        task["Status"] = "Completed";
                        task["TaskOutcome"] = "Approved";
                        task["PercentComplete"] = 1.0;
                        task["Checkmark"] = 1;
                        task.Update();
                        requestTasksList.Update();
                    }
                    ctx.ExecuteQuery();

This is the updated task item

正如我所说,当我点击保存按钮时,工作流程正在触发,新任务正在创建。

2 个答案:

答案 0 :(得分:0)

我不确定它的错字是否应该

List requestTasksList = MyWeb.Lists.GetByTitle("TestRequest Tasks");

List<TestRequestModel> testRequestList = new List<TestRequestModel>();

ListItemCollection ColListItems = requestTasksList.GetItems(Spqur);

foreach (ListItem task in ColListItems)
{
  task["Status"] = "Completed";
  task["TaskOutcome"] = "Approved";
  task["PercentComplete"] = 1.0;
  task["Checkmark"] = 1;
  task.Update();
}
ctx.ExecuteQuery();

答案 1 :(得分:0)

我们需要做同样的事情,并且发现SharePoint 2013中的工作流任务列表中没有事件处理程序。我知道列表上有一个SPWorkflowAutostartEventReceiver,工作流会在添加或更新时自动启动,所以我假设同样的方法也可以用于工作流任务,但事实并非如此。由于工作流任务列表中没有事件处理程序,我猜测所有工作流触发器都是从任务列表上的服务器端UI代码启动的(可怕的设计)。

对于我们来说,我们需要完全在客户端工作,没有农场解决方案或沙盒代码。因此,我们唯一的解决方案是屏幕抓取URL,然后打开页面或对话框,供用户执行取消批准工作流程的所有任务等操作。当然,这种方法仍然需要用户输入。我想你可以屏幕抓取整个页面并播放在任务页面上按下按钮的动作,或者如果你需要避免用户输入则取消任务页面。不过,那将是一种痛苦。

相关问题