Posts Tagged ‘MOSS 2007’
SharePoint 2007 Author search refiner
SharePoint 2010 has a lot of nice features. One of them are search refiners. The search results can be narrowed down by Result Type, Site, Author, Modified Date, etc.

When knowing and seen that feature I’m really disappointed SharePoint 2007 doesn’t has this. Ok, the Advanced Search page is available, but it’s by far not that easy to use as the search refiners in SharePoint 2010.
Another thing popped up into my mind when using the SharePoint 2010 search refiners. Why can’t I select for example multiple authors? Not all, not one, but two or three or whatever I like at that moment with that search action.
Purpose
These two things: Search refiner in SharePoint 2007 and the possibility to select more than one item
are the starting point of this post.
One other thing: I like SPServices and jQuery, so I’m going to try to use these techniques instead of a farm solution.
So let’s create a search refiner on authors in this post. When the user performs a search and the results are displayed the option to select one or more authors to narrow down the search results will be available. All the different authors are displayed with a checkbox to select one or more and narrow down the search results accordingly.
While writing this post a lot of explaining has to be done so I decided to show it first. After that I’ll explain how to get there.
See it in action
The unique authors are listed, the user selects one

Search results based on the author selection and the initial search text:

Now you know what it does, let me explain it.
Analyzing the search
When a user types his search text in the standard search box, SharePoint 2007 performs a search by encoding the query and posting it to the results page. That’s basically just it, a basic query.
The Advanced Search page uses SQL syntax and can contain almost every query and result one can possibly imagine. For the purpose in this post we have to use the SQL syntax.
The next step is to analyze the Advanced Search box webpart and how a search is performed.

