ExecutionEngineException用于取消我的SharePoint 2013工作流

时间:2014-05-07 18:37:43

标签: sharepoint executionengineexception

我使用的是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);
                }
            }

任何帮助都将不胜感激。

2 个答案:

答案 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);
         }
      }
   }                   
 });