New Visual Studio uservoice request

I already blogged about a Visual Studio uservoice request sometime ago. Now… I´M BACK! With a new and shiny one. This time it´s about the Visual Studio Team Foundation Service preview which is online since BUILD. If you haven´t tried it yet; do so. It’s a very powerfull system which combines your entire ALM (Application Lifetime Management) into a single webbased system. It integrates with Visual Studio (of course), but you can use other systems too. And theres a link with Excel for reporting purposes, there’s really too much to tell.

But as with all software, there’s always room for improvement. So I added a uservoice item requesting for a way to group or categorize items on the product backlog. There isn’t a valid way to do this at the moment, and after a short thread on the forums, I decided to add a uservoice item. Feel my hurting? Then please vote it up so the team will look at it for a future version.

My uservoice request is located here:

https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2456383-create-a-grouping-categorising-mechanism-for-pro

SharePoint 2010: Changing the cookie expiration for Forms Authentication

We have several claims based site on which we use Forms based authentication alongside Windows based authentication. The forms based users were regularly complaining that the “Remember me” checkbox “wasn’t working”. Well as usual, it seemed to work for me so at first, I blamed it on cookie policies, cleaner tools, stuff like that. But the comments were persistent so I began digging a little deeper.

First, I thought altering the web.config would suffice. In normal ASP.NET web applications, you can edit the tag and add a timeout for the cookie. But SharePoint handles the cookies for itself, so changing those parameters doesn’t really do anything.

So what’s the way to change it then? The power lies in the service handling the security token requests: the SecurityTokenService. Configuring a longer timeout proves to be quite easy using Powershell. Use these commands:


$sts = Get-SPSecurityTokenServiceConfig
$sts.FormsTokenLifetime = (New-TimeSpan -Days 90)
$sts.WindowsTokenLifetime = (New-TimeSpan -Days 90)
$sts.ServiceTokenLifetime = (New-TimeSpan -Days 90)
$sts.Update()

It’s quite straightforward: the FormsTokenLifetime configures how long forms tokens are valid. The WindowsTokenLifetime does the same for issued Windows tokens. The ServiceTokenLifetime sets the timeout for the security token service cache.

You can check if the timeout changed by using Firefox and inspecting your cookies before changing the settings. Compare the cookie expiration date to the date your get after changing the values. Make sure to delete the cookies first, so new ones are issued. If the settings were correctly updated, the expiration date should have slided.

If you want to implement a sliding expiration, check out this blog post: http://blogs.southworks.net/fboerr/2011/04/15/sliding-sessions-in-sharepoint-2010/

SP2010: copying wiki pages and updating relative links in Powershell

On our intra- /extranet, we have a seperate section in which we allow our customers to log in. Each customer gets a private portal site to collaborate with us. Of course, we wanted to add a help section to help users with the usage of this site. For our internal users, we have a wiki site setup on which several functions of the intranet are explained, as well as the customer section. For our customers, I only want to publish the customer related helpfiles without giving them access to the entire help library.

(more…)

Column: Respect my authoritah!

Gisteren hét gesprek bij de koffieautomaat: de boetes gaan per 1 januari 2012 omhoog. Ten eerst snap ik niet zo goed waarom iedereen daar toch altijd zo verbaasd over is. Volgens mij gebeurd hetzelfde namelijk ieder jaar. Het ene jaar zijn het de snelheidsbekeuringen, daarna het rijden door rood en het jaar daarna moet je 220 euro betalen wanneer je met een blikje kalfsragout aan je oor in de auto zit.

Ik vind die boetes op zich niet eens zo heel boeiend. Ik bel af en toe wel eens in de auto, maar meestal gewoon netjes handsfree (hoewel dat voor de veiligheid weinig uit schijnt te maken). Door rood rijden doe ik zelden en als ik te hard rijd, dan is het in ieder geval op momenten dat dat kan en altijd binnen de ‘dag rijbewijs’ grens. Toch vind ik het ergens idioot dat een keer ff vrolijk op je toeter drukken je voortaan 350 euro kan kosten. Ik vraag me ook af waar de grens van het zogenaamd ‘onnodig toeteren’ dan ligt. Wanneer ik bij mijn ouders wegrijd wil ik nog wel eens even op de toeter drukken. Vind ik persoonlijk niet onnodig, het is een sociaal gebaar wat vertelt dat ik het leuk heb gevonden en nu vrolijk weer de terugreis naar huis inzet. Toch zegt iets me dat ze daar in Den Haag heel anders over denken.

