Community Server on my mind

J-O Eriksson's blog


  • Running on CS 2.1 SP 2

    See top menu for subscription options

    Technology Blogs - Blog Top Sites

    BlogRankers.com

    Add to Technorati Favorites


Brand new CSModule pack for CS 2007 - Cinnabar

As some of you might already have seen, the Community Server MVP's CSModule pack has a new release.

The new package is called Cinnabar, and is targeted for CS 2007. So if you want to use your favorite CSModule pack on your new upgraded to CS 2007 site this is the package to download. It also has a new CSModule made by Gary McPherson and Keyvan Nayyeri called LinkManager.

For more details, hop over to http://csmvps.com/blogs/news/archive/2007/05/13/community-server-mvps-cinnabar-csmodule-package.aspx

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

Showcase: Smartson goes Community Server

So, again I managed to keep quite for almost 2 months.

Sometimes the energy for writing is just not there. No writing doesn't mean that nothing has happened though. The content of this article was meant to be published on the 18th of April. So here I'll quote myself on an article that never was published! How about that? Wink

Last Tuesday (read 10 of April), a brand new Swedish Community Server site came to life. The site is a place where both newbies and experts can discuss, read, and write about experiences from different kind of products and gadgets.

The company that started this site is called Smartson and the new site / community is called Testklubben (Swedish for "The Test Club"). Testklubben is currently in beta mode and changes will be done after getting feedback from users and from monitoring how the site works live. One day after it went live it had more than 1500 users

I have been working with Smartson and helped them with developing different modules and controls, setting up the site platform, done some training's etc.

Even though the site is completely in Swedish, I can recommend you to go over there and have a look. I believe they have done a great job in skinning and organizing the site. And it's fun to see (if you know Swedish) how the community grows fast, and some of the interesting discussions and articles that the users write.

I will try to dedicate a few upcoming posts to tell a bit about the modules that are custom made for the site.

Smartson's community now has over 3 000 members, and are in the near future planning to get rid of the Beta label.

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

How to add new users to different roles on the fly

Sometimes there might be a need to add your users to different roles, depending on certain invitations, at registration time. Is that possible in Community Server (CS)?

Well, in this case CSModules can be your friend as in many other situations. The other day there was a request for this functionality in the CSOrg Forums. I thought it would be an interesting case to do some sample code for a CSModule that did this by reading an argument from the query string.

You might think that this could be done with a new drop down field on the registration page. Well , you're right, but in this case that was requested the user should not be able to choose their own role. The role should be decided by a person that invited the user. So it should probably be a link in an e-mail or similar.

My thinking was that you would put an RoleID as an argument in the query string, like:

http://<your server>/CreateUser.aspx?roleid=<RoleID>

Then design a CSModule that would read the QueryString and add the user to that role within the PreUserUpdate event.

First register for the PreUserUpdate event. (Sorry for the pictures not looking as good or acting as they should, but my QGyen Flickr CSModule has suddenly stopped working. Click on the pictures to see them in original size.)

Visual Basic
RolesByQueryVB

C#
RolesByQueryCSharp

After that we handle the reading of the querystring, check if it is an existing role that is not one of the built-in roles. We wouldn't want anyone guessing the roleID of the Administrators role and register themselves as Admins. Lastly if all validations are ok, add the user to the desired role.

Visual Basic
RolesByQueryVB2

C#
RolesByQueryCSharp2

This is a sample on how you could do it. I haven't put much more thought on the security aspects of it, more that making sure no one adds himself to the admin (or other high permission) role. If you have feedback on how the security could be increased on this CSModule please post a comment.

