Reading Time: 3 minutes

Bonjour à tous,

Aujourd’hui je vous propose des solutions pour résoudre les problèmes de dépendance sur votre ferme SharePoint.

Vous avez surement lors d’une migration eu ce petit message

problémedependance

 

Une fois que vous cliquez dessus, l’analyseur d’intégrité vous donne des erreurs tel que [MissingSetupFile] , [MissingWebPart] , [MissingSiteDefinition] ou même [MissingAssembly].

Plusieurs solutions s’offre à nous.Des gentils développeurs ont eu l’idée de développer un petit outil qui peut dans certain cas résoudre ces problèmes. Vous pouvez le trouver ici:  CodePlex – FeatureAdmin

Si ce petit soft ne peux pas résoudre les problèmes de dépendances il faut donc mettre les mains dans la Base de donnée SharePoint (Hein????) et oui!

Rendez vous dans le SQL Server Management et ouvrez une nouvelle fenêtre de requête en sélectionnant la base de contenu concernée par l’erreur de dépendance.(vous trouverez le nom de celle ci dans l’erreur)

Avant toute chose faites un backup de la base!

Voici cas par cas les actions à faire:

[MissingSetupFile]

Récupérez le lien du fichier manquant dans l’erreur commençant par « Feature… » et faites un select comme ceci:

select * from AllDocs 
where SetupPath like '%Features\MetroGrid_Feature1\MetroGridResources\css\custom-theme\images\ui-icons_cd0a0a_256x240.png%'

Cette requête vous retourne autant de ligne que ce fichier est référencé dans la base.
resultselectmissingsetupfile Copiez l’id avec un clic droit

resultselectmissingsetupfile2
Il reste qu’a faire un delete comme ceci:

delete from AllDocs where id = '2ED0CF7C-58A7-4274-BFD1-19FA50811519'

La référence est supprimée de la base.Reste à réanalyser les problèmes afin de voir si il ne reste pas d’autre référence dans une autre base de contenu par exemple.
resultdeletemissingsetupfile
Pour la suite le déroulement est le même, juste les requêtes qui change, je vais donc me passer de faire des screenshots 😉

[MissingFeature]

select *
from features 
join webs on (features.webid = webs.id) 
where featureid = 'L'id de votre fonctionnalité manquante'

Une fois l’id récupéré soit vous pouvez désactiver la fonctionnalité directement via le site (je recommande) si vous ne pouvez pas, un petit delete devrait faire l’affaire!

[MissingAssembly]

SELECT *
from EventReceivers event
join webs on (event.webid = webs.id) 
join sites site on (site.id = event.siteid) 
where Assembly = ‘Assembly manquante que vous trouverez dans le message d'erreur'

Une fois l’id récupéré, faites un delete également.

[MissingSiteDefinition]

select * 
from webs 
where webtemplate = 'id du template'

idem que précédemment, un delete.

[MissingWebPart]

select *
from AllWebParts webpart
join alldocs doc on (webpart.tp_PageUrlID = doc.ID)
join sites site on (site.id = webpart.tp_siteid)
where tp_WebPartTypeId  = ‘id du webpart’

Je vous conseil ici une fois l’url récupérée, de vous rendre sur celle ci et de rajouter à la fin de l’url ?Contents=1
Vous pourrez ainsi supprimer facilement le webpart de la page.

Voila, j’espère que mon expérience sur ce problème pourra résoudre le votre 😉

A bientôt!