Я новичок в разработке CSOM / Sharepoint и мне предстоит решить интересную задачу.К сожалению, я не делаю так много прогресса с некоторыми деталями, как хотелось бы.Мой клиент хочет безопасный способ обмена конфиденциальными документами.Поэтому моя идея заключалась в том, чтобы создать папку в Sharepoint для каждого клиента и поделиться ею с клиентом в качестве гостя.Таким образом, клиент имеет доступ к «своей» папке с документами и может загружать и скачивать документы там.Я могу сделать это и вручную, но я бы хотел решить эту проблему программно через CSOM.
Программное создание папки, которой я управлял до сих пор.Также загрузка файла не является проблемой.Однако выпуск папки клиента является проблематичным.Мне удалось открыть общий доступ к папке, чтобы клиент мог войти в систему под своей учетной записью Microsoft или чтобы заказ был выпущен «для всех».
Мне нужен личный выпуск БЕЗ форсирования учетной записи MS.Персональная ссылка с кодом подтверждения и т. Д. *
Пока это мой код.
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;
/* User gets Email, but with "public" Sharing-Link */
//var userSharingResults = DocumentSharingManager.UpdateDocumentSharingInfo(context, absoluteUrl, users, true, true, true, null, true, true);
/* User gets Email, but needs an MS-Account to View */
var userSharingResults = DocumentSharingManager.UpdateDocumentSharingInfo(context, absoluteUrl, users, false, false, true, null, false, true);
context.ExecuteQuery();
}
// From Stackoverflow: https://stackoverflow.com/a/22010815/3062062
public static Folder CreateFolder(Web web, string listTitle, string fullFolderUrl)
{
if (string.IsNullOrEmpty(fullFolderUrl))
throw new ArgumentNullException("fullFolderUrl");
var list = web.Lists.GetByTitle(listTitle);
return CreateFolderInternal(web, list.RootFolder, fullFolderUrl);
}
private static Folder CreateFolderInternal(Web web, Folder parentFolder, string fullFolderUrl)
{
var folderUrls = fullFolderUrl.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
string folderUrl = folderUrls[0];
var curFolder = parentFolder.Folders.Add(folderUrl);
web.Context.Load(curFolder);
web.Context.ExecuteQuery();
if (folderUrls.Length > 1)
{
var subFolderUrl = string.Join("/", folderUrls, 1, folderUrls.Length - 1);
return CreateFolderInternal(web, curFolder, subFolderUrl);
}
return curFolder;
}