public override void ShareWithPeople(IEnumerable <string> emails, bool isEdit) { if (emails == null || !emails.Any()) { return; } var userRoles = new List <UserRoleAssignment>(); foreach (var user in emails) { UserRoleAssignment role = new UserRoleAssignment(); role.UserId = user; role.Role = isEdit ? Role.Edit : Role.View; userRoles.Add(role); } string message = "Please accept this invite."; //the parameter before the message is responsible for sending emails DocumentSharingManager.UpdateDocumentSharingInfo(_context, (string)_item["EncodedAbsUrl"], userRoles, true, true, false, message, true, true); _context.ExecuteQuery(); // alternatively we can do this like below, but this does not add any people // Web.CreateAnonymousLink(_context, (string)_item["EncodedAbsUrl"], false); // Web.CreateOrganizationSharingLink(_context, (string) _item["EncodedAbsUrl"], true); // _context.ExecuteQuery(); // for web sharing the following can be used // WebSharingManager.UpdateWebSharingInformation(_context, _item.ParentList.ParentWeb, userRoles, true, message, true, true); }
public static void CreateAndShareFolder(ClientContext context, string folderName, string userEmail) { var listTitle = "Dokumente"; var rootFolder = "Testfolder_ROOT/"; var folder = CreateFolder(context.Web, listTitle, rootFolder + folderName); var users = new List <UserRoleAssignment>(); users.Add(new UserRoleAssignment() { UserId = userEmail, Role = Role.Edit, }); var serverRelativeUrl = folder.ServerRelativeUrl; var absoluteUrl = new Uri(context.Url).GetLeftPart(UriPartial.Authority) + serverRelativeUrl; // Diest konnte eine Spur auf den richtign Weg sein! // https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom.aspx?Sort=MostUseful&PageIndex=1#Property //var spoTenant = new Microsoft.Online.SharePoint.TenantAdministration.Tenant(context); //context.Load(spoTenant); //context.ExecuteQuery(); //spoTenant.RequireAcceptingAccountMatchInvitedAccount = true; //context.Load(spoTenant); //context.ExecuteQuery(); /* User gets Email, but with "public" Sharing-Link */ //var userSharingResults = DocumentSharingManager.UpdateDocumentSharingInfo(context, // absoluteUrl, // users, // validateExistingPermissions: false, // additiveMode: true, // sendServerManagedNotification: true, // customMessage: null, // includeAnonymousLinksInNotification: true, // propagateAcl: false); /* User gets Email, but needs an MS-Account to View */ var userSharingResults = DocumentSharingManager.UpdateDocumentSharingInfo(context, absoluteUrl, users, validateExistingPermissions: false, additiveMode: false, sendServerManagedNotification: true, customMessage: null, includeAnonymousLinksInNotification: false, propagateAcl: true); context.ExecuteQuery(); if (userSharingResults.FirstOrDefault()?.Status != true) { Console.WriteLine($"Fehler beim Erstellen {userSharingResults.FirstOrDefault()?.Message}"); } }
// Token: 0x06000022 RID: 34 RVA: 0x000022A8 File Offset: 0x000004A8 public IList <IUserSharingResult> DocumentSharingManagerUpdateDocumentSharingInfo(string resourceAddress, IList <UserRoleAssignment> userRoleAssignments, bool validateExistingPermissions, bool additiveMode, bool sendServerManagedNotification, string customMessage, bool includeAnonymousLinksInNotification) { IList <UserSharingResult> list = DocumentSharingManager.UpdateDocumentSharingInfo(this.BackingClientContext, resourceAddress, userRoleAssignments, validateExistingPermissions, additiveMode, sendServerManagedNotification, customMessage, includeAnonymousLinksInNotification); List <IUserSharingResult> list2 = new List <IUserSharingResult>(); foreach (UserSharingResult result in list) { list2.Add(new UserSharingResultWrapper(result)); } return(list2); }
/// <summary> /// This method will send notifications to external users /// </summary> /// <param name="externalSharingRequest"></param> /// <returns></returns> private GenericResponseVM SendExternalNotification(MatterInformationVM matterInformation, string permission, string externalEmail) { var clientUrl = $"{matterInformation.Client.Url}"; try { var users = new List <UserRoleAssignment>(); UserRoleAssignment userRole = new UserRoleAssignment(); userRole.UserId = externalEmail; switch (permission.ToLower()) { case "full control": userRole.Role = SharePoint.Client.Sharing.Role.Owner; break; case "contribute": userRole.Role = SharePoint.Client.Sharing.Role.Edit; break; case "read": userRole.Role = SharePoint.Client.Sharing.Role.View; break; } users.Add(userRole); #region Doc Sharing API //Need to use MatterGuid instead of Id string matterLandingPageUrl = $"{clientUrl}/sitepages/{matterInformation.Matter.MatterGuid + ServiceConstants.ASPX_EXTENSION}"; string catalogSiteAssetsLibraryUrl = $"{generalSettings.CentralRepositoryUrl}/SitePages/home.aspx"; using (var clientContext = spoAuthorization.GetClientContext(clientUrl)) { //Send notification to the matter landing page url with permission the user has selected IList <UserSharingResult> matterLandingPageResult = DocumentSharingManager.UpdateDocumentSharingInfo(clientContext, matterLandingPageUrl, users, true, true, true, "The following matter page has been shared with you", true, true); clientContext.ExecuteQuery(); } return(null); #endregion } catch (Exception ex) { throw; } }