Beispiel #1
0
        public ActionResult Featured(int maxCount = 3)
        {
            using (var clientContext = HttpContext.GetUserClientContextForSPHost()) {
                ViewBag.SPHostUrl = HttpContext.Request.QueryString["SPHostUrl"];

                var caml = new CamlQuery()
                {
                    ViewXml = CAML.ViewQuery(
                        CAML.Where(
                            CAML.And(
                                CAML.Geq(
                                    CAML.FieldValue(Event.FIELD_DATE, "Date", CAML.Today())
                                    ),
                                CAML.Eq(
                                    CAML.FieldValue(Event.FIELD_CATEGORY, "Text", "Featured")
                                    )
                                )
                            ),
                        CAML.OrderBy(new OrderByField(Event.FIELD_DATE)),
                        rowLimit: maxCount)
                };

                var list = clientContext.Web.Lists.GetByTitle(ListDetails.EventsListName);
                clientContext.Load(list);
                clientContext.ExecuteQuery();

                var items = list.GetItems(caml);
                clientContext.Load(items);
                clientContext.ExecuteQuery();

                var result = items.Cast <ListItem>()
                             .Select(i => new Event(i)).ToList();
                return(View(result));
            }
        }
Beispiel #2
0
        public void Test()
        {
            var caml = CAML.Where()
                       .UserField("AssignedTo").EqualToCurrentUser()
                       .Or()
                       .UserField("AssignedTo").IsInCurrentUserGroups()
                       .GroupBy("Category")
                       .OrderBy("Priority").ThenBy("Title")
                       .ToString();

            string expected = @"<Where>
                    <Or>
                        <Eq><FieldRef Name=""AssignedTo"" LookupId=""True"" /><Value Type=""Integer""><UserID /></Value></Eq>
                        <Membership Type=""CurrentUserGroups""><FieldRef Name=""AssignedTo"" /></Membership>
                    </Or>
                </Where>
                <GroupBy>
                    <FieldRef Name=""Category"" />
                </GroupBy>
                <OrderBy>
                    <FieldRef Name=""Priority"" /><FieldRef Name=""Title"" />
                </OrderBy>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #3
0
        public void Test()
        {
            var caml = CAML.Where()
                       .LookupField("Category").Id().In(new int[] { 2, 3, 10 })
                       .And()
                       .DateField("ExpirationDate").GreaterThan(CamlValues.Now)
                       .OrderBy("ExpirationDate")
                       .ToString();

            string expected = @"<Where>
                  <And>
                    <In>
                      <FieldRef Name=""Category"" LookupId=""True"" />
                      <Values>
                        <Value Type=""Integer"">2</Value>
                        <Value Type=""Integer"">3</Value>
                        <Value Type=""Integer"">10</Value>
                      </Values>
                    </In>
                    <Gt>
                      <FieldRef Name=""ExpirationDate"" />
                      <Value Type=""DateTime"">
                        <Now />
                      </Value>
                    </Gt>
                  </And>
                </Where>
                <OrderBy>
                  <FieldRef Name=""ExpirationDate"" />
                </OrderBy>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
        /// <summary>
        /// Query the list to retreive the last ID
        /// </summary>
        /// <param name="onlineLibrary">The List we will query</param>
        /// <param name="lastItemModifiedDate">The date of the last modified list item</param>
        /// <returns></returns>
        public static int QueryLastItemId(this List onlineLibrary, Nullable <DateTime> lastItemModifiedDate = null)
        {
            var returnId       = 0;
            var camlFieldRefs  = new string[] { "ID", "Created", "Modified", };
            var camlViewClause = CAML.ViewFields(camlFieldRefs.Select(s => CAML.FieldRef(s)).ToArray());
            var camlQuery      = new CamlQuery()
            {
                ViewXml = CAML.ViewQuery(
                    ViewScope.RecursiveAll,
                    string.Empty,
                    CAML.OrderBy(new OrderByField("ID", false)),
                    camlViewClause,
                    1)
            };


            ListItemCollectionPosition itemPosition = null;

            while (true)
            {
                camlQuery.ListItemCollectionPosition = itemPosition;
                var spListItems = onlineLibrary.GetItems(camlQuery);
                onlineLibrary.Context.Load(spListItems, lti => lti.ListItemCollectionPosition);
                onlineLibrary.Context.ExecuteQueryRetry();
                itemPosition = spListItems.ListItemCollectionPosition;

                if (spListItems.Any())
                {
                    if (lastItemModifiedDate.HasValue)
                    {
                        foreach (var item in spListItems)
                        {
                            var itemModified = item.RetrieveListItemValue("Modified").ToNullableDatetime();
                            if (itemModified == lastItemModifiedDate)
                            {
                                returnId = item.Id;
                                break;
                            }
                        }
                    }
                    else
                    {
                        returnId = spListItems.OrderByDescending(ob => ob.Id).FirstOrDefault().Id;
                    }

                    if (returnId > 0)
                    {
                        // Found the item ID that matches the specified date - return it
                        break;
                    }
                }

                if (itemPosition == null)
                {
                    break;
                }
            }

            return(returnId);
        }
Beispiel #5
0
        public void Test()
        {
            string caml = CAML.Where()
                          .Any(
                CAML.Expression().TextField("Email").EqualTo("*****@*****.**"),
                CAML.Expression().TextField("Email").EqualTo("*****@*****.**"),
                CAML.Expression().TextField("Title").BeginsWith("[Google]"),
                CAML.Expression().TextField("Content").Contains("Google")
                )
                          .ToString();

            string expected = @"<Where>
                    <Or>
                        <Eq><FieldRef Name=""Email"" /><Value Type=""Text"">[email protected]</Value></Eq>
                        <Or>
                            <Eq><FieldRef Name=""Email"" /><Value Type=""Text"">[email protected]</Value></Eq>
                            <Or>
                                <BeginsWith><FieldRef Name=""Title"" /><Value Type=""Text"">[Google]</Value></BeginsWith>
                                <Contains><FieldRef Name=""Content"" /><Value Type=""Text"">Google</Value></Contains>
                            </Or>
                        </Or>
                    </Or>
                </Where>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #6
0
        public void Test()
        {
            var caml = CAML
                       .View(new string[] { "Category" }, (AggregationType.Count, "ID"), (AggregationType.Sum, "Amount"))
                       .Query()
                       .GroupBy("Category", true, 100)
                       .ToString();

            string expected = @"<View>
                <ViewFields>
                    <FieldRef Name=""Category"" />
                </ViewFields>
                <Aggregations Value=""On"">
                    <FieldRef Name=""ID"" Type=""COUNT"" />
                    <FieldRef Name=""Amount"" Type=""SUM"" />
                </Aggregations>
                <Query>
                    <GroupBy Collapse=""TRUE"" GroupLimit=""100"">
						<FieldRef Name=""Category"" />
                    </GroupBy>
                </Query>
            </View>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #7
0
        public void Test()
        {
            var rawQuery = @"<View Scope=""RecursiveAll"">
                <Query>
                    <Where>
                        <IsNotNull>
                            <FieldRef Name=""ID"" />
                        </IsNotNull>
                    </Where>
                </Query>
            </View>";

            var caml = CAML.FromXml(rawQuery).ModifyWhere().AppendAnd().TextField("Title").IsNotNull().ToString();

            string expected = @"<View Scope=""RecursiveAll"">
                <Query>
                    <Where>
                        <And>
                            <IsNotNull>
                                <FieldRef Name=""ID"" />
                            </IsNotNull>
                            <IsNotNull>
                                <FieldRef Name=""Title"" />
                            </IsNotNull>
                        </And>
                    </Where>
                </Query>
            </View>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #8
0
        /// <summary>
        /// Retreive file from the specified folder
        /// </summary>
        /// <param name="onlineLibrary"></param>
        /// <param name="destinationFolder"></param>
        /// <param name="onlineFileName"></param>
        /// <returns></returns>
        public static ListItem GetFileInFolder(this List onlineLibrary, Folder destinationFolder, string onlineFileName)
        {
            destinationFolder.Context.Load(destinationFolder, afold => afold.ServerRelativeUrl);
            destinationFolder.Context.ExecuteQuery();
            var relativeUrl = destinationFolder.ServerRelativeUrl;
            var context     = destinationFolder.Context;

            try
            {
                CamlQuery camlQuery    = new CamlQuery();
                var       camlAndValue = CAML.And(
                    CAML.Eq(CAML.FieldValue("LinkFilename", FieldType.Text.ToString("f"), onlineFileName)),
                    CAML.Eq(CAML.FieldValue("FileDirRef", FieldType.Text.ToString("f"), relativeUrl)));

                camlQuery.ViewXml = CAML.ViewQuery(ViewScope.RecursiveAll,
                                                   CAML.Where(camlAndValue),
                                                   string.Empty,
                                                   CAML.ViewFields(CAML.FieldRef("Title")),
                                                   5);
                ListItemCollection listItems = onlineLibrary.GetItems(camlQuery);
                context.Load(listItems);
                context.ExecuteQuery();

                if (listItems.Count() > 0)
                {
                    var newItem = listItems.FirstOrDefault();
                    return(newItem);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.TraceError("Failed to retrieve file {0} MSG:{1}", onlineFileName, ex.Message);
            }
            return(null);
        }
Beispiel #9
0
        public ActionResult Index(string category = "")
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);

            using (var clientContext = HttpContext.GetUserClientContextForSPHost()) {
                ViewBag.SPHostUrl = spContext.SPHostUrl;
                ViewBag.Category  = category;

                var list          = clientContext.Web.GetListByTitle(ListDetails.EventsListName);
                var categoryQuery = string.Empty;
                if (!string.IsNullOrEmpty(category))
                {
                    categoryQuery = CAML.Where(CAML.Eq(CAML.FieldValue(Event.FIELD_CATEGORY, "Text", category)));
                }
                var orderByQuery = CAML.OrderBy(new OrderByField("Title"));

                var caml = new CamlQuery()
                {
                    ViewXml = CAML.ViewQuery(categoryQuery, orderByQuery, rowLimit: 50)
                };
                var events = list.GetItems(caml);
                clientContext.Load(events);
                clientContext.ExecuteQuery();

                var eventsList = events.Cast <ListItem>().Select(item => new Event(item)).ToList();
                return(View(eventsList));
            }
        }
Beispiel #10
0
        public void OrderBy_SendManyFieldRefsInOneString_DoesNotThrow()
        {
            const string orderByString = @"<FieldRef Name=""ID1"" /><FieldRef Name=""ID2"" /><FieldRef Name=""ID3"" />";
            var          correctResult = $"<OrderBy>{orderByString}</OrderBy>";
            var          res           = CAML.OrderBy(orderByString);

            Assert.AreEqual(correctResult, res);
        }
        internal BeginsWithAndContains(CAML camlBuilder, Predicates predicate, Guid fieldId, string value)
        {
            if (predicate != Predicates.Contains || predicate != Predicates.BeginsWith)
            throw new ArgumentException("contains");

              _camlBuilder = camlBuilder;
              _predicate = predicate;
              _fieldId = fieldId;
              _value = value;
        }
Beispiel #12
0
        public void Tag_WithChildXmlElement_ReturnCorrectStringValue()
        {
            var childTag          = CAML.Tag(TestData.TagName, TestData.Value);
            var parentTag         = CAML.Base.Tag(TestData.TagName, childTag, null);
            var parentTagAsString = parentTag.ToString(SaveOptions.DisableFormatting);

            Assert.AreEqual(
                $@"<{TestData.TagName}><{TestData.TagName}>{TestData.Value}</{TestData.TagName}></{TestData.TagName}>",
                parentTagAsString);
        }
Beispiel #13
0
        public void Test()
        {
            var caml = CAML.Where().DateTimeField("Created").GreaterThan(new DateTime(2013, 1, 1, 0, 0, 0, DateTimeKind.Utc)).ToString();

            string expected = @"<Where>
                <Gt>
                    <FieldRef Name=""Created"" />
                    <Value IncludeTimeValue=""True"" Type=""DateTime"">2013-01-01T00:00:00.000Z</Value>
                </Gt>
            </Where>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #14
0
 public ActionResult Index(int offset = 0)
 {
     using (var clientContext = HttpContext.GetUserClientContextForSPHost()) {
         var list = clientContext.Web.GetListByTitle(ListDetails.EventsListName);
         var caml = new CamlQuery()
         {
             ViewXml = CAML.ViewQuery()
         };
         var events = list.GetItems(caml);
         clientContext.ExecuteQuery();
         var eventsList = events.Cast <ListItem>().Select(item => new Event(item)).ToList();
         return(View(eventsList));
     }
 }
Beispiel #15
0
        /// <summary>
        /// Execute the cmdlet
        /// </summary>
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();

            Collection <PSObject> results = new Collection <PSObject>();

            var _listSites = LibraryName.GetList(this.ClientContext.Web);

            ListItemCollectionPosition itemPosition = null;

            try
            {
                while (true)
                {
                    CamlQuery camlQuery = new CamlQuery
                    {
                        ListItemCollectionPosition = itemPosition,
                        ViewXml = CAML.ViewQuery(ViewScope.RecursiveAll, string.Empty, string.Empty, CAML.ViewFields(CAML.FieldRef("Title")), 50)
                    };

                    ListItemCollection listItems = _listSites.GetItems(camlQuery);
                    this.ClientContext.Load(listItems);
                    this.ClientContext.ExecuteQueryRetry();
                    itemPosition = listItems.ListItemCollectionPosition;

                    foreach (var rbiItem in listItems)
                    {
                        LogVerbose("Title: {0}; Item ID: {1}", rbiItem["Title"], rbiItem.Id);
                        var newitem = new
                        {
                            Title = rbiItem["Title"],
                            Id    = rbiItem.Id
                        };
                        var ps = PSObject.AsPSObject(newitem);
                        results.Add(ps);
                    }

                    if (itemPosition == null)
                    {
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                LogError(ex, "Failed to retrieve recycle bin collection");
            }

            WriteObject(results, true);
        }
Beispiel #16
0
        /// <summary>
        /// Will evaluate the Library/List and if the list has reached the threshold it will produce SAFE queries
        /// </summary>
        /// <param name="onlineLibrary">The list to query</param>
        /// <param name="camlStatement">A base CAML query upon which the threshold query will be constructed</param>
        /// <returns>A collection of CAML queries NOT including WHERE</returns>
        public static List <string> SafeCamlClauseFromThreshold(this List onlineLibrary, string camlStatement = null, int?defaultLastItemId = default(int?))
        {
            var camlQueries = new List <string>();

            onlineLibrary.EnsureProperties(olp => olp.ItemCount, olp => olp.LastItemModifiedDate, olp => olp.LastItemUserModifiedDate);

            // we have reached a threshold and need to parse based on other criteria
            var itemCount = onlineLibrary.ItemCount;

            if (itemCount > 5000)
            {
                var lastItemId  = (defaultLastItemId.HasValue) ? defaultLastItemId.Value : onlineLibrary.QueryLastItemId(onlineLibrary.LastItemModifiedDate);
                var startIdx    = 0;
                var incrementor = 1000;

                for (var idx = startIdx; idx < lastItemId + 1;)
                {
                    var startsWithId = idx + 1;
                    var endsWithId   = (idx + incrementor);
                    if (endsWithId >= lastItemId)
                    {
                        endsWithId = lastItemId + 1;
                    }

                    var thresholdEq = new SPThresholdEnumerationModel()
                    {
                        StartsWithId = startsWithId,
                        EndsWithId   = endsWithId
                    };

                    var camlThresholdClause = thresholdEq.AndClause;
                    if (!string.IsNullOrEmpty(camlStatement))
                    {
                        camlThresholdClause = CAML.And(camlThresholdClause, camlStatement);
                    }
                    camlQueries.Add(camlThresholdClause);

                    idx += incrementor;
                }
            }
            else
            {
                camlQueries.Add(camlStatement ?? string.Empty);
            }

            return(camlQueries);
        }
Beispiel #17
0
        public void Tag_ComplicatedQuery_DoesNotThrowXmlException()
        {
            Assert.DoesNotThrow(() =>
            {
                var fieldRefId    = CAML.FieldRef(BuiltInInternalFieldNames.ID);
                var orderByAsCaml = CAML.OrderBy(
                    CAML.FieldRef(BuiltInInternalFieldNames.ID, CAML.SortType.Ascending)
                    );

                var viewFields = new List <string>
                {
                    BuiltInInternalFieldNames.ID,
                    BuiltInInternalFieldNames.Title
                };
                var viewFieldsAsCaml = CAML.ViewFieldsByFieldNames(viewFields.ToArray());

                const int maxRowLimit = 1000;
                var rowLimitAsCaml    = CAML.RowLimit(maxRowLimit);

                const int startId = 1;
                const int endId   = maxRowLimit;

                CAML.View(
                    string.Concat(
                        CAML.Query(
                            string.Concat(
                                CAML.Where(
                                    CAML.And(
                                        CAML.Geq(
                                            fieldRefId,
                                            CAML.Value(startId)
                                            ),
                                        CAML.Leq(
                                            fieldRefId,
                                            CAML.Value(endId)
                                            )
                                        )
                                    ),
                                orderByAsCaml
                                )
                            ),
                        viewFieldsAsCaml,
                        rowLimitAsCaml
                        )
                    );
            });
        }
Beispiel #18
0
        /// <summary>
        /// Query the list to retreive the last ID
        /// </summary>
        /// <param name="onlineLibrary">The List we will query</param>
        /// <param name="lastItemModifiedDate">The date of the last modified list item</param>
        /// <returns></returns>
        public static int QueryLastItemId(this List onlineLibrary, Nullable <DateTime> lastItemModifiedDate = null)
        {
            var returnId       = 0;
            var camlFieldRefs  = new string[] { "ID", "Created", "Modified", };
            var camlViewClause = CAML.ViewFields(camlFieldRefs.Select(s => CAML.FieldRef(s)).ToArray());
            var camlQuery      = new CamlQuery()
            {
                ViewXml = CAML.ViewQuery(string.Empty, CAML.OrderBy(new OrderByField("Modified", false)), 10)
            };


            if (!lastItemModifiedDate.HasValue)
            {
                onlineLibrary.EnsureProperties(olp => olp.LastItemModifiedDate, olp => olp.LastItemUserModifiedDate);
                lastItemModifiedDate = onlineLibrary.LastItemModifiedDate;
            }


            ListItemCollectionPosition ListItemCollectionPosition = null;

            while (true)
            {
                camlQuery.ListItemCollectionPosition = ListItemCollectionPosition;
                var spListItems = onlineLibrary.GetItems(camlQuery);
                onlineLibrary.Context.Load(spListItems, lti => lti.ListItemCollectionPosition);
                onlineLibrary.Context.ExecuteQueryRetry();
                ListItemCollectionPosition = spListItems.ListItemCollectionPosition;

                if (spListItems.Any())
                {
                    foreach (var item in spListItems)
                    {
                        var itemModified = item.RetrieveListItemValue("Modified").ToDateTime();
                        System.Diagnostics.Trace.TraceInformation("Item {0} Modified {1} IS MATCH:{2}", item.Id, itemModified, (itemModified == lastItemModifiedDate));
                    }
                    returnId = spListItems.OrderByDescending(ob => ob.Id).FirstOrDefault().Id;
                    break;
                }

                if (ListItemCollectionPosition == null)
                {
                    break;
                }
            }

            return(returnId);
        }
Beispiel #19
0
        public void Test()
        {
            var caml = CAML.Where().CounterField("ID").In(new int[] { 1, 2, 3 }).ToString();

            string expected = @"<Where>
                <In>
                    <FieldRef Name=""ID"" />
                    <Values>
                        <Value Type=""Counter"">1</Value>
                        <Value Type=""Counter"">2</Value>
                        <Value Type=""Counter"">3</Value>
                    </Values>
                </In>
            </Where>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #20
0
        public void Test()
        {
            var caml = CAML
                       .View()
                       .Query()
                       .OrderBy("ID")
                       .ToString();

            string expected = @"<View>
                <Query>
                    <OrderBy>
						<FieldRef Name=""ID"" />
                    </OrderBy>
                </Query>
            </View>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
        public void Test()
        {
            var caml = CAML.Expression()
                       .All(
                CAML.Expression().DateField("BroadcastExpires").GreaterThanOrEqualTo(CamlValues.Today),
                CAML.Expression().Any(
                    CAML.Expression().UserField("BroadcastTo").IsInCurrentUserGroups(),
                    CAML.Expression().UserField("BroadcastTo").EqualToCurrentUser()
                    ),
                CAML.Expression().DateRangesOverlap(DateRangesOverlapType.Year, new DateTime().ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"))
                )
                       .ToString();

            string expected = @"<And>
                <Geq>
                    <FieldRef Name=""BroadcastExpires"" />
                    <Value Type=""DateTime"">
                        <Today />
                    </Value>
                </Geq>
                <And>
                    <Or>
                        <Membership Type=""CurrentUserGroups"">
                        <FieldRef Name=""BroadcastTo"" />
                        </Membership>
                        <Eq>
                        <FieldRef Name=""BroadcastTo"" LookupId=""True"" />
                        <Value Type=""Integer""><UserID /></Value>
                        </Eq>
                    </Or>
                    <DateRangesOverlap>
                        <FieldRef Name=""EventDate"" />
                        <FieldRef Name=""EndDate"" />
                        <FieldRef Name=""RecurrenceID"" />
                        <Value Type=""DateTime"">
                        <Year />
                        </Value>
                    </DateRangesOverlap>
                </And>
            </And>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #22
0
        public void Test()
        {
            var expression = CAML.Expression().BooleanField("Enabled").IsTrue();

            var caml = CAML.View().Query().Where().All(expression).OrderBy("Priority").ToString();

            string expected = @"<View>
                    <Query>
                        <Where>
                            <Eq><FieldRef Name=""Enabled"" /><Value Type=""Integer"">1</Value></Eq>
                        </Where>
                        <OrderBy>
                            <FieldRef Name=""Priority"" />
                        </OrderBy>
                    </Query>
                </View>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #23
0
        public void Test()
        {
            var caml = CAML
                       .View()
                       .Scope(ViewScope.RecursiveAll)
                       .Query()
                       .Where().NumberField("ID").IsNotNull()
                       .ToString();

            string expected = @"<View Scope=""RecursiveAll"">
                <Query>
                    <Where>
                        <IsNotNull>
                            <FieldRef Name=""ID"" />
                        </IsNotNull>
                    </Where>
                </Query>
            </View>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #24
0
        /// <summary>
        /// Returns the parent item ID
        /// </summary>
        /// <param name="cContext"></param>
        /// <param name="ItemName"></param>
        /// <param name="ParentListName"></param>
        /// <returns></returns>
        internal int GetParentItemID(ClientContext cContext, string ItemName, string ParentListName)
        {
            int nReturn = -1;

            try
            {
                LogVerbose("Start GetParentItemID");

                Web wWeb = cContext.Web;

                List lParentList = cContext.Web.Lists.GetByTitle(ParentListName);

                CamlQuery camlQuery = new CamlQuery
                {
                    ViewXml = CAML.Where(CAML.Eq(CAML.FieldValue("Title", FieldType.Text.ToString("f"), ItemName)))
                };
                ListItemCollection collListItem = lParentList.GetItems(camlQuery);

                cContext.Load(collListItem);

                cContext.ExecuteQuery();

                foreach (ListItem oListItem in collListItem)
                {
                    if (oListItem["Title"].ToString() == ItemName)
                    {
                        nReturn = oListItem.Id;
                        break;
                    }
                }

                LogVerbose("Complete GetParentItemID");
            }
            catch (Exception ex)
            {
                LogError(ex, ex.Message);
            }

            return(nReturn);
        }
        public void Test()
        {
            var rawQuery = @"<View Scope=""RecursiveAll"">
                <Query>
                    <Where>
                        <Eq>
                            <FieldRef Name=""ID"" />
                            <Value Type=""Number"">10</Value>
                        </Eq>
                    </Where>
                    <OrderBy>
                        <FieldRef Name=""Date"" />
                    </OrderBy>
                </Query>
            </View>";

            var caml = CAML.FromXml(rawQuery).ModifyWhere().AppendOr().TextField("Title").Contains("Summer").ToString();

            string expected = @"<View Scope=""RecursiveAll"">
                <Query>
                    <OrderBy>
                        <FieldRef Name=""Date"" />
                    </OrderBy>
                    <Where>
                        <Or>
                            <Eq>
                                <FieldRef Name=""ID"" />
                                <Value Type=""Number"">10</Value>
                            </Eq>
                            <Contains>
                                <FieldRef Name=""Title"" />
                                <Value Type=""Text"">Summer</Value>
                            </Contains>
                        </Or>
                    </Where>
                </Query>
            </View>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #26
0
        public void Test()
        {
            var caml = CAML
                       .View(new string[] { "Title", "Country", "Population" })
                       .LeftJoin("Country", "Country").Select("y4r6", "Population")
                       .Query()
                       .Where().NumberField("Population").LessThan(10)
                       .ToString();

            string expected = @"<View>
                <ViewFields>
                    <FieldRef Name=""Title"" />
                    <FieldRef Name=""Country"" />
                    <FieldRef Name=""Population"" />
                </ViewFields>
                <Joins>
                    <Join Type=""LEFT"" ListAlias=""Country"">
                        <Eq>
                            <FieldRef Name=""Country"" RefType=""ID"" />
                            <FieldRef Name=""ID"" List=""Country"" />
                        </Eq>
                    </Join>
                </Joins>
                <ProjectedFields>
                    <Field ShowField=""y4r6"" Type=""Lookup"" Name=""Population"" List=""Country"" />
                </ProjectedFields>
                <Query>
                    <Where>
                        <Lt>
                            <FieldRef Name=""Population"" />
                            <Value Type=""Number"">10</Value>
                        </Lt>
                    </Where>
                </Query>
            </View>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
        public void Test()
        {
            var caml = CAML.Where()
                       .All(
                CAML.Expression().All(
                    CAML.Expression().BooleanField("Enabled").IsTrue(),
                    CAML.Expression().UserMultiField("TargetAudience").IncludesSuchItemThat().ValueAsText().EqualTo("55").Or().UserMultiField("TargetAudience").IncludesSuchItemThat().ValueAsText().EqualTo("66")
                    ),
                CAML.Expression().Any(
                    CAML.Expression().TextField("NotificationScope").EqualTo("77"),
                    CAML.Expression().TextField("NotificationScope").EqualTo("88").And().TextField("ScopeWebRelativeUrl").EqualTo("99")
                    )
                )
                       .ToString();

            string expected = @"<Where>
                    <And>
                        <And>
                            <Eq><FieldRef Name=""Enabled"" /><Value Type=""Integer"">1</Value></Eq>
                            <Or>
                                <Eq><FieldRef Name=""TargetAudience"" /><Value Type=""Text"">55</Value></Eq>
                                <Eq><FieldRef Name=""TargetAudience"" /><Value Type=""Text"">66</Value></Eq>
                            </Or>
                        </And>
                        <Or>
                            <Eq><FieldRef Name=""NotificationScope"" /><Value Type=""Text"">77</Value></Eq>
                            <And>
                                <Eq><FieldRef Name=""NotificationScope"" /><Value Type=""Text"">88</Value></Eq>
                                <Eq><FieldRef Name=""ScopeWebRelativeUrl"" /><Value Type=""Text"">99</Value></Eq>
                            </And>
                        </Or>
                    </And>
                </Where>";

            Assert.AreEqual(Beautify.Xml(expected), Beautify.Xml(caml));
        }
Beispiel #28
0
        /// <summary>
        /// Process the request
        /// </summary>
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();

            siteColumns = new List <SPFieldDefinitionModel>();

            try
            {
                //Load list
                var siteUrl    = this.ClientContext.Url;
                var listInSite = this.ClientContext.Web.Lists.GetByTitle(ListTitle);
                this.ClientContext.Load(listInSite);
                this.ClientContext.ExecuteQuery();

                //#TODO: Provision datamigrated column for holder
                var camlWhereClause = CAML.Neq(CAML.FieldValue("DataMigrated", "Integer", "1"));

                var camlViewFields = CAML.ViewFields((new string[] { "Modified", "", "", "Id" }).Select(s => CAML.FieldRef(s)).ToArray());

                // get site and query the list for approved requests
                ListItemCollectionPosition ListItemCollectionPosition = null;
                var camlQuery = new CamlQuery()
                {
                    ViewXml = CAML.ViewQuery(ViewScope.RecursiveAll, CAML.Where(camlWhereClause), string.Empty, camlViewFields, 50)
                };


                var output = new List <object>();

                while (true)
                {
                    camlQuery.ListItemCollectionPosition = ListItemCollectionPosition;
                    var spListItems = listInSite.GetItems(camlQuery);
                    this.ClientContext.Load(spListItems, lti => lti.ListItemCollectionPosition,
                                            lti => lti.IncludeWithDefaultProperties(lnc => lnc.Id, lnc => lnc.ContentType));
                    this.ClientContext.ExecuteQuery();
                    ListItemCollectionPosition = spListItems.ListItemCollectionPosition;

                    foreach (var requestItem in spListItems)
                    {
                        var requestId = requestItem.Id;

                        ListItem _item = listInSite.GetItemById(requestId);
                        ClientContext.Load(_item);
                        ClientContext.ExecuteQueryRetry();

                        try
                        {
                            output.Add(ProcessListItem(_item));
                        }
                        catch (Exception e)
                        {
                            LogError(e, "Failed to update list item {0}", e.Message);
                        }
                    }

                    if (ListItemCollectionPosition == null)
                    {
                        break;
                    }
                }

                LogVerbose("Writing objects to memory stream.");
                output.ForEach(s => WriteObject(s));
            }
            catch (Exception ex)
            {
                LogError(ex, "Migrate failed for list items MSG:{0}", ex.Message);
            }
        }
Beispiel #29
0
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();


            var paramlistname = List.Title;
            var paramviewname = View.Title;

            this.ColumnMappings = new List <FieldMappings>();


            try
            {
                var viewlist = ClientContext.Web.GetListByTitle(paramlistname);
                ClientContext.Load(viewlist, rcll => rcll.Fields, rcll => rcll.ItemCount, rcll => rcll.ContentTypes, rcll => rcll.BaseType);
                ClientContext.Load(viewlist.Views, wv => wv.Include(wvi => wvi.Title, wvi => wvi.Id, wvi => wvi.ListViewXml, wvi => wvi.ViewFields));
                ClientContext.ExecuteQueryRetry();

                var viewFieldHeaderHtml = string.Empty;
                var view = viewlist.Views.FirstOrDefault(w => w.Title.Trim().Equals(paramviewname, StringComparison.CurrentCultureIgnoreCase));
                if (view != null)
                {
                    var doc = XDocument.Parse(view.ListViewXml);

                    var queryXml        = doc.Root.Element(XName.Get("Query"));
                    var camlFieldXml    = doc.Root.Element(XName.Get("ViewFields"));
                    var queryWhereXml   = queryXml.Element(XName.Get("Where"));
                    var queryGroupByXml = queryXml.Element(XName.Get("GroupBy"));
                    var queryOrderXml   = queryXml.Element(XName.Get("OrderBy"));

                    var queryViewCaml  = ((camlFieldXml != null) ? camlFieldXml.ToString() : string.Empty);
                    var queryWhereCaml = ((queryWhereXml != null) ? queryWhereXml.ToString() : string.Empty);
                    var queryOrderCaml = ((queryOrderXml != null) ? queryOrderXml.ToString() : string.Empty);
                    var viewFields     = new List <string>()
                    {
                        "ContentTypeId", "FileRef", "FileDirRef", "FileLeafRef"
                    };
                    if (viewlist.BaseType == BaseType.GenericList)
                    {
                        viewFields.AddRange(new string[] { ConstantsListFields.Field_LinkTitle, ConstantsListFields.Field_LinkTitleNoMenu });
                    }
                    if (viewlist.BaseType == BaseType.DocumentLibrary)
                    {
                        viewFields.AddRange(new string[] { ConstantsLibraryFields.Field_LinkFilename, ConstantsLibraryFields.Field_LinkFilenameNoMenu });
                    }
                    foreach (var xnode in camlFieldXml.Descendants())
                    {
                        var attributeValue = xnode.Attribute(XName.Get("Name"));
                        var fe             = attributeValue.Value;
                        if (fe == "ContentType")
                        {
                            fe = "ContentTypeId";
                        }

                        if (!viewFields.Any(vf => vf == fe))
                        {
                            viewFields.Add(fe);
                        }
                    }
                    // lets override the view field XML with some additional columns
                    queryViewCaml = CAML.ViewFields(viewFields.Select(s => CAML.FieldRef(s)).ToArray());


                    var viewFieldsHeader    = "<tr>";
                    var viewFieldsHeaderIdx = 0;

                    view.ViewFields.ToList().ForEach(fe =>
                    {
                        var fieldDisplayName = viewlist.Fields.FirstOrDefault(fod => fod.InternalName == fe);

                        ColumnMappings.Add(new FieldMappings()
                        {
                            ColumnInternalName = fieldDisplayName.InternalName,
                            ColumnMandatory    = fieldDisplayName.Required,
                            ColumnType         = fieldDisplayName.FieldTypeKind
                        });

                        viewFieldsHeader += string.Format("<th>{0}</th>", (fieldDisplayName == null ? fe : fieldDisplayName.Title));
                        viewFieldsHeaderIdx++;
                    });

                    viewFieldsHeader += "</tr>";


                    var innerGroupName   = string.Empty;
                    var hasGroupStrategy = false;

                    if (queryGroupByXml != null && queryGroupByXml.HasElements)
                    {
                        queryWhereCaml   = queryGroupByXml.ToString() + queryWhereCaml;
                        hasGroupStrategy = true;
                        var innerGroupBy    = queryGroupByXml.Elements();
                        var innerGroupField = innerGroupBy.FirstOrDefault();
                        innerGroupName = innerGroupField.Attribute(XName.Get("Name")).Value;
                    }

                    var camlQueryXml = CAML.ViewQuery(ViewScope.RecursiveAll, queryWhereCaml, queryOrderCaml, queryViewCaml, 500);

                    ListItemCollectionPosition camlListItemCollectionPosition = null;
                    var camlQuery = new CamlQuery();
                    camlQuery.ViewXml = camlQueryXml;

                    var previousgroupname = "zzzzzzzzzheader";
                    var htmltoemail       = new StringBuilder();
                    htmltoemail.Append("<table>");
                    if (!hasGroupStrategy)
                    {
                        htmltoemail.Append(viewFieldsHeader);
                    }

                    while (true)
                    {
                        camlQuery.ListItemCollectionPosition = camlListItemCollectionPosition;
                        var spListItems = viewlist.GetItems(camlQuery);
                        this.ClientContext.Load(spListItems, lti => lti.ListItemCollectionPosition);
                        this.ClientContext.ExecuteQueryRetry();
                        camlListItemCollectionPosition = spListItems.ListItemCollectionPosition;

                        foreach (var ittpItem in spListItems)
                        {
                            LogVerbose("Item {0}", ittpItem.Id);
                            if (hasGroupStrategy)
                            {
                                var currentgroupname = ittpItem.RetrieveListItemValue(innerGroupName).Trim();
                                if (previousgroupname != currentgroupname)
                                {
                                    htmltoemail.AppendFormat("<tr><th colspan='{0}' style='text-align:center;background-color:blue;color:white'>{1}</th></tr>", viewFieldsHeaderIdx, currentgroupname);
                                    htmltoemail.Append(viewFieldsHeader);
                                    previousgroupname = currentgroupname;
                                }
                            }

                            var htmlrow = "<tr>";
                            view.ViewFields.ToList().ForEach(fe =>
                            {
                                if (fe == "ContentType")
                                {
                                    fe = "ContentTypeId";
                                }

                                var htmlrowvalue = string.Empty;
                                try
                                {
                                    var c = ColumnMappings.FirstOrDefault(f => f.ColumnInternalName == fe);
                                    if (c != null && c.ColumnType == FieldType.Lookup)
                                    {
                                        var res      = ittpItem.RetrieveListItemValueAsLookup(fe);
                                        htmlrowvalue = res.ToLookupValue();
                                    }
                                    else if (c != null && c.ColumnType == FieldType.User)
                                    {
                                        var res      = ittpItem.RetrieveListItemUserValue(fe);
                                        htmlrowvalue = res.ToUserValue();
                                    }
                                    else
                                    {
                                        htmlrowvalue = ittpItem.RetrieveListItemValue(fe);
                                    }
                                }
                                catch (Exception fex) {
                                    LogWarning("Failed to retreive {0} msg => {1}", fe, fex.Message);
                                }
                                finally { }

                                htmlrow += string.Format("<td>{0}</td>", htmlrowvalue);
                            });
                            htmlrow += "</tr>";
                            htmltoemail.Append(htmlrow);
                        }

                        if (camlListItemCollectionPosition == null)
                        {
                            break;
                        }
                    }


                    htmltoemail.Append("</table>");



                    var properties = new EmailProperties
                    {
                        To      = SendTo,
                        Subject = $"HTML from Email List ${List.Title}",
                        Body    = string.Format("<div>{0}</div>", htmltoemail.ToString())
                    };

                    Microsoft.SharePoint.Client.Utilities.Utility.SendEmail(this.ClientContext, properties);
                    this.ClientContext.ExecuteQueryRetry();
                }
            }
            catch (Exception fex)
            {
                LogError(fex, "Failed to parse view and produce HTML report");
            }
        }
Beispiel #30
0
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();


            var fields = new string[]
            {
                "_dlc_DocId", "_dlc_DocIdUrl", "Modified", "Editor", "ServerRedirectedEmbedUri", "FileRef", "Title"
            };
            var fieldsXml = CAML.ViewFields(fields.Select(s => CAML.FieldRef(s)).ToArray());

            var onlineLibrary = List.GetList(this.ClientContext.Web);

            foreach (var csvitem in Items)
            {
                var ItemId = csvitem.Id;
                try
                {
                    var item = onlineLibrary.GetItemById(ItemId);
                    this.ClientContext.Load(item);
                    this.ClientContext.ExecuteQueryRetry();

                    if (item == null)
                    {
                        LogWarning("Failed to retreive listitem ID {0}", ItemId);
                    }
                    else
                    {
                        var docId               = item.RetrieveListItemValue("_dlc_DocId");
                        var docIdUrl            = item.RetrieveListItemValueAsHyperlink("_dlc_DocIdUrl");
                        var modified            = item.RetrieveListItemValue("Modified");
                        var editor              = item.RetrieveListItemUserValue("Editor");
                        var redirectEmbeddedUrl = item.RetrieveListItemValue("ServerRedirectedEmbedUri");
                        var fileRef             = item.RetrieveListItemValue("FileRef");
                        var title               = item.RetrieveListItemValue("Title");
                        LogVerbose("[PRE UPDATE] ==> DocId {0}  DocIdUrl {1}, Modified {2} Editor {3}, Embedded Url {4}, FileRef {5}", docId, (docIdUrl != null ? docIdUrl.Url : ""), modified, editor.Email, redirectEmbeddedUrl, fileRef);

                        if (docIdUrl != null && docIdUrl.Url.IndexOf(PartialUrl, StringComparison.InvariantCultureIgnoreCase) > -1)
                        {
                            item["_dlc_DocId"]    = null;
                            item["_dlc_DocIdUrl"] = null;
                            item["Modified"]      = modified;
                            item["Editor"]        = editor;

                            // January 5, 2015 8:53:42 PM	[email protected]
                            //item["Modified"] = DateTime.Parse("1/5/2015 8:53:42 PM");
                            //item["Editor"] = new FieldUserValue() { LookupId = user.Id };
                            item.SystemUpdate();
                            this.ClientContext.ExecuteQueryRetry();



                            item = onlineLibrary.GetItemById(ItemId);
                            this.ClientContext.Load(item);
                            this.ClientContext.ExecuteQueryRetry();


                            docId               = item.RetrieveListItemValue("_dlc_DocId");
                            docIdUrl            = item.RetrieveListItemValueAsHyperlink("_dlc_DocIdUrl");
                            modified            = item.RetrieveListItemValue("Modified");
                            editor              = item.RetrieveListItemUserValue("Editor");
                            redirectEmbeddedUrl = item.RetrieveListItemValue("ServerRedirectedEmbedUri");
                            fileRef             = item.RetrieveListItemValue("FileRef");
                            title               = item.RetrieveListItemValue("Title");
                            LogVerbose("[POST UPDATE] ==> DocId {0}  DocIdUrl {1}, Modified {2} Editor {3}, Embedded Url {4}, FileRef {5}", docId, (docIdUrl != null ? docIdUrl.Url : ""), modified, editor.Email, redirectEmbeddedUrl, fileRef);
                        }
                        else
                        {
                            LogWarning("Item ID {0} has a url which does not need to be updated.", ItemId);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogWarning("Failed to process list item {0} with message {1}", ItemId, ex.Message);
                }
            }
        }
Beispiel #31
0
        /// <summary>
        /// Retrieves or creates the folder as a ListItem
        /// </summary>
        /// <param name="onlineLibrary"></param>
        /// <param name="destinationFolder"></param>
        /// <param name="folderName"></param>
        /// <param name="defaultLastItemId"></param>
        /// <returns>The listitem as a folder</returns>
        public static Folder GetOrCreateFolder(this List onlineLibrary, Folder destinationFolder, string folderName, int?defaultLastItemId = default(int?))
        {
            destinationFolder.EnsureProperties(afold => afold.ServerRelativeUrl, afold => afold.Folders);
            var folderRelativeUrl = destinationFolder.ServerRelativeUrl;
            // Remove invalid characters
            var      trimmedFolder = HelperExtensions.GetCleanDirectory(folderName, string.Empty);
            ListItem folderItem    = null;

            var camlFields     = new string[] { "Title", "ContentType", "ID" };
            var camlViewFields = CAML.ViewFields(camlFields.Select(s => CAML.FieldRef(s)).ToArray());


            var camlClause = CAML.And(
                CAML.And(
                    CAML.Eq(CAML.FieldValue("FileDirRef", FieldType.Text.ToString("f"), folderRelativeUrl)),
                    CAML.Or(
                        CAML.Eq(CAML.FieldValue("LinkFilename", FieldType.Text.ToString("f"), trimmedFolder)),
                        CAML.Eq(CAML.FieldValue("Title", FieldType.Text.ToString("f"), trimmedFolder))
                        )
                    )
                ,
                CAML.Eq(CAML.FieldValue("FSObjType", FieldType.Integer.ToString("f"), 1.ToString()))
                );

            var camlQueries = onlineLibrary.SafeCamlClauseFromThreshold(camlClause, defaultLastItemId);

            foreach (var camlAndValue in camlQueries)
            {
                var camlWhereClause = CAML.Where(camlAndValue);
                var camlQuery       = new CamlQuery()
                {
                    ViewXml = CAML.ViewQuery(ViewScope.RecursiveAll, camlWhereClause, string.Empty, camlViewFields, 5)
                };
                var listItems = onlineLibrary.GetItems(camlQuery);
                onlineLibrary.Context.Load(listItems);
                onlineLibrary.Context.ExecuteQueryRetry();

                if (listItems.Count() > 0)
                {
                    folderItem = listItems.FirstOrDefault();
                    System.Diagnostics.Trace.TraceInformation("Item {0} exists in the destination folder.  Skip item creation file.....", folderName);
                    break;
                }
            }
            ;

            if (folderItem != null)
            {
                return(folderItem.Folder);
            }

            try
            {
                var info = new ListItemCreationInformation();
                info.UnderlyingObjectType = FileSystemObjectType.Folder;
                info.LeafName             = trimmedFolder;
                info.FolderUrl            = folderRelativeUrl;

                folderItem          = onlineLibrary.AddItem(info);
                folderItem["Title"] = trimmedFolder;
                folderItem.Update();
                onlineLibrary.Context.ExecuteQueryRetry();
                System.Diagnostics.Trace.TraceInformation("{0} folder Created", trimmedFolder);
                return(folderItem.Folder);
            }
            catch (Exception Ex)
            {
                System.Diagnostics.Trace.TraceError("Failed to create or get folder for name {0} MSG:{1}", folderName, Ex.Message);
            }

            return(null);
        }