Showing posts with label SharePoint Online. Show all posts
Showing posts with label SharePoint Online. Show all posts

Monday, July 20, 2015

SharePoint Online - Create a SharePoint Group dynamically based on the permission type to all SharePoint Sites

Scenario - Suppose you have a SharePoint site collection and you would like to add a new group to all sites and sub-sites (Unique Permissions). 

The following code creates a group to all sites based on the permission type and name it with "SITENAME_PERMISSION". You can change it to any parameter.


using (ClientContext clientContextSub = new ClientContext(strSiteUrl))
            {
                SecureString passWord = new SecureString();
                foreach (char c in password.ToCharArray()) passWord.AppendChar(c);
     clientContextSub.Credentials = new SharePointOnlineCredentials(userName, passWord);
                clientContextSub.ExecuteQuery();
                try
                {

                 Web webSubWeb = clientContextSub.Web;
                 GroupCollection groupCollection = webSubWeb.SiteGroups;
                 clientContextSub.Load(webSubWeb.RoleAssignments);
                 clientContextSub.Load(
                 webSubWeb,
                   web2SubWebSubNode => web2SubWebSubNode.Title,
                   web2SubWebSubNode => web2SubWebSubNode.Url,
                   web2SubWebSubNode => web2SubWebSubNode.LastItemModifiedDate,
                   web2SubWebSubNode => web2SubWebSubNode.HasUniqueRoleAssignments);
                   clientContextSub.ExecuteQuery();
                  
                    if (webSubWeb.HasUniqueRoleAssignments)
                    {
                        bool _permissionGroupAvailable = false;
                        string _groupNameToAssign = string.Empty;
                        string groupOwener = string.Empty;
                        foreach (RoleAssignment assignment in webSubWeb.RoleAssignments)
                        {
                            try
                            {
                                string Role = string.Empty;
                                clientContextSub.Load(assignment.Member);
                                clientContextSub.Load(assignment.RoleDefinitionBindings);
                                clientContextSub.ExecuteQuery();

                    foreach (RoleDefinition roleDef in assignment.RoleDefinitionBindings)
                                {
//CMBAddGroup is selected permission type from a dropdown (Ex- Full Control, Read, Contribute)
       if (roleDef.Name.ToString().Trim() == cmbAddGroup.SelectedItem.ToString().Trim())
                                    {
                                        _permissionGroupAvailable = true;
                                        break;
                                    }

                                }
                                if (_permissionGroupAvailable)
                                { break; }

                            }

                            catch (Exception ex)
                            {
                               continue;
                            }
                        }
                        if (!(_permissionGroupAvailable))
                        {
                           
                           {
_groupNameToAssign = webSubWeb.Title + "_" + cmbAddGroup.SelectedItem.ToString();
GroupCreationInformation newGroupInfo = new GroupCreationInformation();
newGroupInfo.Title=_groupNameToAssign.ToString();
Group groupExist = webSubWeb.SiteGroups.GetByName(_groupNameToAssign);
                            if (groupExist == null)
                            {
Group oGroup = webSubWeb.SiteGroups.Add(newGroupInfo);
RoleDefinitionBindingCollection collRoleDefinitionBinding = new RoleDefinitionBindingCollection(clientContextSub);
RoleDefinition oRoleDefinition = webSubWeb.RoleDefinitions.GetByName(cmbAddGroup.SelectedItem.ToString());
collRoleDefinitionBinding.Add(oRoleDefinition);
webSubWeb.RoleAssignments.Add(oGroup, collRoleDefinitionBinding);
clientContextSub.Load(oGroup, group => group.Title);
clientContextSub.Load(oRoleDefinition,role => role.Name);
clientContextSub.ExecuteQuery();
                            }
                            else
                            {
RoleDefinitionBindingCollection collRoleDefinitionBinding = new RoleDefinitionBindingCollection(clientContextSub);
RoleDefinition oRoleDefinition = webSubWeb.RoleDefinitions.GetByName(cmbAddGroup.SelectedItem.ToString());
collRoleDefinitionBinding.Add(oRoleDefinition);
webSubWeb.RoleAssignments.Add(groupExist, collRoleDefinitionBinding);
clientContextSub.Load(groupExist, group => group.Title);
clientContextSub.Load(oRoleDefinition,role => role.Name);
clientContextSub.ExecuteQuery();

                            }
                            }
                            }

                       
                        }
                    }

            

                catch (Exception ex)
                {
                    helpClass.ErrorLog("", "Error MESSAGE: " + ex.Message);

                }
            }

        }


