0

(MOSS 2007 32 位 SP2)

我有一个在 Visual Studio 中开发的工作流,它被部署为一项功能并与我的列表相关联。该列表中的项目是以编程方式创建的,该过程的最后一步是查看列表中的 SPWorkflowAssociation 集合并启动与特定名称匹配的 WF:

// code to create the list item & get the new item's index (itemIndex)...

foreach (Microsoft.SharePoint.Workflow.SPWorkflowAssociation flowAssoc in SPContext.Current.Web.Lists["{listname}"].WorkflowAssociations) {
    if (flowAssoc.Enabled && flowAssoc.AllowManual && (flowAssoc.Name.Trim() == workflowNameToLookFor.Trim())) 
        SPContext.Current.Site.WorkflowManager.StartWorkflow(SPContext.Current.Web.Lists["{listname}"].Items[itemIndex], flowAssoc, flowAssoc.AssociationData, true);
}

(请原谅丑陋的完全限定名称和 SPListItem 的不断重新获取,除非您认为这实际上应该归咎于某种原因)

这已经在生产中使用了几个月,其中启动的工作流是 SharePoint Designer 工作流。现在我已经部署了我的自定义 WF(名称不同),我得到了一些“奇怪的行为”:

如果我(不是系统帐户,而是网站集管理员)运行代码来创建项目并启动工作流,那么一切都会 100% 运行。但是,如果任何其他用户(即使是对网站和所有相关列表具有完全控制权的人)也这样做,他们会从 SharePoint 获得一个通用的“错误,发生意外错误”页面,但该项目是正确创建的,没有 WF 错误与之关联(该项目的 WF 历史记录完全空白),然后他们可以毫无问题地手动启动指定的工作流。

发生这种情况时,ULS 中生成的唯一错误是:

引擎 RunWorkflow:System.NullReferenceException:对象引用未设置为对象的实例。在 Microsoft.SharePoint.Workflow.SPWorkflowHostServiceBase.LoadInstanceData(Guid instanceId, Boolean&compressedData) 在 Microsoft.SharePoint.Workflow.SPWinOePersistenceService.LoadWorkflowInstanceState(Guid instanceId) 在 System.Workflow.Runtime.WorkflowRuntime.InitializeExecutor(Guid instanceId, CreationContext context, WorkflowExecutor 执行器, WorkflowInstance workflowInstance) 在 System.Workflow.Runtime.WorkflowRuntime.Load(Guid key, CreationContext context, WorkflowInstance workflowInstance) 在 System.Workflow.Runtime.WorkflowRuntime.GetWorkflow(Guid instanceId) 在 Microsoft.SharePoint.Workflow.SPWinOeHostServices.Send(SPWinOeWorkflow winoeworkflow、SPWorkflowEvent e) 在 Microsoft.SharePoint.Workflow。

如果我将要查找的工作流的名称更改为不存在的名称,则根本没有错误(因为我在 FOREACH 中的 IF 语句从未找到匹配项),因此它肯定会找到我的工作流并尝试启动它。

但是(再次),如果我查看生成错误的项目上的工作流状态/历史记录页面,则没有错误或 WF 记录试图从那里开始,并且用户可以从该页面手动启动工作流而无需一个问题。

正在为 WF 使用 InfoPath 关联表单,但如果这是其根源(例如,如果我需要将某些内容及其数据/架构传递给 WorkflowManager.StartWorkflow),我希望看到同样的错误网站集管理员用户。我没有使用任何形式的 WF 启动表格。

我要疯了,试图找到它的根源。希望有人以前见过这个 ULS 错误或这种行为......

4

1 回答 1

0

还没有真正找到这个问题的原因,但我能够解决它......

在重置所有站点内容中的每个列表/库以从站点继承权限,并在站点级别为我的测试用户提供完全控制权后,我仍然收到来自测试用户的错误/失败。但是,如果我授予我的测试用户站点集合管理员权限(这是直接在 SC 下的子站点/网站,即http://mossServer/sites/SC/thisSite/),那么一切正常。

所以我设置这个站点从 SC 重新继承它的权限,然后打破继承并添加回我的“正常”组中这个站点(测试用户所在)具有贡献和批准权限,并摆脱了所有明显的来自 SC 的不适用条目。现在一切都适用于测试用户。

我仍然有一些无关的组可以访问我需要清理的站点,但我认为我的测试用户不在其中,所以我认为它们没有区别。我认为不知何故(我犯了一个错误,在部署我的新 WF 的同时进行了“一个小的权限清理”更改)我打破了一个“隐藏的”(不是在所有站点内容中可见的任何对象上)权限分配,这对于这个过程(尽管我仍然对它可能是什么感到困惑,因为用户能够看到 WF 并在他们创建的项目上手动启动它)。

如果我发现其他任何内容,我会发表评论,但似乎从网站集重新继承权限修复了任何损坏的问题。

于 2011-08-17T13:48:51.910 回答