为什么我的SharePoint工作流在客户端运行Vista或Windows 7时失败?

时间:2010-01-11 19:06:52

标签: sharepoint moss workflow sharepoint-2007

我和this question有类似的情况。

我有一个自定义顺序SharePoint工作流,在Visual Studio 2008中已删除。它与提交到表单库的InfoPath表单相关联。它被配置为在创建项目时自动启动。

有时会奏效。有时候它无法启动。

就像上面链接的问题一样,我检查了调试器,问题是当工作流触发时,作为列中的列发布的InfoPath字段为空。 (我使用workflowProperties.Item["fieldName"]访问字段。)但似乎存在竞争条件,因为这些字段实际显示在库视图中,如果我终止失败的工作流并手动重新启动它,它的工作原理很好!

经过大量的讨论和测试后,我确定如果用户在Windows XP上运行任何版本的IE,工作流程将成功启动,但如果同一用户提交相同的表单数据,则会失败Vista或Windows 7客户端计算机。

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:2)

我使用了另一种解决方案,它只会等到InfoPath属性可用(或最多60秒):

public SPWorkflowActivationProperties workflowProperties =
   new SPWorkflowActivationProperties();

private void onOrderFormWorkflowActivated_Invoked(object sender, ExternalDataEventArgs e)
{
   SPListItem workflowItem;
   workflowItem = workflowProperties.List.GetItemById(workflowProperties.ItemId);

   int waited = 0;
   int maxWait = 60000; // Max wait time in ms
   while (workflowItem["fieldName"] == null && (waited < maxWait))
   {
      System.Threading.Thread.Sleep(1);
      waited ++;
      workflowItem = workflowProperties.List.GetItemById(workflowProperties.ItemId);
   }

   // For testing: Write delay time in Workflow History Event
   SPWorkflow.CreateHistoryEvent(
      workflowProperties.Web,
      workflowProperties.WorkflowId, 
      (int)SPWorkflowHistoryEventType.WorkflowComment,
      workflowProperties.OriginatorUser, TimeSpan.Zero, 
      waited.ToString() + " ms", "Waiting time", "");
}

workflowProperties.Item永远不会在上面的代码中获取InfoPath属性。 一段时间后workflowProperties.List.GetItemById(workflowProperties.ItemId)将会出现。{/ p>

答案 1 :(得分:1)

这是因为Vista / 7通过WebDAV保存InfoPath表单,但XP使用其他协议(抱歉,当时记不起来)。 SharePoint在实际上载文件之前捕获“ItemAdded”事件(即,该项目已创建,但文件上载当前正在进行中)。

您可以为解决方法做的是添加dealay活动并等待10秒作为工作流中的第一件事(由于工作流在SPPS中构建的方式,实际上将超过10秒)。这样,当您执行读取项目时,上载已经结束。要通知用户发生了什么,您可以在延迟之前添加“logToHistoryList”活动。