Ejemplo n.º 1
0
 public static LogicalJoin Or(this LogicalJoin @operator, params Operator[] operators)
 {
     if (@operator == null)
     {
         throw new ArgumentNullException("operator");
     }
     return(@operator.CombineOr(operators));
 }
Ejemplo n.º 2
0
        private string CamlQueryBuilder(List list, ContentByQuery cbq)
        {
            // Copy the CBQW filters
            List <SearchQueryFilter> filters = new List <SearchQueryFilter>();

            filters.AddRange(this.properties.Query.Filters);
            // Add the default filter
            filters.Add(new SearchQueryFilter()
            {
                ChainingOperatorUsedInCQWP = FilterChainingOperator.And,
                Fieldname = "FSObjType",
                Op        = FilterOperator.Equals,
                Value     = 0
            });

            // Sorting: if CBQW was sorted on one of the 4 allowed fields then take over the setting, else fall back to default sort (= Modified)
            string sortField = "Modified";

            if (!string.IsNullOrEmpty(cbq.SortBy))
            {
                if (cbq.SortBy.Equals("Title") || cbq.SortBy.Equals("FileLeafRef") || cbq.SortBy.Equals("Author"))
                {
                    sortField = cbq.SortBy;
                }
            }

            // Sort order cannot be choosen: Modified = descending, others are ascending
            string sortOrder = "True";

            if (sortField == "Modified")
            {
                sortOrder = "False";
            }

            string query     = "";
            Query  queryCaml = null;
            var    and       = LogicalJoin.And();
            var    or        = LogicalJoin.Or();

            // Do we have filters to apply?
            if (filters.Any())
            {
                for (int i = 0; i < filters.Count; i++)
                {
                    var queryFilter     = filters[i];
                    var nextQueryFilter = filters[i];
                    if (i < filters.Count - 1)
                    {
                        nextQueryFilter = filters[i + 1];
                    }

                    if (queryFilter.ChainingOperatorUsedInCQWP == FilterChainingOperator.And && nextQueryFilter.ChainingOperatorUsedInCQWP == FilterChainingOperator.And)
                    {
                        and.AddStatement(CamlFilterBuilder(queryFilter));
                    }
                    else
                    {
                        or.AddStatement(CamlFilterBuilder(queryFilter));
                    }
                }

                if (or.HasStatements())
                {
                    and.AddStatement(or);
                }
            }

            queryCaml = Query.Build(and);
            query     = queryCaml.GetCaml(true).Replace("\r", "").Replace("\n", "");
            return($"<View Scope=\"RecursiveAll\"><Query>{query}<OrderBy><FieldRef Name=\"{sortField}\" Ascending=\"{sortOrder}\" /></OrderBy></Query><ViewFields><FieldRef Name=\"Editor\" /><FieldRef Name=\"FileLeafRef\" /><FieldRef Name=\"File_x0020_Type\" /><FieldRef Name=\"ID\" /><FieldRef Name=\"Modified\" /><FieldRef Name=\"Title\" /><FieldRef Name=\"UniqueID\" /></ViewFields><RowLimit Paged=\"false\">{cbq.ItemLimit}</RowLimit></View>");
        }