通过Web服务Sharepoint:检查列表中是否存在项目

时间:2009-10-02 12:13:18

标签: c# sharepoint web-services

由于Microsoft没有包含在sharepoint中具有唯一约束的方法,因此必须手动完成。

我通过Web服务方法将项目插入到sharepoint列表中。

如何检查现有列表项是否已存在且具有相同的字段ID值?

我已经知道我应该使用wsLists.getListitems web服务方法,但它并不完全“用户友好”。 MSDN文档在解释什么应该是一件容易的事情方面再也不是很好。

2 个答案:

答案 0 :(得分:5)

private bool itemDoesntExist()
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<Document><Query><Where><Contains><FieldRef Name=\"ID\" /><Value Type=\"Text\">" + this.ID  + "</Value></Contains></Where></Query><ViewFields /><QueryOptions /></Document>");
    XmlNode listQuery = doc.SelectSingleNode("//Query");
    XmlNode listViewFields = doc.SelectSingleNode("//ViewFields");
    XmlNode listQueryOptions = doc.SelectSingleNode("//QueryOptions");
    XmlNode items = this.wsLists.GetListItems(this.ListName , string.Empty, listQuery, listViewFields, string.Empty, listQueryOptions, null);
    if (items.ChildNodes[1].Attributes["ItemCount"].Value == "0")
    {
        return true; 
    }
    else
    {
        return false; 
    }
}

答案 1 :(得分:2)

这是我2年前编写的一个程序,用于提取具有给定文件名的文档的ID ...我认为如果列表中存在给定的ID,您可以轻松地修改它以返回true / false。

protected string GetDocumentID(Lists.Lists ls, string ListGUID, string FileName)
{
    string strDocumentID = "-1";

    string strViewGUID = "";
    string strRowLimit = "50000";

    XmlDocument xmlDoc = new XmlDocument();
    XmlNode query = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
    XmlNode viewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
    XmlNode queryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

    query.InnerXml = "";
    viewFields.InnerXml = "";
    queryOptions.InnerXml = "<IncludeAttachmentUrls>TRUE</IncludeAttachmentUrls>";

    System.Xml.XmlNode nodeListItems = ls.GetListItems(ListGUID, strViewGUID, query, viewFields, strRowLimit, queryOptions, null);

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(nodeListItems.InnerXml);
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
    nsmgr.AddNamespace("z", "#RowsetSchema");
    nsmgr.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");

    foreach (XmlNode node in doc.SelectNodes("/rs:data/z:row", nsmgr))
    {
        if (node.Attributes["ows_LinkFilename"].Value == FileName)
        {
            strDocumentID = node.Attributes["ows_ID"].Value;
            break;
        }
    }

    return strDocumentID;
}

以下是调用它的代码......

Lists.Lists ls = new Lists.Lists();
ls.PreAuthenticate = true;
ls.Credentials = System.Net.CredentialCache.DefaultCredentials;
ls.Url = SharePointSiteURL + @"/_vti_bin/lists.asmx";

string DocID = GetDocumentID(ls, ListGUID, FileName);