poniedziałek, 5 grudnia 2011

Jak zmienić nazwę bazy danych dla SharePoint Central Administration (7 kroków do wolności od GUID-ów)


1. Uruchom SharePoint 2010 Management Shell

2. Utwórz nową, pustą bazę danych dla aplikacji Central Administration:

New-SPContentDatabase -Name MOSS_207_AdminContent -WebApplication http://plglisrv207:10000

3. Odczytaj ID bazy danych z GUIDem. Następująca komenda zwróci informacje na temat obu baz danych: z GUIDem i nowej, utworzonej w poprzednim kroku:

Get-SPWebApplication –Identity http://plglisrv207:10000 | Get-SPContentDatabase

4. Przenieś site collections z bazy danych z GUIDem do nowej bazy danych. Do identyfikacji baz danych użyj ID odczytanych w poprzednim kroku:

Get-SPSite -ContentDatabase 4d46caff-7bb0-4a47-bedf-76fdb983dd0f | Move-SPSite -DestinationDatabase 87db4860-036e-4b3b-9540-905352893b09





5. Zgodnie z zaleceniem, uruchom IISRESET z linii poleceń.

6. Możesz zweryfikować wykonane operacje, uruchamiając Central Administration > Application Management > Manage Content Databases.

7. Najwyższy czas pozbyć się bazy danych z GUIDem:

Remove-SPContentDatabase –Identity 4d46caff-7bb0-4a47-bedf-76fdb983dd0f


A co z pozostałymi bazami danych, które Sharepoint tak szczodrze tworzy na serwerze, każda rzecz jasna z GUIDem w nazwie? Polecam artykuł na Technecie: Rename or move service application databases (SharePoint Server 2010).


środa, 23 listopada 2011

Smutne i ważne! Nie dla wszystkich szablonów stron można zastosować wielojęzykowy interfejs.

Pisze o tym Toni Frankola na swoim blogu: Not every SharePoint site template supports Multilingual UI (MUI)!

Lista szablonów stron, dla których jest to niemożliwe:


  • Basic Meeting Workspace
  • Blank Meeting Workspace
  • Decision Meeting Workspace
  • Social Meeting Workspace
  • Multipage Meeting Workspace
  • Blog

środa, 7 września 2011

Setting audience for Navigation Link can be tricky


Setting audience for Navigation Link seems to be pretty simple task. Yet one day I created dedicated SharePoint group for audience to global navigation item leading to other site collection and … it did not work.
SharePoint audience group had one member only: it was AD security group. It occurred that SharePoint audience group needed “Restricted Read” permission for the site containing navigation item. This was strange for me, because all the members of the AD security group had permissions even of higher level for this site. Well… another tricky SharePoint thing.
You can ask why not to grant permission directly to the AD group? Yes, I did it and it worked. But then I discovered that AD group was sort of unrecognizable for SharePoint:


And it still worked but to change the Navigation Link I had to specify the AD group again! 
It was annoying enough to select solution with SharePoint group rather. 

środa, 6 lipca 2011

CustomErrors mode

During SharePoint development you can get this kind of screen:


There are two places you should look for web.config file and correct the setting to
<customErrors mode="Off" />
to get meaningful details of your error displayed.

First one is obvious: your site's web config. Open the IIS Manager and explore your site in order to edit web.config file:

Second one had made me think for a second and then I decided to create this post. As I was working on application page which was deployed down in _layouts folder, I found there another web config file to be corrected:

Update for SharePoint 2013:

Expand _layouts folder and find the 15 subfolder: there you have to correct anothet web.config file!

wtorek, 21 czerwca 2011

Problem z dostępem do UserProfileService z formularza InfoPath

Sytuacja wyglądała następująco:
  • Dla listy na SharePoincie 2010 zmodyfikowałem istniejący formularz w programie InfoPath
  • Utworzyłem DataConnection do UserProfileService, ponieważ potrzebowałem w formularzu informacje o zalogowanym użytkowniku.
  • Wszystko pięknie działało.

W czasie wdrożenia podjęto decyzję aby udostępnić SharePoint WebApplication pod nowym adresem, utworzyłem więc Alternate Access Mapping, administrator sieci przypisał ten nowy adres do IP serwera i aplikacja zaczęła hulać... za wyjątkiem formularza korzystającego z UserProfileService.

Komunikat błędu głosił że jest problem z WebService'm. UlsViewer precyzował, że chodzi o brak autoryzacji na serwerze. Kod błędu 401.

