Как вернуть только определенные столбцы списка при использовании веб-службы SharePoint? - PullRequest
3 голосов
/ 27 марта 2012

В веб-службе SharePoint есть метод с подписью ниже:

 public System.Xml.XmlNode GetListItems(string listName, string viewName, System.Xml.XmlNode query, System.Xml.XmlNode viewFields, string rowLimit, System.Xml.XmlNode queryOptions, string webID) {
            object[] results = this.Invoke("GetListItems", new object[] {
                        listName,
                        viewName,
                        query,
                        viewFields,
                        rowLimit,
                        queryOptions,
                        webID});
            return ((System.Xml.XmlNode)(results[0]));
        }

Я бы хотел вернуть только столбцы "ID" и "Заголовок" моего списка, например, «ProductNames», а не возвращать все столбцы.

Как использовать этот веб-метод для возврата только определенных столбцов?

Я использую метод ниже, который возвращает все столбцы:

public XmlNode GetListItems(string listName, XmlElement camlQuery)
        {
            sp.Lists listService = this.getSPListService();

            XmlDocument xmlDoc = new XmlDocument();

            XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");

            XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions");

            XmlElement foldersEl = xmlDoc.CreateElement("Folder");

            if (camlQuery == null) // override default view filters
            {
                camlQuery = xmlDoc.CreateElement("Query");

                camlQuery.InnerXml = "<Where><Gt><FieldRef Name='ID'/><Value Type='Number'>0</Value></Gt></Where>";
            }

            queryOptions.AppendChild(foldersEl);

            return listService.GetListItems(listName, null, camlQuery, ndViewFields, int.MaxValue.ToString(), queryOptions, null);
        }

Итак, теперь я хотел бы написать новый метод, например:

public XmlNode GetListItems(string listName, XmlElement camlQueryForFilteringRows, bool includeAllColumns, string[] columnNamesToInclude)         
{

}

и позвоните по номеру

var listItems = GetListItems("ProductNames", null, new [] {"ID", "Title"});

Я попытался добавить приведенную ниже структуру в переменную ViewFields, но все равно он возвращает все столбцы:

<ViewFields>
   <FieldRef Name="ID" />
   <FieldRef Name="Title" />
</ViewFields>

Спасибо

Ответы [ 2 ]

5 голосов
/ 27 марта 2012

Попробуйте что-то вроде этого:

XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions");
if (!includeAllColumns)
{
    ndViewFields.InnerXml =
        string.Join(string.Empty,
            columnNamesToInclude
            .Select(t1 => string.Format("<FieldRef Name=\"{0}\" />", t1))
            .ToArray());
    queryOptions.InnerXml = "<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>";
}

Сочетание ViewFields и IncludeMandatoryColumns работало для меня в прошлом.

1 голос
/ 18 апреля 2014

Попробуйте установить для параметра queryoption ViewFieldsOnly значение True.

...