Utilisation de ItemAdding EventReceiver pour mettre à jour plusieurs champs en fonction des valeurs d'un champ

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/53731

Question

J'ai un SPfield SharePoint 2010 personnalisé de type SPFieldMultiColumn.Les données de cette colonne sont stockées dans une chaîne délimitée, qui est analysée et restituée dans un format lisible dans la plupart des zones (vue liste, « propriétés de la vue », etc.).Les données brutes ressemblent à ceci (formulation modifiée) :

;#0;#LABEL1;#True;#GUID;#DESCRIPTION_OF_LABEL;#;#1;#LABEL2;#True;#GUID;#DESCRIPTION_OF_LABEL2;# ...

et ainsi de suite.Les descriptions sont assez longues, ce qui rend cette chaîne longue de plusieurs centaines de caractères et vraiment moche lorsqu'elle n'est pas analysée et rendue.Le problème est que dans certaines parties du système, nous ne pouvons pas contrôler le rendu du champ.Le problème le plus courant que nous rencontrons concerne la vue feuille de données, où les données brutes sont affichées et semblent tout simplement horribles, ce qui rend la feuille de données presque inutilisable pour les utilisateurs.Les données apparaissent également dans les e-mails d'alerte et les résultats de recherche.

J'avais pour tâche de rendre cela «plus joli» et ma solution consistait à ajouter une colonne secondaire «affichage» et à masquer la colonne «données».Lorsqu'un élément est mis à jour ou ajouté, j'ai des récepteurs d'événements qui transforment et déplacent les données dans le champ d'affichage, ce qui est joli en mode feuille de données, etc.

Tout cela fonctionne très bien, à l'exception du fait que cela nécessite 2 appels Update() sur chaque élément qui obtient ces métadonnées.Un lorsque le champ « données » est rempli et un autre lorsque le récepteur d'événements copie les données dans l'écran.

Nos fermes de production (et QAS, mais pas de test ou de développement) utilisent le stockage Blob distant (RBS), et notre équipe d'exploitation a constaté que chaque fois que cette colonne (ou, je suppose, n'importe quelle colonne) est mise à jour sur un document bureautique (doc, docx, etc. ), cela provoque un nouveau blob dans le système de fichiers.Donc comme la solution est aujourd'hui, un nouveau fichier uploadé générera 2 blobs (un pour l'upload, un pour l'application de ces métadonnées).Avec ce nouveau récepteur d'événements, nous allons désormais générer 3 blobs, ce qui est inacceptable pour notre équipe opérationnelle (nous n'avons pas 50 % d'espace disque en plus pour prendre en charge cela).

"Réparer" RBS est hors de question - je dois donc mettre à jour ces deux colonnes en même temps, plutôt que d'en mettre à jour une, ce qui déclenche un récepteur d'événements pour mettre à jour l'autre.

Existe-t-il un moyen de mettre à jour 2 SPFields personnalisés avec 1 appel à Update() ?

TL;DR :Solution personnalisée avec 2 SPFields personnalisés - l'un mis à jour via le formulaire « modifier », l'autre via un récepteur d'événements (le second dépend entièrement du premier pour ses données).Comment puis-je mettre à jour les deux sans utiliser de récepteur d'événements (avec un seul appel Update() ?)

Était-ce utile?

La solution

On dirait que vous utilisez le ItemUpdated événement.Si vous avez utilisé ItemUpdating Je pense que vous pouvez modifier les AfterProperties au lieu d'effectuer une deuxième mise à jour.

Cela peut vous être utile : nbsp :Récepteurs d'événements

Autres conseils

Lorsque vous créez une colonne de recherche, vous pouvez choisir d'afficher des colonnes supplémentaires à partir de votre liste de recherches.

Il ressemble à ce que vous voudriez ici est une liste avec votre étiquette / description, puis une colonne de recherche sur la colonne d'étiquettes et avez-vous la description comme champ supplémentaire.Je ne sais pas si cela serait parfaitement propre dans la vue de la feuille de données, mais ce serait une amélioration.

Une autre solution potentielle à ce type de problème est une colonne calculée, mais d'après ce que je vois de votre scénario, il ne correspond pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top