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

C#应用访问Project Online项目数据与SharePoint自定义列表问题咨询

范畴边界确认

你当前的需求同时涉及两类集成:

  • 读取项目核心列表属于Project Online集成范畴,需要调用Project Server CSOM接口实现
  • 访问项目下的自定义列表属于SharePoint集成范畴,Project Online每个项目会自动生成对应的专属SharePoint子站点,自定义列表存储在该子站点中,直接用SharePoint CSOM接口访问即可

问题1:获取项目列表

你需要使用Microsoft.ProjectServer.Client库下的ProjectContext(而非普通SharePoint的ClientContext)查询项目集合,示例代码如下:

// 替换为你的PWA站点地址
ProjectContext projContext = new ProjectContext("https://xxx.sharepoint.com/sites/pwa");
// 直接复用你已完成的应用注册认证逻辑即可
projContext.Load(projContext.Projects, 
    projects => projects.Include(
        p => p.Name, 
        p => p.Id,
        // 该字段为项目对应SharePoint子站点地址,第二个问题会用到
        p => p.ProjectSiteUrl 
    ));
projContext.ExecuteQuery();

// 遍历输出所有项目信息
foreach (PublishedProject project in projContext.Projects)
{
    Console.WriteLine($"项目名称:{project.Name},项目站点地址:{project.ProjectSiteUrl}");
}

问题2:访问项目专属自定义列表

基于上一步获取到的项目子站点地址ProjectSiteUrl,初始化SharePoint上下文后直接读取对应列表即可,示例代码如下:

// 替换为你获取到的对应项目的ProjectSiteUrl值
string projectSiteUrl = "https://xxx.sharepoint.com/sites/DSP/你的项目名称";
using (ClientContext spContext = new ClientContext(projectSiteUrl))
{
    // 复用已有的认证逻辑
    List pmUpdatesList = spContext.Web.Lists.GetByTitle("PMUpdates");
    // 可根据需求自定义CAML查询条件,以下为默认查询前100条所有字段
    CamlQuery query = CamlQuery.CreateAllItemsQuery(100);
    ListItemCollection listItems = pmUpdatesList.GetItems(query);
    spContext.Load(listItems);
    spContext.ExecuteQuery();

    // 遍历自定义列表数据
    foreach (ListItem item in listItems)
    {
        Console.WriteLine(item["Title"]?.ToString());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 18:21:04