In Sharepoint 2010 is de handige ribbon aanwezig om acties te kunnen voltooien op de website. Voor de publieke website die ik momenteel aan het ontwikkelen ben is het niet nodig dat anonieme gebruikers deze ribbon krijgen te zien. Het past immers niet echt in de stijl van de website, anonieme gebruikers kunnen er niets mee, waardoor het alleen maar afleidt.

Gelukkig is er tegenwoordig een oplossing voor die out of the box kan worden gebruikt, namelijk het volgende stukje code:

<Sharepoint:SPSecurityTrimmedControl runat="server" Permissions="ManageLists">
Put Your Control Here

</SharePoint:SPSecurityTrimmedControl>


Uiteraard kan deze code voor veel meer dingen worden gebruikt dan alleen de ribbon. Zoals altijd, gebruik dit met mate!

Mogelijke waarden die kunnen worden gebruikt bij het attribuut Permissions zijn te vinden op deze MSDN pagina.
Voor de volledigheid, hier ook het overzicht dat momenteel op de pagina staat:

Member name

Description

EmptyMask

Available in SharePoint OnlineHas no permissions on the Web site. Not available through the user interface.

ViewListItems

Available in SharePoint OnlineView items in lists, documents in document libraries, and view Web discussion comments.

AddListItems

Available in SharePoint OnlineAdd items to lists, add documents to document libraries, and add Web discussion comments.

EditListItems

Available in SharePoint OnlineEdit items in lists, edit documents in document libraries, edit Web discussion comments in documents, and customize Web Part Pages in document libraries.

DeleteListItems

Available in SharePoint OnlineDelete items from a list, documents from a document library, and Web discussion comments in documents.

ApproveItems

Available in SharePoint OnlineApprove a minor version of a list item or document.

OpenItems

Available in SharePoint OnlineView the source of documents with server-side file handlers.

ViewVersions

Available in SharePoint OnlineView past versions of a list item or document.

DeleteVersions

Available in SharePoint OnlineDelete past versions of a list item or document.

CancelCheckout

Available in SharePoint OnlineDiscard or check in a document which is checked out to another user.

ManagePersonalViews

Available in SharePoint OnlineCreate, change, and delete personal views of lists.

ManageLists

Available in SharePoint OnlineCreate and delete lists, add or remove columns in a list, and add or remove public views of a list.

ViewFormPages

Available in SharePoint OnlineView forms, views, and application pages, and enumerate lists.

Open

Available in SharePoint OnlineAllow users to open a Web site, list, or folder to access items inside that container.

ViewPages

Available in SharePoint OnlineView pages in a Web site.

AddAndCustomizePages

Available in SharePoint OnlineAdd, change, or delete HTML pages or Web Part Pages, and edit the Web site using a SharePoint Foundation–compatible editor.

ApplyThemeAndBorder

Available in SharePoint OnlineApply a theme or borders to the entire Web site.

ApplyStyleSheets

Available in SharePoint OnlineApply a style sheet (.css file) to the Web site.

ViewUsageData

Available in SharePoint OnlineView reports on Web site usage.

CreateSSCSite

Available in SharePoint OnlineCreate a Web site using Self-Service Site Creation.

ManageSubwebs

Available in SharePoint OnlineCreate subsites such as team sites, Meeting Workspace sites, and Document Workspace sites.

CreateGroups

Available in SharePoint OnlineCreate a group of users that can be used anywhere within the site collection.

ManagePermissions

Available in SharePoint OnlineCreate and change permission levels on the Web site and assign permissions to users and groups.

BrowseDirectories

Available in SharePoint OnlineEnumerate files and folders in a Web site using Microsoft Office SharePoint Designer 2007 and WebDAV interfaces.

BrowseUserInfo

Available in SharePoint OnlineView information about users of the Web site.

AddDelPrivateWebParts

Available in SharePoint OnlineAdd or remove personal Web Parts on a Web Part Page.

UpdatePersonalWebParts

Available in SharePoint OnlineUpdate Web Parts to display personalized information.

ManageWeb

Available in SharePoint OnlineGrant the ability to perform all administration tasks for the Web site as well as manage content. Activate, deactivate, or edit properties of Web site scoped Features through the object model or through the user interface (UI). When granted on the root Web site of a site collection, activate, deactivate, or edit properties of site collection scoped Features through the object model. To browse to the Site Collection Features page and activate or deactivate site collection scoped Features through the UI, you must be a site collection administrator.

