2013-11-14 91 views
0

對於一個項目,我必須將小時從外部程序同步到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解決方案也受到讚賞!

在此先感謝!

回答

0

Proect server 2013中有兩種模式:Proect服務器和SharePoint模式。我能夠在SharePoint模式下獲得上述工作,但是即使在傳遞證書之後,我甚至無法讀取甚至時間表期間,因爲它在Project Server模式中表示CSOMUnkownUser。你在目前的服務器

0

這可能是晚了一點,但訪問這類數據的提供上運行什麼模式/自動託管應用程序,你需要通過的OData訪問SharePoint服務器。 CSOM僅用於提供當前用戶上下文中的數據。

+0

你可以提供一些參考鏈接通過OData來做到這一點嗎? –