Можно ли прикрепить дистанционный приемник событий к моим спискам
-
10-12-2019 - |
Вопрос
Можно ли прикрепить дистанционный приемник событий в мой существующий список на моем сайте, а не в список в моем приложении?Я предполагаю, что нет, так как я ничего не могу найти на этом, и я думаю, что это потенциально «повредит» SharePoint.
Если мне нужно сделать это на работу, мне нужно посмотреть на песочницу или фермерское решение правильно?
TIA
Решение
Я бы сказал, что я бы не смог прикрепить дистанционный приемник событий в список в хост-сети, потому что это фактически пересечные коллекции сайта.
в хост-севере, вы сможете развернуть только регулярные приемники событий (нацеливание на класс в сборке), и приемники удаленного события принимают URL фактического WCF в качестве цели, которая не будет существовать в хостеВеб в любом случае:
<Url>~remoteAppUrl/RemoteEventReceiver1.svc</Url>
.
или
<Url>http://apps.mydomain.com:36511/MyReR.svc</Url>
. Другие советы
Да, это возможно. Просто обратитесь к приемнику событий при установке приложения, изменив атрибут свойств в True AS SOWN ниже.
, а затем просто напишите следующий код
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);
.