Compartir a través de


Microsoft Graph Toolkit en soluciones de SharePoint Framework

Precaución

Microsoft Graph Toolkit está en desuso. El período de retirada comienza el 1 de septiembre de 2025, con la retirada completa prevista para el 28 de agosto de 2026. Los desarrolladores deben migrar al uso de los SDK de Microsoft Graph u otras herramientas de Microsoft Graph compatibles para crear experiencias web. Para obtener más información, consulte el anuncio de desuso.

Use Microsoft Graph Toolkit en las soluciones de SharePoint Framework.

Importante

El @microsoft/mgt-spfx paquete se ha descontinuado. Use la desambiguación para los elementos web de SharePoint Framework.

Instalación

Para cargar componentes de Microsoft Graph Toolkit desde la biblioteca, agregue los @microsoft/mgt-elementpaquetes , @microsoft/mgt-componentsy @microsoft/mgt-sharepoint-provider como una dependencia en tiempo de ejecución al proyecto de SharePoint Framework:

npm install @microsoft/mgt-element @microsoft/mgt-components @microsoft/mgt-sharepoint-provider

Otra posibilidad:

yarn add @microsoft/mgt-element @microsoft/mgt-components @microsoft/mgt-sharepoint-provider

Uso

Al compilar SharePoint Framework elementos web y extensiones, haga referencia al kit de herramientas de Microsoft Graph customElementsHelper, Providery SharePointProvider desde @microsoft/mgt-element y @microsoft/mgt-sharepoint-provider. Si no usa React, también debe importar las funciones de registro de componentes de @microsoft/mgt-components los paquetes.

Para soluciones no basadas en React

import { customElementsHelper, Providers } from '@microsoft/mgt-element';
import { SharePointProvider } from "@microsoft/mgt-sharepoint-provider";
import { registerMgtPersonComponent } from '@microsoft/mgt-components';

// [...] trimmed for brevity

export default class MgtWebPart extends BaseClientSideWebPart<IMgtWebPartProps> {
  protected async onInit() {
    if (!Providers.globalProvider) {
      Providers.globalProvider = new SharePointProvider(this.context);
    }
    customElementsHelper.withDisambigutaion('contoso-hr-solution');
    registerMgtPersonComponent();
  }

  public render(): void {
    this.domElement.innerHTML = `
      <div>
        <mgt-contoso-hr-solution-person person-query="me"></mgt-person>
      </div>`;
  }

  // [...] trimmed for brevity
}

React

Si va a compilar un elemento web con React, puede usar el @microsoft/mgt-react paquete y omitir el registro manual de componentes. Sin embargo, asegúrese de que el componente de React carga diferida desde el elemento web para usar la desambiguación.

// [...] trimmed for brevity
import { Providers, customElementHelper } from "@microsoft/mgt-element";
import { SharePointProvider } from "@microsoft/mgt-sharepoint-provider";
import { lazyLoadComponent } from "@microsoft/mgt-spfx-utils";


// Async import of component that imports the React Components
const MgtReact = React.lazy(
  () =>
    import(/* webpackChunkName: 'mgt-react-component' */ "./components/MgtReact")
);

// set the disambiguation before initializing any web part
customElementHelper.withDisambiguation("mgt-demo-client-side-solution");

export default class MgtDemoWebPart extends BaseClientSideWebPart<IMgtDemoWebPartProps> {
  // set the global provider
  protected async onInit(): Promise<void> {
    if (!Providers.globalProvider) {
      Providers.globalProvider = new SharePointProvider(this.context);
    }
    return super.onInit();
  }

  public render(): void {
    const element = lazyLoadComponent(MgtReact, {
      description: this.properties.description
    });

    ReactDom.render(element, this.domElement);
  }
// [...] trimmed for brevity
}

En los componentes de React subyacentes, el componente Microsoft Graph Toolkit se puede usar directamente.

import { Person } from '@microsoft/mgt-react';
import { ViewType } from '@microsoft/mgt-components';

// [...] trimmed for brevity

export default class MgtReact extends React.Component<IMgtReactProps, {}> {
  public render(): React.ReactElement<IMgtReactProps> {
    return (
      <div className={ styles.mgtReact }>
        <Person personQuery="me" view={ViewType.image}></Person>
      </div>
    );
  }
}

Importante

Asegúrese de que la clase de elemento web raíz no importa ningún recurso del kit de herramientas de Microsoft Graph desde @microsoft/mgt-react. Solo deben importarse dentro de los componentes de React cargados diferidos.

Configuración de webpack

Para compilar el elemento web, debe actualizar la configuración SharePoint Framework webpack para controlar correctamente JavaScript moderno con encadenamiento opcional y fusión nula a través de transformaciones adicionales de Babel.

! [IMPORTANTE] Si no configura webpack para procesar JavaScript moderno, no podrá crear elementos web que usen Microsoft Graph Toolkit.

Instalación de paquetes de Babel

Para controlar correctamente las dependencias que emiten código basado en ES2021, agregue un cargador babel y algunas transformaciones como dependencias de desarrollo al proyecto.

npm i --save-dev babel-loader@8.3.0 @babel/plugin-transform-optional-chaining @babel/plugin-transform-nullish-coalescing-operator @babel/plugin-transform-logical-assignment-operators

Modificación de la configuración de webpack

SharePoint Framework proporciona un modelo de extensibilidad para modificar la configuración de webpack que se usa para agrupar los elementos web. Busque y abra gulpfile.js. Agregue el código siguiente encima de la línea que contiene build.initialize(require('gulp'));:

const path = require("path");
const litFolders = [
  `node_modules${path.sep}lit${path.sep}`,
  `node_modules${path.sep}@lit${path.sep}`,
  `node_modules${path.sep}lit-html${path.sep}`
];
build.configureWebpack.mergeConfig({
  additionalConfiguration: generatedConfiguration => {
    generatedConfiguration.module.rules.push({
      test: /\.js$/,
      // only run on lit packages
      include: resourcePath => 
        litFolders.some(litFolder => resourcePath.includes(litFolder)),
      use: {
        loader: 'babel-loader',
        options: {
          plugins: [
            '@babel/plugin-transform-optional-chaining',
            '@babel/plugin-transform-nullish-coalescing-operator',
            '@babel/plugin-transform-logical-assignment-operators'
          ]
        }
      }
    });
    return generatedConfiguration;
  }
});