使用PSI或CSOM模拟EPM

时间:2013-11-14 16:22:03

标签: c# csom psi epm

对于项目,我必须将外部程序的小时数同步到EPM。无需使用EPM 2013的客户端对象模型或PSI。但是因为Microsoft在他们的网站上推荐CSOM用于所有新应用程序,我试图用CSOM实现它。我想测试的第一件事是使用以下代码获取所有时间:(它不是最漂亮的代码,因为它是用于测试目的)

    private static void GetTimesheets()
    {
        ProjectContext projContext = new ProjectContext("http://tfspsdemo/PWA/");       
        projContext.Load(projContext.TimeSheetPeriods);
        projContext.ExecuteQuery();

        foreach (var period in projContext.TimeSheetPeriods)
        {
                projContext.Load(period.TimeSheet);
                projContext.ExecuteQuery();
                Console.WriteLine(period.Name);
                try
                {
                        string tempName = period.TimeSheet.Name;

                        projContext.Load(period.TimeSheet.Lines);
                        projContext.ExecuteQuery();

                        Console.WriteLine(period.TimeSheet.Name);

                        foreach (var line in period.TimeSheet.Lines)
                        {
                            try
                            {
                                projContext.Load(line);
                                projContext.Load(line.Work);
                                projContext.ExecuteQuery();


                                foreach (var workLine in line.Work)
                                {
                                    Console.WriteLine(workLine.ActualWork);
                                }
                            }
                            catch (Exception) { }

                            Console.WriteLine("Total: {0}", line.TotalWork);
                        }                        
                }
                catch (ServerObjectNullReferenceException) { }                
        }
    }

但是使用上面的代码我只获得登录的当前用户的代码,即使它是有权查看其他用户小时的人。但我想要的是看到所有在EPM预订了特定项目计划时间的人的所有时间。所以我以后可以使用这些信息来同步从外部程序到EPM的小时数。我以为我可以通过冒充来解决这个问题,但是:

 ProjectContext projContext = new ProjectContext("http://tfspsdemo/PWA/"); 
 projContext.Credentials = new NetworkCredentials("username", "password");

但这不是我想要的,因为我必须为每个用户执行此操作。而且我也无法获得所有用户的密码。

现在有人解决这个问题和/或任何建议吗? EPM PSI的解决方案也很受欢迎!

提前致谢!

3 个答案:

答案 0 :(得分:1)

在Project Sever 2016 / Project Online中尚未实施模拟。请在这里投票:https://microsoftproject.uservoice.com/forums/218133-microsoft-project/suggestions/32981722-impersonation-support-for-csom-to-read-other-user

谢谢, 维尔纳

答案 1 :(得分:0)

Proect server 2013有两种模式.Proect服务器和SharePoint模式。我能够在SharePoint模式下工作,但是我甚至无法读取时间表期间,因为它在项目服务器模式下即使传入凭据后也说CSOMUnkownUser。您当前在服务器上运行的模式

答案 2 :(得分:0)

这可能有点晚了,但要访问提供商/自动托管应用中的那种数据,您需要通过OData访问sharepoint服务器。 CSOM仅用于提供当前用户上下文中的数据。