對於一個項目,我必須將小時從外部程序同步到EPM。沒有要求使用EPM 2013或PSI的客戶端對象模型。但是由於微軟在他們的網站上推薦了CSOM,所有新的應用程序都試圖通過CSOM實現。我想測試的第一件事是把所有的時間,用下面的代碼:(這不是最漂亮的代碼,因爲它是用於測試目的)使用PSI或CSOM模仿EPM
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解決方案也受到讚賞!
在此先感謝!
你可以提供一些參考鏈接通過OData來做到這一點嗎? –