Year: 2010

Slide Deck for "Experiences with two AsiaPacific-wide SharePoint Deployments"

As I wrote earlier, I spoke at the SharePoint Conference Southeast Asia on "Experiences with two AsiaPacific-wide SharePoint Deployments". I just published my slidedeck from this session:

Received the AIIM SharePoint Specialist Certification

After getting the AIIM SharePoint Practitioner certification in August, I completed all modules of the SharePoint Specialist course today and received the certification.

While the Practitioner course is mainly about “what is SharePoint”, the Specialist course focuses on the process of rolling out SharePoint in your organisation, so more like a “how do we manage the SharePoint project implementation”.

This course consists of the following 11 modules:
SharePointSpecialistProgram

 

My favourite part of the whole course was the “Assess” category, I found the three modules “Information Gathering”, “Strategy”, and “Business Case” the most valuable. It is in this phase of a SharePoint project that the basis for success is created! I paused regularly during these modules to reflect on my current implementation project, and if we should revisit certain documents and phases again to update them.

One small “drawback” of this course (or one could even say such courses in general) is that the contents are usually on a relatively high level, and don’t go too deep. For example, in the “Migration” module you’ll hear about possible approaches to migrations and what to consider, but (naturally) it can’t go into too much detail and give you a step by step approach, telling you what to do specifically in each situation of your content migration. For these situations the live classes will be much better, as e.g. mentioned by Mark Own here and here in his report on the AIIM SharePoint Master class, as you’ll be able to discuss and share your and the other participants’ experiences.

As for the difficulty level, I actually found the exams for these modules easier than the modules from the Practitioner course. One reason could be that I was more interested in this course, and thus it was easier for me to remember and understand things. Or, my experience from my two Asia Pacific wide SharePoint implementations might play a big role in this, as there were many things that were not new to me, which I had encountered before, just not in a structured format. I could say that a lot of the contents from this course are things that I encountered through some way or another before, but this was the first time I actually sat down to learn it directly in a structured format, whereas before it was individual bits and pieces.

As for the value of this course, I would strongly recommend it to others that deal with SharePoint implementations regularly in a (project) management role and don’t have too much experience with it yet. However, if you’ve done several rollouts already, there might be nothing new for you in it, though, and the only reason to do this certification is for the sake of having a certification.

Fixing erroneous GUID creation in Visual Studio 2010

After I got my new laptop, I installed among other things Visual Studio 2010. However, when I wanted to create a new GUID through Tools -> Create GUID, I got the error "Encountered an improper argument." from guidgen.exe :
image

After confirming this dialog, the guidgen.exe window opened, but clicking on copy or New GUID resulted in the same error message:image

As I found out, VS2010 calls the guidgen.exe inside the NETFX 4.0 Tools folder (inside the bin folder of the Windows SDK). Inside the bin folder, there is another guidgen.exe. Comparing these two, I saw that the one in the %PROGRAM FILES%\Microsoft SDKs\Windows\v7.0A\bin folder (left) is an older version for Visual Studio 2008, the other one %PROGRAM FILES%\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools (right) is for Visual Studio 2010:
image

I updated the command in Visual Studio to use the older version, and this did the trick, I was able to create GUIDs again.

If you get the same error, in order to correct it, go to Tools->External Tools, and select Create GUID. Select the NETFX 4.0 Tools in both the command field ("Befehl") and the initial directory field ("Ausgangsverzeichnis") (my VS is German, thus the different looking dialog) and remove it:
image

You should have something like this:
image

 

Running Create GUID again should give you the properly working window:
image

New Laptop – Dell E6410

A few weeks ago, my trusted companion, the Lenovo ThinkPad R61e suddenly started to hang. Not just when I was in Windows, but at different “occasions” :right after I switched it on; when it checks which OS to boot; while loading Windows; Windows login screen; after using Windows for 15mins; .

Sometimes it hung right after I switched it on for the first time of the day, other times I could use it for a few minutes. To sum it up, it became unusable.

So, the time had come to get a new laptop. As I planned to use it, amongst other things, to do some SharePoint administration and development (both 2007 and 2010) with virtual machines, I knew I needed to get one with quite good specs. On the other hand, I also knew that this would not be an everyday, multiple hours per day activity for me, and that I’d use the VMs only a few hours per week. Thus, spending too much money on an absolutely high-end machine was ruled out. Furthermore, I wanted to get a 14″ laptop, I didn’t see myself carrying a bigger, heavier laptop around a lot.