Wednesday, June 3, 2015

SharePoint Online - How to get size of a site collection Recycle Bin - First Stage Recycle Bin

Requirement - In SharePoint Online, First Stage Recycle Bin consumes your site quota space. The following code gets how much data is there under the First Stage Recycle Bin.

Note - Always pass Site URL. Web URL will not work and always return 0.

Function getRecycleBinSize takes URL is parameter and stores all results in a data table.

public void getRecycleBinSize(string URL)
        {
            DataTable dtRecycleBin = new DataTable();
            using (ClientContext clientContext = new ClientContext(URL))
            {
                SecureString passWord = new SecureString();
                foreach (char c in password.ToCharArray()) passWord.AppendChar(c);
                clientContext.Credentials = new SharePointOnlineCredentials(userName, passWord);
                Site s = clientContext.Site;
                Web web = clientContext.Web;
                clientContext.Load(web);
                clientContext.Load(s);
                clientContext.Load(s.RecycleBin);
                clientContext.ExecuteQuery();
                if(dtRecycleBin.Columns.Count==0)
                {
                dtRecycleBin.Columns.Add(constantVariables.Title);
                dtRecycleBin.Columns.Add(constantVariables.deletedBy);
                dtRecycleBin.Columns.Add(constantVariables.deletionDate);
                dtRecycleBin.Columns.Add(constantVariables.location);
                dtRecycleBin.Columns.Add(constantVariables.itemState);
                dtRecycleBin.Columns.Add(constantVariables.itemType);
                dtRecycleBin.Columns.Add(constantVariables.leafName);
                dtRecycleBin.Columns.Add(constantVariables.size);
                }
             
                RecycleBinItemCollection recyclebinItemCollection = s.RecycleBin;
                clientContext.Load(recyclebinItemCollection);
                clientContext.ExecuteQuery();
                int count = recyclebinItemCollection.Count;
                int i = 0;
                foreach (RecycleBinItem item in recyclebinItemCollection)
                {                  
                   
                    if (item.ItemState.ToString().ToLower() == "FirstStageRecycleBin".ToLower())
                    {
                        DataRow newRow = dtRecycleBin.NewRow();
                        dtRecycleBin.Rows.Add(newRow);
                        newRow[0] =  item.Title.ToString() ;
                        newRow[1] =  item.DeletedBy.ToString();
                        newRow[2] =  item.DeletedDate ;
                        newRow[3] =  item.DirName ;
                        newRow[4] =  item.ItemState ;
                        newRow[5] =  item.ItemType ;
                        newRow[6] =  item.LeafName;
                        newRow[7] =  item.Size ;
                    }
                    i++;
                                   
                }
            }
            dataGridView2.DataSource = null;
            dataGridView2.DataSource = dtRecycleBin;
        }

Thursday, May 28, 2015

SharePoint Online - Add User to SharePoint Security Group with a specific permission

The following code can be used to add user to a specific group.

Requirement - Business want to add a specific user to a site collection and all it's sub-site in a specific group. Ex: Full Control or Read or Edit.


