PHP с использованием phpSPO с Sharepoint ; Как создать папку на дочернем сайте

#php #sharepoint

Вопрос:

Я работаю с библиотекой phpSPO для работы с sharePooint в PHP-приложении. https://github.com/vgrem/phpSPO

Я использую следующий код для успешного создания папки в папке «Общие документы» в Sharepoint:

 <?php

    spl_autoload_register(function ($classname) {
        $classname = ltrim($classname, "\");
        preg_match('/^(. )?([^\\] )$/U', $classname, $match);
        $classname = './'.str_replace("\", "/", $match[1])
            .str_replace(array("\", "_"), "/", $match[2])
            .".php";
        include_once $classname;
    });

    use Office365RuntimeAuthClientCredential;
    use Office365SharePointClientContext;
    use Office365SharePointWeb;

    $credentials = new ClientCredential("MyClientId", "MyClientSecret");
    $ctx = (new ClientContext("https://MyDomain.sharepoint.com"))->withCredentials($credentials);

    $folderName = "TestFolder_" . rand(1, 100000);
    $rootFolder = $ctx->getWeb()->getFolderByServerRelativeUrl("Shared Documents");
    $newFolder = $rootFolder->getFolders()->add($folderName)->executeQuery();
    print($newFolder->getServerRelativeUrl());
 

?>

Это создаст папку в папке «Общие документы». Однако мой клиент создал подсайт под названием «Запросы». Я не могу понять, как создать папку в папке «Общие документы» дочернего сайта.

Хоть убей меня, я, кажется, не могу отследить корневой путь.

Я не уверен, не упускаю ли я что-то фундаментальное в sharepoint (это мое первое знакомство с Sharepoint).

Как мне найти путь к нему, чтобы добавить его?

Есть ли другой способ в рамках phpSPO для добавления папок на определенный сайт/дочерний сайт?

Ответ №1:

Ответ был (в конце концов) простым: Измените контекст клиента, чтобы включить имя сайта/Дочернего сайта.

В этом случае мой дочерний сайт назывался «запросы».

 <?php

    spl_autoload_register(function ($classname) {
        $classname = ltrim($classname, "\");
        preg_match('/^(. )?([^\\] )$/U', $classname, $match);
        $classname = './'.str_replace("\", "/", $match[1])
            .str_replace(array("\", "_"), "/", $match[2])
            .".php";
        include_once $classname;
    });


    use Office365RuntimeAuthClientCredential;
    use Office365SharePointClientContext;
    use Office365SharePointSiteUrl;
    use Office365SharePointWeb;

    $credentials = new ClientCredential("MyClientId", "MyClientSecret");
    $ctx = (new ClientContext("https://MyDomain.sharepoint.com/enquiries"))->withCredentials($credentials);


    $folderName = "Spencer_" . rand(1, 100000);
    $rootFolder = $ctx->getWeb()->getFolderByServerRelativeUrl("Shared Documents");
    $newFolder = $rootFolder->getFolders()->add($folderName)->executeQuery();
    print($newFolder->getServerRelativeUrl());

?>
 

Я пытался найти относительный путь от Root, но это всегда приводило к ошибке.
Ответ состоял в том, чтобы изменить корень.