Создать папку и поделиться с гостевым пользователем без учетной записи Microsoft в Sharepoint с CSOM - PullRequest
0 голосов
/ 28 февраля 2019

Я новичок в разработке 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;
    }
...