我使用的是SharePoint 2013,VS2013和Workflow Engine 4.5。 我有一个自定义的应用程序页面,我用它来完成工作流程的下一步。 此页面上的按钮之一是取消按钮。 当我的用户点击这个时,我使用ajax来调用我的MVC Web应用程序。 我的MVC5.0应用程序我首先更新我的Entity Framework数据库记录,然后尝试取消工作流程。
以下是我的MVC代码。 为什么我在此行clientContext.Load(instances)中收到ExecutionEngineException错误; 注意:如果获取以下代码并将其复制到控制台应用程序,则可以正常工作!
//cancel the workflow
ClientContext clientContext = new ClientContext(baseUrl);
WorkflowServicesManager wfsm = new WorkflowServicesManager(clientContext, clientContext.Web);
WorkflowInstanceService instanceService = wfsm.GetWorkflowInstanceService();
WorkflowInstanceCollection instances = instanceService.EnumerateInstancesForListItem(listId, itemId);
**clientContext.Load(instances);**
clientContext.ExecuteQuery();
foreach (WorkflowInstance instance in instances)
{
if (instance.Id == new Guid(instanceId))
{
instanceService.CancelWorkflow(instance);
}
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
马立克:
我已经与微软(MS)开了个案。他们给出的初步回答是他们了解SharePoint和MVC5的安全性和其他问题。我尝试使用SharePoint WCF服务项目广告获得了相同的结果。我会让你知道我在MS回应时发现了什么。至于Fiddler,我试过了,但它并没有告诉我太多,或者我没有正确地解释结果。我真的以为我提供了明确的凭据(与可行的控制台应用程序相同)但是同样的错误。
答案 1 :(得分:0)
我发现需要用以下代码替换CSOM代码(上面)。 注意:我还必须使用提升的权限运行以下代码。
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(baseUrl))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Documents"];
Microsoft.SharePoint.WorkflowServices.WorkflowServicesManager wsm = new Microsoft.SharePoint.WorkflowServices.WorkflowServicesManager(web);
Microsoft.SharePoint.WorkflowServices.WorkflowInstanceService service = wsm.GetWorkflowInstanceService();
var instances = service.EnumerateInstancesForListItem(gPageList, pageID);
foreach (var instance in instances)
{
service.CancelWorkflow(instance);
}
}
}
});