プロジェクトでは、時間を外部プログラムから 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 を使用したソリューションも高く評価されています。
前もって感謝します!