#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, но это всегда приводило к ошибке.
Ответ состоял в том, чтобы изменить корень.