我想在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();
正如我所说,当我点击保存按钮时,工作流程正在触发,新任务正在创建。
答案 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,然后打开页面或对话框,供用户执行取消批准工作流程的所有任务等操作。当然,这种方法仍然需要用户输入。我想你可以屏幕抓取整个页面并播放在任务页面上按下按钮的动作,或者如果你需要避免用户输入则取消任务页面。不过,那将是一种痛苦。