0

プロジェクトでは、時間を外部プログラムから EPM に同期する必要があります。EPM 2013 または PSI のクライアント側オブジェクト モデルを使用する必要はありません。しかし、Microsoft はすべての新しいアプリケーションに対して Web サイトで 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

0

これはおそらく少し遅れていますが、プロバイダー/自動ホスト アプリでその種のデータにアクセスするには、OData を介して共有ポイント サーバーにアクセスする必要があります。CSOM は、現在のユーザー コンテキストからデータを提供することのみを目的としています。

于 2014-04-08T09:24:55.420 に答える