Wat ik liever zou zien is dat de politie zich weer gaat bezighouden met politie zijn. Want zeg nou heel eerlijk, de politie in Nederland is nou niet echt een overheidsapparaat wat angst inboezemt, nietwaar? Dat gezever met “de politie is je beste vriend”. Daar heb ik helemaal niet om gevraagd. Ik kies m’n beste vrienden zelf wel en in die kring heb ik de politie vooralsnog niet nodig. De politie moet optreden op het moment dat de maatschappij dat nodig heeft. Daadkracht, sterkte, uitstraling, daar hebben we behoefte aan. Vrienden maken doen we wel op Facebook meneer agent.

In de TopGear van afgelopen maand stond een foto van een paar Brits / Italiaanse politieauto’s die aangekocht zijn door de Italiaanse Carabinieri.

Kijk. Dat noem ik nou een statement! Daar ga ik wel voor naar de kant. Jammer dat er maar 2 geleverd zijn en dat ze zijn bedoeld om organen te bezorgen, maar toch… het is tenminste iets! Ik was als kind ook danig onder de indruk van de Porsches van de rijkspolitie. Dat zijn symbolen die kracht en autoriteit uitstralen, precies waar we behoefte aan hebben als je het mij vraagt. Wel even wat anders dan een Opel Astra met zuurstok striping.

Koop een paar van deze Lotus Evora’s, Nederland! Zet er een paar potige agenten en in laat ze dag en nacht rondrijden in deze bolide’s. Geen papierwerk, geen mooie praatjes of lief gedoe. Optreden! Bijvoorbeeld tegen mensen die het nodig vinden op de snelweg een peuk uit het raam te gooien. Geen 220 euro boete opleggen, dat helpt toch niks. ‘s Avonds een kiepwagen laten aanrukken en hun eigen tuintje volstorten met een paar duizend sigarettenstompjes. Dat ze voortaan hun rommel gewoon in de afvalbak gooien.

Van die eikels die op punten waar iedere dag file staat even de hele rij voorbij rijden om ‘m er helemaal vooraan nog even snel tussen de duwen. Ja meneer de Audi of Mercedes chauffeur, u weet dondersgoed wie ik bedoel. Die gasten die om een of andere reden schijnen te denken dat ze toch echt wel een haartje beter zijn dan de rest van de Nederlanders die wel netjes staan te wachten. Ga daar eens gewoon een hele dag achteraanrijden. Alle overtredingen gaandeweg noteren en aan het eind van de dag bij meneer aanbellen en de auto in beslag nemen. Over een maand of 3 nog maar eens proberen, en dan wel gewoon fijn achteraan sluiten he?

Die agenten, die mogen wat mij betreft best even toeteren als ze voorbij komen. Dat zijn mijn beste vrienden.

Sinterklaas en Poolse Pjotter

Het is die tijd van het jaar weer. De blaadjes beginnen bruin te worden en dwarrelen naar beneden. Vanavond een extra uurtje slaap en de winterjas is inmiddels alweer uit de kast. Iedereen weet dan natuurlijk wat eraan zit te komen… juist! De jaarlijkse discussie over Zwarte Piet en “of dat allemaal wel kan”. Doodmoe wordt ik er ieder jaar weer van, terwijl ik er nog maar vrij weinig mee te maken heb. Van huis uit vieren wij het Sinterklaasfeest nog steeds. Een gezellig avondje samenzijn met cadeau’s en surprises. Een teveel aan snoepgoed zorgt er ieder jaar weer voor dat ik enigszinds misselijk in de auto terug naar huis stap. Hartstikke leuk, hoewel de jaarlijkse surprise stress ieder jaar weer toeslaat. (more…)

Deploying custom list forms and view modifications

I want to summarize a few steps you need to take to deploy custom list forms (like NewForm.aspx) and view forms (like AllItems.aspx). Not because these things are undocumented, they are, but because I couldn’t find a good article which sums it all up in a neat way. So I’ll give that a shot myself 🙂

This post will handle the following kind of problems:
– Adding your own CSS or JavaScript to the NewForm.aspx page to add functionality;
– Adding your own CSS or JavaScript to the AllItems.aspx page to customize your list view;
– Replacing the default ListView webpart which is used in NewForm.aspx

