以编程方式访问SharePoint列表和子网站?

时间:2010-12-13 15:22:43

标签: c# sharepoint

如何从C#程序中迭代SharePoint列表和子站点?是否需要来自SharePoint安装的SharePoint.dll,或者是否有可用于远程访问该数据的“Sharepoint客户端”DLL?

3 个答案:

答案 0 :(得分:6)

使用Sharepoint网络服务;特别是网站和列表webservices做你所要求的。

对于Sharepoint 2007: http://msdn.microsoft.com/en-us/library/bb862916(v=office.12).aspx

答案 1 :(得分:1)

对于Sharepoint 2007,您需要访问Web服务。在Sharepoint 2010中,有一个sharepoint客户端对象模型。

http://msdn.microsoft.com/en-us/library/ee857094%28office.14%29.aspx

答案 2 :(得分:0)

我碰巧正在处理这件事......这很有效。我把代码简化了一下,专注于机制。边缘粗糙,但希望你能得到这个想法。它对我有用。

此外,请务必使用您的Sharepoint网站的网址设置网络参考。将其用作下面的“网络参考”。

    private <web reference> _Service;
    private String _ListGuid, _ViewGuid;

    private Initialize()
    {
        _Service = new <web reference>.Lists();
        _Service.Credentials = System.Net.CredentialCache.DefaultCredentials;
        _Service.Url = "https://sharepointsite/_vti_bin/lists.asmx";
    }

    private String SpFieldName(String FieldName, Boolean Prefix)
    {
        return String.Format("{0}{1}", Prefix ? "ows_" : null,
            FieldName.Replace(" ", "_x0020_"));
    }

    private String GetFieldValue(XmlAttributeCollection AttributesList,
        String AttributeName)
    {
        AttributeName = SpFieldName(AttributeName, true);
        return AttributesList[AttributeName] == null ?
            null : return AttributesList[AttributeName].Value;
    }

    public void GetList()
    {
        string rowLimit = "2000"; // or whatever

        System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
        System.Xml.XmlElement query = xmlDoc.CreateElement("Query");
        System.Xml.XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
        System.Xml.XmlElement queryOptions =
            xmlDoc.CreateElement("QueryOptions");

        queryOptions.InnerXml = "";
        System.Xml.XmlNode nodes = _Service.GetListItems(_ListGuid, _ViewGuid,
            query, viewFields, rowLimit, null, null);

        foreach (System.Xml.XmlNode node in nodes)
        {
            if (node.Name.Equals("rs:data"))
            {
                for (int i = 0; i < node.ChildNodes.Count; i++)
                {
                    if (node.ChildNodes[i].Name.Equals("z:row"))
                    {
                        XmlAttributeCollection att =
                            node.ChildNodes[i].Attributes;
                        String title = GetFieldValue("Title");
                        String partNumber = GetFieldValue("Part Number");
                    }
                }
            }
        }
    }
}

此外, SpFieldName 方法并非铁腕。对于列表中的大多数字段名称,这只是一个很好的猜测。不幸的是,这是一次发现之旅。如果它们不匹配,您需要公开XML以查找实际的字段名称。

好狩猎。