Download it from here and try it out! I have included the source code in this download (VB and C#).

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

Using Localizable E-mail Templates

Wouldn't it be great to be able to standardize how mails sent from your Community Server site looks, and to be able to change them on demand without having to re-compile anything?

As you might know Community Server (CS) already has a built-in system for this. This localizable template system is used for example when a new user registers and an e-mail with login information is sent to that user. In this article I want to show you how you can hook yourself into and use this system in your own Community Server modules. Also how you can add your own e-mail template for a certain process.

Starting with this article I will also try to always have any code samples in both C# and VB (since I am currently trying to learn C# to see what all the fuss is about Smile). But, for all the VB readers of this blog, don't worry, this is not a step towards having only C# samples in this blog in the future.

I have touched on the subject before in an earlier article regarding Notifications for moderated posts to forums. But I thought it was worth to lift out the E-mail template function again, and discuss it separately.

The E-mail templates

First let's take a look at the e-mail templates and where you'll find them. CS has a Languages folder in the web root, which holds a subfolder for each language. Within each language folder there's a couple of .XML files which stores different localized resources that CS uses.


Click on the picture to see it in original size

The .XML file that holds the e-mail templates is found under /Languages/<localized language>/emails, in the file called emails.xml. Out-of-the-box CS will have one localized language folder of en-US.


Click on the picture to see it in original size

As you can see in the picture above, each e-mail template is contained within an email node. The email node can contain child nodes for i.e. subject, from and body. Also you can see that the text contains some place holders here and there (i.e. [ ModerateURL ])

The e-mail template is identified by it's emailType, which we will see later on in the code sample. The e-mail template seen in the picture above is of the emailType 'ModeratorEmailNotification'.

Using the E-mail templates in your code

To use these e-mail templates in your code you need to:

  1. Get the template into a MailMessage object
  2. Fill in the placeholders with the desired values
  3. Send the MailMessage or put it on CS's E-mail queue

The following code samples does number 1 and 2 of the above. You will need references to the following namespaces for your code to work.

System.Text
System.Web
CommunityServer.Components

Visual Basic

Click on the picture to see it in original size

C#

Click on the picture to see it in original size

First an Instance of the EmailTemplateProvider is used to get the desired e-mail template and put it into a MailMessage object. One of the arguments of the GetTemplate method is the user object for the user we want to send the mail to.

For certain built-in e-mail templates there are populate methods that uses i.e. this user object to fill in information in the placeholder. Although for the e-mail template I am using in the samples here, I could not find any built-in populate methods that worked. Therefore I've used another way to fill in these placeholder with the data I want.

On the body and subject fields, I've used Regex.Replace to replace their placeholders. To get the admin e-mail address, to send the mail from, I've used the CSContext.Current.SiteSettings object.

To send the populated mail to a group of user or just one user, you could use the following samples.

Visual Basic

Click on the picture to see it in original size

C#

Click on the picture to see it in original size

This method takes the arguments of a UserSet of the users you want to send the e-mails to, and a ForumPost object that (in this case) I want to refer to in my notification e-mail. Of course in your situation if applying these samples to your own module, you might not need these arguments at all, or just the UserSet, depending on what you want to do. The important thing with this sample is to show how you can put an MailMessage on the CS E-mail Queue with an Instance of the EmailQueueProvider object.

Summary

In this article I have showed you how the built-in e-mail templates in CS are structured and where you can find them. I also showed how you can programmatically fetch one of these e-mail templates and populate it's placeholders. Lastly a code sample showing you how to add the e-mail to the CS E-mail Queue, so that CS sends it the next time the CS E-mail job is run.

With this information you should be able to use the built-in e-mail templates in your code, and to create your own localizable e-mail templates for your CS modules. So let's go and try it out already!

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

UK MVP Meet-up pictures

It's been almost exactly one week now, since I've met up with some of the UK Community Server MVP guys in London. I promised there'll be some pictures from it, and here goes.


Click on picture to see it in original size

This is the mandatory group picture of all of us that was there. Rob Nash, me, Rich Mercer, Nick Brown, and Gary McPherson. Rob is almost falling out of the picture. Smile I think the waitress that we asked to take the picture was a bit nervous. I mean, standing there in front of all these cool MVP guys, must have been a bit breath taking. Wink


Click on picture to see it in original size

Rich coding away on his mobile phone.


Click on picture to see it in original size

Gary, eagerly waiting for the food.

It was really good to meet a couple of the other MVP's in real life. And it's funny that, even though we met at first in a very crowded Wetherspoon, and that most of us never met before, that we managed to recognize each other without any problems. And no, we didn't all wear t-shirts with CS Logos on them.

Gary has talked a bit more about the meet-up, and he has some additional pictures as well.

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

At the end of CS MVP Beer night

Rich and Nick waiting for the tube, pulling up a laptop to put the final rows on a new exiting CSModule.


 
More pictures coming later on. Me, I am on the tube to Hammersmith, blogging on my PDA.

 

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

UK Community Server MVP Beer

So this week I will be in London attending a course in developing on SharePoint 2007. In fact I am in London right now, came here last night. I probably (but you'll never know) won't have the time to write any CS article this week due to this.

But it won't be a CS-less week for me. I am meeting up with a couple of CS MVP's that lives in UK for a bite and a drink. Right now it looks like it's going to be Gary McPherson, Nick (Aero Man) Brown, Rich Mercer and me. It'll be fun to meet in real life! Geeked

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

Correction of one of my old posts

Previously on J-O Erikssons blog: A long, long time ago. At least in Internet Time. At J-O Eriksson's old blog there was an article about a solution to handle sending Newsletters to your Community Server users with the help of CS Roles.

As time went by, new articles was written, other areas of Community Server was examined, and the solution was forgotten. Until one day when J-O needed to use this solution on one of his sites. He discovered that it no longer worked! It was broken, kaputt!

After much thought and scratching his head, J-O realized that the DB Schema had been slightly changed over time, and that his T-SQL statement therefore also needed to be changed. So, by the pale light of his computer screen, he started up his SQL Server Management Studio, and started to write a new script to get it to work again.

He wrote, tested, made changes, and tested again, scratched his head, drank some coffe, made more changes. And finally, the following all new T-SQL script was written and worked again. Now J-O could finally go to sleep after a hard days work, and hopefully dream some sweet dreams of the upcoming CS 2007.

CREATE TABLE #NewRole (
    [UserId] [uniqueidentifier] NOT NULL ,
   
[RoleId] [uniqueidentifier]
)

INSERT INTO #NewRole (UserID)

SELECT DISTINCT aspnet_Users.UserID
    FROM aspnet_Users INNER JOIN aspnet_UsersInRoles
    ON aspnet_Users.UserID = aspnet_UsersInRoles.UserId
   
WHERE ApplicationID = 'your ApplicationID here'
   
AND aspnet_Users.UserID <> 'your Anonymous UserID here'
   
AND aspnet_UsersInRoles.RoleID <> 'your NewsLetter RoleID here'

UPDATE #NewRole
   
SET RoleID = 'your NewsLetter RoleID here'

INSERT INTO aspnet_UsersInRoles (UserID, RoleID)
   
SELECT UserID, RoleID FROM #NewRole

DROP TABLE #NewRole

For further information what this is good for, see the original article at my old blog.

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

CS 2007 New Feature: File Storage in blogs

One of the new features in Community Server 2007 is being able to store files on a per blog and/or a per site basis. This article gives you a walk through of how it is currently implemented in CS 2007 Beta 1.

I assume most of you have read about the new file storage capabilities (code name Zion) before, and many of you have probably also already tried it out. But for those that yet haven't had the time to take a look at this feature, I thought I'd give an walk through together with some screen shots to show what it looks like and what it does.

In CS 2007 you can store files on 2 levels (outside the scope of the File Galleries already present in CS 2.1). You can store files in a site wide storage, and you can store files in a storage for a specific blog. One advantage this gives you is that you don't have to create a separate CS File Folder and/or a Photo Gallery for each user or blog on your site. You give your user a blog, and the user gets a storage for blog pictures and files in the box.

Site File Storage

First let's take a look at the site file storage. If you go into Control Panel -> Administration -> Settings -> Manage Site Files, you'll see the following:


Click on image to see it in it's original size

You can upload new files, create new folders etc. In moment of writing this article I still haven't figured out where in the UI I can use these files. If I know the name of the file, and that it exists I can of course manually link to it in a post.

The physical storage for these files are in the root/SiteFiles/<ApplicationID> folder as you can see in the following image:


Click on image to see it in it's original size

Blog File Storage

The Blog File Storage are basically the same thing as the Site File Storage, but of course with the scope of one particular blog. You'll find it if you go to Control Panel -> Administration -> My Blogs.

 
Click on image to see it in it's original size

In the picture above, you can see 2 files and a folder, together with the option to upload new files. The physical storage here is within root/blogs/<name of the blog>.


Click on image to see it in it's original size

Maybe you recognize this as the directory every blog gets when created. Also in here you see the default.aspx for that particular blog. The default.aspx isn't shown to the blog user by default due some global Blog File Storage settings that I'll get back to a little later in this article.

So with all this in place for the Blog File Storage, when you are writing or editing a blog post in the Web UI, there's a 'Select A File'-button in the lower right of the edit page. The button brings up the following dialog:


Click on image to see it in it's original size

(Hey, who's that handsome guy in that picture above? Smile)

As you can see, in this dialog box, you can select to insert a picture or a link to a file from the blogs File Storage. And also you can upload files directly from here.

Thinking as a hoster or site admin, you would probably ask yourself: How do I control this? Can the user upload as much as they want?

Telligent has thought of this, and given us a place to set some global settings for the Blog File Storage.


Click on image to see it in it's original size

Here you can see for example why the default.aspx file is not shown as mentioned earlier. You can add more files that you want to hide in a comma-separated list of file names. There is also a setting for Disk Space Quota per blog, a Maximum File size, and which file extensions to allow. This is great! It gives the hoster or site admin control of how much is uploaded, and to some extent what will be uploaded to each blogs File Storage.

Summary

This article has given you a walk through of the new File Storage features of Community Server 2007 beta 1. If you haven't already, jump over to communityserver.org and download the new beta and try this out on your own. One of the downloads is a demo version that requires no installation, you just need a SQL Express on the machine where you run it. Have fun!

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

The forgotten notifications (a new CSModule)

Do you have any forums posts that have been caught by a spam rule? Or do you have any forums posts that haven't been approved for other reasons?

It's not easy to know unless you frequently visit your Control Panel -> Forums to Moderate. I have had sites where I discovered posts that were several months old. On one of my sites someone complained that his post didn't show up after posting. Going to forums moderation, of course there it was.

During the autumn of 2006 I therefore started to build a CSModule to enable notifications for moderated forums posts. But I never got it to work correctly. And since I had other things with higher priority to do at the time, I forgot about it. That is, until George J. Capnias posted about it about a week ago. His findings was that the code for that operation is missing from CS. So he presents us with the code to make this work. Great, now we can have our notifications of moderated forum posts that we might believe we had from the beginning. Smile

Since I'm not that fond of altering the original source code of CS, and the fact that I'm known to somewhat like CSModules, I thought I'd still finish off my forgotten CSModule. And I did!

The problem I had before, and didn't manage to solve then, was using one of the e-mail templates to send the mail. I found out now I couldn't really solve it with the could that should be used, but had to make some workarounds.

Here we can see the function for building the email from the 'ModeratorEmailNotification'-template:

As you can see, instead of using the PopulateHeader etc. to fill out the email, I had to use some RegEx's to do the job. The built-in Populate methods don't seem to have code for filling these fields.

The code for getting a collection of Moderators for a specific forum is partly taken from another users blog post, which also did some similar solution. I have tried to find the source I used for this code, but couldn't find it. If any of you readers recognize this code as something you've posted before, please let me know so I can give it the proper credits. I think I took part of that code and modified it just a little bit. Can't remember.

As you can see it uses the GetForumModeratorRoles to get the moderators of a forum.

Now I am running this CSModule on a couple of my sites, and it seems to work nice. However, I believe there's a problem for the admin user that is created when setting up a community and that is a member of all roles, it doesn't seem to work for that user, and I don't know why. If anyone have any insight on why it doesn't work, please let me know. It seems that the GetForumModeratorRoles don't fetch that user.

Do you want to try this on your site? I have uploaded it to the downloads section here at my blog, so please download and try if you want. There is a readme.txt in the ZIP on how to install it.

Download it here!

So now you can get your notifications for moderated forum posts, whether you choose to do it in the source code (George's solution), or via a CSModule (my solution).

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

SoapBox CSModule - the source code online

I happened to browse to CodePlex today. Haven't been there for ages. They have updated their interface in many areas. One cool thing that caught my interest was that I now can browse the source code of a project without having to download and load it in Visual Studio. Great!

For example, here's a look at the source code of my SoapBox CSModule. Isn't it beautiful? Wink

Could we get that with color coding?

Another good thing is that you now can create projects automatically. But you need to publish the project in 30 days, or it will be deleted. I think I can understand the logic in that.

So maybe all above is no news to you. Geeked In any case, for me that haven't been "in the game" for a while it was good news.

About the CSModule I talked about in my last post......I think I can publish that on Monday. Until then, have a nice weekend!!

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

I'll be back!

It's been about 2 months now since I wrote any posts here. There are a number of reasons why I stopped writing.....for a while. I guess the main reason was, that I just had too much to do at work, combined with things I had to do outside of work. When Christmas vacation came I was just out of energy, and had to just do nothing for a while. Smile

There have been  few things happening in the Community Server world the last 2 months. I am not sure I have managed to follow them all. I know Dave Burke was moved away from the Evangelist role, which I thought was unfortunate, at least for the community and the MVP's (not saying that he probably do a great job in his new role as well). Fortunately some of the 'News' posts seems to be coming back in different forms again.

Community Server 2007 seems to be getting closer and closer to a first beta version soon, which will probably generate alot more to write about. Of what I have managed to read so far, I was especially interested in the new Utility Controls that Ben Tiedt blogged about last week.

But until we see the first beta, there might still be a few things left to say about CS 2.1. And I was thinking to try and start blogging again. Not with 3 articles per week though Wink. Not to begin with anyway. But at least one or two articles per month at the very least.

I do have a new CSModule ready which I will write about in my next post (coming this week or the beginning of next). It's nothing earth shattering, but it's a very useful one I think. I just installed it on 2 of my sites to see that it behaves. There is already a community solution with the same function, but it's not built as a CSModule but rather modification of the CS source.

So, I hope I have some readers still after this time of silence from my side, and see you in a couple of days!!

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

Set your Reader Posts to expire automatically

If you're using the Reader application in Community Server, did you know that the posts never expire and will over time add to the size of your database?

Last Friday I wrote an article about how you can create a CSJob that lets you run a SQL Stored Procedure on your CS Database on a scheduled basis. After that, it has been rather quiet in my blog for a little over a week. It has been one of those weeks again, which seems to come every now and then, where I almost had no time to even breath. [:-)] In that article I also said that I will try to post some SQL Scripts that you could use with your new CSJob. Initially I thought I'd create a bunch of them and put in a kind of script pack. But later decided to publish one by one here, and also put a brief explanation along which each script. Some scripts will be made by me, others by other people in the community, in which case I will refer to their blog.

In this post I wanted to talk about a script to delete old posts that are stored for the Reader application in CS. If you have used other RSS readers before, you are probably used to that they expire their posts after a configurable time. Or in a different Reader it might not matter so much since maybe you're running a local client on your machine, where all is stored on your hard disk, or you might run a hosted application (like Google Reader) where you yourself don't have to bother about the size of the posts.

If you're running CS at a hoster, you probably want to keep the DB Size as low as you can so you don't have to pay for extra DB space. To clean up the DB from Reader Posts, you would probably want to delete posts of a certain age and then schedule that to run each week (or whatever time period you'd want to choose).

The Tables

The tables involved in this operation is cs_FeedPost and cs_UserReadPost.


Click on the picture to view it in original size

As you can see in the picture above, there is a one to many relation between the two. And in this case you'd want to delete rows in the cs_UserReadPost first. After that the corresponding rows in cs_FeedPost.

The Script

The following sample script will do the work.


Click on the picture to view it in original size

The cs_UserReadPost table has only 2 columns, UserID and FeedPostID. So first we need to get which FeedPostID's are old enough to delete. In this script this is accomplished by first creating a temporary table to fill up with those old FeedPostID's. A variable for number of days is declared, and in this case a value of 60 is set. This mean this script will delete all data related to Reader Posts older than 60 days from today. Change that value to what you prefer.

The script inserts FeedPostID's from cs_FeedPost that are older than 60 days. Remember cs_UserReadPost don't have a date value, so this is a way to get those FeedPostID's.

From here, the script has a DELETE statement to delete all rows in cs_UserReadPost that has corresponding ID's in the temp table created earlier. And after that another DELETE statement to delete all posts in the cs_FeedPost that are older than 60 days.

In the end, it's good practice to DROP the temporary table we created in the beginning of the script. We don't need it anymore.

So, if you use the Reader application in CS, for yourself, or maybe even for several users, you know have a sample SQL Script to use i.e. together with i.e the SQL Stored Procedure CSJob, to set expiration for old Reader Posts.

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

Do you have problems with Community Server Database size?

If you have your Community Server web site at a hoster, have you been confronted with the issue of a growing CS Database?

In a conversation with Keyvan the other day, he pointed me to a forum thread at communityserver.org, and hinted that this might be a good idea for a CSJob. Wink In that thread a user wants to delete certain posts in the CS Database at certain intervals (although the question from the beginning is more like if mirrored blog posts does expire or if they have to be deleted manually).

Since I haven't had the time to find out which tables and which posts that would need to be deleted in this case, I thought I'd create a more general CSJob that could run any SQL Stored Procedure in the Community Server Database. This way this job could be used for much more that just deleting Mirrored Blog Posts. All you would need is to create a Stored Procedure for what you want to do.

So I created a CSJob, which I called CSSqlJob that takes one parameter. The name of the SQL Stored Procedure. You can't put any parameters on the Stored Procedure in this version. But I figured there might not be a great need for that.

So what is look like? To get a background on how to create a CSJob, you could take a look at Keyvan's article in the topic.

First I do the following imports to my code:


Click on the picture to see it in original size

Then in the Execute method of the CSJob, first read in the parameter for the SQL Stored Procedure (which you can set in communityserver.config where you declare the CSJob). Then run the Stored Procedure, and if anything goes wrong let's write that to the Community Server Event Log.


Click on the picture to see it in original size

The code for running the Stored Procedure just creates a connection object and a command object and executes the command. As you can see I also declare the type of the command to be a Stored Procedure.


Click on the picture to see it in original size

So how do I get the connection string? Well, in this case I've used the SQLCommonDataProvider.


Click on the picture to see it in original size

And to create an entry in the CS Event Log in case something goes wrong the following code is run.


Click on the picture to see it in original size

After this just compile the code, and put the DLL in you CS Bin folder, and put an entry like the following in the 'Jobs' section of your communityserver.config file.


Click on the picture to see it in original size

Now this code has been written pretty fast just as an example. I don't know if this is the best way to do it performance and/or security wise. But it works! Feel free to give any comments on the code.

If you don't want to build this DLL yourself, you can download it from my downloads area.

So with this CSJob, you should be able to do any job a Stored Procedure can do on your CS Database on a scheduled basis. Now it's just a matter of writing that Stored Procedure to do what you want!

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

A less painful way to upgrade to a Service Pack

Have you not yet upgraded your Community Server sites to Community Server 2.1 SP 1, because it seems to be to much work, and you don't want it to go wrong and just haven't got the time right now to do I properly?

Service Packs are an important way to get security fixes, bug fixes, and more into an existing version of a product. Sometimes it can also contain fixes for better performance etc. And when it comes to web applications that are configurable in so many ways, it's not always an easy task. And if you have a well visited and lively site, you really don't want it to go wrong.

There are many ways to approach this to apply the Service Pack, or a version upgrade for that matter. There's an article on this blog from august this year that talks about how I do Community Server Upgrades. Ken Robertson wrote an article about the same time called "Deployments made easy".

In this article I thought I'd try to make a quick guide (light version) of one way to apply a Community Server 2.1 Service Pack.

  1. First make the necessary backups of your webfiles and SQL DB
  2. Download the webfiles to a local machine and put them in a temp folder. If you're hosting your site yourself, put the web files in a temp folder outside of your live web.
  3. Download and unpack the Service Pack, and put it in a folder beside the temp folder from step 2.
  4. Fire up WinMerge, or another file comparison application, and tell it to compare the folders in step 2 and 3 above.
  5. If using WinMerge you can hide the files that are only in your temporary web site files and not in the Service Pack. That makes a lot easier to see just the files you need to change.
  6. Go through all the folders in WinMerge and double click any files that report differences and merge any configurations from your web site files into the Service Pack files.
  7. When all changes are done, upload the Service Pack files to your web. Alternatively do this on a temporary test server where you've set up a copy of your live site, to make sure everything is ok first.
  8. Fire up SQL Server Management Studio Express (or similar) and connect to your SQL DB. Open the patch scripts and run them against your DB. Make sure Management Studio points to the right DB before you hit run (so it's not pointing to the Master DB). You might want to do this step on a test server first along with step 7, if you want to make really sure everything is ok before you modify your Live server.

You might question why I modify the Service Pack files with changes from the web files instead of the other way around in step 6 above. Of course you can do it the other way around, but I thought it would be better you just have to upload the changed files afterwards, than to upload the whole web again. Also there might be additional files within the service pack, not yet present on your web site.

Note, if you do like I do, you need another copy of the Service Pack files if you have other sites you need to upgrade. Don't use the ones you modified in step 6.

So go download the CS 2.1 SP1 (if you haven't already) and upgrade your site. There are some fixes and changes that you might benefit from. Alternatively have this information with you when it's time to upgrade to CS 2.1 SP2.

If you enjoyed this post Subscribe to my feed via RSS or e-mail!

More Posts Next page »