By typing a search string in the ‘All of these words’ box and performing the search, the results are displayed. When analyzing the source of this page the SQL query can be found.
Searching on the word ‘item’ and the property ‘Author Contains anita’ results in the following SQL query (removed the encoding):
SELECT WorkId, Rank, Title, Author, Size, Path, Description, Write, SiteName, CollapsingStatus, HitHighlightedSummary, HitHighlightedProperties, ContentClass, IsDocument, PictureThumbnailURL from scope() where freetext(defaultproperties, ‘+item’) And (Author like ‘%anita%’) Order By Rank desc
How does SharePoint know how to format the query like this? How does it know to put ‘item’ and the author search in the right place of the query?
With the help of the IE Developer toolbar:
‘All of these words’ has the name ASB_TQS_AndQ_tb.
The first ‘(Pick property)’ has the name ASB_PS_plb_0, the operator ASB_PS_olb_0 and the value ASB_PS_pvtb_0. The number at the end of the name will increase when multiple properties are used. For the second property the names ending with _1 are used. The And Or operator when using multiple properties is called ASB_PS_lolb_0 and increases when more than two properties are used. These names are used to make up the SQL query.
There are more controls on this page but only the ones mentioned above will be used in this example.
The code
To perform the right search, the SQL syntax will be used the way the Advanced Search webpart is using it by using html controls with the same names mentioned above.
Getting the authors
When the user performs a search, the results are displayed. The get all the authors of these search results to display the names in a checkbox label later on, the operation QueryEx of the SPServices library is used.
First the query is set up:
var queryTextSQL = "<QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'>" queryTextSQL += "<Query>" queryTextSQL += "<Context>" queryTextSQL += "<QueryText language='en-US' type='MSSQLFT'>" //use the same scope (Advanced Search) queryTextSQL += "SELECT Title, Rank, Size, Description, Write, Path, Author FROM scope() WHERE FREETEXT (DEFAULTPROPERTIES, '+" + sessvars.searchValue + "') ORDER BY \"Rank\" DESC" queryTextSQL += "</QueryText>" queryTextSQL += "</Context>" queryTextSQL += "</Query>" queryTextSQL += "</QueryPacket>";
To use the SQL syntax the type attribute is set to MSSQLFT.
The sessvars.searchValue is filled with the initial search text which the user typed in the search box. Sessions variables without cookies are used here. More information can be found here: http://www.thomasfrank.se/sessionvars.html
After performing a search this search text is displayed in the querystring of the url.
![]()
In code it is stored in a variable using $().SPServices.SPGetQueryString() with the following code:
var queryStringVals = $().SPServices.SPGetQueryString(); var searchItem = queryStringVals["k"];
This value is needed to get it into the SQL query and to put it back in the search box after performing the search. As you know when performing a ‘regular’ advanced search query, the search text is gone and not displayed in the search box anymore. To prevent ‘losing’ the user who performed the search the value will be put back in the search box.
After setting up the query let’s get the unique authors for the results:
$().SPServices({
operation: "QueryEx",
queryXml: queryTextSQL,
completefunc: function(xData, Status) {
k=0;
$(xData.responseXML).find("RelevantResults").each(function() {
$(this).find("AUTHOR").each(function() {
authors[k]=$(this).text();
k++;
});
});
if(authors.length > 0)
{
authors = $.unique(authors);
CreateCheckboxes(authors, "Author", "Contains");
}
}
});
The code fires the query and gets the authors from the results. The CreateCheckboxes method will create all the necessary controls and will be explained in the next part.
The controls
In this example an author search refiner will be built where a name of an author is the value in the query. To accomplish this, the control (using a checkbox in this example) which displays a single author has to have the name ASB_PS_pvtb_0, the next author ASB_PS_pvtb_1, etc.
The other names of controls which have to be used are ASB_PS_plb_x (x starting at 0) to set the property name and ASB_PS_olb_x as the operator. Authors are used here, so ASB_PS_plb_x has always the value ‘AUTHOR’ and the operator has always the value ‘Or’ since an item can have one author at the same time. These two controls are hidden controls, since these controls are of no use to the user. Only the checkboxes are displayed.
The CreateCheckboxes method will set this up for each individual author:
function CreateCheckboxes(authors, propertyName, operator)
{
var authorContainer= $('#someElementId');
var j=1;
$.each(authors, function( iteration, item )
{
//add or statement
if(j==1)
{
//<input value="Or" />
authorContainer.append(
$(document.createElement("div"))
.append(
createHiddenNamedElement("input","nameprefix$ASB_PS_lolb_" + (j-1), "Or")
)
)
}
authorContainer.append(
$(document.createElement("div"))
.append(
$(document.createElement("input")).attr({
type: 'checkbox'
,name: 'nameprefix$ASB_PS_pvtb_' + j
,id: 'author_' + item
,value: item
})
.click( function( event )
{
var cbox = $(this)[0];
if(cbox.checked)
{
//remember selected checkboxes to put back after postback
sessvars['numberOfAuthorsSelected']++;
sessvars['numberOfAuthorsSelected' + sessvars['numberOfAuthorsSelected']] = escape(cbox.value);
}
else{
//remember only the selected items
var total = sessvars['numberOfAuthorsSelected'];
sessvars['numberOfAuthorsSelected']=0;
for(var i=1;i<=total;i++)
{
if(sessvars['numberOfAuthorsSelected' + i] != escape(cbox.value))
{
sessvars['numberOfAuthorsSelected']++;
sessvars['numberOfAuthorsSelected' + sessvars['numberOfAuthorsSelected']] = sessvars['numberOfAuthorsSelected' + i];
}
}
}
} )
)
.append(
$(document.createElement('label')).attr({
'for': 'author_' + item
})
.text( item )
)
//add hidden input values
.append(
createHiddenNamedElement("input","nameprefix$ASB_PS_plb_" + j, propertyName)
)
.append(
createHiddenNamedElement("input","nameprefix$ASB_PS_olb_" + j, operator)
)
)
j++;
} );
SetSelection();
}
First the operator ‘Or’ is created. After that, the author checkboxes are created. In the click event the tracking of selecting and unselecting the checkboxes is performed. Then the label is set for the checkbox and last the hidden controls are created to store the property name and the operator.
At last the SetSelection() method will be called. This method just selects the appropriate checkboxes based on the stored values.�
To perform the actual search a search button is needed:
<input onclick='WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("nameprefix$ASB_BS_SRCH_1", "", false, "", "results.aspx", false, false))' type="submit" value="Search" />
The url has to be set to the current page so the results, according to the selected authors and the search text provided, are displayed in the search results webpart on the same page.
One last important issue
All properties are treated as numbers by default. When performing a search with the code created right now, an error will occur when selecting an author and perform the search:
‘Invalide parameter: Author. Expect a number. ITIDEA\anita.boerboom is given instead.’
To tell SharePoint to treat the Author property like text the following control has to be added to the page with the name ASB_TextDT_Props :
<input type="hidden" name="ASB_TextDT_Props" id="Hidden4" value="Author" />
When multiple properties have to be treated like text the values can be separated by #;#, e.g. Title#;#Author
When properties have to be treated like dates, use ASB_DateTimeDT_Props the same way as the text property described.
Summary
Before creating a search refiner a lot of investigating was necessary, but it can be built for SharePoint 2007 fully in script.
Also this example can be extended to show the number of items per author and of course other refiners can be built on other properties.
Cascading dropdowns with jQuery and SPServices on a page or webpart
The SPServices library on Codeplex (http://spservices.codeplex.com) provides a lot of useful functionality to access SharePoint data.
One of the functions is the SPServices.SPCascadeDropdowns function. Here is a link to the documentation of this function: http://spservices.codeplex.com/wikipage?title=$().SPServices.SPCascadeDropdowns&referringTitle=Documentation
As explained on the site this function can be used to set up cascading dropdown on SharePoint forms. Repeat: on SharePoint forms.
Sometimes it’s handy to use cascading dropdown lists on a regular page or in a webpart. For this purpose I made a simple jQuery plug-in to provide in this need. The functionality is not that extended as the SPServices.SPCascadeDropdowns, but I’ll guess you get the point.
Purpose
The purpose in this example is to make cascading dropdowns with countries and cities. This information is stored in two SharePoint lists and displayed in a Content Editor Webpart on a page.
Set up the lists
Create a list named Countries. Fill in some country names in the default Title column.
Create a list named Cities. Create a lookup column to the Countries list and name the column Country. Do not allow multiple values, the plug-in isn’t ready for that. Fill in some cities and link them to a country.
Add a document library e.g. with the name ICTLibrary. Of course you are free to choose the names, but be aware of the references in the code in this article, I use the names mentioned here.
Upload three items to this list:
- jquery-1.4.4.min.js
- jquery-SPServices-0.5.8.min.js
- jquery.itidea_spcascadingdropdown.js
The last file is the plug-in which provides the cascading functionality on a page.
Create the cascading dropdownlists
To create the cascading dropdownlists on a page is quite easy. Just paste the following code to a Content Editor Webpart on a page:
<script type="text/javascript" src="../ICTLibrary/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="../ICTLibrary/jquery.itidea_spcascadingdropdown.js"></script>
<script type="text/javascript" src="../ICTLibrary/jquery.SPServices-0.5.8.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#countries').itidea_spcascadingdropdown(
{
relationshipList: "Cities",
relationshipParentList : "Countries",
relationshipParentListColumn : "Title",
relationshipListChildColumn : "Title",
relationshipListParentColumn : "Country",
childdropdown : "cities"
});
});
</script>
<select id="countries" style="width:150px;">
</select>
<select id="cities">
</select>
There are a few things to know about the options:
relationshipList
The name of the list which contains the parent/child relationships.
relationshipParentList
The name of the list which contains the parent items.
relationshipParentListColumn
The StaticName of the values column in the parent list.
relationshipListChildColumn
The StaticName of the child column in the relationshipList
relationshipListParentColumn
The StaticName of the parent column in the relationshipList
childdropdown
The id of the child dropdownlist
promptText
The default text displayed in the dropdownlists
Most of the options are named the same as in the SPServices.SPCascadeDropdowns, because you are probably familiar with these names.
The cascading dropdownlists are looking like this now when nothing is selected:
Countries and all cities are loaded in the dropdownlists:
Summary
The plug-in is helpful if you want simple cascading dropdown lists on a page or in a webpart with the use of SharePoint data.
Download
Download the plug-in: jquery.itidea_spcascadingdropdown.js Updated version (November 30 2010; order by was hard-coded on ‘Title’ column)
For an extended plugin check out this post.
Permormance issue GetItemById
Be careful with the use of GetItemById(), there are two options to use it:
SPList.Items.GetItemById()
SPList.GetItemById()
The difference between the two is that the SPList.Items.GetItemById() loads every item into memory and then filters the set. Trust me: this can cause severe perfomance issues when using this on lists with a large number of items.
SPList.GetItemById() doesn’t do this and is way faster because of this. Be warned!
jQuery SPServices get list guid
A very easy way to retrieve the guid of a list with SPServices:
<script type="text/javascript" src="../ICTLibrary/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="../ICTLibrary/jquery.SPServices-0.5.4.min.js"></script>
<script type="text/javascript">
$("document").ready(function() {
function GetListId(listName) {
var id = "";
$().SPServices({
operation: "GetList",
listName: listName,
async: false,
completefunc: function (xData, Status) {
id = $(xData.responseXML).find("List").attr("ID");
}
});
return id;
}
var listid = GetListId("Plastic");
if(listid!=null)
{
$("#listid").append(listid);
}
else
{
$("#listid").append("list not found");
}
});
</script>
<div id="listid" >Plastic list guid: </div>
Url parameters for SharePoint 2007
Nothing new, just a quick recap for the SharePoint 2007 people and the last time I was often asked about this.
No ‘Edit Page’ at ‘Site Actions’ menu
On the pages newform, editform and dispform (aspx pages for list item modifications) there is no ‘Edit Page’ menu option available at the ‘Site Actions’ menu.
When you want to add webparts on these pages you can use SharePoint Designer or add the toolpaneview parameter to the url.
Options for the toolpaneview parameter:
1 – Message in the toolpane: A webpart you attempted to change is either invalid or has been removed by another user. I don’t know where this one is being useful, anybody?
2 – Browse to add a webpart
3 – Search to add a webpart
4 – No toolpane view
5 – Import a custom webpart
Lost a webpart from your page?
If you closed a webpart on a page or think your page is loading slow, check out the webpart page maintenance by adding ‘contents=1′:
…/default.aspx?contents=1
jQuery SPServices and autocomplete
On Codeplex the SPServices library is available. This is a jQuery library for SharePoint Web Services.
One of the functions available in the library is the SPAutoComplete:
http://spservices.codeplex.com/wikipage?title=%24%28%29.SPServices.SPAutocomplete
The SPAutocomplete lets you provide values for a Single line of text column from values in a SharePoint list. The function is highly configurable and can enhance the user experience with forms.
To use this function you have to put it on a new item form. On one of the fields of this new item form the SPAutoComplete can be implemented and used.
To make this work, create a new blank webpart page. Open the page in SharePoint Designer and insert a dataview on the page. At the Data Source Library select the list you want to create a new item form for and select Show Data. Select the desired fields to show on the new item form and select Insert Selected Fields as … New Item Form. Save the page and edit the page in the browser.
Imagine:
I have a list called Customers with a Title column with the name of the customer. In another list I need these names also but I want to suggest the user who adds a new item which customers we already have and how these are spelled.
Let’s proceed.
Edit the page in the browser and add a Content Editor Webpart, modify the webpart and show the Source Editor to add some code.
<script type="text/javascript" src="../ICTLibrary/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="../ICTLibrary/jquery.SPServices-0.5.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$().SPServices.SPAutocomplete({
sourceList: "Customers",
sourceColumn: "Title",
columnName: "CustomerName",
numChars: 2,
ignoreCase: true,
slideDownSpeed: 100,
debug: true
});
});
</script>
For all available options to set please take a look at the link provided earlier, but for the important ones here.
sourceList: the list to get the suggestions from
sourceColumn: the static column name to get the suggestions from
columnName: the displayname of the field in the new item form
You can hide the content editor webpart so you only see the new item form. Go ahead and type the first letters of a customername.