First off, we’re talking about a custom list in a custom list definition which is being made in Visual Studio and deployed via a solution. You can make the same changes through SharePoint Designer, but then they’re obviously confined to a single site. I’m also supposing you’ve already got the list definition setup in a solution in Visual Studio.

First, it’s important to understand how the ghosting system works. A SharePoint ghosted file is a file which appears in a library, but isn’t actually there. The ghosted files are stored on disk instead of in the content database. All of the list forms are ghosted and stored in C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\Pages. The viewpage.aspx is represented as AllItems.aspx in a default library, the form.aspx file is being used as (you guessed it); NewForm.aspx, EditForm.aspx and DispForm.aspx. So when you open up AllItems.aspx in SharePoint Designer, you’re not actually opening a file from the content database, but the viewpage.aspx page is opened from disk. SharePoint remembers in what webpart zone you’ve added webparts and places those in there for you.

When you use SharePoint Designer often, you probably know the message telling you that you’re customizing a page from site definition. This is called unghosting. Since it would be foolish to edit the aspx page on disk (your changes would then be applied to all forms on all sites), SharePoint makes a copy of the page on disk and places that in the content database. The next time you load the page, your customized version is loaded instead of the default ondisk version. And when you revert to site definition, well you probably get the idea; you reghost the page and it’s loaded from disk again. Cool.

Why is this important? Copying the template files from disk is the first step of your modification process!

Let’s start with a modification to NewForm.aspx. What you need to do is:

  1. Copy the form.aspx page from C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\Pages into your solution
  2. Make sure the file is marked as an Element File. You can do this in the file properties (Deployment Type) or in the .spdata file
  3. Now edit the aspx page the way you want it to, you can add JavaScript and CSS, replace ootb parts, whatever you like.
  4. The final step is to make sure your list will use your customized version instead of the default one. Therefore you open up the schema.xml file of your list and find this line:

    <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />

    Replace it with:

    <Form Type="NewForm" Url="NewForm.aspx" SetupPath="\CustomListInstance\NewForm.aspx" WebPartZoneID="Main" />
    Make sure the path matches with the path of your list instance. A subtle difference is the difference between SetupPath and Path. Where SetupPath refers to C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE as root directory, the Path attribute uses your feature directory as root path.

  5. Deploy the list to a site, and your customization should be in place

Not too bad right? It’s more a matter of knowing the right tricks.

And once you know the right tricks, you can repeat them for the other forms. You can use you adapted form template for all the form types, or create a seperate one for Editing and Displaying if you like.

And for adding custom content to the AllItems.aspx page, the steps are basically the same:

  1. Copy the viewpage.aspx page from C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\Pages into your solution
  2. Make sure the file is marked as an Element File.
  3. Now edit the aspx page the way you want it to.
  4. The final step is to make sure your list will use your customized version instead of the default one. Therefore you open up the schema.xml file of your list and find this line: Replace it with:

    Same thing as above. Use Path instead of SetupPath and repeat this for every view element you might have in your schema file.

  5. Deploy the list to a site, and your customization should be in place

Cool! Now you can deploy custom stuff to all of the default forms in a list, how nice is that. Oh and one more tip. Suppose you don’t want to use the default ListView webpart in your new / edit form, you can easily replace it with a webpart of your own. You can do this by changing the UseDefaultListFormWebPart attribute to “false” instead of true. Adding a new webpart is done inside of the Form tag and looks like this:


<Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" UseDefaultListFormWebPart="False" >
<WebParts>
<!-- Add your custom webparts here -->
</WebParts>
</Form>

Adding custom role definitions and retrieving again as permissions

For a project I’m working on, I needed to make a distinction between user types. Not the default read / write things, which are default of course, but my own set. So I went looking and found the customizable Role Definitions.

Basically, a custom role definition adds an option to the ‘manage rights’ section of your SharePoint site. So where the default options list the default roles like ‘Limited Read’, ‘Read’, ‘Contribute’, etc, you can add you own option to this. The big advantage is that you can let your site admins take care of setting those rights. No need to create custom groups or things like that.
(more…)

Please vote for my VS suggestion

