SharePoint, как обновить элемент списка из веб-службы с помощью предложения where? - PullRequest
1 голос
/ 03 июня 2010

У меня есть сценарий, в котором мне нужно обновить элемент списка, но я не знаю внутренний идентификатор элемента списка - следовательно, для меня не сработает следующее:

batchElement.InnerXml = "<Method ID='1' Cmd='Update'>" +
            "<Field Name='ID'>" + id + "</Field>" + 
            "<Field Name='DeliveryStatus'>" + newStatus.ToString() + "</Field></Method>";

Вместо этого у меня есть другое поле в списке с именем ProcessID:

Итак, я хотел бы обновить статус доставки, где ProcessID = X

Возможно ли это с помощью веб-служб SharePoint.

Одним из решений, о котором я думал, является сначала сделать выбор для идентификатора на основе ProcessID, а затем обновить на основе этого идентификатора, но это выглядит как сумасшедшее решение, конечно, изобретатели MOSS CAML могли бы предоставить обновить элемент списка с помощью предложения where или использовать другое поле для фильтрации, а не просто старый идентификатор?

Спасибо

1 Ответ

1 голос
/ 03 июня 2010

Я не верю, что вы можете ОБНОВИТЬ ГДЕ. Вам нужно будет получить все элементы, соответствующие вашему указанному ProcessID, чтобы получить каждый из отдельных идентификаторов элементов.

Поскольку вы используете веб-службы, один из способов сделать это более эффективным - убедиться, что вы устанавливаете свойство ViewFields при выполнении выбора, чтобы ограничить его только интересующими вас столбцами (в данном случае, ID).

Пример:

XmlDocument xmlDoc = new System.Xml.XmlDocument();
XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

ndQueryOptions.InnerXml = "<ViewAttributes Scope='Recursive' />";
ndViewFields.InnerXml = "<FieldRef Name='ID' />";
ndQuery.InnerXml = query;
...