zoukankan      html  css  js  c++  java
  • 解决自定义代码启动Approver Sharepoint 2010 Workflow,出现Failed on Start

    将一个webservice项目add到 sharepoint webapplication中,通过外部程序调用这个webservice进行简要的sharepoint常规操作。

    在Site collection future中启用workflow. 使用sharepoint 自带的两个workflow.

    1.feedback workflow

    2. Approver - Sharepoint 2010 workflow

    代码片段: 

    var replaceSpace = new Regex(@"\s{1,}", RegexOptions.IgnoreCase);

                       
                        var list = common.GetList(rootweb, listName);//rootweb.Lists.TryGetList(listName);
                        if (null == list)
                        {
                            workflowResultEnum =  WorkflowResultEnum.HaveNotWorkflow;
                            return;
                        }

                        var currentUserName = replaceSpace.Replace(userprofile.DisplayName, ".");
                        currentUserName = currentUserName + "_Approver-Sharepoint2010";

                        var currentUserWorkflowAssociation = list.WorkflowAssociations.GetAssociationByName(currentUserName,
                                                                                                            System.Globalization
                                                                                                                .CultureInfo.
                                                                                                                CurrentCulture);
                        if (null == currentUserWorkflowAssociation)
                        {
                            var rootWebWorkflowTemplateCollection = rootweb.WorkflowTemplates;
                            var approverTemplate = rootWebWorkflowTemplateCollection.GetTemplateByName(approverWorkflowName,
                                                                                System.Globalization.CultureInfo.CurrentCulture);
                            if (null == approverTemplate)
                            {
                                workflowResultEnum = WorkflowResultEnum.HaveNotWorkflow;
                                return;
                               
                            }
                            currentUserWorkflowAssociation = SPWorkflowAssociation.CreateListAssociation(approverTemplate,
                                                                                                         currentUserName,
                                                                                                         tasksList,
                                                                                                         workflowHistory);
                            list.WorkflowAssociations.Add(currentUserWorkflowAssociation);
                            currentUserWorkflowAssociation.Enabled = true;
                            list.Update();
                        }
                        var buildApproverWorkflowXml = new BuildApproverWorkflowXml(currentUserWorkflowAssociation.AssociationData);
                        var personaSharepoints = new List<PersonaSharepoint>();
                        foreach (var spUserId in selectUsers)
                        {
                            var spUser = rootSiteUsers.GetByID(spUserId);
                            if (null == spUser) continue;
                            var personaSharepoint = new PersonaSharepoint
                            {
                                DisplayName = spUser.Name,
                                AccountId = spUser.LoginName,
                                AccountType = "User"
                            };
                            personaSharepoints.Add(personaSharepoint);
                        }
                        currentUserWorkflowAssociation.AssociationData = buildApproverWorkflowXml.Build(personaSharepoints, requestText, customerDateTime);
                        

                        var item = list.GetItemByUniqueId(itemUniqueId);
                        if (null == item)
                        {
                            workflowResultEnum = WorkflowResultEnum.HaveNotWorkflow;
                            return;
                        }

                        item.Web.Site.WorkflowManager.StartWorkflow(item, currentUserWorkflowAssociation,
                                                             currentUserWorkflowAssociation.AssociationData,true);

                        rootweb.AllowUnsafeUpdates = false;


     其中SP代码做的操作是获取workflowAssociation,未找到便根据相应模版创建workflowAssociation.以及创建和检查task List和workflowhistory List;

    该workflow的associationdata的XML格式为:

     View Code 

     
    <dfs:myFields xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dms="http://schemas.microsoft.com/office/2009/documentManagement/types" xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution" xmlns:q="http://schemas.microsoft.com/office/infopath/2009/WSSList/queryFields" xmlns:d="http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields" xmlns:ma="http://schemas.microsoft.com/office/2009/metadata/properties/metaAttributes" xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <dfs:queryFields></dfs:queryFields>
      <dfs:dataFields>
        <d:SharePointListItem_RW>
          <d:Approvers>
            <d:Assignment>
              <d:Assignee />
              <d:Stage xsi:nil="true" />
              <d:AssignmentType>Serial</d:AssignmentType>
            </d:Assignment>
          </d:Approvers>
          <d:ExpandGroups>true</d:ExpandGroups>
          <d:NotificationMessage />
          <d:DueDateforAllTasks xsi:nil="true" />
          <d:DurationforSerialTasks xsi:nil="true" />
          <d:DurationUnits>Day</d:DurationUnits>
          <d:CC />
          <d:CancelonRejection>false</d:CancelonRejection>
          <d:CancelonChange>false</d:CancelonChange>
          <d:EnableContentApproval>false</d:EnableContentApproval>
        </d:SharePointListItem_RW>
      </dfs:dataFields>

    将该workflow绑定在一个listitem中,并启动。启动方式为自动启动,当调用webservice后未发现异常信息,但是在sharepoint界面发现启动失败。

     

    查看LOGS日志后发现该日志信息:


    06/07/2012 15:37:27.62 w3wp.exe (0x23CC)                       0x2860 SharePoint Foundation         Workflow Infrastructure       72fs Unexpected RunWorkflow: Microsoft.SharePoint.SPException: <Error><CompilerError Line="0" Column="0" Text="Application configuration file is either missing or does not contain authorizedTypes related configuration information." /></Error>     at Microsoft.SharePoint.Workflow.SPNoCodeXomlCompiler.LoadXomlAssembly(SPWorkflowAssociation association, SPWeb web)     at Microsoft.SharePoint.Workflow.SPWinOeHostServices.LoadDeclarativeAssembly(SPWorkflowAssociation association)     at Microsoft.SharePoint.Workflow.SPWinOeHostServices.CreateInstance(SPWorkflow workflow)     at Microsoft.SharePoint.Workflow.SPWinOeEngine.RunWorkflow(SPWorkflowHostService host, SPWorkflow workflow, Collection`1 events, TimeSpan timeOut)     at Microsoft.SharePoint.Workflow.SPWorkflowManager.RunWorkflowElev(SPWorkflow workflow, ...  
    06/07/2012 15:37:27.62* w3wp.exe (0x23CC)                       0x2860 SharePoint Foundation         Workflow Infrastructure       72fs Unexpected ...Collection`1 events, SPWorkflowRunOptionsInternal runOptions)

     搜索之后发现在微软网站有如下解释:

    http://office.microsoft.com/en-us/sharepoint-designer-help/troubleshoot-workflow-errors-HA010237912.aspx#BM39 

    大致意思是有问题的话是System account替你Cancelled的。接下来,无论我提高任何权限都无法调用自己的webservice启动workflow.

    后来在这个帖子下发现有回复说需要在config文件中增加sectiongroup节点;

    http://social.msdn.microsoft.com/Forums/zh-CN/biztalkr2adapters/thread/c017ed05-6acc-4c22-bcd1-f196698f91e4 

  • 相关阅读:
    Java实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/Skypurple/p/2541053.html
Copyright © 2011-2022 走看看