在 project-server 2013 中创建任务的远程前置事件处理程序不起作用
Remote pre-event handler for task creating in project-server 2013 doesn't work
目标:我希望每当有人创建新任务时,验证它并在需要时取消。
环境详细信息: 目前我正在使用 Project Server 2013 并尝试使远程事件处理程序正常工作。远程事件处理程序位于 ASP.NET Web 应用程序中的 WCF 服务中,与 Project Server 一起托管在 Windows 服务器上的 IIS 上。
目前我的应用程序中有 2 个 WCF 服务:
ProjectEventReceiver.svc :
namespace EventHandlersTest
{
public class ProjectEventReceiverDemo : IProjectEventReceiverRemote
{
...
public ProjectPreEventArgs OnCreatingRemote(PSContextInfo contextInfo, Guid eventHandlerUid, ProjectPreEventArgs e)
{
if (/*invalid project name for example*/)
{
e.Cancel = true;
}
return e;
}
...
}
}
这个绑定在 SharePoint 中央管理 -> ... -> 服务器端事件处理程序 -> 到事件 Project - Creating
像这样:
Class Name: EventHandlersTest.ProjectEventReceiverDemo
Url: http://localhost:6569/EventHandlersTest/ProjectEventReceiver.svc
url 没问题,我可以在浏览器中访问那个 .cvs 文件。 此处理程序完美运行(例如,当我创建一个名称无效的新企业项目时 - 事件被捕获,创建被取消并且我可以看到我的自定义日志显示构建了 class 并调用了方法 OnCreatingRemote
)。
现在第二个服务本身的问题:
TaskEventReceiver.svc :
namespace EventHandlersTest
{
public class TaskEventReceiverDemo : IStatusingEventReceiverRemote
{
...
public StatusCreateTaskPreEventArgs OnTaskCreatingRemote(PSContextInfo contextInfo, Guid eventHandlerUid, StatusCreateTaskPreEventArgs e)
{
// just cancel everything for now
e.Cancel = true;
return e;
}
...
}
}
这个绑定到事件 Statusing - TaskCreating
是这样的:
Class Name: EventHandlersTest.TaskEventReceiverDemo
Url: http://localhost:6569/EventHandlersTest/TaskEventReceiver.svc
同样,url 是正确的 - 我可以在浏览器中访问它。
现在有问题的流程:我创建了一个 SharePoint 任务列表项目,然后我去那里并单击 New Task
,填写所需的名称 - 它 创建一个任务。未收到事件,未创建 class TaskEventReceiverDemo
的对象并且未调用方法 OnTaskCreatingRemote
。
我不确定 IStatusingEventReceiverRemote
是否是一个正确的接口,因为 reference 中没有真正有用的描述,所以我只根据方法名称做出假设。
我还尝试实现 IResourceEventReceiverRemote
,特别是方法 OnCreatingRemote
并将其绑定到 Resource - OnCreating
- 结果相同(这似乎是合乎逻辑的,因为任务不是资源) .
问题:有人可以阐明当我创建任务(如有问题的流程中所述)时将引发的事件的名称吗?或者我做错了什么,想不通。
提前致谢。
看来我找到了答案(至少是部分答案)
我已经创建了涵盖命名空间 Microsoft.Office.Project.Server.Events
中所有接口所需的所有服务,并且在每个实现的方法中我都记录到一个文件中。
在此之后,我从 SP Central Admin 订阅了所有服务器端事件处理程序,并开始使用 SharePoint 任务列表项目类型的 CRUDing 任务。
我希望这会在我的日志记录的帮助下向我揭示所需的方法。然而,结果有点令人惊讶:日志中没有任何内容,这意味着 SharePoint 任务列表项目的 CRUDing 任务不会触发任何事件。
顺便说一句,处理程序是正确的并且订阅正确,因为我可以看到日志说创建项目。对于另一种类型的项目 - 企业项目 - 任务事件实际触发并且很明显:Statusing - TaskCreating
,等等
如果有人能向我解释 为什么 事件会在 Enterprise Project 中创建任务而不是在 SP 任务列表一中触发,我将不胜感激,因为我只回答了部分问题。
目标:我希望每当有人创建新任务时,验证它并在需要时取消。
环境详细信息: 目前我正在使用 Project Server 2013 并尝试使远程事件处理程序正常工作。远程事件处理程序位于 ASP.NET Web 应用程序中的 WCF 服务中,与 Project Server 一起托管在 Windows 服务器上的 IIS 上。
目前我的应用程序中有 2 个 WCF 服务:
ProjectEventReceiver.svc :
namespace EventHandlersTest { public class ProjectEventReceiverDemo : IProjectEventReceiverRemote { ... public ProjectPreEventArgs OnCreatingRemote(PSContextInfo contextInfo, Guid eventHandlerUid, ProjectPreEventArgs e) { if (/*invalid project name for example*/) { e.Cancel = true; } return e; } ... } }
这个绑定在 SharePoint 中央管理 -> ... -> 服务器端事件处理程序 -> 到事件
Project - Creating
像这样:Class Name: EventHandlersTest.ProjectEventReceiverDemo
Url: http://localhost:6569/EventHandlersTest/ProjectEventReceiver.svc
url 没问题,我可以在浏览器中访问那个 .cvs 文件。 此处理程序完美运行(例如,当我创建一个名称无效的新企业项目时 - 事件被捕获,创建被取消并且我可以看到我的自定义日志显示构建了 class 并调用了方法
OnCreatingRemote
)。
现在第二个服务本身的问题:
TaskEventReceiver.svc :
namespace EventHandlersTest { public class TaskEventReceiverDemo : IStatusingEventReceiverRemote { ... public StatusCreateTaskPreEventArgs OnTaskCreatingRemote(PSContextInfo contextInfo, Guid eventHandlerUid, StatusCreateTaskPreEventArgs e) { // just cancel everything for now e.Cancel = true; return e; } ... } }
这个绑定到事件
Statusing - TaskCreating
是这样的:Class Name: EventHandlersTest.TaskEventReceiverDemo
Url: http://localhost:6569/EventHandlersTest/TaskEventReceiver.svc
同样,url 是正确的 - 我可以在浏览器中访问它。
现在有问题的流程:我创建了一个 SharePoint 任务列表项目,然后我去那里并单击 New Task
,填写所需的名称 - 它 创建一个任务。未收到事件,未创建 class TaskEventReceiverDemo
的对象并且未调用方法 OnTaskCreatingRemote
。
我不确定 IStatusingEventReceiverRemote
是否是一个正确的接口,因为 reference 中没有真正有用的描述,所以我只根据方法名称做出假设。
我还尝试实现 IResourceEventReceiverRemote
,特别是方法 OnCreatingRemote
并将其绑定到 Resource - OnCreating
- 结果相同(这似乎是合乎逻辑的,因为任务不是资源) .
问题:有人可以阐明当我创建任务(如有问题的流程中所述)时将引发的事件的名称吗?或者我做错了什么,想不通。
提前致谢。
看来我找到了答案(至少是部分答案)
我已经创建了涵盖命名空间 Microsoft.Office.Project.Server.Events
中所有接口所需的所有服务,并且在每个实现的方法中我都记录到一个文件中。
在此之后,我从 SP Central Admin 订阅了所有服务器端事件处理程序,并开始使用 SharePoint 任务列表项目类型的 CRUDing 任务。
我希望这会在我的日志记录的帮助下向我揭示所需的方法。然而,结果有点令人惊讶:日志中没有任何内容,这意味着 SharePoint 任务列表项目的 CRUDing 任务不会触发任何事件。
顺便说一句,处理程序是正确的并且订阅正确,因为我可以看到日志说创建项目。对于另一种类型的项目 - 企业项目 - 任务事件实际触发并且很明显:Statusing - TaskCreating
,等等
如果有人能向我解释 为什么 事件会在 Enterprise Project 中创建任务而不是在 SP 任务列表一中触发,我将不胜感激,因为我只回答了部分问题。