UseClientIntegration

Available in SharePoint OnlineUse features that launch client applications; otherwise, users must work on documents locally and upload changes.

UseRemoteAPIs

Available in SharePoint OnlineUse SOAP, WebDAV, or Microsoft Office SharePoint Designer 2007 interfaces to access the Web site.

ManageAlerts

Available in SharePoint OnlineManage alerts for all users of the Web site.

CreateAlerts

Available in SharePoint OnlineCreate e-mail alerts.

EditMyUserInfo

Available in SharePoint OnlineAllows a user to change his or her user information, such as adding a picture.

EnumeratePermissions

Available in SharePoint OnlineEnumerate permissions on the Web site, list, folder, document, or list item.

FullMask

Available in SharePoint OnlineHas all permissions on the Web site. Not available through the user interface.

In Sharepoint 2010 is het nu mogelijk om gebruik te maken van webtemplates. Zoals ik het zie is dit een evolutie van een Site template en een site definitie, maar er zijn genoeg anderen die hier een betere uitleg over kunnen geven, Mirjam geeft hier bijvoorbeeld een goede uitleg over: Post 1 & Post 2.

Omdat het gebruik van een webtemplate wel heel handig lijkt, heb ik dan ook besloten om dit te gebruiken voor het provisionen van m'n Sharepoint 2010 website(s).

Het aanmaken kan gewoon door het plaatsen van een leeg element binnen je solution en deze in een feature te plaatsen. Dit ga ik hier niet beschrijven, omdat er al andere blogs zijn die dit goed hebben gedaan, zie bijvoorbeeld Stefan Stanev's blog.

Komt er eigenlijk gewoon op neer dat je een nieuw element maakt en hier een onet.xml in plaatst en de bijbehorende bestanden:

Let hier wel op dat met een webtemplate geen modules kunnen worden ge-provisioned. Het is dus waarschijnlijk verstandig om de default.aspx te verwijderen en de onet.xml aan te passen dat de modules niet meer worden gebruikt.
De opmaak van het Elements.xml kan wel uit een van de eerdere gelinkte posts worden gehaald.

Na activatie van de wsp zullen alle features binnen de solution worden geactiveerd binnen de site collectie (heb als target de Site genomen). Een prima manier om je webtemplate uit te rollen en daarom ging ik ook verder met de bouw.

Nu wilde ik onlangs weer het hele provisioning proces testen op m'n testomgeving en kreeg continu de melding dat er al een lijst bestond met dezelfde naam, zie hieronder:

Na het bestuderen van de log-bestanden bleek het te gaan om de Pages lijst. Deze lijst was echter niet zichtbaar in de website, dus ging ik er van uit dat er iets foutief was aangepast in de features. Na lang zoeken kon ik er niet echt achter komen waarom het steeds fout bleef gaan, totdat ik met Sharepoint Designer ging kijken.

Een andere provisioning feature (van het Web) had bij activatie nieuwe pagina's gemaakt in de lijst (eigenlijk map) Pages. Deze map werd dus door de feature aangemaakt tijdens activatie, waardoor de webtemplate deze niet meer kon aanmaken tijdens het uitrollen van de webtemplate.

Iets wat dus niet op alle sites wordt vermeld is dus dat een webtemplate in een eigen Sharepoint solution moet worden opgenomen, of dat je in ieder geval rekening houdt met het feit dat alle features worden geactiveerd binnen de solution.

Nu heb ik de webtemplate dus in een lege Sharepoint solution geplaatst en uitgerold. Afgezien van dat ik nu andere problemen heb met het uitrollen (die hier niets mee te maken hebben), lijkt het provisionen nu prima te verlopen.

Ik heb enkele features gemaakt welke worden geactiveerd bij het aanmaken van een nieuwe site. Voor de zekerheid controleer ik hier of de aangemaakte website wel van het type PublishingWeb is, dit kan gelukkig heel eenvoudig met PublishingWeb.IsPublishingWeb.

