SharePoint 2013 app 实战之 RemoteEventReceiver
2013-03-21 11:18
387 查看
RemoteEventReceiver 是在SharePoint 2013 app中引入的一个新特性,它可以在SharePoint 内容触发某个事件(删除item,添加item,修改 item等)时调用一个远程的WCF 服务,在这个远程的WCF服务 的 publicSPRemoteEventResult
ProcessEvent(SPRemoteEventProperties
properties) 方法中你可以对这个事件做进一步处理,最终返回一个 SPRemoteEventResult来标示是否继续改事件(比如可以返回 result.Status =SPRemoteEventServiceStatus.CancelWithError;
来终止事件)。
本文新建app的过程略过,不会的博友请参考:http://blog.csdn.net/farawayplace613/article/details/8677596。
下面说明下步骤:
1. 新建 RemoteEventReceiver
a. 选中SharePoint app project, 右击 => New Item, 选择 RemoteEventReceiver,点击 Add
b. 类型选择"List Item Events", 事件源选择 "Custom List",处理事件选择"An Item is being added","An Item is being deleted","An
Item is being updated", 点击Finish
c. 完成后在SharePoint App web project中会多出一个 RemoteEventReceiver1.svc
2. 在SharePoint app project中添加一个List instance 用于测试
3. 更新RemoteEventReceiver1.svc.cs中的代码(若遇到delete item则,报错并终止删除事件)
4. 调试 RemoteEventReceiver
a.点击VS2012的start
b. 选择trust 该app
c. 打开 http://YourSharePointServer/YourAppName/Lists/List1 (注意替换YourSharePointServer,[u]YourAppName[/u])
d. 添加一个 item
e. 在ProcessEvent 方法中设置若干断点
f. 尝试删除一个Item
5. 当尝试删除一个Item时效果为:
6. 为App web之外的list 注册 RemoteEventReceiver
注意,用以上方法添加的RemoteEventReceiver只能作用于App web 中的list(内容),如果要给App web之外的list(如Host web 中的list) 注册 RemoteEventReceiver就需要使用如下Client Ojbet代码:
常见问题:
a. 如果不能触发RemoteEventReceiver,请尝试为Host web 开启SSL : http://blogs.msdn.com/b/fabdulwahab/archive/2013/01/21/configure-ssl-for-sharepoint-2013.aspx
b. 如果遇到"Could not establish trust relationship with remote server",请于请求代码前加上:
TokenHelper.TrustAllCertificates();
ProcessEvent(SPRemoteEventProperties
properties) 方法中你可以对这个事件做进一步处理,最终返回一个 SPRemoteEventResult来标示是否继续改事件(比如可以返回 result.Status =SPRemoteEventServiceStatus.CancelWithError;
来终止事件)。
本文新建app的过程略过,不会的博友请参考:http://blog.csdn.net/farawayplace613/article/details/8677596。
下面说明下步骤:
1. 新建 RemoteEventReceiver
a. 选中SharePoint app project, 右击 => New Item, 选择 RemoteEventReceiver,点击 Add
b. 类型选择"List Item Events", 事件源选择 "Custom List",处理事件选择"An Item is being added","An Item is being deleted","An
Item is being updated", 点击Finish
c. 完成后在SharePoint App web project中会多出一个 RemoteEventReceiver1.svc
2. 在SharePoint app project中添加一个List instance 用于测试
3. 更新RemoteEventReceiver1.svc.cs中的代码(若遇到delete item则,报错并终止删除事件)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint.Client; using Microsoft.SharePoint.Client.EventReceivers; namespace SharePointApp9Web { public class RemoteEventReceiver1 : IRemoteEventService { public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties) { SPRemoteEventResult result = new SPRemoteEventResult(); using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties)) { if (clientContext != null) { clientContext.Load(clientContext.Web); clientContext.ExecuteQuery(); } } if (properties.EventType == SPRemoteEventType.ItemDeleting) { result.ErrorMessage = "You can't delete!"; result.Status = SPRemoteEventServiceStatus.CancelWithError; } return result; } public void ProcessOneWayEvent(SPRemoteEventProperties properties) { } } }
4. 调试 RemoteEventReceiver
a.点击VS2012的start
b. 选择trust 该app
c. 打开 http://YourSharePointServer/YourAppName/Lists/List1 (注意替换YourSharePointServer,[u]YourAppName[/u])
d. 添加一个 item
e. 在ProcessEvent 方法中设置若干断点
f. 尝试删除一个Item
5. 当尝试删除一个Item时效果为:
6. 为App web之外的list 注册 RemoteEventReceiver
注意,用以上方法添加的RemoteEventReceiver只能作用于App web 中的list(内容),如果要给App web之外的list(如Host web 中的list) 注册 RemoteEventReceiver就需要使用如下Client Ojbet代码:
// need add name space using System.Reflection; EventReceiverDefinitionCreationInformation eventReceiver = new EventReceiverDefinitionCreationInformation(); eventReceiver.EventType = EventReceiverType.ItemAdding; eventReceiver.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName; eventReceiver.ReceiverClass = "HTools_EventReceiver"; eventReceiver.ReceiverName = "HTools_EventReceiver"; eventReceiver.ReceiverUrl = "http://hh-wks-robb:2145/HTools_EventReceiver.svc"; eventReceiver.SequenceNumber = 1000; Web web = SPutil.getSP("http://sub.domain.com/sites/apps"); List targetList = web.Lists.GetByTitle("Host Web List"); targetList.EventReceivers.Add(eventReceiver); web.Context.ExecuteQuery();
常见问题:
a. 如果不能触发RemoteEventReceiver,请尝试为Host web 开启SSL : http://blogs.msdn.com/b/fabdulwahab/archive/2013/01/21/configure-ssl-for-sharepoint-2013.aspx
b. 如果遇到"Could not establish trust relationship with remote server",请于请求代码前加上:
TokenHelper.TrustAllCertificates();
相关文章推荐
- SharePoint 2013 App Remote Event Receivers
- SharePoint 2013 App Remote Event Receivers
- SharePoint 2013 app ---Provider Hosted app实战
- [SharePoint 2013] Create event receiver for external list
- SharePoint 2013 app ---SharePoint hosted 实战(1)
- SharePoint 2013 app ---SharePoint hosted app 实战(2)
- SharePoint 2013 App 示例之图片墙
- "此站点已经禁用应用程序"在sharepoint 2013中通过v2013部署app提示该错误
- SharePoint 2013 App 开发—Auto Hosted 方式
- SharePoint 2013 开发——APP开发的考虑和建议
- Office 365 - SharePoint 2013 Online之添加App开发工具Napa
- 《SharePoint 2013 应用开发实战》目录
- SharePoint 2013 App 示例之图片墙
- Remote Event Receivers in SharePoint 2013
- SharePoint 2013 App 开发 (1) - 什么是SharePoint App?
- [转]安装SharePoint 2013时安装AppFabric失败(错误码:1603)
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第2章节--SharePoint 2013 App 模型概览 理解三个SharePoint 部署模型 Apps
- SharePoint中的EventReceiver 之二 绑定Event Receiver到列表类型或列表实例
- SharePoint 2013 APP 开发示例 (四)JQuery访问REST
- SharePoint 2013 代码创建应用程序目录(App Catalog)