Przerobiłem więc DataConnection w formularzu InfoPath na ConnectionFile, umieszczone w bibliotece DataConnections w tym samym Site co lista:



Teraz już wiem że nie miało to żadnego znaczenia.

W Central Administration > Manage Service Application zająłem się User Profile Service Aplication. W Manage Users Permissions nadałem pełne prawa grupie do której należeli wszyscy użytkownicy aplikacji SharePoint.

Nie pomogło.

Na trop rozwiązania naprowadził mnie fakt, że będąc na serwerze SharePointa nie mogłem otworzyć aplikacji pod nowym adresem zdefiniowanym w Alternate Access Maping, mogłem wejść tylko na stary adres, składający się z nazwy komputera  i numeru portu.

Rozwiązanie jest opisane tutaj:  http://support.microsoft.com/kb/926642 i wydaje się mieć niewiele wspólnego z przedstawionym problemem Zwłaszcza że mój serwer to Windows 2008 R2. Sądzę że przyczyną problemu jest to, że Alternate Access Maping spowodował „double hop", z którym SharePoint z powodu błędu istniejącego w systemie operacyjnym nie umiał sobie poradzić. Zresztą pal licho przyczynę, gdy mamy rozwiązanie:



1.       Kliknij Start, Uruchom, wpisz regedit, i kliknij OK.
2.       Przejdź do następującego klucza w rejestrze:
       HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
3.       Kliknij prawym przyciskiem na Lsa, wybierz New, a następnie DWORD Value.
4.       Wpisz DisableLoopbackCheck i naciśnij Enter.
5.       Kliknij prawym przyciskiem na DisableLoopbackCheck i wybierz Modify.
6.       W polu Value wpisz 1 i kliknij OK.
7.       Jak dla mnie tyle wystarczyło, ale możesz jeszcze zrestartować komputer.

poniedziałek, 30 maja 2011

Problem z otwarciem dokumentu Excela

Problem wygląda następująco:


Inne typy dokumentów (Word, PowerPoint) otwierają się prawidłowo, tzn w aplikacji Office'a. Przed ich otwarciem SharePoint grzecznie pyta, czy dokument ma być tylko do odczytu czy do edycji:


Po pierwsze, upewnij się, że dla biblioteki zawierającej dokumenty Excela sprawiające problemy,       prawidłowo skonfigurowane jest zachowanie podczas otwierania dokumentów w przeglądarce. 

Jeśli chcesz aby dokumenty rzeczywiście otwierały się w przeglądarce, poszukaj informacji na temat Office Web Apps np tutaj: Deploy Office Web Apps lub tutaj Office Web Apps.
Tutaj opisuję co zrobić, by dokumenty otwierały się w aplikacji klienckiej, czyli w tym przypadku w Excelu.

Wejdź zatem do ustawień biblioteki, następnie wybierz Ustawienia zaawansowane i tam znajdziesz sekcję:

W tym przypadku dwa ustawienia są prawidłowe: Otwórz w aplikacji klienckiej oraz Użyj domyślnego ustawienia serwera.

Jeśli to nie wystarczy, musisz zajrzeć do ustawień Site Collection i otworzyć Funkcje (Site collection features). Tam należy aktywować "Domyślne otwieranie dokumentów w aplikacjach klienckich":


Teraz koniecznie zrestartuj IIS i dokumenty Excela powinny otwierać się prawidłowo :)



Visual Studio 2010: Sharepoint Connection Error

Uruchomiłem Visual Studio 2010, wybrałem utworzenie nowego projektu SharePoint2010 -> Visual Web Part i przy próbie połączenia się ze stroną SharePointa ...

... otrzymałem komunikat "Sharepoint Connection Error"
Zacząłem sprawdzać posiadane uprawnienia: na maszynie miałem prawa administratora, był tam zainstalowany SharePoint Server gdzie byłem członkiem grupy "Farm Administrators". Byłem również członkiem grupy "Site Collection Administrators" strony z którą chciałem się połączyć. Gdzie tkwi więc problem?

Bazy danych!

Rozwiązaniem okazało się utworzenie dla mojego konta loginu na serwerze bazy danych SharePointa i utworzenie user mapping z rolą db_owner dla baz:

  • konfiguracyjnej
  • AdminContent
  • bazy z zawartością dla mojej strony.

piątek, 18 marca 2011

Sprawdzanie poprawności kolumny / Column validation

