0

对于一个项目,我必须将时间从外部程序同步到 EPM。不需要使用 EPM 2013 的客户端对象模型或 PSI。但是因为微软在他们的网站上为所有新的应用程序推荐了 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 的解决方案!

提前致谢!

4

3 回答 3

1

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

谢谢,维尔纳

于 2018-06-25T12:27:43.720 回答
0

Proect server 2013 有两种模式。Proect server 和 SharePoint 模式。我能够在 SharePoint 模式下完成上述工作,但是我什至无法读取时间表期间,因为即使在传递凭据之后,它也会在项目服务器模式下显示 CSOMUnkownUser。您当前在服务器上以什么模式运行

于 2014-02-19T14:14:22.367 回答
0

这可能有点晚了,但要在提供程序/自动托管应用程序中访问此类数据,您需要通过 OData 访问共享点服务器。CSOM 仅旨在提供来自当前用户上下文的数据。

于 2014-04-08T09:24:55.420 回答