Publishing Layout: erreurs après changement d'url
Voici une petite mésaventure survenue il y a peu chez un de mes clients.
Après la modification de l'url d'une application web (site Internet dans ce cas), il est apparu une erreur dans un cas particulier:
- sur des pages ayant été publiée avant la modification de l'url
- après avoir édité une fois les paramètres de la page (Page / Page Settings)
- l'accès suivant aux paramètres de la page conduisent à une page d'erreur
A l'aide de l'activation des messages d'erreurs en clair, il apparaissait clairement que les erreurs provenaient du Layout associé à la page, et tout particulièrement de la récupération du fichier ASPX.
Après une petite inspection via Monsieur Reflector sur la DLL "Microsoft.SharePoint.Publishing.dll", j'ai remarqué 2 choses:
- le "set" de la propriété "Layout" (PageLayout) d'une PublishingPage appelle le "get" (qui lui même lève l'erreur), donc pas de possibilité de simplement assigner la bonne référence du layout par cette méthode
- une petite perle qui traîne dans dans le"set" :
(à savoir si c'est du à la génération de code depuis l'IL ou simplement une coquille...)
Bref, j'ai donc cherché une autre option, et le salut est venu du net et du "Kid" alias Vincent Rothwell: Fixing page layout URLs after importing a publishing site in SharePoint. La cause n'est pas exactement la même, mais le workaround fonctionne parfaitement.
Mais (il y a toujours un mais !) il faut faire attention à l'état de ses pages. En effets, les pages en extraction (check out) ne seront pas affectées par la modification. Vous pouvez donc rajouter un petit bout de code pour afficher les pages qui sont en check out :
Dernière chose: il n'est, semble-t-il, pas possible de trouver à posteriori si la page va poser problème ou non car avant la première édition, l'affichage de l'url du layout reste en relatif. Dans le code de Vincent Rothwell, la modification n'est effectuée que sur les pages posant problème. Il peut être intéressant d'effectuer la modification pour toutes les pages déjà créées afin d'éviter que le souci n'arrive plus tard (et donc nous oblige à relancer la commande).
En espérant que ça puisse aider d'autres personnes dans le même cas !
Gat (dommage, Reflector ne fait pas tout ! ;))