using (ClientContext clientContextSub = new ClientContext(siteUrl))
                        {
                            SecureString passWord = new SecureString();
                            foreach (char c in password.ToCharArray()) passWord.AppendChar(c);
                clientContextSub.Credentials = new SharePointOnlineCredentials(userName, passWord);
                            Web webSubWeb = clientContextSub.Web;
                            GroupCollection groupCollection = clientContextSub.Web.SiteGroups;
                            UserCollection ucol = clientContextSub.Web.SiteUsers;
                            clientContextSub.Load(webSubWeb);
                            clientContextSub.ExecuteQuery();

                           //txtAddUserToGroup is a text file to add to groups
                            Principal user = ucol.GetByEmail(txtAddUserToGroup.Text.ToString().Trim());
                            clientContextSub.Load(user);
                            clientContextSub.ExecuteQuery();


// dtGroupUsers is a datatable logging who's being added to which group with other information
                            if (dtGroupandUsers.Rows.Count == 0)
                            {
                                if(dtGroupandUsers.Columns.Count==0)
                                {
                                dtGroupandUsers.Columns.Add(constantVariables.SiteURL);
                                dtGroupandUsers.Columns.Add(constantVariables.Title);
                                dtGroupandUsers.Columns.Add(constantVariables.userGroups);
                                dtGroupandUsers.Columns.Add(constantVariables.userLogin);
                                dtGroupandUsers.Columns.Add(constantVariables.emailAddress);
                                dtGroupandUsers.Columns.Add(constantVariables.name);
                                dtGroupandUsers.Columns.Add(constantVariables.LastModified);
                                dtGroupandUsers.Columns.Add(constantVariables.siteInheritance);
                                dtGroupandUsers.Columns.Add(constantVariables.groupOwner);
                                dtGroupandUsers.Columns.Add(constantVariables.permission);
                                }
                            }
                            else
                            { dtGroupandUsers.Rows.Clear(); }          
                            if (user != null)
                            {
                                addUsertoGroup(webSubWeb, clientContextSub,user);
                             
                            }
                            }
                    }

///***Other Function ***///
public void addUsertoGroup(Web webSubWeb, ClientContext clientContextSub, Principal user)
        {
string groupOwener = string.Empty;
            clientContextSub.Load(webSubWeb);
            clientContextSub.Load(webSubWeb.Webs);
            clientContextSub.Load(webSubWeb.RoleAssignments);
            clientContextSub.ExecuteQuery();
            foreach (RoleAssignment assignment in webSubWeb.RoleAssignments)
            {
                string Role = string.Empty;
                clientContextSub.Load(assignment.Member);
                clientContextSub.Load(assignment.RoleDefinitionBindings);
                GroupCollection groupCollection = webSubWeb.SiteGroups;
                clientContextSub.ExecuteQuery();
                foreach (RoleDefinition roleDef in assignment.RoleDefinitionBindings)
                {
                    if (roleDef.Name != string.Empty)
                    {
                       //cmbUserCollection.Text  is a dropdown control and user has selected "Full Control" and any group having permission "Full Control" with add this user.

      if (roleDef.Name.ToString().ToLower() == cmbUserCollection.Text.ToString().ToLower())
                        {
                            int Cnt = assignment.RoleDefinitionBindings.Count;
                            Principal Pri = assignment.Member;
                            if (Pri.PrincipalType == PrincipalType.SharePointGroup)
                            {                              
                                UserCreationInformation userCreationInfo = new UserCreationInformation();
                                userCreationInfo.Email = user.LoginName;
                                userCreationInfo.LoginName = user.LoginName;
                                userCreationInfo.Title = user.Title;
                                Group grp = groupCollection.GetByName(Pri.LoginName);
                                clientContextSub.Load(grp);
                                clientContextSub.ExecuteQuery();
                               
                                grp.Users.Add(userCreationInfo);
                             
                                    DataRow dtGU = dtGroupandUsers.NewRow();
                                    dtGroupandUsers.Rows.Add(dtGU);
                                    dtGU[0] = "\"" + webSubWeb.Url.ToString() + "\"";
                                    dtGU[1] = "\"" + webSubWeb.Title.ToString() + "\"";
                                    dtGU[2] = "\"" + grp.Title.ToString() + "\"";
                                    dtGU[3] = "\"" + user.LoginName.ToString() + "\"";
                                    if (user.LoginName.Contains('#'))
                                    {
dtGU[4] = "\"" + user.LoginName.Substring(18, (user.LoginName.Length - 18)).Trim() + "\""; }
                                    dtGU[5] = "\"" + user.Title.ToString() + "\"";
                                    dtGU[6] = "\"" + webSubWeb.LastItemModifiedDate;
                                    dtGU[7] = "";
                                    dtGU[8] = "\"" + grp.OwnerTitle.ToString() + "\"";
                                    dtGU[9] = roleDef.Name.ToString();
                            }              
                        }            
                    }
                }
               
            }
           
            if (webSubWeb.Webs.Count > 0)
            {
                foreach (Web web in webSubWeb.Webs)
                {
                    addUsertoGroup(web, clientContextSub, user);

                }
           
            }}