Nu had ik de code in debug redelijk goed doorgelopen en werkte alles ook naar behoren. Tijdens het testen liep ik echter tegen wat vreemde problemen aan. De subsites werden maar half gevuld. Omdat ik hier tijdens het debuggen nooit last van had gehad vond ik dat nogal vreemd. Gelukkig wordt er in m'n feature redelijk wat gelogd, dus kon het probleem snel worden gevonden. Blijkbaar waren de aangemaakte sites niet een PublishingWeb. Omdat ik er zeker van ben dat dit wel het geval is, moest het dus wel een ander probleem zijn. Gelukkig ben ik niet de enige die hier last van heeft gehad en zijn er menige posts te vinden waar dit probleem in wordt beschreven.

Het komt er op neer dat na het aanmaken van een nieuwe PublishingWeb er op de achtergrond nog het een en ander gebeurd en er op een timerjob moet worden gewacht voordat de nieuwe PublishingWeb ook goed kan worden herkend.

Dit is ook de reden waarom de methode wel goed werkt in een while-loop, omdat je daar in kunt blijven totdat je eindelijk een true terug krijgt. In een productie web-omgeving lijkt me dat niet echt een ideale situatie en zou ik het gebruik van een dergelijke while-loop constructie ook afraden.

Het is in ieder geval iets om rekening mee te houden wanneer je een Sharepoint 2010 website aan het provisionen bent.

Tussen de opdrachten door ben ik bezig het provisioning proces van een Sharepoint 2010 public facing website te automatiseren. Een van de onderdelen die hier bij hoort is het plaatsen van de verschillende webparts op de pagina's.

Tijdens het plaatsen van de custom CQWP's kwam ik er achter dat dit niet allemaal zo goed werkte. De webparts werden namelijk niet geplaatst en ik kon niet direct uitvinden waarom dit het geval was. Na een zoektocht kwam ik op het weblog van Waldek uit waar hij een mogelijke oplossing voor het probleem heeft, zie: http://blog.mastykarz.nl/inconvenient-provisioning-content-query-web-part-instances/. Hij heeft namelijk ook problemen gehad met het plaatsen van een CQWP op een pagina. Volgens hem komt het probleem voort uit het feit dat de HttpContext eerst leeg moet worden gevuld met informatie van de huidige gebruiker:

Quote:

It turns out that each time you instantiate SPSite the SharePoint Object Model reuses the context information if available. And if the context information you provided doesn't contain any information on the current user, the created reference will be as it was called by an anonymous user! The HttpContext.Current property is static so it will remain available during the whole deployment process unless you explicitly clear it. Back in June I provided you the following code snippet to imitate the context data:

Gelukkig biedt hij ook de code aan welke gebruikt kan worden. Zelf heb ik de code enigszins aangepast, zodat het beter in m'n applicatie past. Voor referentie doeleinden, hier ook de code die ik zelf heb gebruikt:

bool contextCreated = false;
if (HttpContext.Current == null)
{
    HttpRequest request = new HttpRequest("", _currentWeb.Url, "");
    HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter()));
    HttpContext.Current.Items["HttpHandlerSPWeb"] = _currentWeb;
    contextCreated = true;
}

En uiteraard de code om de context weer leeg te maken:

if (contextCreated)
{
    HttpContext.Current = null;
}

Beide code blokken moeten worden aangeroepen, anders heb je kans dat de HttpContext problemen gaat opleveren in de rest van de code.

Gisteren heb ik voor het eerst sinds tijden weer een Sharepoint 2010 omgeving in elkaar gezet. Vorige keer dat ik dat had gedaan was toen Beta 2 net uit was. Ook toen liep ik al tegen een probleem aan, namelijk dat ik geen nieuwe web applicaties kon maken. Op dat moment was ik er maar van uit gegaan dat het kwam omdat het nog een beta product was of iets dergelijks.

Het lukte me gisteren nog steeds niet. Het icoon New was disabled, waardoor ik niet een nieuwe web applicatie kon maken.

Verschillende resources op internet schreven dat de DisableLoopbackCheck fix kon helpen, Internet Explorer met administrator privileges moet worden opgestart, etc. Al die dingen had ik al gedaan. Wanneer je Central Administration opstart krijg je namelijk automatisch al de UAC naar voren.

Uiteindelijk heb ik maar de UAC uitgeschakeld en opnieuw opgestart. Resultaat is dat de New knop nu wel ge-enabled is.

Beetje jammer dat je voor een Microsoft product de UAC uit moet schakelen om het goed te laten functioneren.