Sprawdzanie poprawności kolumny odbywa się za pomocą formuł. Musisz wejść do ustawień listy a następnie w sekcji "Kolumny" kliknąć na kolumnie dla której chcesz dodać sprawdzanie poprawności. Pojawi się formatka na której ostatnia sekcja to właśnie "Sprawdzanie poprawności kolumny" (Column validation):
Należy teraz wprowadzić formułę oraz komunikat dla użytkownika, który pojawi się gdy formuła nie będzie spełniona (zwróci wartość FALSE).

Formułę należy rozpocząć od znaku "=". W formule można odwołać się do wartości danego pola za pomocą nazwy kolumny, np:

=Title = "Założenie użytkownika"

Nie można natomiast odwoływać się do wartości innych pól. Jeżeli chcesz zbudować formułę walidującą, która będzie operowała na więcej niż jednej polu listy, musisz zrobić to w innym miejscu: w ustawieniach listy  w sekcji "Ustawienia ogólne" wybrać punkt "Ustawienia sprawdzania poprawności" (Validation settings).

Warto jeszcze zwrócić uwagę na składnię operatorów logicznych:

=OR(Title="Założenie użytkownika"; Title="Usunięcie użytkownika")

=AND([Cena towaru]>100; [Cena towaru]<1000)


środa, 9 marca 2011

Irytujący link "Dodaj nowy element" dla listy z kilkoma typami zawartości


Jeśli utworzyłeś listę w której występuje kilka typów zawartości (content types), to na pewno irytować Cię będzie fakt, że link "Dodaj nowy element" umieszczony pod listą umożliwia dodanie jedynie domyślnego typu zawartości. Zwłaszcza jeżeli wszystkie typy zawartości są równie ważne i żaden z nich powinien dominować nad pozostałymi. 


Posługując się właściwościami WebPart-a widoku listy można usunąć tego linka. Wystarczy ustawić właściwość Typ paska narzędzi na wartość "Brak paska narzędzi".


Mi jednak znacznie bardziej odpowiada ustawienie "Pokaż pasek narzędzi", wówczas bowiem użytkownik otrzymuje przyjazne menu, widoczne nad listą, którego pierwsza pozycja - Nowy, pozwala na wybór typu zawartości jaki chce utworzyć. Nie trzeba użerać się ze wstęgą ;)



Natomiast linka "Dodaj nowy element" trzeba się zdecydowanie pozbyć. W tym celu należy otworzyć listę w SharePoint Designer i wyedytować w trybie zaawansowanym widok listy All Items (lub inny jeśli go utworzyłeś).

Należy odszukać  tag "<asp:content” dla PlaceHolderMain i znaleźć zamykający go tag “</asp:content>”. Przed tagiem zamykającym dodaj poniższy skrypt:


<script type="text/javascript">
var ttnA = document.getElementsByTagName('A');
for (var j=0; j<ttnA.length; j++)
{
  if (ttnA[j].id == 'idHomePageNewItem')
  {
    ttnA[j].style.display='none';
    ttnA[j].previousSibling.previousSibling.style.display='none';
  }
}
</script>


wtorek, 22 lutego 2011

Komunikat "Nie można odnaleźć listy" na stronach typu Wiki

Pewnego dnia modyfikując stronę wiki, chciałem wprowadzić referencję do dokumentu, otworzyłem zgodnie z notacją wiki nawiasy '[[' i... przeczytałem komunikat "Nie można odnaleźć listy" ("List not found").

Co się stało?

Rozwiązanie znalazłem tutaj:
'list not found' and 'A binding instance has already been associated...' when using '[[' wiki syntax

Faktycznie, jakiś czas temu musiałem zapewnić dostęp do witryny SharePointa po FQDN. W związku z tym dodałem do strony IIS drugi binding:


A teraz okazało się to problemem, bo z powyższego posta wynika, że połączenia się dublują. Rozwiązaniem w tym przypadku była modyfikacja pierwszego powiązania poprzez podanie host name (z "generic binding" zrobiłem "specific binding"):


wtorek, 8 lutego 2011

Zakładanie Centrum Wyszukiwania /Enterprise Search Center/

Banalne: należy wybrać    Site Actions > New Site   .
Lecz co jeśli w kategorii Search dostępny jest tylko template Podstawowe Centrum /Basic Search Center/?

Wtedy należy włączyć SharePoint Server Standard Site Collection features.

Teraz musisz powiązać Site Collection z Centrum wyszukiwania. Otwórz stronę:
   Site Settings > Site Collection Administration > Search Settings   
i w opcji Site Collection Search Center wybierz Enable custom scopes oraz wpisz adres Centrum Wyszukiwania.



