Zmiany w nawigacji nie zapisują się

Po przenoszeniu/kopiowaniu kilku witryn publikowania napotkaliśmy bardzo dziwny problem z nawigacją. Żadne zmiany nie chciały się zapisywać po kliknięciu na "OK". Problem dotyczył zapisywania zmian w pojedynczych elementach menu. Nie można było ukryć żadnej pozycji ani zmienić kolejności. Wszystko wyglądało poprawnie, ale po odświeżeniu strony okazywało się, że menu się nie zmienia.

Wszystko było spowodowane nieintegralnością danych w bazie danych aplikacji SharePoint. Po kilkunastu minutach szukania rozwiązania natknałem się na stronę http://www.sharepointdev.net/sharepoint--general-question-answers-discussion/unable-to-modify-navigation--add-headinglink-7486.shtml. Problem tam opisany wydawał się podobny i gdzieś na dole pojawiło się zapytanie SQL, które miało pomóc.

INSERT INTO [NavNodes] 
([SiteId] ,[WebId] ,[Eid] ,[EidParent] ,
[NumChildren] ,[RankChild] ,[ElementType] ,
[Url] ,[DocId] ,[Name] ,[DateLastModified] ,
[NodeMetainfo], NonNavPage] ,[NavSequence] ,
[ChildOfSequence])
SELECT DISTINCT
SiteId, WebId ,1002 ,0 ,0 ,1 ,1 ,'' ,NULL ,
'SharePoint Top Navbar' ,getdate() ,NULL ,0 ,1 ,0 
FROM NavNodes 
WHERE WebId NOT IN (
SELECT WebId 
FROM NavNodes
WHERE Eid = 1002)

To zapytanie rozwiązywało problem w nawigacji globalnej. Jeśli taki sam problem ma miejsce w nawigacji lokalnej to wystarczy nieco zmodyfikować zapytanie.

INSERT INTO 
[NavNodes] 
([SiteId] ,[WebId] ,[Eid] ,[EidParent] ,
[NumChildren] ,[RankChild] ,[ElementType] ,
[Url] ,[DocId] ,[Name] ,[DateLastModified] ,
[NodeMetainfo], [NonNavPage] ,[NavSequence] ,
[ChildOfSequence])
SELECT DISTINCT
SiteId, WebId ,1025 ,0 ,0 ,0 ,1 ,'' ,NULL ,
'Szybkie uruchamianie' ,getdate() ,NULL ,1 ,1 ,0 
FROM NavNodes 
WHERE WebId NOT IN (
SELECT WebId 
FROM NavNodes
WHERE Eid = 1025)

Oba zapytania naprawiają wszystkie tego typu problemy w całej aplikacji.

Przypominam, że wprowadzanie ręcznych zmian w bazie danych SharePoint jest niezalecane i robimy to na własną odpowiedzialność. W ramach możliwości proponuję sprawdzić rozwiązanie na testowej kopii uszkodzonej aplikacji.

Łukasz Ch.