2009-01-28 58 views
2

我正在寻找一种以编程方式获取门户网站目录中定义的类别的方法。据我可以看到类别被表示为具有多个值的“选择”类型的字段,用户可以选择表单。SharePoint:以编程方式获取网站目录的类别

我的问题是,我怎么能区分正常字段,如“标题”或“作者”类别字段。其实我不会硬编码类别名称,但要动态加载它们。我认为必须有一些标准,因为站点目录页上的标准Web部件也会动态加载类别。

不幸的是我找不到关于这个问题的很多信息。

Bye Flo

回答

1

好的,我明白了,我表达自己并不清楚。我知道如何获取字段模式表单字段。但是我认为,在你发布信息之后,我自己也会回答我的问题。

我想知道的事情是,我可以假设在网站目录的“网站”列表中的“选择”类型的每个字段都代表一个网站可以分配给的类别? 因此,每个类别字段必须是“选择”类型?

要获得所有可用的类别,我必须遍历列表的字段并根据类型“选择”来查找字段,对吧?

UPDATE

同时我想我找到了答案,我的问题。如果它是“类别”视图的一部分,网站列表中的列将作为网站目录的类别处理。一般而言,类别栏不一定是“选择”类型,尽管其他类型在这种情况下没有意义。

+0

啊,我得到你。我认为这是唯一的途径,因为他们没有储存在其他地方。 – Nat 2009-02-16 19:54:48

1

获取对SPWeb的参考。使用SharePoint Manager(并非绝对必要,但该应用程序很有用)以获取所需字段的详细信息。

此代码可以从字段xmlSchema获取列表。注意:注释的xml是我自己的Category字段的SchemaXml的外观。

public static ArrayList GetCategory(SPWeb web) 
{ 
    ArrayList result = new ArrayList(); 

    /*   <?xml version="1.0" encoding="utf-16"?> 
    <Field ID="{6DF9BD52-550E-4a30-BC31-A4366832A87D}" Type="Choice" Group="_Hidden" Name="Category" DisplayName="Category" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Category"> 
     <CHOICES> 
     <CHOICE>(1) Category1</CHOICE> 
     <CHOICE>(2) Category2</CHOICE> 
     <CHOICE>(3) Category3</CHOICE> 
     </CHOICES> 
     <Default>(2) Category2</Default> 
    </Field>*/ 
    try 
    { 
     SPField catField = web.Fields[new Guid("6DF9BD52-550E-4a30-BC31-A4366832A87D")]; 
     XmlDocument Doc = new XmlDocument(); 
     Doc.LoadXml(catField.SchemaXml); 
     XmlNodeList Choices = Doc.SelectNodes("Field/CHOICES/CHOICE"); 
     foreach (XmlNode Choice in Choices) 
     { 
      result.Add(Choice.InnerText); 
     } 
    } 
    catch (Exception ex) 
    { 
     result.Add("Failed: " + ex.Message); 
    } 
    return result; 
} 
相关问题