是否可以将远程事件接收器附加到我的列表中
-
10-12-2019 - |
题
是否可以将远程事件接收器附加到我的网站上的现有列表中,而不是我的应用程序中的列表?我猜我没有找到它的任何东西,我认为这可能是“伤害”的SharePoint。
如果我需要得到它的工作,我需要看一个沙箱或农场解决方案吗?
tia
解决方案
我会说不可能将远程事件接收器附加到主机Web中的列表,因为这些实际上是跨站点集合。
在主机Web中,您只能部署常规事件接收器(针对程序集中的类),远程事件接收器将实际WCF的URL作为目标,其在主机中不存在无论如何,网址:
<Url>~remoteAppUrl/RemoteEventReceiver1.svc</Url>
.
或
<Url>http://apps.mydomain.com:36511/MyReR.svc</Url>
. 其他提示
是的,是可能的。 只需在按照下面播种时将属性属性更改为true,在安装应用程序时处理事件接收器。
然后只是写下以下代码
public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
{
SPRemoteEventResult result = new SPRemoteEventResult();
switch (properties.EventType)
{
case SPRemoteEventType.AppInstalled:
HandleAppInstalled(properties);
break;
case SPRemoteEventType.ItemAdded:
HandleItemAdded(properties);
break;
}
return result;
}
private void HandleAppInstalled(SPRemoteEventProperties properties)
{
using (ClientContext clientContext =
TokenHelper.CreateAppEventClientContext(properties, false))
{
if (clientContext != null)
{
List myList = clientContext.Web.Lists.GetByTitle("Your List Name");
clientContext.Load(myList, p => p.EventReceivers);
clientContext.ExecuteQuery();
bool rerExists = false;
foreach (var rer in myList.EventReceivers)
{
if (rer.ReceiverName == "ItemAddedEvent")
{
rerExists = true;
System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at "
+ rer.ReceiverUrl);
}
}
if (!rerExists)
{
EventReceiverDefinitionCreationInformation receiver =new EventReceiverDefinitionCreationInformation();
receiver.EventType = EventReceiverType.ItemAdded;
receiver.ReceiverUrl = "Your service url";
receiver.ReceiverName = "ItemAddedEvent";
receiver.Synchronization = EventReceiverSynchronization.Synchronous;
myList.EventReceivers.Add(receiver);
clientContext.ExecuteQuery();
System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + msg.Headers.To.ToString());
}
}
}
}
private void HandleItemAdded(SPRemoteEventProperties properties)
{
using (ClientContext clientContext =
TokenHelper.CreateRemoteEventReceiverClientContext(properties))
{
if (clientContext != null)
{
try
{
List photos = clientContext.Web.Lists.GetByTitle("Your List Name");
ListItem item = photos.GetItemById(
properties.ItemEventProperties.ListItemId);
clientContext.Load(item);
clientContext.ExecuteQuery();
item["Title"] += "\nUpdated by RER " +
System.DateTime.Now.ToLongTimeString();
item.Update();
clientContext.ExecuteQuery();
}
catch (Exception oops)
{
System.Diagnostics.Trace.WriteLine(oops.Message);
}
}
}
}
.
我希望这会帮助你。
只有以编程方式才能,如果您部署,则无法工作。
var eventReceiver = new EventReceiverDefinitionCreationInformation
{
EventType = EventReceiverType.ItemAdding,
ReceiverAssembly = Assembly.GetExecutingAssembly().FullName,
ReceiverClass = "RemoteReciverWeb.Services.ContactAddEventReceiver",
ReceiverName = "ContactAddEventReceiver",
ReceiverUrl = remoteEventEndPointUrl,
SequenceNumber = 1000
};
clientContext.Load(eventresevers);
.