В одном из проектов возникла необходимость сформировать CAML запрос, но точных сведений о том какой он будет в итоге не было. Порывшись на англоязычных формах нашел похожие вопросы с решениями. После чего они были немного изменены под мои нужды.
Все это выполняется двумя функциями. На входе одной из которых имеется двумерный массив строк.
Допустим нам необходимо сформировать запрос к списку и получить все элементы где fieldName1=value и где fieldName2 пустое
Все это выполняется двумя функциями. На входе одной из которых имеется двумерный массив строк.
Допустим нам необходимо сформировать запрос к списку и получить все элементы где fieldName1=value и где fieldName2 пустое
string[,] s = new string[2, 5];
s[0, 0] = "Eq";//Условие (в данном случае равно) (Eq,Geq,Leq...)
s[0, 1] = "fieldName1";// Название столбца списка
s[0, 2] = "Text";// Тип столбца
s[0, 3] = "value";// искомое значение
s[0, 4] = "And";
s[1, 0] = "IsNull";
s[1, 1] = "fieldName2";
s[1, 2] = "";
s[1, 3] = "";
s[1, 4] = "And";
А вот собственно и функции:
private static string CreateCAMLQuery(string[,] parameters)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < parameters.Length/5; i++)
{
AppendEQ(sb, parameters[i, 0], parameters[i, 1],
parameters[i, 2], parameters[i, 3]);
if (i > 0)
{
sb.Insert(0, "<" + parameters[i,4] + ">");
sb.Append("");
}
}
sb.Insert(0, "");
sb.Append(" ");
return sb.ToString();
}
private static void AppendEQ(StringBuilder sb, string Eq,
string FieldRefName, string ValueType, string value)
{
sb.AppendFormat("<{0}>", Eq);
sb.AppendFormat("<"+"fieldref name="{0}">", FieldRefName);
//Для IsNull и для IsNotNull нет необходимости в указнии type
if (Eq != "IsNull" & Eq != "IsNotNull")
sb.AppendFormat("{1} ",ValueType,value);
sb.AppendFormat("", Eq);
}
Формируем запрос
SPQuery query = new SPQuery();
query.Query = CreateCAMLQuery(s);
SPListItemCollection collection= list.GetItems(query);
//В переменной collection есть все элемент удовлетворяющие требованиям
//К отдельным элемента обращаемся в цикле
foreach (SPListItem item in collection)
{
string title = item.Title;
}
Функция CreateCAMLQuery на выходе дает вот такую xmlvalue
Комментариев нет:
Отправить комментарий