After a very long evaluation (consisting of lots of online research, and a few trips to the Funan centre here in Singapore to have a look at some models directly), I knew that in the end I’d get either a Lenovo, an HP, or a Dell due to their build qualities. I settled for a Dell E6410, as it allowed me to configure the laptop (nearly) perfectly for my needs:

  • i5-540 processor
  • 8GB RAM
  • 128GB SSD
  • Nvidia video card (as I still plan to play some “older” games like Football Manager 2009 or Fallout 3 occasionally)
  • 14″ screen with 1440×900 resolution
  • 9cell battery
  • backlit keyboard (I seriously love the quality of this keyboard and the lights!)

I also ordered a HDD caddy to replace the DVD drive with a second hard drive. That way, I can put my virtual machines on that second hard drive. I currently have one VM only, which naturally takes up nearly all of the remaining empty space of my SSD.

My opinion so far: this laptop is amazing! The build quality is great, working with 8GB and the SSD is extremely smooth! I installed my SharePoint 2007 VM in the past two days when I had time, and managed to still get more than 5 hours of battery life yesterday despite lots of VM activity.

Presenting at the Southeast Asia SharePoint Conference: Experiences with two AsiaPacific-wide SharePoint Deployments

I will be presenting at the upcoming Southeast Asia SharePoint Conference (26/27 October 2010) here in Singapore.
spcsea

Here are the details of my session:

Stories from the field – Experiences with two AsiaPacific-wide SharePoint Deployments

A SharePoint implementation with a scope targeting multiple countries comes with several challenges. Various cultural differences and technological barriers have to be considered for a successful rollout.

These include factors like different management styles and working cultures, multiple languages ("can my SharePoint be in Chinese?"), distributed locations ("can we have a local server here?"), varying connection speeds ("our SharePoint is too slow!"), and others.

In this session, experiences from two SharePoint deployments in the region Asia Pacific will be discussed.

Consider the following situation:

asia   Your company is rolling out SharePoint, and you have subsidiaries in multiple countries. This means that your users are spread across different locations, sometimes even time zones, and speak different languages. While your company might have a standard language to communicate with other people (English, usually), your colleagues speak a mix of different languages (Mandarin, Hindi, Spanish, Bengal, French, …), some even only their local language. So when you implement SharePoint, you have to keep in mind that the visitors to your sites might not be able to understand your contents, or that your contents are targeted at a smaller group of people (e.g. only the colleagues in the Paris office) and thus your site has to be in that language.

Considering different cultures is very important as well. The way people in China deal with problems can be very different from the way Americans do it. Project members in India may handle tasks in a very different way than you expected it, and your meetings with members of a business unit in Japan turns not out to be as you imagined. These are just some ways that local cultures can influence your SharePoint deployment.

In addition to that, depending on your network infrastructure and how your offices are dispersed geographically, you need to consider solutions (more servers? faster network? caching?) to make access for employees in these locations more convenient.

I will talk about these topics as well as a few more in my session.
See you there!

Using Gmail as your email centre with your own domain email address and an iPhone

One of the smaller "issues" with having my own domain on a normal (nothing fancy) web server (in fact, just some web space, it’s not the whole server) is that the webmail interface I’m using (provided by the hoster) is extremely simple. Searching through mails is inconvenient, I can only write plaintext emails (no images, no formatting….), etc.  That’s why I’ve been using Outlook to grab my emails via POP3.
Drawback of this approach is, of course, that once they were downloaded, I could only access them from my notebook (which was not always with me).
I was deliberating whether I should get the emails via IMAP instead, but I was still not happy with the web interface, which I need to use whenever I don’t have my notebook with me (e.g. at work, sometimes when I travel, etc.).

