如何在ms项目服务器中更新TimeSheet

发布于 2024-07-15 08:57:09 字数 240 浏览 10 评论 0原文

情况如下,我希望有一个用户可以代表其他用户(以编程方式)输入时间。

当我执行 QueueUpdateTimeSheet 的 MS 项目服务器的 Web 服务时,如果尝试输入其他服务的时间,则该服务不起作用。

我尝试模拟,但我需要知道我想模拟的人的用户名和密码。 我可以拥有这些信息,但我不想管理它。

我开始查看代理时间表。 我不知道这是否能解决我的问题。

有谁能够帮助我 ...

Here's the situation, i want to have a user that can enter time on behalf of other (programmaticaly).

When i do QueueUpdateTimeSheet a web service of ms project server, it doesn't work if a try to enter time for an other.

I try the impersonification but i need to know the username and password of the person that i want to impersonate. I could have those information but i don't want to manage it.

I start to look at surrogate timesheet. I don't know if this will be the respond to my problem.

Can anybody help me ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

骄傲 2024-07-22 08:57:09

据我所知,没有什么神奇的方法可以让你替代时间表。 如果您希望能够代表其他用户使用 QueueUpdateTimesheet 的方法,则必须对您的数据集进行一些“破解”。

请注意,您需要满足模拟用户的先决条件 (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);

希望它有帮助!

告别

There's no magic method that lets you surrogate timesheet as far as I know. If you want to be able to use QueueUpdateTimesheet's method on behalf of other users, you'll have to "hack" a bit your DataSet.

Be aware that you need to do the prerequisite to impersonate the user (http://msdn.microsoft.com/en-us/library/aa974413.aspx). Once its all done you can proceed ;)

First of all, retreive your 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;
                }
            }

Then retrieve the timesheet dataSet:

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

Then perform this to enable surrogating:

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]"
                }

Finally push the updated dataSet:

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

Hope it helps!

Farewell

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文