Criar a API REST para processar operações CRUD com o SharePoint Embedded
As aplicações Do SharePoint Embedded, como a maioria das aplicações que interagem com sistemas de armazenamento de back-end e bases de dados, realizam dois tipos de operações: ler/obter dados e ficheiros e armazenar ou eliminar ficheiros. Nesta secção, irá aprender a armazenar e eliminar ficheiros e documentos num Contentor Do SharePoint Embedded com as APIs REST do Microsoft Graph.
Os Contentores Incorporados do SharePoint são como unidades do OneDrive e bibliotecas de documentos do SharePoint Online
Ao contrário da secção anterior em que precisava de obter um token OBO para fazer chamadas do lado do servidor para o Microsoft Graph para operações de gestão de contentores, ao ler e escrever documentos no Contentor, pode fazê-los diretamente a partir da sua aplicação do lado do cliente do React SPA.
Todos os Contentores Do SharePoint Embedded são implementados como Unidades do Microsoft Graph existentes e os respetivos conteúdos são DriveItems. Isto significa que pode utilizar os mesmos pontos finais do Microsoft Graph que utiliza para aceder a bibliotecas de documentos do SharePoint Online ou a instâncias do OneDrive.
Ler e escrever ficheiros com o Microsoft Graph
A leitura e escrita de ficheiros com o Microsoft Graph a partir de uma aplicação Web é simplificada com o Microsoft Graph Toolkit para o ajudar a lidar com a configuração de autenticação. Os componentes do React para o Microsoft Graph Toolkit tornam isto ainda mais simples!
Primeiro, configure um cliente do Microsoft Graph a partir da raiz do React SPA ao especificar o fornecedor de autenticação. Neste caso, vamos utilizar o fornecedor v2 da Biblioteca de Autenticação da Microsoft:
import { Providers } from "@microsoft/mgt-element";
import { Msal2Provider } from "@microsoft/mgt-msal2-provider";
// setup MS Graph scopes in global provider
Providers.globalProvider = new Msal2Provider({
clientId: Constants.CLIENT_ENTRA_APP_CLIENT_ID,
scopes: [
...Scopes.GRAPH_OPENID_CONNECT_BASIC,
Scopes.GRAPH_USER_READ_ALL,
Scopes.GRAPH_FILES_READ_WRITE_ALL,
Scopes.GRAPH_SITES_READ_ALL,
Scopes.SPEMBEDDED_FILESTORAGECONTAINER_SELECTED
]
});
Partindo do princípio de que o utilizador iniciou sessão e obteve um token de acesso para chamar o Microsoft Graph, pode obter uma instância do cliente do Microsoft Graph no seu componente react com uma única chamada:
import { Providers } from "@microsoft/mgt-element";
const graphClient = Providers.globalProvider.graph.client;
Depois de ter um cliente do Microsoft Graph autenticado e inicializado, pode utilizar o ponto final do https://graph.microsoft.com/{version}/drives
Microsoft Graph para obter o conteúdo de uma Drive
pasta e dentro dessa unidade. Esta ação irá devolver uma coleção de ficheiros, também conhecida como DriveItems
:
const driveId = props.container.id;
const driveItemId = folderId || 'root'; // get folder, or default to the 'root' folder
// get container contents for specified folder
const graphResponse = await graphClient.api(`/drives/${driveId}/items/${driveItemId}/children`).get();
Criar ficheiros em Contentores Incorporados do SharePoint
Para criar um ficheiro num Drive
com o Microsoft Graph, submeta um HTTP PUT com um fluxo binário do ficheiro.
Partindo do princípio de que tem uma referência a um ficheiro que foi selecionado no browser com o seletor de ficheiros do sistema operativo nativo, crie um leitor de fluxo para ler os conteúdos do ficheiro:
const file = // file reference obtained from the OS' file picker
const fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);
Em seguida, quando todo o ficheiro tiver sido carregado para a memória, conforme indicado pelo loadend
evento, submeta o fluxo com o verbo HTTP PUT no ponto final do drive
Microsoft Graph:
fileReader.addEventListener('loadend', async (event: any) => {
const graphClient = Providers.globalProvider.graph.client;
const endpoint = `/drives/${props.container.id}/items/${folderId || 'root'}:/${file.name}:/content`;
graphClient.api(endpoint).putStream(fileReader.result)
.then(async (response) => {
await loadItems(folderId || 'root');
})
.catch((error) => {
console.error(`Failed to upload file ${file.name}: ${error.message}`);
});
});
Criar pastas em Contentores Incorporados do SharePoint
A criação de pastas é semelhante, exceto submeter um HTTP POST para o ponto final do drive
Microsoft Graph com um payload diferente:
const graphClient = Providers.globalProvider.graph.client;
const endpoint = `/drives/${props.container.id}/items/${currentFolderId}/children`;
const data = {
"name": folderName,
"folder": {},
"@microsoft.graph.conflictBehavior": "rename"
};
await graphClient.api(endpoint).post(data);
Eliminar pastas e ficheiros em Contentores Incorporados do SharePoint
Por fim, a eliminação de ficheiros e pastas utiliza exatamente o mesmo tipo de chamada porque um ficheiro e uma pasta são considerados DriveItem
s no que diz respeito ao Microsoft Graph.
Para eliminar um , submeta uma DriveItem
operação HTTP DELETE com o URL completo para o item a eliminar como o ponto final completo:
const graphClient = Providers.globalProvider.graph.client;
const endpoint = `/drives/${props.container.id}/items/${selectedRows.entries().next().value[0]}`;
await graphClient.api(endpoint).delete();
Resumo
Nesta secção, aprendeu a armazenar e eliminar ficheiros e documentos num Contentor Do SharePoint Embedded com as APIs REST do Microsoft Graph.