Wednesday, 21 September 2016

Exception: The collection was modified. Enumeration operation may not execute.


Change

foreach(Object x in ObjectCollection) {...}

to

foreach(Object x in ObjectCollection.ToList()) {...}

Wednesday, 14 September 2016

Bulk delete SharePoint list items: CSOM


Call this method recursively:

public static void deleteExistingItemFromDestination(string listName)
        {
            try
            {
                ClientContext context = new ClientContext("https://domain.com/sites/siteColl/siteName/");
                string decryptedPwd = "password";
                foreach (char c in decryptedPwd)
                {
                    securePassword.AppendChar(c);
                }
                context.Credentials = new NetworkCredential("user", decryptedPwd, "Domain");
                Web web = context.Web;
                context.Load(web);

                List list = web.Lists.GetByTitle(listName);
                context.Load(list);
                context.ExecuteQuery();
                CamlQuery camlQuery = new CamlQuery();
                camlQuery.ViewXml = "@<View Scope='RecursiveAll'>"
                                        + "<Query>"
                                            + "<OrderBy><FieldRef Name='ID' Ascending='TRUE'/></OrderBy>"
                                        + "</Query>"
                                        + "<RowLimit Paged='TRUE'>5000</RowLimit>"
                                    + "</View>";
                ListItemCollection lstcoll = list.GetItems(camlQuery);
                Console.WriteLine("Starting at: "+System.DateTime.Now.ToShortTimeString());
                context.Load(lstcoll);
                context.ExecuteQuery();
                Console.WriteLine("\r\n\r\nDeleting...");
                foreach (ListItem eitem in lstcoll)
                {
                    ListItem item = list.GetItemById(Convert.ToInt32(eitem["ID"]));
                    item.DeleteObject();
                    context.ExecuteQuery();
                }
                Console.WriteLine("Completed at: " + System.DateTime.Now.ToShortTimeString());
             
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.Read();
            }
        } 

Tuesday, 13 September 2016

Show Hide Fields Based On Dropdown Selection Sharepoint 2013


http://www.myclassbook.org/hide-show-fields-in-sharepoint-depending-on-drop-down/

Monday, 12 September 2016

How to get filtered list items using CAML query in CSOM?



Microsoft.SharePoint.Client.CamlQuery query = new Microsoft.SharePoint.Client.CamlQuery();


query.ViewXml = "<View>"
   + "<Query>"
   + "<Where><Eq><FieldRef Name='Title' /><Value Type='Text'>Navneet</Value></Eq></Where>"
   + "</Query>"
   + "</View>";


ListItemCollection listItems = list.GetItems(query);
clientContext.Load(listItems);
clientContext.ExecuteQuery();

Friday, 2 September 2016

Multiple lookup SPD Workflow: How to filter list item based on two columns in SharePoint designer 2013 workflow?


In SharePoint designer you can lookup only one column.

So, create a calculated column in the source list and concatenate the two columns.

Calculated column (KEY) = CONCATENATE([ColumnA],[ColumnB])

Now you can perform lookup on this calculated column.

In SharePoint designer create a variable by concatenating the columns containing the data same as ColumnA and ColumnB.

As SPD doesn't have concatenate function so, you can use string builder to achieve the merged string:


Multiple lookup SPD Workflow: How to filter list item based on two columns in SharePoint designer 2013 workflow?

How to set unique permission for list items based on the users present in list columns for each item?


 static void Main(string[] args)
        {

            Console.Write("Enter list name:\r\n");
            string listTitle = Console.ReadLine();
            Console.Write("\r\nEnter column names separated by columns without space:\r\n");
            string listColumns = Console.ReadLine();
            SetItemPermissions(listTitle, listColumns);
       }


