リモートイベント受信者をリストに添付することは可能ですか
-
10-12-2019 - |
質問
私のアプリのリストには、私のサイトの既存のリストにリモートイベント受信者を添付することは可能ですか?私はこれについて何も見つけることができないので、私はいいえ私は推測しています、そして、私はこれが潜在的に「傷ついた」と思います。
これを働くために手に入れる必要があるならば、私はサンドボックスや農場の解決策を見る必要がありますか?
tia
解決
リモートイベント受信機をhost-webのリストに添付することは不可能です。これらは実際にはクロスサイトコレクションです。
ホストWebでは、通常のイベント受信機(アセンブリ内のクラスのターゲットをターゲットにする)しか展開できません。リモートイベント受信機は、実際のWCFのURLをターゲットとして取ります。これはホストに存在しません。Webとにかく:
<Url>~remoteAppUrl/RemoteEventReceiver1.svc</Url>
.
または
<Url>http://apps.mydomain.com:36511/MyReR.svc</Url>
. 他のヒント
はい、可能です。
次のコードを書くだけ
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