Modifier SharePoint listes web hôtes au moment de la création
Lorsque vous créez une liste dans le site web hôte, vous pouvez utiliser un récepteur d’événements distants ListAdded pour modifier cette liste. Par exemple, vous pouvez activer le service de version ou ajouter un type de contenu à la liste, ou apporter d’autres modifications implémentées par le modèle objet client (CSOM).
Lorsque la liste est ajoutée au site web hôte, vous devez joindre par programme le récepteur d’événements. L’exemple Core.EventReceiversBasedModifications vous montre comment utiliser un add-in hébergé par un fournisseur pour ce faire. Lorsque le module est installé, un événement AppInstalled se produit et vous utilisez cet événement pour joindre l’événement ListAdded.
Avant de commencer
To get started, download the Core.EventReceiversBasedModifications sample add-in from the Office 365 Developer Patterns and Practices project on GitHub.
Notes
Le code dans cet article est fourni tel quel, sans garantie d’aucune sorte, expresse ou implicite, y compris mais sans s’y limiter, aucune garantie implicite d’adéquation à un usage particulier, à une qualité marchande ou une absence de contrefaçon.
Joindre l’événement ListAdded
Pour implémenter les handlers d’événements pour le add-in, affichez les propriétés du projet SharePoint et définissez à la fois Handle Add-in Installed et Handle Add-in Uninstalling sur True.
L’exemple de code suivant montre comment le récepteur d’événements AppInstalled est modifié pour attacher le récepteur d’événements ListAdded.
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();
}
Personnaliser les listes ajoutées
Lorsque le handler d’événement ListAdded est en cours de tir, le code suivant s’exécute.
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);
}
}
}
}
}
Désinstaller le récepteur d’événements
Lorsque le module est désinstallé, le récepteur d’événements doit également être supprimé. Pour que cela fonctionne pendant le débogage, rendez-vous dans la bibliothèque de test des add-ins et utilisez l’option de suppression sur le add-in. Cela déclenche l’événement AppUninstalling avec les autorisations adéquates pour supprimer le handler d’événement distant créé.
Si vous fermez simplement le navigateur ou désinstallez le module à partir du contenu du site, le récepteur d’événements ne se déclenche jamais ou le récepteur d’événements AppUninstalling s’exécute avec des autorisations insuffisantes pour supprimer le récepteur d’événements ListAdded. Cela est dû au fait que les add-ins sont déployés différemment lorsqu’ils sont chargés de manière latérale, ce que fait Visual Studio lorsque vous appuyez sur F5.
Notes
Nous vous recommandons de tester cet exemple dans un site de développeur propre.