À l'aide d'un récepteur d'événement pour mettre à jour un élément du champ "Titre"
J'ai écrit un récepteur d'événement qui est activé sur le ItemAdded' cas de "Pages" de la liste. Le code s'exécute bien, mais ma question est-ce - pendant l'appel de mon Sous ItemAdded, je veux modifier la valeur d'un champ appartenant à la liste actuelle de l'élément (dans ce cas, une page aspx).
L'idée est que je peux configurer le champ "Titre" à une autre valeur, mon récepteur d'événements configure, et par le temps que l'utilisateur voit la page en mode édition, le nouveau titre aura été sauvé de la page. Voici ma tentative:
Public Overrides Sub ItemAdded(ByVal properties As Microsoft.SharePoint.SPItemEventProperties)
Dim newItem As SPListItem = properties.ListItem
Dim currentSiteTitle As String = properties.OpenWeb().Title
UpdateItemTitle(newItem, currentSiteTitle)
newItem.Update()
'newItem.SystemUpdate()
End Sub
Comme vous pouvez le voir, j'ai essayé les deux, Update() et SystemUpdate(), mais dans chaque cas, lorsque l'utilisateur a essayé de vérifier dans la page, ils reçoivent un message indiquant que la page a été modifiée à l'extérieur. De Plus, lors de l'affichage de la page, le titre de la valeur du champ n'a pas changé.
Est ce que je suis en train de faire à tous les possibles, ou est-il un meilleur moyen?
Acclamations.
Jas.
OriginalL'auteur Jason Evans | 2009-08-10
Vous devez vous connecter pour publier un commentaire.
de modifier les propriétés.afterproperties obtiendrez autour de l'enregistrer conflit. notez que le afterproperties est une table de hachage, mais vous pouvez y accéder de la sorte:
propriétés.AfterProperties["Title"] = "Mon Nouveau Titre";
Cette travaillé excellent pour moi, lorsque vous exécutez dans ItemUpdating. Doit être marqué comme réponse.
Sur
ItemAdded
,ItemUpdated
événements cela ne marchera pas, et va jeterInvalidOperationException
avec le message suivant:The event does not support change of properties.
OriginalL'auteur Chris
ItemAdded Nom dit tout. Un Événement Asynchrone qui se passe après les Éléments a été ajouté, de sorte que le problème est avec votre calse. Je vous suggère de crochet de la ItemAdding cas, sauf si vous avez des raisons de ne pas le faire.
Reportez-vous à la Lien pour plus de Détails sur Asynchrones & Synchrone
OriginalL'auteur Kusek
La meilleure façon de le faire est d'utiliser le ItemAdding événement. Cela vous permettra de changer le Titre de la valeur avant de l'enregistrer dans la base de données. Essayer de les changer en ItemAdded est possible, mais fera en sorte que les maux de tête que vous rencontrez.
Avez-vous essayé ItemAdding?
OriginalL'auteur Alex Angas
Maintenant la suite de ce qui précède, j'ai constaté que lorsque je travaillais avec un groupe de discussion le seul endroit où je pouvais modifier tous les champs dans l'élément de la liste est dans le ItemUpdating méthode, où j'ai pu affecter la nouvelle valeur dans les propriétés.AfterProperties de hachage correspondant au nom de l'élément, comme mentionné précédemment.
Malheureusement, cela ne semble pas automatiquement l'exécution lorsqu'une nouvelle réponse a été ajoutée à la discussion ( c'est peut-être dans d'autres liées à la liste de scénarios ) mais si je mets le code dans la ItemAdded méthode ( ItemAdding n'a pas été déclenchée soit ), j'ai trouvé qu'il était en train de courir, mais que je ne pouvais pas modifier l'élément à partir de là, je me suis donc retrouvé avec quelque chose comme ceci dans itemAdded:
Le résultat de ceci est que le champ est mis à jour mais pas avant qu'il est indiqué de sorte que lorsque l'utilisateur est dirigé vers la page de sortie, la liste regarder comme il le faisait avant mais si vous changez d'affichage ou de regarder les détails pour la réponse, vous trouverez qu'il a réellement changé, comme il était censé le faire.
C'est assez bon pour moi que je m'attends à la plupart de mes réponses, pour arriver par e-mail.
OriginalL'auteur glenatron