如果我手动运行此工作流程,它可以正常工作。当我让它自动运行“on edit”时SPContext.Current为null。如何在自动运行时访问SPContext.Current?
答案 0 :(得分:4)
SharePoint会在完全不同的流程下定期运行您的工作流程。至少,您可以期望您的工作流活动显示在:
下owstimer.exe
进程,对于触发工作流和工作流场景的复杂性的事件(!!),SharePoint会选择实际执行它的进程。因此,从ASP.NET(即IIS工作进程)触发的长时间运行的工作流会自动重新安排在owstimer.exe
下运行。
结果是您无法使用SPContext.Current
。在工作流活动中,您必须使用提供WorkflowContext
属性的Web
实例。您的活动应声明类型为WorkflowContext
的依赖项属性才能访问它 - 请在MSDN here中阅读更多内容。 VS项目模板将为您提供必要的代码。
示例:
public partial class LogEventActivity: Activity
{
public static DependencyProperty __ContextProperty = DependencyProperty.Register("__Context", typeof(WorkflowContext), typeof(LogEventActivity));
[Browsable(true)]
[ValidationOption(ValidationOption.Required)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public WorkflowContext __Context
{
get
{
return (WorkflowContext)base.GetValue(__ContextProperty);
}
set
{
base.SetValue(__ContextProperty, value);
}
}
}