2010-01-17 5 views
1

Salutations,SharePoint: Appliquer la source ContentType à destination lors de la copie d'un SPListItem

J'ai écrit ma propre définition ContentType qui peut être appliquée à toute bibliothèque de documents. Je souhaite conserver les données associées à un élément via mon ContentType lorsque cet élément est copié par l'utilisateur dans une bibliothèque de documents à laquelle ma définition ContentType n'est pas encore attachée. Il semble évident que la chose la plus évidente est d'attraper l'événement ItemAdding ou ItemUpdating pour le nouvel élément, de regarder l'élément source pour voir si mon ContentType est associé à celui-ci, puis d'ajouter mon ContentType à la destination. Bibliothèque de documents avant la copie en cours.

Le problème est, je ne peux trouver aucune information dans ces événements qui me dit ce qu'est l'élément de source. Les seules données de ce type figurent dans l'événement ItemUpdated final, mais il est alors trop tard ... l'élément a déjà été copié et les données associées à mon ContentType ont été supprimées.

Quelqu'un at-il des idées sur la façon dont je peux obtenir le comportement que je veux?

TIA pour toute aide!

Steve

PS: La seule chose que je suppose que je peux faire est d'obtenir la source URL dans l'événement ItemUpdated, puis écrire du code pour ajouter le ContentType et se déplacer aussi manuellement les données associées à ce type dans la source à la destination. Cela semble juste très inélégant par rapport à la solution que je propose ci-dessus.

Répondre

0

Juste un suivi, au cas où quelqu'un est intéressé par la solution ultime à mon problème ...

Ce que je fait pour obtenir le comportement que je voulais:

  1. Déplacé mon code vers le gestionnaire d'événements ItemUpdated afin que je fonctionne après que la copie a complètement eu lieu.

  2. Obtenir l'URL de l'élément source (voir réponse précédente) et décide que la SPList source et SPListItem

  3. Regardez pour voir si mon ContentType est dans la source, mais pas la destination. Si le ContentType n'est pas dans la destination, installez le ContentType dans la destination ET copiez manuellement les propriétés dans ce ContentType (en interrogeant le ContentType lui-même) de la source à la destination.

Ce processus se produit uniquement pour le premier élément qui est copié dans la bibliothèque de destination. Après cela, le ContentType existe déjà sur la bibliothèque dist et le SP copie lui-même les valeurs de champ de ce type de la source à la destination.

0

Je l'ai compris! La réponse est que l'URL de la source est dans le champ AfterProperties dans les propriétés de l'événement ItemUpdating. Vous obtenez à elle comme ceci:

properties.AfterProperties["_CopySource"]; 

Je l'avais regardé ce domaine, mais il a été jeté par le fait qu'il ya un membre dans cet objet qui montre « Count = 0 » dans le débogueur. J'ai mal interprété cela pour dire qu'il n'y avait rien là-dedans, mais il s'avère que ce nombre n'a rien à voir avec le nombre de propriétés qui s'y trouvent. Oups. Malheureusement, ce que j'essayais de faire ne fonctionne toujours pas. Même si j'ajoute mon ContentType à la bibliothèque de destination dans l'événement ItemUpdating, les champs associés à ce type ne sont pas copiés. Eh bien ...

Questions connexes