private void ModifyCAMLFilter(SPView view) { var xml = new XmlDocument(); xml.LoadXml(view.GetViewXml()); if (xml.DocumentElement == null) { return; } var query = xml.DocumentElement.SelectSingleNode(CAML.Query); if (query != null) { var where = query.SelectSingleNode(CAML.Where); if (where == null) { where = xml.CreateNode(XmlNodeType.Element, CAML.Where, string.Empty); query.AppendChild(where); var w = CAMLGenerator.JoinFilters(CAMLPredicates, CAML.And); where.InnerXml = w; } else { var whereParts = new List <string> { where.InnerXml }; whereParts.AddRange(CAMLPredicates); where.InnerXml = CAMLGenerator.JoinFilters(whereParts, CAML.And); } } view.SetViewXml(xml.OuterXml); Debug.WriteLine(xml.OuterXml); }
public IEnumerable <string> GetCAMLPredicates(bool diacriticVariations) { string _val; var extraList = new List <string>(); var datas = new List <CAMLPredicateData>(); DateTime _valDateTime; Control valControl; switch (FieldType) { case FilterType.Text: #region Text valControl = Controls.OfType <TextBox>().FirstOrDefault(); if (valControl != null) { _val = ((TextBox)valControl).Text; if (!string.IsNullOrEmpty(_val)) { if (diacriticVariations) { var strItems = ((TextBox)valControl) .Text .DiacriticVariations() .Select(x => new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Contains, NodeValue = x }) .Select(x => x.ToString()) .ToList(); var res = CAMLGenerator.JoinFilters(strItems, CAML.Or); extraList.Add(res); } else { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Contains, NodeValue = ((TextBox)valControl).Text }); } } } break; #endregion case FilterType.TextWithOptions: #region TextWithOptions valControl = Controls.OfType <TextBox>().FirstOrDefault(); var type = Page.Request.Form[FieldInternalName + "_Type"]; var typeEnum = CAMLOperator.Contains; switch ((type ?? string.Empty).ToUpper()) { case "EQ": typeEnum = CAMLOperator.Eq; break; case "NEQ": typeEnum = CAMLOperator.Neq; break; case "BEGINSWITH": typeEnum = CAMLOperator.BeginsWith; break; case "CONTAINS": typeEnum = CAMLOperator.Contains; break; case "GT": typeEnum = CAMLOperator.Gt; break; case "GTE": typeEnum = CAMLOperator.Geq; break; case "LT": typeEnum = CAMLOperator.Lt; break; case "LTE": typeEnum = CAMLOperator.Leq; break; default: break; } if (valControl != null) { _val = ((TextBox)valControl).Text; if (!string.IsNullOrEmpty(_val)) { if (diacriticVariations) { var strItems = ((TextBox)valControl) .Text .DiacriticVariations() .Select(x => new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Contains, NodeValue = x }) .Select(x => x.ToString()) .ToList(); var res = CAMLGenerator.JoinFilters(strItems, CAML.Or); extraList.Add(res); } else { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = typeEnum, NodeValue = _val }); } } } break; #endregion case FilterType.DropDownSingleValue: #region DropDownSingleValue valControl = Controls.OfType <DropDownList>().FirstOrDefault(); if (valControl != null) { _val = Page.Request.Form[valControl.UniqueID]; if (string.IsNullOrEmpty(_val)) { break; } if (_val != "-2") { if (_val == "-1") { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.IsNull, NodeValue = _val }); } else { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Eq, NodeValue = _val }); } } } break; #endregion case FilterType.DropDownMultiValue: #region DropDownMultiValue var ddVals = Page.Request.Form[FieldInternalName + "_Type"]; if (!string.IsNullOrEmpty(ddVals)) { var ddValItems = ddVals.Split('|') .Select(val => new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Eq, NodeValue = val }) .Select(x => x.ToString()) .ToList(); var res = CAMLGenerator.JoinFilters(ddValItems, CAML.Or); extraList.Add(res); } break; #endregion case FilterType.AutoComplete: #region AutoComplete valControl = Controls.OfType <TextBox>().FirstOrDefault(); if (valControl != null) { _val = Page.Request.Form[valControl.UniqueID]; //_val = ((TextBox)valControl).Text; if (!string.IsNullOrEmpty(_val)) { if (diacriticVariations) { var strItems = ((TextBox)valControl) .Text .DiacriticVariations() .Select(x => new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Contains, NodeValue = x }) .Select(x => x.ToString()) .ToList(); var res = CAMLGenerator.JoinFilters(strItems, CAML.Or); extraList.Add(res); } else { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Contains, NodeValue = _val }); } } } break; #endregion case FilterType.Date: #region Date valControl = Controls.OfType <DateTimeControl>().FirstOrDefault(); if (valControl != null) { if (!((DateTimeControl)valControl).IsDateEmpty) { _valDateTime = ((DateTimeControl)valControl).SelectedDate; _val = SPUtility.CreateISO8601DateTimeFromSystemDateTime(_valDateTime); if (!string.IsNullOrEmpty(_val)) { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.DateTime, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Eq, NodeValue = _val }); } } } break; #endregion case FilterType.DateRange: #region DateRange var dates = Controls .Cast <Control>() .Where(c => c.Controls.Count > 0) .SelectMany(c => c.Controls.Cast <Control>()) .OfType <DateTimeControl>() .Where(d => !d.IsDateEmpty) .Select(d => d.SelectedDate) .OrderBy(d => d) .ToList(); if (dates.Count > 0) { var isFirst = true; foreach (var date in dates) { _val = SPUtility.CreateISO8601DateTimeFromSystemDateTime(date); datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.DateTime, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = isFirst ? CAMLOperator.Geq : CAMLOperator.Leq, NodeValue = _val }); if (isFirst) { isFirst = false; } } } break; #endregion case FilterType.PeoplePicker: #region PeoplePicker valControl = Controls.OfType <PeopleEditor>().FirstOrDefault(); if (valControl != null) { if (((PeopleEditor)valControl).ResolvedEntities.Count > 0) { _val = ((PeopleEditor)valControl).UserValue().LookupId.ToString(); datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.User, FeildInternalName = FieldInternalName, IsLookupId = true, Operator = CAMLOperator.Eq, NodeValue = _val }); } } break; #endregion case FilterType.PeoplePickerMulti: #region PeoplePickerMulti valControl = Controls.OfType <PeopleEditor>().FirstOrDefault(); if (valControl != null) { if (((PeopleEditor)valControl).ResolvedEntities.Count > 0) { var users = ((PeopleEditor)valControl).UserValueCollection() .Select(val => new CAMLPredicateData { FieldType = CAMLFieldType.User, FeildInternalName = FieldInternalName, IsLookupId = true, Operator = CAMLOperator.Eq, NodeValue = val.LookupId.ToString() }) .Select(x => x.ToString()) .ToList(); var res = CAMLGenerator.JoinFilters(users, CAML.Or); extraList.Add(res); } } break; #endregion case FilterType.Boolean: #region Boolean valControl = Controls.OfType <DropDownList>().FirstOrDefault(); if (valControl != null) { _val = Page.Request.Form[valControl.UniqueID]; //_val = ((DropDownList)valControl).SelectedValue; if (_val != "-2") { if (_val == "-1") { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Boolean, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.IsNull, NodeValue = _val }); } else { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Boolean, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Eq, NodeValue = _val }); } } } break; #endregion case FilterType.TaxonomyTerm: #region TaxonomyTerm valControl = Controls.OfType <TaxonomyWebTaggingControl>().FirstOrDefault(); if (valControl != null) { var txt = ((TaxonomyWebTaggingControl)valControl).Text; if (!string.IsNullOrEmpty(txt)) { datas.Add(new CAMLPredicateData { FeildInternalName = FieldInternalName, FieldType = CAMLFieldType.TaxonomyField, IsLookupId = false, Operator = CAMLOperator.Eq, NodeValue = txt.Split('|')[0] }); } } break; #endregion case FilterType.TaxonomyMultiTerm: #region TaxonomyMultiTerm valControl = Controls.OfType <TaxonomyWebTaggingControl>().FirstOrDefault(); if (valControl != null) { var txt = ((TaxonomyWebTaggingControl)valControl).Text; if (!string.IsNullOrEmpty(txt)) { var terms = txt.Split(';') .Select(x => new { Term = x.Split('|')[0], GUID = new Guid(x.Split('|')[1]) }) .Select(x => new CAMLPredicateData { FeildInternalName = FieldInternalName, FieldType = CAMLFieldType.TaxonomyFieldMultiValue, IsLookupId = false, Operator = CAMLOperator.Eq, NodeValue = x.Term }) .Select(x => x.ToString()) .ToList(); var res = CAMLGenerator.JoinFilters(terms, CAML.Or); extraList.Add(res); } } break; #endregion case FilterType.Slider: #region Slider var sliderValue = Page.Request.Form["Field" + FieldInternalName]; if (!string.IsNullOrEmpty(sliderValue)) { datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Eq, NodeValue = sliderValue }); } break; #endregion case FilterType.SliderRange: #region SliderRange var sliderValues = Page.Request.Form["Field" + FieldInternalName]; if (!string.IsNullOrEmpty(sliderValues)) { var min = sliderValues.Split(',')[0]; var max = sliderValues.Split(',')[1]; datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Geq, NodeValue = min }); datas.Add(new CAMLPredicateData { FieldType = CAMLFieldType.Text, FeildInternalName = FieldInternalName, IsLookupId = false, Operator = CAMLOperator.Leq, NodeValue = max }); } break; #endregion default: return(null); } return(CAMLGenerator.BuilderFieldQuery(datas, extraList).ToList()); }