代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

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

  •  0
  • JL. Hans Passant  · 技术社区  · 15 年前

    由于Microsoft没有在SharePoint中包含唯一约束的方法,因此必须手动执行此操作。

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

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

    我已经知道我应该使用wslists.getlistems Web服务方法,但它并不完全“用户友好”。MSDN文档再次不能很好地解释应该做什么是一件容易的事情。

    2 回复  |  直到 15 年前
        1
  •  5
  •   JL. Hans Passant    15 年前
    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; 
        }
    }
    
        2
  •  2
  •   Mayo    15 年前

    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);