0

これが状況です。他のユーザーに代わって(プログラムで)時間を入力できるユーザーが必要です。

ms project サーバーの Web サービスで QueueUpdateTimeSheet を実行する際、別の時刻を入力しようとするとうまくいきません。

なりすましを試みますが、なりすましたい人のユーザー名とパスワードを知る必要があります。私はそれらの情報を手に入れることができましたが、私はそれを管理したくありません。

私は代理タイムシートを見始めます。これが私の問題への対応になるかどうかはわかりません。

誰か助けてくれませんか...

4

1 に答える 1

2

私の知る限り、タイムシートを代用できる魔法の方法はありません。他のユーザーに代わって QueueUpdateTimesheet のメソッドを使用できるようにするには、DataSet を少し「ハック」する必要があります。

ユーザーを偽装するには、前提条件を実行する必要があることに注意してください ( http://msdn.microsoft.com/en-us/library/aa974413.aspx )。すべてが完了したら、続行できます;)

まず、timesheetRow を取得します。

Proxy.TimesheetListDataSet.TimesheetsRow tsFound = null;
            foreach (Proxy.TimesheetListDataSet.TimesheetsRow ts in ds.Timesheets)
            {
                if (ts.WPRD_START_DATE <= day.Date && ts.WPRD_FINISH_DATE > day.Date)
                {
                    tsFound = ts;
                    break;
                }
            }

次に、タイムシート データセットを取得します。

Proxy.TimesheetDataSet tds = timesheetSvc.ReadTimesheet(tsFound.TS_UID);

次に、これを実行して代理を有効にします。

if (Boolean.Parse(tds.Headers.Rows[0]["TS_IS_CONTROLLED_BY_OWNER"].ToString()) == true)
                {
                    tds.Headers.Rows[0]["TS_IS_CONTROLLED_BY_OWNER"] = false;
                    tds.Headers.Rows[0]["TS_CREATOR_RES_UID"] = "[SUPER USER GUID]"
                }

最後に、更新されたデータセットをプッシュします。

timesheetSvc.QueueUpdateTimesheet(Guid.NewGuid(), tsFound.TS_UID, updatedTimesheetDataSet);

それが役に立てば幸い!

さようなら

于 2009-03-27T16:03:29.497 に答える