2012-11-05 76 views
0

过去,我使用SharePoint Designer开发了文档工作流,并创建了“全球可变成员”。据我所知,这些变量在整个工作流实例中是全局变量。C#工作流项目中的Sharepoint工作流全局变量

如何在Visual Studio Workflow项目中创建等效的全局变量?我的第一个想法是在一个模块中创建一组这样的字段:

<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Field ID="{2FE15855-3CAB-44A6-AB29-1600204FCA20}" Name="TechRev1" 
     MaxLength="255" DisplayName="Technical Reviewer 1" Description="" 
     Direction="None" Type="User" Overwrite="TRUE" /> 
    <Field ID="{517B22A5-1B89-4C24-82BE-3D4FD99645BC}" Name="TechRev2" 
     MaxLength="255" DisplayName="Technical Reviewer 2" Description="" 
     Direction="None" Type="User" Overwrite="TRUE"/> 
<Elements/> 

这是正确的做法,我将如何访问从ASPX形式的任何全局变量?

+0

对于VS工作流程,您可以编写代码,因此它与询问如何在C#中具有全局状态相同。最好的办法就是将数据存储在某个列表中,如果它是一个选项,尤其是如果您打算从ASPX页面访问它的话。 – Servy

+0

谢谢Servy。我不相信Sharepoint Designer使用一个列表保留全局状态(我肯定可能是错的!)。你可以为每个工作流实例创建一个“隐藏”列表实例吗? 我基本上想要一个全局内存区域,该区域在服务器重启时仍然存在,并且只能由创建它的工作流读取。 –

+0

我不知道设计器工作流是否在内部使用全局状态列表,我知道我经常明确地使用列表来存储我在工作流中使用的状态(在VS和设计器中)。您可能不希望每个实例都有一个列表,您希望每个实例都有一个列表和一个列表中的项目。至于隐藏它,您可以中断继承并删除所有人的权限,以便只有网站集管理员才能修改它。 – Servy

回答

0

在Visual Studio中开发了我的工作流程我已经得出结论,您应该使用SharePoint列表和类范围变量的组合来保留工作流程中的全局状态。

时,应使用表...

  • ,数据需要在工作流

您应该使用类范围的变量时,在许多不同的类访问..

  • 该数据仅在一个类中需要

  • 数据类型可以是序列化的(原始类型,标有[Serializable]的类型)。我在我的解决方案中有一个这样的类型:

    [Serializable] public class ReviewerBag { public Dictionary Reviewers {get;组; } public string Moderator {get;组; }

    public ReviewerBag() 
    { 
        Reviewers = new Dictionary<string,Reviewer>(); 
    } 
    ... 
    

    }

  • 如果在工作流类之间所需要的数据,你可以仍然使用变量,但要注意,每个变量是在类中声明时,它将独立当连载工作流变得空闲(例如,当工作流等待用户完成任务时)。由于它们在工作流程简历上独立解序列化,因此变量不同步。故事的道德是使用列表来存储这种情况下的数据!