Archiwum kategorii ‘SharePoint’

h1

Witryna MySite i główna nawigacja

17 Wrzesień 2009

Implementując MOSS’a w mojej organizacji zdecydowano, że nie będziemy udostępniać użytkownikom możliwości tworzenia własnych witryn MySite (nie pytajcie dlaczego – tak uznano).

Za to zdecydowano się na skorzystanie z możliwości importu profili z Active Directory i wykorzystania wyszukiwania kontaktów jako książki telefonicznej. I tylko do tego miały służyć informacje z SSP – żadnych publikacji dokumentów, żadnych blogów itp.

Po instalacji okazało się, że zwykły użytkownik przeglądając szczegóły kontaktu nie widzi górnego paska łączy. Przeglądając własny profil widzi tylko guzik “mój profil” i nic więcej. Oczywiście witryna została podłączona (Ustawienia witryny > Połączenie witryny portalu) z głównym portalem i za pomocą paska “chlebowego” (zawsze śmieszy mnie to tłumaczenie, ale ja nie znam lepszego) można wrócić do strony głównej. Ale użytkownicy zwykle są wygodni (inaczej mówiąc niespostrzegawczy lub niegrzeszący intelignecjią) i chcą na witrynie MySite takie samo menu jak na stronie głównej.

Na początek wypróbowałem (ten sposób opisuje źródło1)  “Łącza do witryn personalizacji” dostępne w SSP “Profile użytkowników i Moje witryny”. Dodałem kilka testowych łączy, ustawiłem właścicieli na “wszyscy” (authenticated users”), ale efekt był marny.

Łącza pokazywały się tylko przy przeglądaniu własnego profilu.

Nie zrażając się pomyślałem “Nic prostszego!”, przygotowując się do edycji strony wzorcowej witryny MySite za pomocą nieśmiertelnego SharePoint Designer’a.

Ale nie było wcale łatwo.

Przeszukałem internet (źródło2, źródło3) i okazało się, że:

  • w stronie wzorcowej umieszczona jest placeholder “PlaceHolderHorizontalNav” z kontrolką “TopNavigationMenu” generującą menu za pomocą dostawcy “SPNavigationProvider”,
  • doprowadzenie do tego, żeby kontrolka wyświetlała menu głównego portalu jest możliwe poprzez zmianę tego dostawcy.

Okazało się, że rozwiązanie to działa i menu jest generowane na podstawie witryny głównej, ALE zwykli użytkownicy NADAL GO NIE WIDZĄ. Zacząłem podejrzewać, że kontrolki lub całe placeholdery są w jakiś sposób ukrywane, ale nigdzie nie mogłem znaleźć atrybutów, które coś takiego by sugerowały.

COFAMY NASZE ZMIANY (posługując się na przykład historią wersji strony wzorcowej) bo póxniej okaże się, że nie są konieczne.

Szperając dalej (źródło4, źródło5, źródło6) okazało się, że:

  • “TopNavigationMenu” jest ukrywane, ale nie przez parametr, ale POPRZEZ SPECJALNY KOD.
  • można to obejść kompilując własny kod (instrukcje w źródłach),
  • kombinując z nowymi placeholderami,
  • wykorzystując mój sposób!
protected override void OnPreRender(EventArgs e)
{
if (base.IsProfileError || !base.Profile.IsSelf)
{
Control master = base.Master;
if (master != null)
{
master = master.FindControl(“PlaceHolderTopNavBar”);
}
if (master != null)
{
master = master.FindControl(“PlaceHolderHorizontalNav”);
}
if (master != null)
{
master = master.FindControl(“TopNavigationMenu”);
}
if (master != null)
{
master.Visible = false;
}
}
base.OnPreRender(e);
}

Jak widać funkcja szuka na stronie konkretnego obiektu “TopNavigationMenu” i na koniec ustawia wartość atrybutu visible na false!

Jak sobie z tym poradzić? Źródła sugerują podmianę kodu i definicji witryny, ale przecież musi być jakiś prostszy sposób. Może trzeba jakoś “zmylić” tę funkcję i “przerwać” jej działanie?

