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.
Napisane 10 sierpnia, 2010 przez k2lublin