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
相关产品推荐
相关产品推荐