In the end, I decided to try a different approach:
I pull the emails from my own domain to my Gmail account, which I access via IMAP from both Outlook (well, not yet right now, as my current notebook is unused as it freezes regularly; new laptop coming in the next few weeks) and the iPhone. Through the Gmail web interface, I also have a very convenient and feature-rich way of accessing them as well as sending out emails. In order to make this work, however, I had to make some smaller changes to the way the iPhone accesses the emails and sends them (incoming emails through Gmail, outgoing emails through my own domain). Once I have my new laptop and Outlook installed on it, I will configured it similar (e.g. as in here http://products.secureserver.net/email/email_outlook.htm)
Below are the steps how I set everything up.

 

This was my initial setup:

03bc665c-1886-4960-8fbc-137bede97a4c

I pulled the emails from my own domain from my Outlook, whereas I also accessed them (as long as they were on the server) from my iPhone (which also got my Gmail emails, which were only a handful each month anyway; my domain email address is my major email).

 

This is the new setup with my Gmail account being the centre of the setup:

a5dac533-d68d-40ef-bf3c-511b79a1a92e

My Gmail account pulls the emails from my own domain email address. I access these then through Gmail via IMAP from both the iPhone and Outlook

Setting up Gmail

First of all, I configured Gmail to get the emails from my own down account. Under Settings and the Accounts and Import tab, I selected Add POP3 email account in the Check mail using POP3 section:2e1af52b-85a9-41a3-b157-d6a97feab717

 

In the next screen, I added my account information from my domain account. Furthermore, I kept Leave a copy of the retrieved message on the server unchecked so that there are no duplicate emails anywhere.

e58b9e0d-b545-4a05-96cf-2fac4f30f6a4

 

After confirming, I selected my newly added account as the default account for sending emails, and chose Always reply from default address so that any emails will be sent directly through my own email account (note: the outgoing SMTP server has to be configured for this as well).

2211bcf5-9caf-4573-b52e-6e6bfdc4d575

That’s it already, Gmail now fetches all emails from my @modery.net account, and additionally any emails sent through Gmail (or rather, the Gmail web interface) will be sent from it as well.

Setting up iPhone
On my iPhone, I needed to set up a connection to Gmail, however not through the default Gmail option, but through Other. The reason for this is that this way it is possible to set a different outgoing server than the incoming server. This is necessary as you would otherwise send/reply from your Gmail email address, not your own domain email address!
9cb66a77-e48c-4916-8b6d-aef39394f5e9

 

Next step, I selected Add Mail Account
b2bfe5b7-7801-47b1-be8d-99e7c2862a61

 

I entered the relevant information for my own domain email account, and confirmed. In the next screen, I kept IMAP
6338e93a-499b-4d7c-b1e2-9e3c02640779

 

Now comes the crucial part: In this screen, I added my Gmail account information (imap.gmail.com as host name, and the correct user name and password) for the Incoming Mail Server. For the Outgoing Mail Server, I added the correct SMTP server for my own domain and the relevant login information.
c94682c6-cd68-4348-9e22-ad6fd07c4d3b

 

For the next step, I kept Mail, but did not select Notes (didn’t test if it works as I don’t need it).
0dcd0e32-1bb0-4b66-a094-37cc440cdaa5

 

The last thing to do is to set up the corresponding Drafts/Sent/Deleted Mailboxes. For the just set up account, I went to the Advanced settings
7e71c688-01db-481f-bf83-9489e68c1478

 

And selected the three options above.
e359c7d2-35b9-4dcf-b253-1e883226a27b

 

so that it looks like this:

df41fe21-df9a-4835-95dd-982426bc182a

That’s it!
What happens now is that on my iPhone my email is fetched from the Gmail account (which, as outlined above, collects the email from my own domain account). If I send an email through this account (either create a new one or reply to an email), the server of my own domain account is used instead of the Gmail account, and thus any replies come from @modery.net

Book Review: User Adoption Strategies by Michael Sampson

Beginning of June, I received Michael Sampson‘s brand new "User Adoption Strategies" book.

User Adoption Strategies BookIn the 260+ pages (as stated, "I want this to be a book you can read quickly and apply rapidly.", which I can confirm), Michael explains why there’s a need for a user adoption strategy (simply said "What is the biggest complaint around the introduction of new collaboration technologies into a group or organization? The answer: No one uses them."), and provides a quite simple process with multiple strategies (you don’t have to use all of them, but of course can select the ones that are relevant and suitable for your enterprise). While it took me a while to finish reading the book due to time constraints, during the actual times that I could read it, I didn’t want to stop. The author truly holds his promise that it’s a book to "read quickly and apply rapidly".

The first chapter explores the basics and explains the need for user adoption strategies. Particularly interesting here (and generally in the whole book) is that Michael focuses on what he calls the "Second Wave People", the people who have use the new technology as it is provided, and did not participate in an "early adopter" stage. The reason behind this is that these people form the majority of all users in a company, and these are the ones that need to be "convinced" the most. This is what make the book so useful, as you will generally have to put in more effort into engaging these users than others!

Chapter three goes on to explain the change processes that are involved, and the author provides a short roadmap with explanations for each step. Afterwards, he describes how people nowadays collaborate with each other.

Chapter 5 onwards contains the real gems! In here, Michael first describes a four stage process to get users engaged, and describes multiple strategies for each stage in the following chapters. In itself, the "Four Stages" are a very simple, but well thought through and powerful process:

Four Stages

Michael dedicates a chapter to each stage, and provides 3-6 (18 in total) different strategies for each stage. Not only does he list them, but he lays out in detail what they, how to use them, why to use them, and why they work, all usually backed up by data gathered from his survey.

Excerpt
(Excerpt from index)

What I enjoyed most from the book is the way Michael explains these strategies. Not only do you get to know how they work, but also when to apply them (in which situation), and why they actually help you. All that written in a very understandable language filled with lots of examples, making it easy for you to grasp the concepts immediately when you read about them. While reading, a few times I thought "why didn’t I think about this before!". These aren’t complex frameworks for which you need to read and think a lot beforehand to understand them, and neither does it take a lot of time to apply them.

Excerpt
(Excerpt from the book)

As I said, the strategies are usually backed up by survey data, which Michael acquired by conducting a global survey with more than 400 responses. Those strategies are not just theoretical concepts, but proven strategies!

My recommendation: go and order the book (US$39 incl. shipping), in my opinion it’s a must have for anyone who is planning to implement SharePoint( or already has), or more generally speaking works on an IT project and wants to improve the user adoption!

AIIM SharePoint Practitioner Certification

AIIM, in their own words "the leading non-profit organization focused on helping users to understand the challenges associated with managing documents, content, records, and business processes", recently launched some new SharePoint certifications. Whereas the existing certifications from Microsoft focus on developers and server administrators, these new certifications rather target IT managers, business users, staff that is directly involved in the rollout of SharePoint, and similar.

The following image shows the structure of the certification program as a whole, including the 2 "main" certifications (Practitioner, Specialist):

31da3568-36d2-458e-8b28-7240bc157d5a

I had the opportunity to start with the SharePoint Practitioner certification end of July, and finished it (well, and got my certification!) 6 days later. I’ve also registered for the SharePoint Specialist course, which will be ready in another 2-3 weeks.

The website says about the Practitioner course: "The SharePoint Practitioner track covers concepts and technologies for SharePoint, and is available as an online or classroom training course leading to a Practitioner designation. The online course consists of 13 online modules, and each module is approximately 45 minutes. The primary focus of this training is on 2010 capabilities, touching on 2007 or earlier capabilities as needed." Or in other words, "What is SharePoint?"

For each module, you can download some resources (usually the presentation slides as well as a summary), view the online presentation (the slides including some audio with further information), and of course do the online exam:

2752e9b1-382d-462b-9133-bbd7910bf3f2

 

If you launch the online presentation, you will see the following screen:cd85c450-bb24-4fab-9c22-f5747b10ffd6

As you can see, the slides are presented on the right side, with the navigation on the left. Additionally, you can switch the navigation to a thumbnail view of the slides, a notes view (which is the text that is narrated), or a Search that searches all slides and their corresponding notes.

 

For example, if you switch to Notes, this is what you will get for the same slide:
c78bc29e-5910-4043-ab1b-5fa8e9ecf5b6

 

My recommendation while going through this online presentation is to switch to the Notes view and take notes where applicable. Not everything that is contained in these notes is on the slides, however all of it (slides AND notes) are relevant for the exams!

3ba57d48-9c70-4eee-8ff8-ccfd785f6f0d

 

For each module, there is an exam to pass. Once you passed all 13 exams (1 introductory exam, 12 for the modules), you get the overall certificate and can call yourself SharePoint Practitioner.

Each exam consists of 12 questions plus an additional three feedback questions (naturally, those three don’t count towards the result). A question is either a true/false question, or a multiple choice where you need to choose either one of four options, or select all choices that apply.

4d8506a8-7942-46a6-856b-1f72711fd381

2c62468a-cbb4-4ed4-9d00-ebcf8e0e6f4a

 

Once you answered all 15 (12+3) questions, you get to this overview screen where you can go back to individual answers, or click on "Grade Exam" to get your result.

1bc9ce0a-422c-488b-9f4b-6bc4fcba54fb

 

Once you have your exam graded, you will see immediately if you passed or not. In either case, you will get a general hint in which areas you answered wrongly (though you have to remember which questions are applicable for these areas, you don’t have the chance to review them).

If you passed your exam, you can download a certificate that shows that you passed this particular module.

cf2e78af-4306-4d0b-883e-468b19c41a90

My opinion:
For myself, I didn’t learn many new things, as I’ve been working with SharePoint for 3 years now. The course is more suitable for people who want to get a broad overview of the features an functionalities of SharePoint 2010, and how they can be used. If you already have some experience with SharePoint, it should be quite easy to pass it.

SharePoint Training Considerations

A part of every SharePoint implementation is a proper training plan for employees. Without proper training, your SharePoint rollout is quite likely to fail (though, naturally, the reverse is not guaranteed either; that is, if you hold a training it will be a success, as many factors play a part in this).

Being now in my second big implementation in the Asia Pacific region, each time for a big MNC, here are some of my findings and experiences (none of which I claim to be complete or 100% accurate, please see the first point). Going into more detail for each item would result in a huge growth of this entry’s size, resulting more likely in a whitepaper-worthy length. The purpose, of course, is to be more thought-provoking than detailed.

Things that need to be considered regarding training of staff are

  • No training plan fits all companies!
    There is no standard training plan template that can be applied to all companies and all SharePoint implementations. As with all IT projects, a SharePoint implementation is highly complex. And so are the requirements for the training.
    Therefore, some of the points I mention below will not be applicable for your specific situation. If you are a small office with 20 users, holding sessions with as few as possible users will usually be more beneficial than holding one big training session for everyone. If you are a large MNC, you usually can’t provide training in one language only, but rather need to translate it into multiple languages. For that reason, everything else that will be mentioned here CAN be taken into consideration for your training plan, but you should always consider your own needs and the relevance to your situation.
  • Different kinds of end users
    For example, you might have users that use your SharePoint mostly for data consumption, and users that contribute a lot. Naturally, the second groups needs a training with a stronger focus on how to add, edit, and maintain data stored on SharePoint. Another possibility is that you have "regular" users as well as "power" users, the latter which is allowed to and responsible for creating new lists & libraries. Training everyone on how to set these up is clearly overkill, but providing such a training for key users definitely beneficial.
    Another option would be to hold trainings for different departments (or any other kind of user groups that you can identify). The Finance department members might be more interested in learning about Excel Services and dashboards, whereas the Sales people want to know how they can quickly find all the relevant product information that they need.
  • Different locations
    While there are situations where you have all employees that need to be trained, more likely you will have dispersed teams, sometimes spread across countries or even continents. So you will need to hold multiple sessions for all those teams. One option would be to visit all those teams and hold the training directly, though this is obviously a very expensive one.
    Another alternative would be to train some key users ("train the trainer"), which afterwards train colleagues at their own location. This also gives you the benefit of having trainings in different languages (see below).
    Yet another option is to hold training sessions by sharing your desktop with other people through a web-based tool. That way, you can train people located in Paris while you’re sitting in your office in Seattle.
  • Different training times
    If you need to conduct multiple trainings at a location, plan for different timings as well. The reason? People have different schedules with some regular and some irregular items. If you plan to hold 2 hour trainings on 3 different days, try to spread them across the day. That way, it will be easier for people to join a training session, as it is less likely that it will conflict with their calendar.
  • Trainings in different languages
    As mentioned before, you might need to train people in different countries in different languages. By holding trainings in one language only, you risk that not all participants understand the contents clearly, and you risk that even though they attended a training, they do not understand how to use all the functionalities covered.
    It is thus recommended to hold trainings in multiple languages where it makes sense. If there are only 3 people that speak a different language, translating your whole training materials would be overkill. But if you have let’s say 100 people, you could consider it a must.
    How should those trainings be held? One option would be to hold them bilingual, e.g. in Chinese and English (assuming that English is the commonly used language in your company). You present in English, and someone else (e.g. a knowledgeable colleague, or better a translator) conducts the training in Chinese, both of you switching to one another regularly (~ once per slide). The drawback here is that you will have to include a lot more time for this kind of training, but more severe is the fact that most people will probably stop listening to you and concentrate on the native speaker only. Thus, a "train the trainer" beforehand and the local native speaker conducting the local training by himself makes more sense.
  • Different kinds of trainings
    A training should not be a one-time thing only. It is simply impossible to include everything that you want to train people on in a single training session, so you need to plan for a few different trainings.
    The first kind of training would usually be an introduction on SharePoint that covers the reasons for the implementation, the benefits that can be achieved for the company and the users, and the most basic functionalities.
    Afterwards, it is possible to hold small "refresher trainings" to allow those employees that could not participate the initial training before (e.g. due to time constraints, or as they joined the company only afterwards) get the relevant knowledge. Furthermore, some people might take up the opportunity to go through a training again and get a better understanding.
  • Different formats
    There are many ways how a SharePoint training can be conducted. Michael Sampson goes into more detail in his book "User Adoption Strategies" about classroom training and web-based training. Another option is to hold a one to one training.
    Each of them has its benefits and drawbacks. Holding a one to one training is definitely the most effective, but also the slowest (imagine having to train everyone this way!) and most expensive. Web-based training, conducted for example through a tool like WebEx, has the benefit of allowing participants in different locations to join. However, it will be difficult for them to do some exercises during this training session, more likely this kind of training would follow a presentation style.
    The most standard kind of training, the classroom training, allows participants to work on exercises, and get support and feedback easily and immediately. The fewer participants here, the more effective the training usually is (yet, the total number of people to be trained and the timeframe of the trainings play a big factor here as well).
  • Executive support
    As with most things, having executive support shows that the company in total is committed. There may be a lower resistance level to participate in a training if employees are asked by their superior to go. So if you set up a training, why not let the CEO send an email to staff to inform them about it? Or alternatively, ask the department ma
    nagers to notify their staff about the trainings, asking them to participate.

  • Provide registration possibilities
    If possible, give people a choice on their training schedule. As mentioned before, different people have different working schedules, and they know best when a training for them would fit in. So why not set up a training registration page on SharePoint, where they can then select the training they would like to participate in?

How I did it: FIFA World Cup 2010 Tipping Competition

Disclaimer: As my intention is to write about the implementation in general (as for most of it, you could say that it is relatively straightforward to do; only OOTB SharePoint functionality combined with some SharePoint Designer magic is used), you will not find detailed steps on how to create a similar solution here. However, I will briefly describe some tricky parts which I hope will help others doing something similar.

Shortly before the recent FIFA World Cup started, I was approached by a colleague asking me if I could implement a tipping competition for it in SharePoint. Their office already had plans for a regular "offline" competition locally, but in order to promote our SharePoint based intranet, and to let others join as well, he suggested to do it in SharePoint.

After a little bit of testing, I came up with a working, though not perfect solution (the drawbacks and "security issues" are mentioned below). It has been, however, used without any major issues, and can be considered a success.

The Rules

For each match in the World Cup, people are allowed to submit a tip. We decided to let them tip the result after 90 minutes (irrelevant for the group stage, but important for Round of 16 onwards), and awarded points for each tip as follows:

  1. 5 points if the exact result is tipped (e.g. both result of the match and the tip are 2-1, or 3-3)
  2. 3 points for the correctly predicted goal difference of a match (e.g. if the result is 2-1 and the tip is 1-0 or 3-2; or if the result is 1-1 and the tip is 2-2)
  3. 1 point if the correct winner was predicted, but the goal difference is different (e.g. if the result is 1-0, but the tip is 3-0 or 2-0)
  4. 0 points otherwise

Implementation Basics

 image
A dedicated site was created for the competition. In that site, the following elements were created

  • a "Group" page for each of the 8 groups (A-H). Tipping for the individual matches of a group is done through here
  • a dedicated page for each of the later stages (Round of 16, Quarter Finals, …) on which tipping for the corresponding matches is possible
  • a scoreboard page that displays the current standings of the tipping competition
  • a list that holds all the fixtures of the World Cup (group matches, Round of 16, …. Final)
  • a list in which all the tips are stored. As authentication is done through Active Directory, it is always possible to know who submitted which tip ("Created By" field)
  • a list in which comments are stored. These comments are displayed on all pages, allowing employees to chat and talk about the World Cup

Additionally, two Excel spreadsheets were created. The first spreadsheet is used to calculate the points of all tips by connecting to the SharePoint fixtures list and tips list, and comparing each tip with the actual result and awarding the points as defined above. Based upon this, a ranking is updated each time new results were entered into the SharePoint fixtures list.

The second spreadsheet is used to display these rankings in a Web Part on the scoreboard page.

This could have also been achieved inside a single spreadsheet,  however in order to prevent other people from accessing the calculations but still be able to show the results, this "two file solution" was implemented.

How it looks like

The entry page of the tipping competition site contains a short welcome message and some brief infos. Below that, the next few matches are displayed, and the official World Cup RSS feeds from FIFA are displayed inside widgets from Widgetbox:

ea632b6e-9aa9-48d5-8569-c098462cd9ce

To make it very easy to navigate among the different group pages and other pages, all of them can be accessed from the site’s quicklaunch:

f6dc18ba-2733-44c1-adee-53bc8ce19b2c

As mentioned before, on each page the comments list, called "Have Your Say", is displayed:
a9b0c387-8d9c-4838-8cf5-b4ab3a70fd05

What I’m doing in this case is actually displaying two Web Parts: the top Web Part is a Custom List Form Web Part that allows employees to add a new comment, below that is the List Web Part which displays the latest comments. In order to make it look as if they are one, the bottom Web Part’s title bar.

A group page shows all matches of a group, the results (if the match was played already), and the tip for the user accessing the page. Once a match has started, tipping is no longer possible:

12a51991-2402-4736-9347-deff2e2cc74a

The pages for the later stages (Round of 16, Quarter Finals, …) contain the corresponding matches. As it can be seen below, a tip has been submitted for the match Uruguay-Netherlands, but none yet for Germany-Spain:

6cd06ff0-d727-4955-b5da-5acadb4f1c1f

As mentioned before, the ranking is stored inside an Excel spreadsheet, which is displayed on the scoreboard page:
13759b71-7376-484d-b95a-668fb9e3c440

Technical Information

The Fixtures list is used to store all fixtures. Initially, only the group stage matches were entered with empty Home Goals and Away Goals. As soon as a result was final, it was entered in here.

Later onwards, the corresponding matches from the next stages were entered here as well. To differentiate between the different groups and stage levels, so that the corresponding matches can be show on the appropriate match pages, the column Group contains the group (e.g. A) or the stage level (e.g. Semi Final) for a match.

0ee98f9a-3af0-4bb3-a2ff-06dc1636a0ad

When people submit a tip, it is stored in the Tipps (sic!) list.The additional columns in this Custom List are Fixture, which is a lookup column that references the ID column from the Fixtures list, and Home Goals and Away Goals (in this case of course not the actual result, but rather the tip by the user). We can see who submitted which Tip in the Created By column.

bb3d485e-8dcb-47d1-b8e0-23203b766c7d

The Excel spreadsheet imports these two lists. The evaluation for each match is done at the Tips list level. That means, for each tip it is being calculated how many points should be awarded.This is done by comparing the actual Match results (added here via lookup for easy referencing) with the tipped result, and awarding points for draw, home win, and away win. For example, for home win it is first c
hecked if the actual result was a home win AND the tip was a home wine, and if not 0 points are awarded. If it was a home win, we then check if the tip and the actual result are the same and award 5 points if so, otherwise we check the if the difference for both results (actual and tipped) is the same, and award 3 points, otherwise 1 point.

Points for away win are calculated the same way, the calculation for a draw is easier.

Lastly, we simply sum up the points from those 3 possibilities (note: at least 2 of them are 0 points, of course) in the Points to Award column.

815d627d-a195-41ef-9262-560e3494f404

These points are then summed up per user, and a ranking can be created.

Technical Snippets

While implementing this solution, I came across a few points that are worth mentioning:

One small problem I had was that I needed to show data from two separate lists. On the tipping pages, I wanted to display the tip of the current user (1) from the Tipps list, as well as the match details (2) from the Fixtures list.

06594e88-73a6-45e0-a247-de88485be399

To achieve this, I created a new Linked Source in SharePoint Designer made out of these two lists with a Join:

72cd60ec-0f44-4221-909f-1fb4bd8be8e4

As it can be seen here, it was then possible to access both of them through a single connection:

cfd78395-7a32-4147-b69a-1b26a5c7751c

In the Data View Web Part used to display the match details and the tip, I then filtered the Tips by the current user and by the ID from the Fixtures list. That way, only the tip for the current match by the current user is selected.

da10a5bc-ead4-40c9-bc51-dc1fb1f84be1

If no tip has been submitted, and thus the row count is 0, a button for first time tipping ("Tip!") is displayed, otherwise the existing tip together with an "Update!" button is shown.

I also wanted to prevent users from both submitting after a match had started and submitting more than one tip. The first step was to check if the current match has started already, and if so, do not display the Tip/Update button.

For this, I created two variables: one for the current time, the other one for the match time.

<xsl:variable name="matchdaytime">

     <xsl:value-of select="number(translate(ddwrt:FormatDateTime(string(/dsQueryResponse/Fixtures/Rows/Row[@ID=$FixtureID]/@Match_x0020_Time),1033,’yyyyMMdd HHmmss’),’ ‘,”))"/>

   </xsl:variable>

   <xsl:variable name="curentdaytime">

     <xsl:value-of select="number(translate(ddwrt:TodayIso(),’-T:Z’,”))"/>

   </xsl:variable>

With these two variables, it was then possible to act accordingly (here shown with Update):

<xsl:choose>

       <xsl:when test="$matchdaytime &gt; $curentdaytime">

        <input id="updateTippButton{@ID}" type="button" class="button" value="Update!" />

       </xsl:when>

       <xsl:otherwise>Tipping Period over</xsl:otherwise>

</xsl:choose>

 

As it can be seen, there is no action defined here once the button is clicked. I make use of jQuery in order to process the tip and submit it.

The following script shows the two important functions involved here: one is the $(document).ready() function from jQuery, which attaches an event handler to all Update/Tip buttons (uniquely identified with the match ID). The other one is the Tipp function that submits the tip (either through adding a new tip or updating the existing one) .

<script language="javascript">

  function Tipp(fixtureID, tippID, cmd) {

  //alert (fixtureID + "–" + tippID + "–" + cmd);

  var Home = $("#HomeTeamGoals"+fixtureID).val();

  var Away = $("#AwayTeamGoals"+fixtureID).val();

  //alert(Home+" : "+Away);

  if(Home != ” && Away != ” && Home>=0 && Home<=12 && Away >=0 && Away<=12) {

  var id = "";

   if(cmd=="Update")

   id = "<Field Name=\"ID\">"+tippID+"</Field>";

        var batch =

            "<Batch OnError=\"Continue\"> \

                <Method ID=\"1\" Cmd=\""+cmd+"\"> \

                 "+id+"\

                    <Field Name=\"Fixture\">" + fixtureID + "</Field> \

                    <Field Name=\"Home_x0020_Goals\">" + Home + "</Field> \

                    <Field Name=\"Away_x0020_Goals\">" + Away + "</Field> \

                </Method> \

            </Batch>";

        var soapEnv =

            "<?xml version=\"1.0\" encoding=\"utf-8\"?> \

            <soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \

                xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \

                xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"> \

              <soap:Body> \

                <UpdateListItems xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\"> \

                  <listName>Tipps</listName> \

  &
nbsp;               <updates> \

                    " + batch + "</updates> \

                </UpdateListItems> \

              </soap:Body> \

            </soap:Envelope>";

        $.ajax({

            url: "http://ap.landisgyr.net/WC2010/_vti_bin/lists.asmx",

            beforeSend: function(xhr) {

                xhr.setRequestHeader("SOAPAction",

                "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");

            },

            type: "POST",

            dataType: "xml",

            data: soapEnv,

            error: showError,

            success: proceedSuccess,

            contentType: "text/xml; charset=utf-8"

        });

    } else

  {

    alert("Incorrect Input");

    document.getElementById("newTippButton"+fixtureID).disabled = false;

}

}

function showError(xData, status, error) {

     alert("Error: " + status + " – " + error);

}

function proceedSuccess(xData, status, requestObject) {

location.reload();

}

$(document).ready(function() {

    $(".button").click(function() {

     //new

     if($(this).attr("id").replace(‘newTippButton’,”) != $(this).attr("id")) {

       Tipp($(this).attr("id").replace(‘newTippButton’,”), 0, "New");

     }

     //update existing

     if($(this).attr("id").replace(‘updateTippButton’,”) != $(this).attr("id")) {

     var id = $(this).attr("id").replace(‘updateTippButton’,”);

          Tipp($("#FixtureID"+id).val(), id, "Update");

     }

    });

});

</script>

Drawbacks / Issues of my implementation:

As there was not much time left before the start of the World Cup, and also because I was busy with several other more important tasks, I focused on getting the solution to work even if it meant that there’d be some smaller bugs or issues.

One of them is that I did not any possibility for the users to submit multiple tips. As it can be seen in my code above, I only handled the case of submitting a single tip. So if a user wanted to submit multiple tips, for example for all matches in Group C, he/she had to tip each match individually.

One security issue was that there was the risk that people would discover that they can enter their tips directly into the list, and would then update them accordingly after the matches. I did not look for any way to prevent this, but simply did a timestamp check in the Excel spreadsheet. If a tip was submitted after a match started, it would’ve been highlighted. It didn’t happen.

As for the evaluation, there was still a lot of manual processing required. I could’ve tried to automate the processes more (e.g. I had to create the ranking manually), but in the end I decided that it would not be worth the effort. Doing it manually was a 5 minute task each day, and I didn’t know how long it would take me to create a fully automated version.

Summary

I really enjoyed creating this solution. While it definitely isn’t the technically most perfect, and it also lacks some other things (e.g. a very nice design….), it was a nice endeavour different from my other SharePoint activities. It allowed me to show my colleagues what else could be done with SharePoint.