Ofcourse you want to use the autocomplete function on other pages or in other webparts and not only on a new item form.
For this purpose you can use the jQuery UI plugin (http://docs.jquery.com/UI/Autocomplete, implemented in release 1.8) in combination with the SPServices library.
With the SPServices library the items can be pulled out of the desired list and column and with the auto complete function of the jQuery UI the source can be set to the values to show.
To get the desired data from the list:
$().SPServices({
operation: "GetListItems",
async: false,
listName: "Customers",
CAMLViewFields: '<ViewFields><FieldRef/></ViewFields>',
CAMLQuery: '<Query><OrderBy><FieldRef Name=\'Title\' Ascending=\'True\' /></OrderBy></Query>',
completefunc: function(xData, Status) {
$(xData.responseXML).find("[nodeName= z:row]").each(function() {
itemSource[k] = $(this).attr('ows_Title');
k = k + 1;
});
}
});
And use the gathered data in the input field at the page:
$("input#autocompletebox").autocomplete({
source: itemSource,
minLength: 2
});
Where ‘autocompletebox’ is the id of the input control:
<input id="autocompletebox" />
And the output of this all in the browser:
Programmatically change the value of a lookup column
Lookup values are internally referenced as a combination of ID(int) and field value(string) in the following format: 1;#FirstItem.
The class offered by SharePoint for lookup values is SPFieldLookupValue. The method SPFieldLookupValue takes 1 or 2 values:
- “1;#FirstItem” (string)
- lookupId and lookupValue. Obviously the lookupId represents the field’s ID, lookupValue represents the field’s value.
Obviously you have to know the ID and value of the new item to set to the lookup field.
To enumerate all the possible items of the lookup list:
string itemsListed = string.Empty;
SPListItemCollection sources = web.Lists["Source"].Items;
foreach (SPListItem item in sources)
{
itemsListed += item["ID"].ToString() + “;#” + item["Title"].ToString() + System.Environment.NewLine;
}
An example of the content of itemsListed:
1;#FirstItem
2;#SecondItem
3;#ThirdItem
To search for a specific item you can use a CAML query:
SPQuery query = new SPQuery();
string toSearchFor = “ThirdItem”;
query.Query = “<Where><Eq><FieldRef Name=’Title’ /><Value Type=’Text’>” + toSearchFor + “</Value></Eq></Where>”;
SPListItemCollection collection = web.Lists["Source"].GetItems(query);
If(collection.Count == 1)
{
int idOfItem = int.Parse(collection[0]["ID"].ToString());
string totalLookup = idOfItem.ToString() + “;#” + toSearchFor;
}
FrieslandCampina
Branche: Zuivel
September 2009 – oktober 2010
SharePoint consultant/developer
Koninklijke FrieslandCampina voorziet miljoenen mensen in meer dan honderd landen verspreid over de hele wereld van melkproducten, kaas, boter en ingrediënten. Voor meer informatie: http://www.frieslandcampina.com
Dairy News & Analysis is de intranet site van FrieslandCampina’s Corporate Strategy afdeling. DNA is opgezet om goede gefundeerde beslissingen te kunnen maken in business tactieken en strategieën.
Het DNA project waaraan Anita heeft gewerkt betrof de migratie van DNA op LiveLink naar SharePoint (MOSS 2007). Binnen dit project zijn meer dan 50.000 documenten op LiveLink gemigreerd naar SharePoint met behoud van de metadata.
Anita heeft in dit project maatwerk webparts, timerjobs en een controltemplate (custom column type, cascading dropdown, multichoice, jQuery) gebouwd om de werking van de DNA applicatie optimaal op SharePoint te faciliteren.
Notificaties kunnen worden ingesteld om nieuwe items zowel per email en/of op een blackberry te kunnen ontvangen. De email en blackberry berichten zijn volledig opgemaakt volgens de FrieslandCampina huisstijl en worden op een vast tijdstip, met keuze dagelijks of wekelijks, verstuurd naar de geabonneerde. Gebruikers van het systeem kunnen zelf opgeven van welke informatie zij op de hoogte gehouden willen worden.
Met de ontwikkelde webparts kunnen verschillende dwarsdoorsneden worden gemaakt van de meer dan 50.000 documenten welke in SharePoint zijn opgeslagen. Hierbij wordt gebruik gemaakt van SharePoint Search Scopes en managed properties. De verschillende zoekmogelijkheden zijn zowel met CAML als met SharePoint Enterprise Search SQL statements geïmplementeerd, afhankelijk van de wens of de data per direct beschikbaar moet zijn voor gebruikers, bijvoorbeeld dagelijks nieuws, of dat een vertraging acceptabel is, bijvoorbeeld bij het maken van analyses waarbij veel data wordt opgevraagd.
Verder wordt de prijsontwikkeling van verschillende grondstoffen bijgehouden. Hiervoor heeft Anita een custom grafiek module geprogrammeerd, voor het gebruik in SharePoint, welke de data grafisch weergeeft. De grafiek met de ruwe data kan geëxporteerd worden als pdf of MS Excel formaat. Bij het exporteren wordt een vaste volgorde van de weergave van de gegevens gehanteerd inclusief een inhoudsopgave. De keuzes welke de gebruiker heeft gemaakt voor het genereren van de grafiek, bijvoorbeeld tijdsperiode en grondstof, worden overgenomen in het rapport. De opmaak van het rapport is geheel volgens FrieslandCampina huisstijl.
Om bij te houden hoeveel en welke soorten gegevens er in het systeem gebruikt wordt is er een timerjob ontwikkeld welke periodiek aantallen van bijvoorbeeld type documenten en andere gebruikte bronnen verzamelt in een lijst. Met behulp van jQuery en SPServices worden de gegevens overzichtelijk aan de gebruiker gepresenteerd.
SPServices in combinatie met jQuery is veelvuldig gebruikt om gegevens overzichtelijk aan gebruikers te presenteren, bijvoorbeeld een aangepaste weergave van een lijst met ondernemingen welke in het systeem aanwezig zijn en het tonen en verbergen van tabbladen op basis van aanwezige gegevens. In het systeem zijn ook TV Commercials te raadplegen middels een geavanceerd zoekscherm opgebouwd met SPServices en jQuery.
Het ontwikkelde maatwerk is in features in combinatie met solutions opgeleverd.
Naast dit project, wat de hoofdopdracht was, heeft Anita gewerkt aan andere SharePoint zaken als het uitbreiden van het Content Query webpart en aanpassen van de bijbehorende xslt, het maken van een newsticker (à la CNN, tv) op basis van een extern aangeboden rss feed en het maken van aspx pagina’s met dataviews en connected webparts met behulp van SharePoint Designer.
Voor een interview over het DNA project voor het internet personeelsblad Spark, klik hier.
Microsoft Office SharePoint Server 2007, Microsoft Office SharePoint Designer 2007, Visual Studio 2008, javascript, jQuery, SPServices, xslt, Visual Source Safe, MS Chart Controls
Hogeschool Inholland
Branche: Onderwijs
November 2010 – december 2010
SharePoint developer/consultant
Anita is ingezet als ontwikkelaar. In vorige projecten zijn diverse webparts, workflows en timerjobs ontwikkeld. Deze onderdelen zijn met nieuwe functionaliteit uitgebreid.
Microsoft Office SharePoint Server 2007, Windows SharePoint Services 3.0, Visual Studio 2005, ASP.NET 2.0, C#, Team Foundation Server.
Februari 2009 – mei 2009
SharePoint developer/consultant
Anita is ingezet als ontwikkelaar in het project. Ze heeft webparts ontwikkeld, met workflows, features, site definitions, contenttypes en timerjobs gewerkt en aan bugfixing gedaan. Ook is ze betrokken geweest bij het analyseren van de performance van de SharePoint omgeving. Hiernaast heeft Anita een tool gemaakt om de inhoud van User Profiles te doorzoeken en waarden te vervangen. Verschillende webparts welke ze ontwikkeld heeft hebben betrekking op de User Profiles, bijvoorbeeld een People Finder, het zoeken van personen, en de Klassenlijst applicatie. Binnen de Klassenlijst applicatie is het mogelijk klassen binnen de Hogeschool te zoeken en de studenten welke aan een klas deelnemen te tonen. Vanuit deze applicatie kan een email worden verstuurd aan alle studenten, er kan een presentie lijst worden getoond en geprint, de gegevens kunnen naar Excel worden geëxporteerd en de inhoud van de klas kan in een overzicht worden geprint. De applicaties zijn gepersonaliseerd, dat wil zeggen dat bepaalde functionaliteit en resultaten afhankelijk zijn van de rol van een gebruiker gedefinieerd in het User Profile.
Microsoft Office SharePoint Server 2007, Windows SharePoint Services 3.0, Visual Studio 2005, ASP.NET 2.0, C#, Team Foundation Server.
Oktober 2008 – januari 2009, 1 dag per week
Teamleider
Anita is betrokken bij de realisatie van www.inholland.nl. Het ontwikkelteam bestaat uit 2 junior ontwikkelaars met hiernaast een beheerder voor het implementeren van de releases. De voornaamste rol van Anita heeft hierbij gelegen in het ondersteunen en coachen van de junior ontwikkelaars bij het inhoudelijk samenstellen van de release in overeenstemming met de eigenaar, het maken van planningen, het bewaken van de kwaliteit, inclusief processen, en voortgang. Naast de ondersteuning heeft Anita diverse webtesten gemaakt, om de kwaliteit van www.inholland.nl optimaal te kunnen bewaken en meten.
Visual Studio 2005, ASP.NET 2.0, C#, Team Foundation Server
Januari – oktober 2008
Horison project – software ontwikkelaar; www.inholland.nl – teamleider
Voortvloeiend en in lijn met het vorige project is de opdracht ontstaan om de kwaliteit van de source code van het Horison project geautomatiseerd te laten verlopen. Hiervoor is TFS (Team Foundation Server) geïmplementeerd om controle op de kwaliteit van de software te monitoren. In TFS zijn policies geïmplementeerd om tijdens het ontwikkelproces bepaalde onderdelen af te dwingen bij een ontwikkelaar. Deze policies bestaat uit het uitvoeren van static code analyse, bij het inchecken zal een ontwikkelaar de changeset koppelen aan een workitem, er wordt gecontroleerd of de gebruikte XML bestanden voldoen aan de XSD van SharePoint (wss.xsd) en een ontwikkelaar zal zijn code van commentaar moeten voorzien. De twee laatst genoemde policies zijn door Anita ontwikkeld c.q. aangepast. De regels van static code analyse in Visual Studio 2005 zijn onderzocht door Anita en op basis van dit advies zal de code aan de meeste regels moeten voldoen voor een ontwikkelaar zijn code kan inchecken. Een regel welke bijvoorbeeld uitstaat is ´DoNotCastGeneralExceptionTypes´, omdat hiervoor een ander mechanisme wordt gebruikt waardoor dit noodzakelijk is. Aangezien er ten tijde van het invoeren van static code analyse al code ontwikkeld was moest er een inhaalslag plaatsvinden om de code aan deze kwaliteitsslag te laten voldoen. Anita is alle meldingen nagegaan en heeft deze opgelost. Na deze kwaliteitsslag is Anita ingezet als ontwikkelaar in het project. Ze heeft webparts ontwikkeld, met workflows, features, site definitions, contenttypes en timerjobs gewerkt en aan bugfixing gedaan. Ook heeft ze technische ontwerpen gemaakt.
Naast het Horison project was Anita nog deels betrokken bij de realisatie van www.inholland.nl. Het ontwikkelteam bestaat uit 2 junior ontwikkelaars met hiernaast een beheerder voor het implementeren van de releases. De voornaamste rol van Anita heeft hierbij gelegen in het inhoudelijk samenstellen van de release in overeenstemming met de eigenaar, het maken van planningen, het bewaken van de kwaliteit, inclusief processen, en voortgang en het coachen van de junior ontwikkelaars. De source code van het project is overgebracht van Visual Source Safe naar TFS en Anita heeft hierbij, samen met het team, de branching strategie bepaald en geïmplementeerd. Voor dit project is het principe van ´branche for release´ toegepast oftewel ´release isolation´. Het ontwikkelteam is relatief klein, de releases worden in timeboxes van 6 tot 8 weken opgeleverd en met deze strategie kan er ook aan meerdere releases tegelijk worden gewerkt. De planning is ondergebracht in MS Project 2007, welke een naadloze integratie met workitems in TFS heeft. Door het gebruik van workitems kon de voortgang nauwlettend worden gemonitord, ondersteund door de diverse rapportages welke in TFS voorhanden zijn.
Microsoft Office SharePoint Server 2007, Windows SharePoint Services 3.0, SharePoint Manager 2007, Visual Studio 2005, ASP.NET 2.0, C#, Visual Source Safe, Team Foundation Server.
Oktober – december 2007
Code reviewer
Hogeschool Inholland heeft in 2004 verschillende SharePoint omgevingen gerealiseerd ter ondersteuning van haar primaire processen op basis van Microsoft SharePoint 2003. Gezien de functionaliteitbeperking in deze versie is destijds gekozen voor een gescheiden CMS (Content Management System) die in verschillende lagen met de SharePoint communicatie over en weer heeft. Er is veel maatwerk gecreëerd voor het realiseren van de gevraagde functionaliteit (vanwege de beperking in de gebruikte versie van SharePoint) waardoor de schaalbaarheid van het systeem in geding komt.
Het project Horison is gestart om een volwaardig platform te realiseren en beschikbaar te stellen op basis van de nieuwe versie, MOSS 2007, waarbij alle SharePoint sites conform eisen en wensen gemigreerd en beschikbaar worden gesteld. Het product: de Inholland portal, het volledige intranet met daarin een plek voor alle applicaties en speciale doelgroepen, moet voorzien in de informatiebehoefte van alle medewerkers en studenten. Onderdelen van deze portal zijn onder andere de My Sites, teamsites en een elektronische leer omgeving.
Binnen Inholland wordt er samengewerkt op diverse niveaus binnen sites. Deze sites zijn ontwikkeld met behulp van zoveel mogelijk standaard MOSS 2007 functionaliteit. Hiervoor zijn site collecties gerealiseerd en templates voor diverse, afzonderlijke teamsites. De site collecties, evenals de diverse teamsites, zijn aangepast aan eisen en wensen van de business. Uiteraard is de layout aangepast aan de Inholland stijl door middel van stapling. Navigatie menu´s zijn opgezet volgens specificaties, er zijn menu items toegevoegd aan het ´Site Actions´ menu en het midden content vlak wordt opgebouwd uit diverse lijsten. Er zijn diverse bestaande lijsten aangepast, evenals nieuwe lijst templates gerealiseerd met aangepaste views op de data in deze lijsten. Ook zijn er nieuwe contenttypes gedefinieerd welke aan bestaande documentbibliotheken zijn gekoppeld. Er wordt gebruik gemaakt van zowel publishing (WCM) als collaboration site templates.
De eisen en wensen welke zijn aangebracht aan de verschillende onderdelen zijn gerealiseerd met behulp van ASP.NET 2.0 en C#. Veel onderdelen in MOSS 2007 zijn geconfigureerd door middel van XML bestanden. De verschillende onderdelen zijn ondergebracht in features. Dit zijn herbruikbare, modulaire bouwstenen, welke eenvoudig te installeren, deïnstalleren, activeren en te deactiveren zijn op verschillende scopes: farm, web application, site collection en web. Events in features, welke SPFeatureReceiver overerven, zijn geschreven om acties uit te voeren bij het installeren, deïnstalleren, activeren en deactiveren van de features. Deze features zijn ondergebracht in solutions. Een solution bestaat uit een cabinetbestand met de extensie wsp. Een solution, bestaande uit één of meer features, site-templates en assemblies, kan verscheidene keren worden gebruikt en op individuele sites worden uitgerold. Solutions stellen developers en administators in staat gemakkelijk bestanden te installeren op de front-end server van een serverfarm.
Hogeschool Inholland heeft kwaliteit uiteraard hoog in het vaandel staan en zeker met deze nieuwe techniek is het belangrijk dat de kwaliteit gemeten en gecontroleerd kan (blijven) worden. De rol van Anita ligt hierbij in het reviewen van de ontwikkelde source code, de XML bestanden en de manier waarop de verschillende onderdelen worden gedeployed naar de verschillende omgevingen. Op dit moment is het reviewen van de XML bestanden en de manier waarop gedeployed wordt nog voornamelijk een handmatige handeling doordat het platform MOSS 2007 en alle ontwikkelingen hiermee nog tamelijk nieuw is. Voor toekomstige ontwikkelingen op basis van het MOSS 2007 platform binnen Hogeschool Inholland is het wenselijk de kwaliteit geheel of gedeeltelijk geautomatiseerd te kunnen controleren. Anita heeft zich bezig gehouden met het inzichtelijk maken van deze wens en heeft de mogelijkheden hiervoor in kaart gebracht.
Microsoft Office SharePoint Server 2007, Windows SharePoint Services 3.0, SharePoint Manager 2007, Visual Studio 2005, ASP.NET 2.0, C#, Visual Source Safe, FXCop, SourceMonitor
September 2006 – september 2007
Teamleider, software ontwikkelaar
Hogeschool Inholland heeft tot nu toe ontwikkelwerkzaamheden altijd uitbesteed aan externe leveranciers. Bij het project voor de realisatie van een vernieuwde www.inholland.nl is er echter voor gekozen om de applicatie te laten bouwen door een externe leverancier maar om de onderhoudswerkzaamheden in eigen beheer uit te gaan voeren. Om dit proces soepel te laten verlopen is tijdens het project een ontwikkelteam opgezet. Dit ontwikkelteam heeft tijdens de bouw van de website reviews uitgevoerd op de code en de documentatie (zowel functioneel als technisch) van de externe leverancier.
Het ontwikkelteam bestaat buiten Anita uit een junior ontwikkelaar en systeembeheerder voor het implementeren van de releases. Anita heeft in haar rol als senior ontwikkelaar een belangrijke bijdrage aan het realisatietraject geleverd. Hierbij valt te denken aan het voorbereiden en uitvoeren van de code reviews met behulp van FXCop en SourceMonitor, het opstellen van coding guidelines, het onderhouden van contact met de externe leverancier en het begeleiden van de junior ontwikkelaar. Daarnaast heeft zij een bijdrage geleverd aan het inrichten van de ontwikkelomgeving voor de beheerwerkzaamheden.
Na de oplevering van de site is deze in beheer genomen door het ontwikkelteam. Overleg met de eigenaar van de applicatie, de afdeling Marketing en Communicatie, wees uit dat de functionaliteit op verschillende onderdelen kon worden verbeterd en dat er nieuwe wensen waren. Aan de hand hiervan zijn verschillende releases uitgebracht met timeboxes van 4 tot 8 weken. De rol van Anita heeft hierbij gelegen in het samenstellen van de inhoud van de releases in overeenstemming met de eigenaar, het maken van planningen en urenschattingen, het bewaken van de kwaliteit en voortgang, het coachen van de junior ontwikkelaar, het inrichten van een teamsite voor ontwikkelactiviteiten volgens MSF, en het ontwikkelen aan de applicatie.
Naast het ontwikkelen wordt er uitgebreid getest. De ontwikkelaars voeren eerst unit testen uit op de code, daarna systeemtesten om de wijzigingen in het geheel te testen.
De website is opgebouwd met behulp van Visual Studio 2005, MCMS 2002 en SharePoint 2003 en bestaat uit verschillende user controls, welke in templates worden gebruikt. Deze templates zijn via MCMS te gebruiken in de website. Op deze manier kunnen de contentbeheerders naar wens de website inrichten door deze templates te gebruiken. Een klein deel van de functionaliteit van de website wordt hieronder beschreven.
De website www.inholland.nl is bedoeld voor (aankomende) studenten, ouders van studenten, decanen, medewerkers, bedrijven en organisaties. Voor de studenten worden alle opleidingen getoond welke binnen de Hogeschool worden aangeboden. Dit wordt op een overzichtelijke manier getoond, of per locatie door de subsites te raadplegen of door een selectie te maken op verschillende kenmerken, zoals studie variant (deeltijd, voltijd) of categorie (Economie & Management of Techniek en Logistiek). De opleidingsinformatie is gedefinieerd in MCMS en is via de Web interface en de Sitemanager te raadplegen en te wijzigen door contentbeheerders. Ook kunnen belangstellenden zich inschrijven voor een open dag, voor het proefstuderen of een brochure voor een opleiding aanvragen. Deze aanvragen worden, nadat een belangstellende een account heeft aangemaakt, opgeslagen in een SQL Server 2000 database. Het account wordt uiteraard ook opgeslagen en via ‘Mijn INHolland’ kan degene zijn gegevens raadplegen en wijzigen. Contentbeheerders (waaronder ook studenten) kunnen bloggen op de website en testimonials (studenten over de opleiding, studentmentoren over wat ze doen, etc.) plaatsen. Ook worden er nieuwsberichten getoond in een flash carrousel. Nadat een nieuwsbericht is geselecteerd wordt de gebruiker doorverwezen naar het gehele nieuwsbericht op de juiste (sub) site. Deze nieuwsberichten worden uit MCMS gehaald
Visual Studio 2005 Team Suite, ASP.NET 2.0, C# 2.0, Visual Source Safe, SQL Server 2000, MCMS 2002, SharePoint Portal Server 2003, Visio, FXCop, SourceMonitor, Enterprise Library Data Access Block for .NET 2.0
Berg Project Support
Berg Project Support
Branche: Advies
November 2008 – heden, enkele uren per week
SharePoint consultant
Berg Project Support levert SharePoint oplossingen aan bedrijven ter ondersteuning en inrichten van diverse projecten. Anita geeft adviezen en uitleg over de inrichting en werking van diverse onderdelen binnen SharePoint (WSS), zoals webparts, rechten management en workflows.
WSS 3.0, Microsoft Office SharePoint Designer 2007






