Przypadek ten wyszedł całkowicie przypadkowo ;) i rozumiem czemu wyszedł, ale zanim przejdę do tłumaczenia to zaprezentuje w czym problem. UWAGA: podczas naszej zabawy, nasz site będzie nie dostępny!! Potem to naprawimy ;)
Zaczynamy zabawę - powtarzajcie kroki:
- Otwórzcie stronę w WSS/MOSS (dowolną);
- Jeżeli macie na niej listy lub coś to otwórzcie je w kolejnych zakładkach - jeżeli nie macie list to otwórzcie 2-3 krotnie sobie Site Settings;
- Wejdźcie do ~site/_layouts/prjsetng.aspx (czyli Title, Descriptionm, and Icon);
- W pole Logo URL wpiszcie: http://blog.gutek.pl/images/01.png - nie przejmujcie się, że nie macie takiej ścieżki :)
- Kliknijcie OK;
- Wasze logo będzie wyglądać mniej więcej tak:
- Operacje powtórzcie dla URL: /../Images/01.png – wynik będzie taki sam;
- Możecie posprawdzać sobie to na innych otwartych stronach (za pomocą F5), zawsze będzie ten czerwony krzyżyk;
- Teraz :) w pole Logo URL wpiszcie: http://blog.gutek.pl/images/../Images/01.png – wynik będzie taki sam :)
- No to teraz skoro tyle rzeczy popróbowaliśmy, to wpiszcie ~/../Images/01.png :D

Taki błąd będzie się wam pojawiał wszędzie na każdej stronie na danym site – czyli jak popełnicie taki błąd to naprawdę nic już z poziomu strony oraz SharePoint Designer nie zrobicie :D
Teraz, dlaczego to w ogólne występuje
Geneza błędu jest dość prosta, skoro jesteśmy w Root site ~ to jak chcemy wyjść wyżej .. to się to nam nie uda. Jest to typowy błąd .NET i chyba dość zrozumiały.
Dlaczego więc http://blog.gutek.pl/images/../Images/01.png działało? Dlatego iż z Root wchodzimy do Images następnie z niego wychodzimy .. i wchodzimy ponownie. Czyli http://blog.gutek.pl/images/../../Images/01.png wywoła ten sam błąd co ~/../Images/01.png
Rozwiązanie
No dobrze, bo teraz macie niedziałający site ;) trzeba się nim zająć. Odpalcie SQL Management studio i odpalcie taki oto skrypt na waszej bazie contentowej:
DECLARE @fullUrl NVARCHAR(120)
SET @fullUrl = 'sites/ep/teet'
UPDATE Webs SET
SiteLogoUrl = NULL,
SiteLogoDescription = NULL
WHERE
FullUrl = @fullUrl
Zmięcie SET @fullUrl na wasz adres i odpalcie skrypt.
Problem rozwiązany :)
Podsumowanie
Osobiście uważam, że jest to bug SharePoint’a, ze względu na to iż każdy administrator site może to popsuć, ale tylko i wyłącznie użytkownik z prawami dostępu do bazy danych to naprawić. IMHO, powinna być jakaś walidacja tego URL przed jego zapisaniem do bazy danych.
Aktualizacja 2009-01-08 (nr 1)
Tak jak Waldek wspomniał, da się to zrobić za pomocą kodu, np.:
using (SPSite site = new SPSite("http://crabro/sites/ep/test/tttt/"))
{
using (SPWeb web = site.OpenWeb())
{
web.SiteLogoUrl = null;
web.SiteLogoDescription = null;
web.Update();
}
}
Postaram się dzisiaj jak będę miał trochę wolnego czasu napisać extension do STSAdm by każdy mógł z tego korzystać :)
Aktualizacja 2009-01-08 (nr 2)
Udało się :) komendę STSADM można pobrać z tąd:
SetSiteLogoUrl.zip (3.99 kb)