Ändern von SharePoint-Hostweblisten zum Zeitpunkt der Erstellung
Wenn Sie eine neue Liste im Hostweb erstellen, können Sie einen ListAdded-Remoteereignisempfänger verwenden, um diese Liste zu ändern. Beispielsweise können Sie die Versionsverwaltung aktivieren oder der Liste einen Inhaltstyp hinzufügen oder andere Änderungen vornehmen, die vom Clientobjektmodell (CSOM) implementiert werden.
Wenn die Liste dem Hostweb hinzugefügt wird, müssen Sie den Ereignisempfänger programmgesteuert anfügen. Das Core.EventReceiversBasedModifications-Beispiel zeigt Ihnen, wie Sie hierfür ein vom Anbieter gehostetes Add-In verwenden. Wenn das Add-In installiert ist, tritt ein AppInstalled-Ereignis auf, und Sie verwenden dieses Ereignis, um das ListAdded-Ereignis anzufügen.
Bevor Sie beginnen
Laden Sie zunächst das Beispiel-Add-In Core.EventReceiversBasedModifications aus dem Projekt Office 365 Developer Patterns and Practices auf GitHub herunter.
Hinweis
Der Code in diesem Artikel wird wie besehen und ohne jegliche Garantie zur Verfügung gestellt, gleich ob ausdrücklich oder konkludent, einschließlich jedweder stillschweigenden Gewährleistung der Eignung für einen bestimmten Zweck, Marktgängigkeit oder Nichtverletzung von Rechten.
Anfügen des ListAdded-Ereignisses
Um die Ereignishandler für das Add-In zu implementieren, zeigen Sie die Eigenschaften für das SharePoint-Projekt an, und legen Sie sowohl Handle Add-In Installed (Add-In installiert behandeln ) als auch Handle Add-In Uninstalling (Add-In-Deinstallation behandeln ) auf True fest.
Das folgende Codebeispiel zeigt, wie der AppInstalled-Ereignisempfänger geändert wird, um den ListAdded-Ereignisempfänger anzufügen.
bool rerExists = false;
cc.Load(cc.Web.EventReceivers);
cc.ExecuteQuery();
foreach (var rer in cc.Web.EventReceivers)
{
if (rer.ReceiverName == RECEIVER_NAME)
{
rerExists = true;
}
}
if (!rerExists)
{
EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
receiver.EventType = EventReceiverType.ListAdded;
// Get WCF URL where this message was handled.
OperationContext op = OperationContext.Current;
Message msg = op.RequestContext.RequestMessage;
receiver.ReceiverUrl = msg.Headers.To.ToString();
receiver.ReceiverName = RECEIVER_NAME;
receiver.Synchronization = EventReceiverSynchronization.Synchronous;
cc.Web.EventReceivers.Add(receiver);
cc.ExecuteQuery();
}
Anpassen der hinzugefügten Listen
Wenn der ListAdded-Ereignishandler ausgelöst wird, wird der folgende Code ausgeführt.
private void HandleListAdded(SPRemoteEventProperties properties)
{
using (ClientContext cc = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
{
if (cc != null)
{
try
{
if (properties.ListEventProperties.TemplateId == (int)ListTemplateType.DocumentLibrary)
{
//set versioning
cc.Web.GetListByTitle(properties.ListEventProperties.ListTitle).UpdateListVersioning(true, true);
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
}
}
}
}
}
Deinstallieren des Ereignisempfängers
Wenn das Add-In deinstalliert wird, sollte auch der Ereignisempfänger entfernt werden. Damit dies während des Debuggens funktioniert, wechseln Sie zu den Add-Ins in der Testbibliothek , und verwenden Sie die Option entfernen für das Add-In. Dadurch wird das AppUninstalling-Ereignis mit den richtigen Berechtigungen zum Entfernen des erstellten Remoteereignishandlers ausgelöst.
Wenn Sie einfach den Browser schließen oder das Add-In von Websiteinhalten deinstallieren, wird entweder der Ereignisempfänger nie ausgelöst, oder der AppUninstalling-Ereignisempfänger wird mit unzureichenden Berechtigungen ausgeführt, um den ListAdded-Ereignisempfänger zu entfernen. Dies liegt daran, dass Add-Ins anders bereitgestellt werden, wenn sie quergeladen werden. Dies ist das, was Visual Studio tut, wenn Sie F5 drücken.
Hinweis
Es wird empfohlen, dieses Beispiel auf einer sauber-Entwicklerwebsite zu testen.