This weekend I added a suggestion for a new simple but powerfull feature in the next version of Visual Studio. In my opinion it’s a pretty good one (otherwhise I wouldn’t have posted it anyway), so I thought perhaps you agree on this. Feel free to vote and help me get this one up there.

To vote: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2302594-automatically-fix-fixable-errors

Suggestion text after the break.
(more…)

Pas op: baby on board!

Misschien dat het me nu pas opvalt omdat ik erop ben gaan letten, maar ik heb het idee dat steeds meer mensen van die tekst stickers op hun auto plakken. Je hebt inmiddels allerlei varianten waaruit je kunt kiezen. Zo zijn er de nummerbord stickers met teksten als: “als je dit kunt lezen moet je meer afstand houden” of “mijn vrouw heeft de porsche mee”. Lachen man. Mensen die zo’n ding serieus kopen, tja wat moet je daar nog meer over zeggen.

Dan zijn er mensen die stickers met een boodschap plakken. Ik dacht vroeger altijd dat auto’s met zo’n zilveren visje achterop werden bestuurd door iemand die lid was van de staatsloterij. Inmiddels ben ik natuurlijk oud en wijs en weet ik dat het voor een geloofsuiting staat. Om precies te zijn is het de Ichtus, het herkenningstekenen voor Christenen. Goed, dus je bent een gelovig Christen en plakt dan zo’n stickertje op de auto. Waarom? Wat heeft het, naast het lelijker maken van je auto, voor doel om zo’n ding erop te hebben zitten? Hebben Christenen een soort van ongeschreven wet dat wanneer ze elkaar passeren ze altijd even vriendelijk zwaaien? Zoals motorrijders altijd even een hand naar elkaar opsteken? Gaan ze samen bij de eerstvolgende pomp even een kopje koffie drinken om het geloof met elkaar te bespreken? Moet ik nu ineens heel erg geinteresseerd raken in het Christendom omdat Christenen blijkbaar ook in VW Passats rijden? Of is het de bedoeling dat wanneer je achterop zo’n auto knalt, dat je er dan ff geen GODVERDOMME! uitgooit?

Ik wordt daar dus redelijk onzeker van in het verkeer, krijg vanzelf het idee dat die mensen vanalles van me verwachten. Nog een mooi voorbeeld is: “Christ on board!”. Die zag ik laatst rijden, voor me in de file. Ik raakte direct compleet in verwarring. Was dit nu de moderne variant van het visje en had deze auto een Christen aan boord? Of was het toch gewoon een kindje wat door de ouders Christ was genoemd (waarom je dat zou doen is me ook een raadsel)? Want de “Baby on board” sticker is natuurlijk nogal onpersoonlijk, en je wilt niet onverschillig overkomen wanneer het om je eigen kind gaat, nietwaar?

Goed, dus deze Corsa (geloof ik) had een kindje genaamd Christ aan boord. Overigens durf ik te wedden dat in de helft van de gevallen het kindje op dat moment helemaal niet aanwezig is in de auto, maar het is natuurlijk ook weer zo’n gedoe om dan iedere keer die sticker eraf te peuteren, dat snap ik ook wel. Wat nu? Moet ik dan even leuk zwaaien of een gekke bek trekken wanneer ik je voorbij rijd? Of is het de bedoeling dat ik even 50 meter meer afstand ga houden zodat er zeker geen botsing ontstaat? Of misschien is het bedoeld als controlemiddel, dat je wanneer je zo’n auto op een parkeerplaats zie staan nog even extra controleert of die mensen hun baby niet vergeten zijn uit de auto te halen.

Ik verwacht eigenlijk bijna niks van andere weggebruikers. Het enige wat ik verwacht is dat ze zich aan de vekeersregels houden of, wanneer ze daar geen zin in hebben, dat ze de regels dan verbreken op een manier waarop ik er in ieder geval geen last van heb. Da’s namelijk precies wat ik zelf ook probeer te doen. Maar goed, om dat nou op mijn achterruit te gaan plakken…

Showing blog posts on other site

I use the blog feature of SharePoint 2010 quite often. It provides a good way of publishing new news items in your organisation. But sometimes, there’s the requirement of displaying your blog messages on a different site, for exmaple the landingpage of your intranet. Well there are a few ways of accomplishing this, but usually that means that you loose the look and feel of the default blog page. Here’s a way of doing this without loosing the markup!
(more…)