SharePoint:以编程方式获取站点目录的类别

时间:2009-01-28 14:37:43

标签: c# sharepoint moss sitedirectory

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

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

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

Bye Flo

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

好的,我知道,我表达的不清楚。我知道如何获取字段架构表单字段。但我想在你的帖子之后我自己得到了答案。

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

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

<强>更新

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