Wracamy do kodu naszej strony wzorcowej.

Zmieniamy następujące linie:

<asp:ContentPlaceHolder id=”PlaceHolderHorizontalNav” runat=”server”>

na

<asp:ContentPlaceHolder id=”PlaceHolderHorizontalNav1” runat=”server”>

Co zrobiliśmy? Sprawiliśmy, że funkcja przeszukująca stronę NIE ZNAJDZIE naszego placeholdera, a co za tym idzie nie znajdzie obiektu “TopNavigationMenu” i go nie ukryje! Po prostu przełamaliśmy łańcuch przeszukiwania na samym początku.

<SharePoint:DelegateControl runat=”server” ControlId=”TopNavigationDataSource”>

na

<SharePoint:DelegateControl runat=”server” ControlId=”TopNavigationDataSource1“>

To jest troszeczkę bardziej zawiłe.
W tej definicji możemy zmieniać dostawcę dla menu i kombinować z początkowym węzłem (jak podają źródła, które przytoczyłem) aby wygenerować nasze menu, ale metodą prób i błędów okazało się, że wystarczy tylko zmienić ID tej kontrolki.

I TO WYSTARCZY.

Zapisujemy stronę wzorcową, i podglądamy wyniki. Wszystkim użytkownikom pokazuje się menu witryny głównej.

h1

SharePoint błędy: 6398, 7076, 6482 i 7076

24 Sierpień 2009

W dzienniku zdarzeń zauważyłem wiele powtarzających się sekwencji błędów 6398, 7076, 6482 i 7076 oraz fakt, że nie wykonywały się zaplanowane zadania SharePoint’a. Dodatkowo nie było możliwe zarządzanie IIS poprzez konsolę mmc (pojawiał się błąd: the path specified cannot be used at this time).

Śledztwo zacząłem od przejrzenia kilku blogów, ale wpisy sugerujące restart IIS (iisreset) i usługi Windows SharePoint Services Timer Service (SPTimerV3) u mnie nie pomogły, choć autorzy zarzekali się, że u nich jest inaczej.

Event Type: Error
Event Source: Windows SharePoint Services 3
Event Category: Czasomierz
Event ID: 6398
Date: 24/8/2009
Time: 13:45:34
PM User: N/A
Computer: COMPUTERNAME
Description:
Metoda Execute definicji zadania Microsoft.Office.Server.Administration.ApplicationServerAdministrationServiceJob (identyfikator 504f09f5-a0c2-4124-8b68-eb6d6ab264f5) zwróciła wyjątek. Więcej informacji znajduje się poniżej.Attempted to read or write protected memory. This is often an indication that other memory is corrupt.For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Event Type: Error
Event Source: Office SharePoint Server
Event Category: Usługi udostępnione serwera Office Server
Event ID: 6398
Date: 24/8/2009
Time: 13:45:35
PM User: N/A
Computer: COMPUTERNAME
Description:
Wystąpił wyjątek podczas wykonywania zadania administracyjnego serwera aplikacji.Komunikat: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.Szczegóły dotyczące pomocy technicznej:
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Rozwiązaniem problemu jest hotfix, który może zostać przesłany przez Microsoft.

Hotfix i szczegóły dostępne są pod adresem: http://support.microsoft.com/?id=946517

UWAGA:
Przed zaplikowaniem hotfixa (który nie został jeszcze w pełni przetestowany) należy bezwzględnie wykonać kopię bezpieczeństwa.
Ponadto hotfix wymaga restartu serwera.

h1

Łatanie SharePoint 2007

8 Czerwiec 2009

Zajmując się MOSS 2007 szczególną uwagę należy zwrócić na aplikowanie odpowiednich łatek – na dodatek w odpowiedniej kolejności zwracając uwagę na dokłądną wersję zainstalowanych pakietów.

Jaką mam wersję MOSS’a? [więcej w artykule]

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.