aim:我想要每当有人创建新任务时,验证它并在需要时取消。
环境详细信息:当前我正在使用Project Server 2013,并试图使远程事件处理程序工作。远程事件处理程序位于WCF服务中,该服务在ASP.NET Web应用程序中,与Project Server一起在Windows Server上托管的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 Central Administration-> ... ->服务器端事件处理程序 ->对事件
Project - Creating
如下:类名称:eventhandlerstest.projecteventreceiverdemo
url :http://localhost:6569/eventhandlerstest/projecteventreceiver.svc
URL还可以,我可以在浏览器中访问该.cvs文件。此处理程序完美地工作(例如,当我使用无效的名称创建一个新的企业项目时 - 事件已被捕获,创建已取消,我可以看到我的自定义日志表明类表明,调用构造和方法
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
被束缚:类名称:eventhandlerstest.taskeventreceiverdemo
url :http://localhost:6569/eventhandlerstest/taskeventreceiver.svc
再次,URL是正确的 - 我可以在浏览器中访问它。
现在有问题的流:我创建了一个SharePoint任务列表项目,然后我去那里,单击New Task
,填写必需的名称 - 创建一个任务。未收到事件,未创建类TaskEventReceiverDemo
的对象,并且未调用方法OnTaskCreatingRemote
。
我不确定IStatusingEventReceiverRemote
是否是正确的接口,因为参考文献中没有真正有用的描述,因此我仅根据方法名称做出假设。
我还尝试实现IResourceEventReceiverRemote
,尤其是方法OnCreatingRemote
并将其绑定到Resource - OnCreating
-相同的结果(这似乎是合乎逻辑的,因为任务不是资源)。
问题:有人可以阐明当我创建有问题流中描述的任务时将提出的事件的名称是什么?也许我做错了什么,无法弄清楚。
预先感谢。
看起来我找到了一个Aswer(至少是部分)
我已经创建了所有需要覆盖名称空间Microsoft.Office.Project.Server.Events
中的所有接口所需的服务,并且在我登录到文件的所有实现方法中。
之后,我订阅了SP Central Admin的所有服务器端事件处理程序,并开始使用SharePoint任务列表的Cruding任务项目类型。
我希望这能在我的登录帮助下揭示我所需的方法。但是,结果有点令人惊讶:日志中没有任何内容,这意味着SharePoint任务列表的 Cruding任务项目不会发射任何事件。
顺便说一句,处理程序是正确的,并且正确订阅了,因为我可以看到为创建项目的日志所示。对于另一种类型的项目 - 企业项目 - 任务事件实际上是触发的,很明显:Statusing - TaskCreating
等。
如果有人可以解释我为什么事件会在企业项目中创建任务,而不是在SP任务列表中创建任务,我会很感激,因为我只是部分回答了我的问题。
<</p>