对于项目,我必须将外部程序的小时数同步到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的解决方案也很受欢迎!
提前致谢!
答案 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仅用于提供当前用户上下文中的数据。