В одном из проектов возникла необходимость сформировать 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 на выходе дает вот такую xml
value
Комментариев нет:
Отправить комментарий