对于一个项目,我必须将时间从外部程序同步到 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 的解决方案!
提前致谢!