Мы взаимодействуем с библиотекой документов Sharepoint Online через структуру PnP js и с помощью надстройки приложения Sharepoint (по той или иной причине мы не можем использовать Graph API в это время)
Наша надстройка полностью контролирует наш сайт:
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
</AppPermissionRequests>
Мы можем выполнять практически все операции, которые захотим - создавать / удалять папки, добавлять файлы, копировать файлы и т. д. c. Единственное, на чем мы застряли, - это экспорт файла .pptx, который был загружен в Sharepoint, в файл .pdf из кода.
Вот как я извлекаю .pdfConversionUrl из списка библиотеки документов в сформулировать запрос к службе преобразования мультимедиа Microsoft:
let options: RenderListDataOptions = RenderListDataOptions.EnableMediaTAUrls | RenderListDataOptions.ContextInfo | RenderListDataOptions.ListData | RenderListDataOptions.ListSchema;
const viewXml: string = `
<View Scope='RecursiveAll'>
<Query>
<Where>
<In>
<FieldRef Name='ID' />
<Values>
<Value Type='Counter'>{{OUR SP DOCUMENTS LIST ID}}</Value>
</Values>
</In>
</Where>
</Query>
<RowLimit>1</RowLimit>
</View>`;
const listStream = await sp.web.lists.getById({{OUR SP DOCUMENTS LIST ID}}).renderListDataAsStream({ RenderOptions: options, ViewXml: viewXml });
/*
* response contains this property:
* '.pdfConversionUrl': '{.mediaBaseUrl}/transform/pdf?provider=spo&inputFormat={.fileType}&cs={.callerStack}&docid={.spItemUrl}&{.driveAccessToken}'
* mediaBaseUrl, callerStack and driveAccessToken values are also included
*/
const pdfTransformURL = `${listStream.ListSchema['.mediaBaseUrl']}/transform/pdf?provider=spo&inputFormat=pptx&cs=${listStream.ListSchema['.callerStack']}&docid={{LINK TO THE SP PPTX FILE}}&${listStream.ListSchema['.driveAccessToken']}`;
console.log(pdfTransformURL);
Вот сгенерированный URL-адрес:
https://northcentralus1-mediap.svc.ms/transform/pdf?provider=spo&inputFormat=pptx&cs={{OUR SP CALLER STACK}}&docid={{LINK TO OUR SP PPTX FILE}}&access_token={{OUR ACCESS TOKEN}}
Идея состоит в том, чтобы сделать запрос GET на этот URL-адрес, а ответ будет содержать поток файла PDF, который мы затем можем загрузить в Sharepoint. Процесс в общих чертах описан командой PnP в этом видео на YouTube.
Однако, когда я делаю GET-запрос на этот URL-адрес через node-fetch или непосредственно в браузере, я получаю эту ошибку message:
{
"error":
{
"code":"generalException",
"message":"Exception: The remote server returned an error: (403) Forbidden. Access+denied.+Before+opening+files+in+this+location%2c+you+must+first+browse+to+the+web+site+and+select+the+option+to+login+automatically.",
"innererror":{"code":"Web_403Forbidden"}
}
}
Мы погуглили и обнаружили, что нам нужно включить опцию в панели администратора SP, чтобы «Разрешить приложения, которые не используют современную аутентификацию». Мы сделали это, но по-прежнему получаем то же сообщение об ошибке.
Если кто-то пробовал это раньше, сообщите нам, как мы можем решить эту ошибку. Спасибо!