원격 이벤트 수신기를 내 목록에 첨부 할 수 있습니까?
-
10-12-2019 - |
문제
내 사이트의 기존 목록에 원격 이벤트 수신기를 첨부 할 수 있으며 내 앱의 목록이 아닙니다.나는 이것을 발견 할 수 없기 때문에 나는 이것이 잠재적으로 'SharePoint를 상하게 할 것 "이라고 생각한다.
이 일을해야 할 필요가있는 경우, 샌드 박스 또는 농장 솔루션을 볼 필요가 있습니까?
티아
해결책
실제로 사이트 컬렉션을 실제로 교차하는 것이기 때문에 호스트 웹의 목록에 원격 이벤트 수신기를 첨부 할 수 없습니다.
호스트 웹에서는 일반 이벤트 수신자를 배포 할 수 있습니다 (어셈블리에서 클래스를 타겟팅)하고 원격 이벤트 수신기는 실제 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);
. 제휴하지 않습니다 sharepoint.stackexchange