public static void SetItemPermissions(string listName, string fields)
        {
            try
            {
                int y = 0;
                ClientContext context = new ClientContext("https://domain.com/sites/siteColl/siteName/");
                string decryptedPwdt = "password";
                foreach (char c in decryptedPwdt)
                {
                    securePassword.AppendChar(c);
                }

                context.Credentials = new NetworkCredential("user", decryptedPwdt, "Domain");
                Web web = context.Web;
                context.Load(web);

                List list = web.Lists.GetByTitle(listName);
                context.Load(list);

                CamlQuery camlQuery = new CamlQuery();
                ListItemCollection itemColl = list.GetItems(camlQuery);
                string[] columnNames = fields.Split(',');

                foreach (string column in columnNames)
                {
                    context.Load(itemColl, includes => includes.Include(i => i[column]));
                }
                context.ExecuteQuery();

                foreach (ListItem item in itemColl)
                {
                    item.BreakRoleInheritance(false, false);

                    foreach (string member in columnNames)
                    {
                        try
                        {
                            if (item[member].GetType().ToString() == "Microsoft.SharePoint.Client.FieldUserValue")
                            {
                                try
                                {
                                    User user = web.EnsureUser((((Microsoft.SharePoint.Client.FieldUserValue)(item[member])).LookupValue).ToString());
                                    RoleDefinitionBindingCollection roleColl = new RoleDefinitionBindingCollection(context);
                                    roleColl.Add(context.Web.RoleDefinitions.GetByName("Custom permission level"));
                                    item.RoleAssignments.Add(user, roleColl);
                                }
                                catch
                                {
                                    User user = web.EnsureUser((((Microsoft.SharePoint.Client.FieldUserValue)(item[member])).Email).ToString());
                                    RoleDefinitionBindingCollection roleColl = new RoleDefinitionBindingCollection(context);
                                    roleColl.Add(context.Web.RoleDefinitions.GetByName("Custom permission level"));
                                    item.RoleAssignments.Add(user, roleColl);
                                }
                            }
                            else
                            {
                                User user = web.EnsureUser(item[member].ToString());
                                RoleDefinitionBindingCollection roleColl = new RoleDefinitionBindingCollection(context);
                                roleColl.Add(context.Web.RoleDefinitions.GetByName("Custom permission level"));
                                item.RoleAssignments.Add(user, roleColl);
                            }
                        }
                        catch { }
                    }

                    try
                    {

                        Group groupMember = web.SiteGroups.GetByName("Group1");
                        Group groupOwner = web.SiteGroups.GetByName("Group2");
                        Group groupTL = web.SiteGroups.GetByName("Group3");



                        RoleDefinitionBindingCollection roleCollEdit = new RoleDefinitionBindingCollection(context);
                        roleCollEdit.Add(context.Web.RoleDefinitions.GetByName("Edit"));

                        RoleDefinitionBindingCollection roleCollFull = new RoleDefinitionBindingCollection(context);

                        roleCollFull.Add(context.Web.RoleDefinitions.GetByName("Full Control"));
                        item.RoleAssignments.Add(groupMember, roleCollEdit);
                        item.RoleAssignments.Add(groupOwner, roleCollFull);
                        item.RoleAssignments.Add(groupTL, roleCollEdit);


                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }

                    try
                    {
                        item.Update();
                        context.ExecuteQuery();
                    }
                    catch (Exception ex)
                    {
                        if (ex.HResult == -2146233088)
                        {
                            Group groupMember = web.SiteGroups.GetByName("Group1");
                            Group groupOwner = web.SiteGroups.GetByName("Group2");
                            Group groupTL = web.SiteGroups.GetByName("Group3");



                            RoleDefinitionBindingCollection roleCollEdit = new RoleDefinitionBindingCollection(context);
                            roleCollEdit.Add(context.Web.RoleDefinitions.GetByName("Edit"));

                            RoleDefinitionBindingCollection roleCollFull = new RoleDefinitionBindingCollection(context);

                            roleCollFull.Add(context.Web.RoleDefinitions.GetByName("Full Control"));
                            item.RoleAssignments.Add(groupMember, roleCollEdit);
                            item.RoleAssignments.Add(groupOwner, roleCollFull);
                            item.RoleAssignments.Add(groupTL, roleCollEdit);
                            item.Update();
                            try
                            {
                                context.ExecuteQuery();
                            }
                            catch (Exception ex2)
                            {
                                Console.WriteLine(ex2.Message);
                            }
                        }
                    }

                    Console.Write(".");
                    y++;
                    if (y == 1) Console.WriteLine("\r\n1 item updated.");
                    if (y == 100) Console.WriteLine("\r\n100 items updated.");
                    if (y == 500) Console.WriteLine("\r\n500 items updated.");
                    if (y == 800) Console.WriteLine("\r\n800 items updated.");
                    if (y == 1000) Console.WriteLine("\r\n1000 items updated.");
                    if (y == 2000) Console.WriteLine("\r\n2000 items updated.");
                    if (y == 3000) Console.WriteLine("\r\n3000 items updated.");
                    if (y == 4000) Console.WriteLine("\r\n4000 items updated.");
                }
                Console.WriteLine("\r\nDone!");
                Console.Read();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.Read();
            }

        }

How to reset SharePoint list items permission from unique permission to inheriting from parent?


public static void ResetItemPermissions(string listName)
        {
            ClientContext context = new ClientContext("https://domain.com/sites/siteColl/siteName/");
            string decryptedPwdt = "password";
            foreach (char c in decryptedPwdt)
            {
                securePassword.AppendChar(c);
            }
            context.Credentials = new NetworkCredential("user", decryptedPwdt, "Domain");
            Web web = context.Web;
            context.Load(web);

            List list = web.Lists.GetByTitle(listName);
            context.Load(list);

            CamlQuery camlQuery = new CamlQuery();
            ListItemCollection itemColl = list.GetItems(camlQuery);
            context.Load(itemColl);
            context.ExecuteQuery();

            foreach (ListItem item in itemColl)
            {
                item.ResetRoleInheritance();
                item.Update();
                context.ExecuteQuery();

                Console.Write(".");
           
            }
            Console.WriteLine("\r\nDone!");
            Console.Read();
        }