Een van mijn vele favoriete toevoegingen in SharePoint 2010 is toch wel de document set. Wat alleen tegenviel, is dat de afbeelding op de welkompagina niet individueel is in te stellen. Natuurlijk kan dat wel op content type niveau, maar het ziet er toch allemaal wel wat aardiger uit als je bijvoorbeeld in een map over vastgoed, het betreffende gebouw er ook meteen kan laten zien.
Met een klein beetje CSOM is dat echter ‘on-the-fly’ te realiseren en in dit artikel laat ik zien hoe. Deze techniek werkt in SharePoint 2010, 2013 en 365. In mijn eigen oplossingen neem ik het nog wel eens op in een content type hub met site columns en dergelijke, maar in deze uitleg wordt het in een individuele bibliotheek geconfigureerd. Benodigd is een een bibliotheek waarin een document set kan worden aangemaakt. Als eerste maak je in deze bibliotheek een nieuw veld ‘DocumentSetIcon’ aan. Voeg deze niet toe aan de standaard weergave en niet aan de content types:
Aan het document set content type voeg je vervolgens het nieuwe lijst kolom toe (zie de volgende afbeelding, de lichtblauwe link) en pas de document settings aan (zie de donkerblauwe link):
Hier kun je de welkomstpagina van het document set aanpassen. Het Image webpart gooi je weg, daar zetten we een content editor web part voor in de plaats. Van dit web part verberg je het chrome, en plakt in de HTML source de volgende code:
[code lang=”javascript”]

Sys.Application.add_load(function() {
if (typeof(getQueryVariable('ID')) != "undefined"){
ExecuteOrDelayUntilScriptLoaded(getdocseturl, 'sp.js');
}
});
function getdocseturl(){
clientContext = new SP.ClientContext();
//Get List GUID
var qvarLib=getQueryVariable('List');
//alert(qvarLib);
web=clientContext.get_web()
listitem=web.get_lists().getById(qvarLib).getItemById(getQueryVariable('ID'));
//listitem=web.get_lists().getByTitle(qvarLib).getItemById(getQueryVariable('ID'));
clientContext.load(listitem);
clientContext.executeQueryAsync(showItem, errorHandler);
}
function showItem(){
documentsetimagefilename=listitem.get_item('docseticon');
//alert(documentsetimagefilename);
if(documentsetimagefilename!=null){
documentsetimagefilename=getQueryVariable('RootFolder') + "/" + documentsetimagefilename
document.getElementById("docsetimageurl").innerHTML="";
}
}
function errorHandler() {
alert('Failed to retrieve the server relative URL.');
}
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (decodeURIComponent(pair[0]) == variable) { return decodeURIComponent(pair[1]); } } console.log('Query variable %s not found', variable); }
[/code]
In elke document set kun je nu afbeeldingen neerzetten en in ‘Document Set Icon’ opgeven welke je als plaatje wilt tonen:
Tot slot nog een korte toelichting op de code. Zodra de document set geopend wordt, staat in de URL zowel het ID van de document set, het pad van de inhoud en de GUID van de library. Daar maakt de code gebruik van door eerst het document set item te laden. In de showitem functie wordt vervolgens de naam van het gewenste plaatje uitgelezen. Dat, samen met het pad naar de inhoud, is voldoende informatie om de link te vervangen waar de content editor web part mee begint.