You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助SP/PnP在SPFx Web部件中获取SharePoint Online站点使用报告?

在SPFx Web部件中展示SharePoint站点使用报告的实现方案

一、使用@pnp/graph获取租户级/站点级使用报表

1. 配置权限

在SPFx项目的config/package-solution.json中添加Graph权限请求:

"webApiPermissionRequests": [
  {
    "resource": "Microsoft Graph",
    "scope": "Reports.Read.All"
  }
]

部署解决方案后,需租户管理员在SharePoint管理中心或Azure AD管理门户中批准该权限。

2. 调用Graph API获取数据

通过@pnp/graph调用对应的报表接口,示例代码:

import { graph } from "@pnp/graph";

// 获取最近7天的站点使用详情
async function getSiteUsageReport() {
  try {
    const reportData = await graph.api("/reports/getSharePointSiteUsageDetail(period='D7')").get();
    // 解析CSV格式的返回数据为JSON
    const parsedData = parseCsvToJson(reportData);
    return parsedData;
  } catch (error) {
    console.error("获取站点使用报告失败:", error);
  }
}

// CSV转JSON辅助函数
function parseCsvToJson(csv: string) {
  const lines = csv.split("\n");
  const headers = lines[0].split(",");
  return lines.slice(1).map(line => {
    const values = line.split(",");
    return headers.reduce((obj, header, index) => {
      obj[header.trim()] = values[index]?.trim();
      return obj;
    }, {} as any);
  });
}

常用Graph报表接口:

  • getSharePointSiteUsageDetail(period='D7'):站点使用详情(活跃用户、页面访问量等)
  • getSharePointSiteUsagePages(period='D30'):站点页面访问统计
  • getSharePointSiteUsageStorage(period='D90'):站点存储使用统计

二、使用@pnp/sp获取单个站点的使用数据

如果仅需展示当前站点的使用情况,可直接用@pnp/sp调用SharePoint REST API:

1. 获取站点存储使用信息

import { sp } from "@pnp/sp";

async function getSiteStorageInfo() {
  try {
    const storageInfo = await sp.web.storageQuotaInformation();
    return {
      usedStorage: storageInfo.Usage,
      totalStorage: storageInfo.Quota,
      remainingStorage: storageInfo.Quota - storageInfo.Usage
    };
  } catch (error) {
    console.error("获取站点存储信息失败:", error);
  }
}

2. 获取站点页面/文档访问统计

通过站点分析API获取页面访问数据:

async function getSitePageAnalytics() {
  try {
    const analyticsItems = await sp.web.siteAnalytics.getAnalyticsItems({
      startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // 最近30天
      endDate: new Date(),
      url: sp.web.url,
      hitType: 1 // 1=页面访问,2=文件访问
    });
    return analyticsItems;
  } catch (error) {
    console.error("获取站点分析数据失败:", error);
  }
}

三、在Web部件中渲染数据

将获取到的数据在Web部件的render()方法中渲染为HTML,示例:

public async render(): Promise<void> {
  const siteUsage = await getSiteUsageReport();
  const storageInfo = await getSiteStorageInfo();

  this.domElement.innerHTML = `
    <div class="site-usage-report">
      <h3>站点存储使用</h3>
      <p>已使用: ${(storageInfo.usedStorage / 1024 / 1024).toFixed(2)} MB</p>
      <p>总容量: ${(storageInfo.totalStorage / 1024 / 1024).toFixed(2)} MB</p>
      <h3>最近7天站点活跃数据</h3>
      <ul>
        ${siteUsage.map(item => `<li>${item.SiteName}: 活跃用户 ${item.ActiveUsers}</li>`).join("")}
      </ul>
    </div>
  `;
}

内容的提问来源于stack exchange,提问作者thedeepponkiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:32:46