Zwróć uwagę że do adresu należy dodać jeszcze ścieżkę /Pages lub /Strony (w zależności od języka w którym utworzyłeś witrynę Centrum Wyszukiwania)

Strony domowe użytkowników - jak utworzyć



Dotyczy wersji Sharepointa 2010 Standard i Enterprise.


W pierwszej kolejności musisz upewnić się że uruchomione są następujące usługi:
  • User Profile Service
  • User Profile Synchronization Service (ta zapewni synchronizację z ActiveDirectory)
Gdzie to sprawdzisz?
   Central Administration > System Settings > Manage services on server   

Kolejny krok to utworzenie site collection, gdzie będą zakładane strony domowe użytkowników. W terminologii MS nazywa się to My site host location. MS zaleca dodatkowo, aby utworzyć w tym celu osobną Web application.
Zdecyduj zatem w jakiej aplikacji i pod jakim adresem URL utworzysz hosta dla stron domowych użytkowników. Np chcę aby host znajdował się pod adresem http://localhost:8080 a strony użytkowników były tworzone pod http://localhost:8080/my. W tym celu Web application musi mieć zdefiniowane dwie ścieżki (managed paths):
  1. (root)   Explicit inclusion
  2. my       Wildcard inclusion
Następnie przejdź do "Create Site collection" i utwórz "My Site Host" site collection (wzorzec znajdziesz na zakładce Enterprise).

Przejdź teraz do administracji aplikacją User Profile Service Application
   Central Administration > Application Management > Manage service applications   
i wybierz:      My Site Settings > Setup My Sites   
Są tu 2 istotne ustawienia:
  1. My Site Host: należy wpisać pełny adres URL, w tym przypadku http://localhost:8080
  2. Personal Site Location: należy wpisać ścieżkę zdefiniowaną dla Web application (wildcard inclusion managed path), w tym przypadku my
Strony domowe są już dostępne!
Zobacz menu zalogowanego użytkownika: opcje Moja witryna oraz Mój profil przeniosą cię do właśnie utworzonej witryny ze stronami domowymi użytkowników.

środa, 26 stycznia 2011

External List - jak utworzyć

Jak utworzyć listę zewnętrzną:
  1.  Otworzyć witrynę w SharePoint Designerze
  2.  Wybrać “Typy zawartości zewnętrznej” i utworzyć nowy “Typ zawartości zewnętrznej”
  3.  Ustalić nazwę
  4.  Kliknąć „System zewnętrzny” a następnie „Dodaj połączenie”, aby wybrać zewnętrzne źródło danych
  5.  Dostępne opcje to:
    • SQL Server
    • Typ .NET
    • Usługa WCF (WebService)
  6.  Przy tworzeniu połączenia wybrać opcję “Połącz przy użyciu personifikowanej tożsamości systemu Windows” i podać odpowiedni „Identyfikator aplikacji bezpiecznego magazynu” czyli Secure Store w którym będzie zdefiniowane mapowanie użytkownik strony -> użytkownik z dostępem do zawartości zewnętrznej.
  7.  Po utworzeniu źródła danych, za pomocą menu kontekstowego na źródle utworzyć operacje (dla tabeli z SQL Servera można wybrać opcję „Utwórz wszystkie operacje”).
  8.  Gdy “Typ zawartości zewnętrznej” jest gotowy, z toolboxa na górze wybrać przycisk „Lista zewnętrzna”.

Secure Store Service

Secure Store Service to usługa do przechowywania i mapowanie poświadczeń (credentials).

Poświadczenie to nazwa konta i hasło, które zapewniają dostęp do systemu zewnętrznego.

W usłudze Secure Store poświadczenie jest powiązane z konkretną tożsamością lub grupą tożsamości. Secure Store jest używana do przechowywania mapowań tożsamości rozpoznawanych w Sharepoint i poświadczeń dających dostęp do systemu zewnętrznego. Skonfigurowanie Secure Service Store pozwoli Ci na to, że wielu użytkowników uzyska dostęp do zewnętrznego systemu za pomocą jednego zestawu poświadczeń w tym systemie zewnętrznym.

Gdzie to znajdziesz?
Central Administration > Application Management > Manage service applications > Secure Store Service


Target Application ID nazwa identyfikująca poświadczenie (credential)
Credentials Owner użytkownika ( DOMAIN\user ) który dostarcza poświadczenia
Credentials nazwa użytkownika lub grupy który/a będzie korzystał z poświadczeń
Password hasło użytkownika który dostarcza poświadczenia