/// <summary> /// Initializes a new instance of the <see cref="CamlQueryComparisonOperator"/> class. /// </summary> /// <param name="fieldName">Name of the field.</param> /// <param name="fieldType">Type of the field.</param> /// <param name="fieldValue">The field value.</param> /// <param name="elementType">Type of the element.</param> public CamlQueryComparisonOperator(string fieldName, SPFieldType fieldType, string fieldValue, CamlQuerySchemaElements elementType) { FieldName = fieldName; FieldType = fieldType; FieldValue = fieldValue; _elementType = elementType; }
/// <summary> /// Merges the query condition. /// </summary> /// <param name="querySchemaElement">The query schema element.</param> /// <param name="mainQuery">The main query.</param> /// <param name="queryItems">The query items.</param> /// <returns>Returns merged query.</returns> public static CamlQuery MergeQueryCondition(CamlQuerySchemaElements querySchemaElement, CamlQuery mainQuery, params CamlQuery[] queryItems) { var queryItemList = queryItems.ToList(); if (mainQuery == null || !queryItemList.Any()) return null; foreach (CamlQuery camlQuery in queryItems) { mainQuery.ValidFields.AddRange(camlQuery.ValidFields); mainQuery.InvalidFields.AddRange(camlQuery.InvalidFields); var newQueryCondition = string.Empty; var itemQueryConditions = camlQuery.Query.Split(WhereSplitingArray, StringSplitOptions.None); // If there is no wehre conditon or condition is empty merge not requierd if (itemQueryConditions.Length < WhereSplitingArray.Length || itemQueryConditions[1].IsNullOrEmpty()) continue; // If there is where condition in main query if (mainQuery.Query.Contains(WhereSplitingArray[0])) { var mainQueryCondition = mainQuery.Query.Split(WhereSplitingArray, StringSplitOptions.None)[1]; // If where query in main query is empty insert item query only if (mainQueryCondition.IsNullOrEmpty()) mainQuery.Query = mainQuery.Query.Replace(WhereSplitingArray[0], WhereSplitingArray[0] + itemQueryConditions[1]); else { newQueryCondition = CreateQueryCondition(querySchemaElement, mainQueryCondition, itemQueryConditions[1]); mainQuery.Query = mainQuery.Query.Replace(mainQueryCondition, newQueryCondition); } } else { mainQuery.Where = CreateQueryCondition(CamlQuerySchemaElements.Where, itemQueryConditions[1]); } } return mainQuery; }
/// <summary> /// Gets the query. /// </summary> /// <returns>Return query.</returns> protected virtual CamlQuery GetQuery() { var fieldValue = FieldValue; var fieldType = FieldType; var aditionalFieldAttributes = new Dictionary<CamlQuerySchemaAttributes, object>(); var aditionalValueAttributes = new Dictionary<CamlQuerySchemaAttributes, object>(); var query = new CamlQuery(); if (Field != null) { // Lookup field actions var lookupField = _field as SPFieldLookup; if (lookupField != null) { if (lookupField.CountRelated) fieldType = SPFieldType.Integer; if (lookupField.IsDependentLookup) fieldType = SPFieldType.Invalid; } // Calculated field actions var calculatedField = _field as SPFieldCalculated; if (calculatedField != null) fieldType = calculatedField.OutputType; } if (IsFieldValidListField && CamlQueryHelper.IsValidFieldForQuery(FieldType, FieldName) && CamlQueryHelper.TryParseValue(fieldType, ref fieldValue)) { // Setting attributres if (IsLookupId) { aditionalFieldAttributes.Add(CamlQuerySchemaAttributes.LookupId, true); _elementType = CamlQuerySchemaElements.Eq; } // Setting paresd value and proper field type FieldValue = fieldValue; FieldType = fieldType; // Creating query query = new CamlQuery(); query.Where = GetQueryCondition(aditionalFieldAttributes, aditionalValueAttributes); query.ValidFields.Add(FieldName); } else query.InvalidFields.Add(FieldName); query.List = _list; return query; }
/// <summary> /// Creates the query condition. /// </summary> /// <param name="querySchemaElement">The query schema elements.</param> /// <param name="queryItems">The query items.</param> /// <returns>Returns query condition.</returns> public static string CreateQueryCondition(CamlQuerySchemaElements querySchemaElement, params string[] queryItems) { var elementSchema = EnumHelper.GetStringValue(querySchemaElement, typeof(CamlQuerySchemaElementsAttribute)); return elementSchema.Replace(CamQueryVariables.Value, string.Join(string.Empty, queryItems)); }