Friday, December 08, 2006

EPiServer 4.61 Hotfix

Just a quick note that I received a hotfix from EPiServer the other day for version 4.61. I don't think the hotfix has officially been released yet, but if you need it then I suggest you contact the support team [Knowledge Center login required] for a copy.

Here is what the hotfix addresses:

  • #45503 Simple Address always adds a epslanguage parameter when rewriting url
  • #45530 GetPostedData method on XFormData ignores "start date" and "end date" for public overloads of the method
  • #45554 Filenames are not encoded in the file manager
  • #45545 Login cookies does not work with sliding expiration
  • #45579 Copy pages corrupts tblTree
  • #45401 Attaching to the MovingPage event and setting CancelAction to true gives strange GUI behaviour
  • #45635 Users and groups are not sorted by name by default when listing from database
  • #45591 Faulty path to CSS and JS files in Admin/Workflow.aspx
  • #45671 Calls WindowsPrincipal.IsInRole() makes 4.61 sites slow
  • #45562 FieldOrder set to 0 when adding a new property
  • #45436 Fetch data does not work with mirroring
  • #45468 FileManager in ActionWindow is very slow when tblUnifiedPath contains many rows
  • #45804 Add ability to handle negative SIDs
  • #45815 Error message " PropertyData object with name "" already exists" in Edit mode
  • #45816 Export should export the name of the SID for compatibility with EPServer 5.x
  • #45817 Publishing a page in a large site is slow due to tblWorkProperty lacking proper index
  • #45572 Mirrored EPiFields not working (Requires the EPiServer Fields 4.61 HotFix 1 to work)
  • #45575 Custom query strings are lost when making a post back for a page with a friendly url
  • #45858 Added InternalPageDataHelper class
  • #45565 Possible race condition in license handling for multiple sites with the same database
MS-SQL only:
  • #45528 SQL timeout problems after upgrading to 4.61
  • #45821 Deadlocks can occur during simultaneous page publishing
  • #45818 Searching on properties is slow due to poorly optimized sprocs

Tuesday, November 14, 2006

Custom validation for core properties

Last week a colleague of mine asked a question:

Is it possible to limit the amount of data that can be entered into EPiServer text properties?

Now this can be achieved in a number of ways. First, if the property is one you have added, then you can just create a custom property and add whatever type of validation you like, pretty standard stuff. However, if the property is a core property such as "PageName", then you have capture the "EditPageValidators" event in the EPiServer.Global class.

Here is an example I have used for a few clients now to validate the "PageName" to set a maximum number of characters. This same implementation can be used to perform any custom validation against core properties in EPiServer.

In the global.asax, hook the following up in the Application_Start method:

Global.EditPageValidators += new PageValidateEventHandler(Validators.ValidatePageNameLength);

The implementation for ValidatePageNameLength is the following:

public static void ValidatePageNameLength(object sender, PageValidateEventArgs e)
{
int length = (int)Global.EPConfig["EPnMaxPageNameLength"];
if( e.Page.PageName.Length > length && length > 0 )
{
e.IsValid = false;
e.ErrorMessage = String.Format( "\"Name\" must not exceed {0} characters", length );
}
}


This then requires a web.config key of “EPnMaxPageNameLength” to configure the number of characters in the PageName property.

Tuesday, September 26, 2006

Workflow admin pages not displaying correctly

I came across this bug the other day and it has been confirmed by EPiServer as a bug which will be fixed in the next version of EPiServer (0045591: Faulty path to CSS and JS files in Admin/Workflow.aspx).

Issue Description
When working in any of the workflow admin or edit screens, styles sheets, JavaScript files and images are broken.

Reproducing the Issue
The issue occurs when you install the edit and admin modes in a sub-directory in the site. E.g. installing edit mode to "/secure/edit" and admin to "/secure/admin".

With EPiServer Manager 1.3 [login required] you are forced to install edit and admin modes to a directory other than the default. If you choose a structure where edit and admin are not in the website root, referenced resources break.

Fixing the Issue
There are two solutions to this problem:
  1. Move the edit and admin modes back to the website root. Move the edit and admin directories from the current location to the website root, or create virtual directory mappings, then update the web.config to reflect the new locations (EPsAdminDir and EPsEditDir). Make sure you also update the authentication sections to reflect the new paths also.
  2. If you must have the modes in a sub-directory then you can also edit the aspx and ascx html directly (Note that these changes will probably be overwritten with an EPiServer upgrade). Update the relative paths in the html to reflect your site setup. Some of the items you will need to edit are (there may be others):
    • admin\Workflow.aspx
    • admin\WorkflowItem.aspx
    • Util\plugins\WorkflowLogView.ascx
    • Util\plugins\StartWorkflow.ascx
    • Util\plugins\ApprovalTask.ascx

Monday, September 25, 2006

Group notifications in workflow

So you've setup EPiServer workflow and it's all working well, except you can't get email notifications working when using groups in your workflow, why? Well, it's because EPiServer workflow doesn't send notifications to groups, and I'm not sure why not.

This is a feature I have wanted for quite a while now, in fact since my first EPiServer installation. I sent the usual request to EPiServer and it's on the feature request list, but I can't see them implementing this feature as they are moving to Windows WF sometime soon.

Anyway, I have created an HttpModule that enables this functionality. It doesn't require any changes to your workflow, and basically enables the email notifications for groups in a workflow. The module hooks up to the task changed event so when a new group task is created in a workflow, my module then sends the email notification to ALL users in the group (the same email that individuals get). It then stores a flag in the task state to stop it sending the email multiple times.

It currently only works for EPiServer groups, but I imagine it could be extended to work with LDAP and Local groups also (I'll be looking into this myself soon).

If your interested then leave a comment. If I get enough interest I'll see if my employer will let me release this code and I'll post again where it can be obtained from.

Thursday, September 21, 2006

EditX - Get it while it's hot!

A new version of EditX was released today by the EPiServer Research guys. If you haven't heard of EditX before, it is a new cross-browser edit mode for EPiServer that works in FireFox and IE.

The latest update includes the ability to preview before save, add internal links to pages in the editor (FCKeditor) and has a new tab for editing dynamic properties in the page edit screen.

Some of the features I like the best so far are usability enhancements more than anything. For example when you hover over the create new page option in the menu, a list of templates drops out for you to select, rather than having to load a new page listing the templates.

One big improvement is the implementation of the FCKeditor control. While it is not fully integrated into EPiServer, it now allows the selection of internal pages when inserting links and files. The standard editor in EPiServer is good, but just lacks the polish of the FCKeditor and has a number of issues to do with the HTML generated.

The module is not feature complete, but is at a stage where it is quite usable. Hopefully some of the stuff in this module will end up in a future version of the product. Here's a couple of screenshots, IE 7 vs FireFox.

EditX in IE 7
[EditX in IE 7]
EditX in FireFox
[EditX in FireFox 1.5]

So what are you waiting for? Why are you still reading this, go download it and have a play!

Wednesday, September 20, 2006

MondoSearch Integration Pack v2

Mondosoft logo

This week I got my hands on the tech preview of the new MondoSearch integration pack for EPiServer, and have got to say that I'm really liking the look of it so far. This new version provides much tighter integration with EPiServer and exposes a lot more MondoSearch functionality directly in the EPiServer UI.

The first thing you notice are the new MondoSearch and Behavior Tracking tabs in edit mode. The MondoSearch tab allows you to search over pages in edit mode, similar to the standard search box but is not limited to searching the page name and id fields. The Behavior Tracking tab is the best thing though, integrating some of the analytics and reports from Behavior Tracker directly into EPiServer.

There's some new functionality in admin mode too. From the admin mode tool plug-in you can configure the MondoSearch integration, start the crawler, view the log and check on its status.

To make all this possible three new web services have been created, MSService, BTService and IMService. These web services along with the existing SearchService provide the underlying infrastructure for the new integration pack. The web services use the same MQL query language that you may be familiar with if you have developed with MondoSearch before, for executing requests to a MondoSearch instance.

Anyway, it's looking great and is a much more flexible solution with the web service interfaces. It's currently slated for a mid October 2006 release so will look forward to that date, in the mean time I'll look give the tech preview a thorough work over and will post more about it here soon.

If you want a copy of the tech preview you will need to contact Mondosoft, I sent my request to sales@mondosoft.com.

Thursday, September 14, 2006

In my language please

One thing I find EPiServer does really well is their multi-lingual interface. Basically all text used in the UI is stored in a number of XML files inside the website, each identified with a language code. With a standard installation you get a number of languages out of the box, one of which is English.

Today at work a colleague of mine was finding that the system dates being displayed were in American format and was wondering how to display them in our local format. He had selected "English" as his system default, but this didn't seem to make a difference.

With the default English selection, American formats will be used. Adding a local English option is not only easy but important for a number of reasons. Some of the functions in EPiServer depend on the system language selection. One is the display of regional options such as dates, and another is the language dictionary used for the spell checker.

The language selection list is built dynamically from the list of available languages found in the "lang" installation folder. This makes it quite easy to add your own languages to the list, simply by adding new language files.

For example, to add a New Zealand language option you could do the following:
  1. Make a copy of "languageEN.xml" and call it "languageEN-NZ.xml"
  2. Open the new xml file and edit the name and id attributes on the language node.
  3. Set the name to "English NZ" and the id to "EN-NZ" (the id needs to match an official language code).
  4. Set your system default language in admin mode or user preferred language in edit mode.
  5. Optionally update the language files to your local spelling ;)
  6. One last thing is to check any other language files in the "lang" folder, in case you need to add a language code to them too. One standard file is the "workflow.xml" which will require you to create a set of translations with your new language code.
This is one of the many reasons I really like working with the EPiServer product. Because of features like this you can give your end users a much better experience, without spending a lot of your own time customising.

Wednesday, September 13, 2006

How to crash Googlebot (and fix it)

If you have recently implemented an EPiServer 4.60 or 4.61 site and have found that Google is no longer indexing your site, then the problem may be with the friendly URLs and an underlying Microsoft.Net 2.0 issue.

A colleague of mine, Nick Urry recently came across this issue with a site he developed. He has written a great post on how to diagnose, reproduce, and most importantly, fix the issue. Nick's article can be found here.

Sorry if you thought this was some instructions on how to crash Googlebot, even though you can, why would you want to?

Monday, September 04, 2006

Advanced property development with Atlas

How many EPiServer sites have you built that don’t contain a custom property? For me, the answer is none! All EPiServer sites that I have built contain some sort of custom property, ranging from simple drop-down lists to more advanced dialog-based properties. The main reason I build custom properties is to make content editing simpler for the user, and also to integrate information from other systems.

One of the first projects I worked on had a requirement to provide editors with the ability to select a content owner through a series lists, populated from Active Directory. I figured I would meet this requirement by creating a custom property with a series of drop-down lists, which filter each other as selections are made – a common approach in web application development.

So, not having much experience with EPiServer properties, my first reaction was to apply the standard ASP.NET approach for this requirement: set AutoPostBack to true and filter the drop-down lists each time the selection changed. My first problem was that I tried to do the PostBack in the custom property – big mistake! There are two reasons not to do this, and it’s not because you can’t! Reason one is that the user will be asked if they are sure they want to navigate away from the page; this will confuse them. The second reason is that validation will occur and all incomplete required fields will fail validation, displaying errors to the user. Sound familiar to anyone?

After learning from this mistake, I decided to follow the standard EPiServer way of doing advanced properties, and implemented a popup dialog. This was great as it allowed me to meet the requirement using standard ASP.NET development techniques, and all I had to do was pass the resulting selection back to the property using JavaScript.

Now this approach is fine but, in my opinion, too many popup dialogs do not create a very good user experience. So, how do we create these advanced properties and not use popups? The answer: use AJAX and, to make things easier, use the Atlas framework.

For this article I decided I would re-create the content owner selection property, but using the Atlas framework and Atlas Control Toolkit. The content owner property consists of three drop-down lists for branch, business unit and content owner. When a branch is selected, the list of business units gets populated and enabled, and the same for business unit to content owner.

Now, would you believe me when I say that I only needed to write one line of JavaScript to get this working? No? Well I did, but all thanks to the Atlas Control Toolkit and the CascadingDropDown control. The CascadingDropDown uses the Atlas extender to provide AJAX functionality to the standard ASP.NET DropDownList. Through configuration properties the CascadingDropDown can be set to auto-populate from a web service, with the options filtered based on the selection from a dependent DropDownList.

Incorporating Atlas into your property is a fairly straight forward process. The first thing you will need to do is download the Atlas framework, and the Atlas Control Toolkit if you intend to use some of the pre-baked controls. The next thing you will need to do is set up your project. I tend to create my properties in separate projects so they can be easily reused and distributed (read this article by Steve Celius for more information on this). Here are the steps I followed to create my custom property with Atlas:
  1. Add a reference to the latest EPiServer.dll assembly (which needs to run under the .NET 2.0 framework).
  2. Add a reference to the Microsoft.Web.Atlas.dll assembly (which can be found at “C:\Program Files\Microsoft ASP.NET\Atlas\v2.0.50727\Atlas” in a default installation).
  3. Add a reference to the AtlasControlToolkit.dll and Microsoft.AtlasControlExtender.dll assemblies if you intend to use the pre-baked controls.
  4. Add a new Class to your project and set it up the same way you would for all custom properties (inherit from one of the base types, add the PageDefinitionTypePlugIn keyword and override CreateChildControls).
  5. In the CreateChildControls method, add your standard controls, add a ScriptManager, add an UpdatePanel, then add and configure your Atlas controls as appropriate.
  6. Create an ASP.NET web service with a single method that can be called by the Atlas client script. The method you create will depend on the controls you are using and the type of information being displayed.
  7. Build and deploy your assembly, web service and supporting assemblies.
  8. When you add your property to an EPiServer site you will need to add the necessary web.config settings. These can be found in the sample web.config file installed with Atlas (same location as the Atlas assembly location mentioned above).
So that’s it; it’s not that hard really, and is made a lot easier with the Atlas Control Toolkit. If you want to download my sample properties (dialog and Atlas versions), then download them directly from my Box.net account.

Tips and tricks

Always check for an existing ScriptManager as you can only have one registered on a page. When adding the ScriptManger, try something like this:
ScriptManager propertyScriptManager = ScriptManager.GetCurrent(container.Page);
if (propertyScriptManager == null)
{
propertyScriptManager = new ScriptManager();
container.Controls.Add(propertyScriptManager);
}


Don’t enable partial rendering on the ScriptManager as this will cause JavaScript errors such as, "return statement outside of function" or the classic message, "Unknown error".

Add runat="server" to the head tag on the EditPanel.aspx page as this is required by the Atlas framework. Be careful though, as this page is an EPiServer core page, and could get overwritten next time you update EPiServer.

Use a hidden HtmlInputText control to store the property value. This control will maintain its state on PostBack even when edited with client script. You may encounter issues when using other server controls not maintaining their values on PostBack.

Useful resources and links

ASP.NET Atlas official site
Atlas Control Toolkit samples
Sample properties download
EPiServer “edit in dialog property” code sample

Wednesday, August 30, 2006

Atlas properties, how do I do that?

Not long ago I was asked by EPiServer to write an article for the EPiServer TechNews email newsletter. I gladly accepted the opportunity and started racking my brains for a good topic to write about.

I finally decided on a topic, "Advanced property development with Atlas" and have submitted the article for the next version of TechNews. In short the article is about the different ways to create advanced properties, and introduces the use of Atlas, an AJAX library. I have created some sample properties that will be available for download (with the source code of course), when the newsletter comes out next week.

Watch this space for more, or your email inbox if you're subscribed.

Tuesday, August 29, 2006

Windows Live Writer integration

Last night I was chatting online with a colleague of mine, JD, and he pointed me in the direction of this blog post from Mikael Runhem (may need to scroll down the page to find the post I'm referring to). It was quite weird timing actually as we were discussing the possibility of creating this ourselves. Looks like we got beaten to it!

The cool thing about this post is that it has apparently been posted directly from Windows Live Writer (WLW), directly to the EPiServer blog template. Michael writes:

Not to my surprise, Ruwen has made an excellent job, creating a " blog server emulator" that makes EPiServer pretend it is a Metablog compliant blog server! With this approach we can not only support the new upcoming blog program from Microsoft, Microsoft Live Writer, but also other Metablog compliant blog programs. This opens up for people using Macs, Linux, cell phones etc to create content in EPiServer!

If anyone is interested in WLW, I have been working on a plug-in that integrates the online file storage site Box.net. I have the plug-in ready for initial beta testing and am trying to get a project space on CodePlex to store it. If your interested in this plug-in then read more about it here.

Thursday, August 24, 2006

FUrlX updated

Just a quick post to say there is a new version of the EPiServer Research module FUrlX (A module that updates the Friendly Url function to remove the JavaScript reliance). This update fixes a problem regarding the querystring being lost on page postback.

The updated version can be downloaded from the FUrlX project page.

Tuesday, August 22, 2006

Advanced delete with link cleanup

A common question I get asked when demonstrating EPiServer to potential clients is:

How does EPiServer handle links when deleting a page? Does EPiServer clean up potential broken links?

With the standard EPiServer delete function there is no link cleanup, which means you can easily end up with broken links. Now this is something that I thought would be easy in EPiServer, as the standard function even tells you what the linked pages are when you try to delete. So, why is there no ability to clean up the links before delete? Answer, I don't know, but maybe it will be coming in a future version :)

The standard delete function
[The standard delete function]

Well I want it now! So this is the driver behind my want to create an advanced delete function, that gives the user the ability to clean up links before a page is deleted.

I have started work on a prototype, and it's working quite well so far. My delete page plugs into EPiServer using the "alternate files" function (a function that allows you to implement your own version of an admin or edit mode function). This means my advanced delete overrides the standard delete and is available through the standard menus.

If a link to the selected page is detected, then some options are supplied to either remove the links or replace the links. And for the web admins out there, I have added an option so you can force the user to clean up all links, before the page can be deleted (you know you want the power).

Here are a couple of screenshots from my current prototype:

Standard delete menus
[The standard delete menu activating the advanced delete function]
My new advanced delete function
[The advanced delete function with force link cleanup enabled]

It works okay at the moment but there are a few things I'd like to improve on, such as
  1. Better detection of linked pages (works well at the moment but a little problem with caching in EPiServer maybe?).
  2. Add override function for site Administrators.
  3. Better access denied handling for when users try to cleanup links on a page they don't have access to.
Anyway, I have added the prototype to EPiCode so if your not already registered, then go register now and download a copy today! Also, if you think of other things that could improve it, then add a comment or add a ticket in EPiCode.

Friday, August 18, 2006

Tell me when my scheduled jobs fail - Part II

Not long ago I posted about writing an EPiServer scheduled job that notifies me when scheduled jobs fail. I created a prototype, which works well, but is flawed in that if all scheduled jobs are failing (including my notifier), then I won't know about it. So as a result I started thinking of other ways this could be done.

In my thinking I came up with two other possibilities. The first thought is to use log4Net, and the other is to create a Windows Service.

Using log4Net
Using log4Net is probably the best solution for this sort of thing as it's already part of all EPiServer sites, and to setup notification of errors is just a configuration task. By implementing an SmtpAppender and a logger on the EPiServer.DataAbstraction.ScheduledJob namespace, you can quickly and easily setup email notifications about scheduled job failures.

Here's a sample section from the config file that I got working in my sample site:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="errors@domain.com"/>
<from value="errors@domain.com"/>
<subject value="Error encountered in EPiServer461 scheduled job" />
<smtpHost value="127.0.0.1" />
<bufferSize value="512" />
<lossy value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d\t%X{siteid}\t%m%n" />
</layout>
</appender>

<logger name="EPiServer.DataAbstraction.ScheduledJob">
<level value="ERROR" />
<appender-ref ref="SmtpAppender" />
</logger>


Using a Windows Service
With a Windows Service I could either hook directly into the EPiServer database and query the job history, but the better thing to do would be to create a web service in the website. The web service could use the EPiServer API the same as the scheduled job and return a dataset of failed jobs (or something like that).

The advantage of using a Windows Service is that the one service could be configured to interrogate multiple EPiServer sites and provide a summary email for all the sites.

This option would obviously require a lot more work as a Windows Service and Web service would need to be created. However, with this approach you could get a lot more flexibility and could customise the email to be a bit friendlier, and with more information.

EPiServer Scheduled Job
If you are interested in the scheduled job prototype that I created, then you can download it from here. It is pretty simple and all I was going to add was some filtering based on when the job last ran. This is so you wont get repeating notifications.

Monday, August 14, 2006

Multipage selection property

Have you ever wanted to store multiple page references in one property in EPiServer? I know I have many a time, but EPiServer doesn't provide you with a property to do this, so I ended up creating one myself.

Nick Urry and I have created a new property that pops up a new window that allows the user to select multiple EPiServer pages. The selected pages are stored in a single LongString property in XML format.

The XML format used is similar to a hyperlink HTML tag as using this format gives you a few things for free. One is that you can take the XML and render it into some HTML with little change required and the output would be a list of hyperlinks. The other advantage is that when doing an export or mirroring, the EPiServer code is designed to map these types of links in your properties to the new pages in the destination site! Trying to do this yourself would bring on a massive headache.

Heres an example of the content of the saved property:
<links>
<a href="/templates/Page.aspx?id=16">Tips and Trix</a>
<a href="/templates/news.aspx?id=92">News</a>
<a href="/templates/Page.aspx?id=6">Friendly URL!</a>
<a href="/templates/Page.aspx?id=4">About EPiServer 4.60</a>
</links>


The UI is designed so it shows you the number of selected pages in the property. You then click the expand button to edit the content. The dialogue that pops up displays the names of the selected pages with options to re-sort, delete and add new pages (I plan to add some better sorting to the dialog soon that does more than move up and move down).

So here are some screenshots of the property in its current state. The first one is showing the property in edit mode, the second is showing the popup that allows editing of the selected pages.

Multipage property displayed in edit mode

Multipage property editing dialog

So now you may be asking, can I have a copy, and where can I get it?

Well, this property has just been added to the EPiCode project so if you haven't already signed up, then sign up today and download the source.

Wednesday, August 09, 2006

EPiServer friendlier URLs

A new function that was introduced in EPiServer 4.60 was the Friendly URL function which allowed you to use path type URLs for your site. This was great news as it is a commonly requested feature from most of our clients, especially the government ones.

One major issue with EPiServers implementation was that it required JavaScript enabled - bummer! This is a problem for me as all NZ e-government compliant sites need to degrade gracefully when JavaScript is disabled. What this means is without JavaScript enabled, templates would no longer post-back, and basically all functionality would stop working :(

So I was excited to hear that the EPiServer research guys have created an update to the function called FUrlX, which removes the JavaScript reliance, great!

From my testing thus far I have found it works as expected, displaying the URLs in the path format, and with JavaScript disabled my post-backs still work. The great thing about it is that it uses all the current settings of the standard function and can be plugged in with minimal configuration and no need to recompile.

If your interested in this I suggest you check it out at the research site.

Tuesday, August 08, 2006

Tell me when my scheduled jobs fail please

Just recently I discovered a problem with an EPiServer scheduled job that I built for a client that kicks off a search engine re-index on a nightly basis. What I didn't realise was that the way in which I was starting the re-index was completly stuffed and the as a result the job had been failing for about a month.

This got me thinking about ways to notify someone when a scheduled job fails. Now I'm not just thinking about notifing for my custom created jobs as that would be easy, instead what I thought would be good is a process that notifies me about all the EPiServer job failures (standard and custom ones).

I can think of two ways to get this information, one is directly from the EPiServer database tables where it stores the history of the scheduled jobs, the other is to use the EPiServer API to get the status of scheduled jobs and their history. Now I always prefer to use the API as much as possible when doing product development so I'm going discount the direct database access for now ;)

Some other things I want is to be able to schedule when I got notifications about failed jobs and have the notifications summarised in a single email.

So as a result I have started creating another EPiServer scheduled job that notifies me about scheduled job failures. The idea is that when it runs it will trawl through all the other scheduled job status' and history, pick out any failures and email them to me.

I'll update this when I have something working but if you have any other ideas please add a comment below.

EPiCode - Check it out now

One of the things I am looking to do with this blog is to put a few handy tips, tricks and code samples from my day to day experiences with EPiServer.

A great place to start if you are interested in EPiServer would of course be the EPiServer site itself and developer forums. I have found the site and forums very useful over the past year. However another great resource that I recently came across is an open-source project called EPiCode setup by a guy called Steve Celius.

The EPiCode project requires you to apply for membership but once you are a member there are some really great tools and things under development already. For example there is a base library with a few custom properties and utilties, a page type utility for advanced management of page types and properties (which is really useful), and a newletter module for sending out html/text newsletters with subscription management. This is just a sample but if you are interested in EPiServer development and want to make life easier for yourself then I highly recommend signing up and taking a look. Who knows, you may even have something great you can share with the project to :)

Wednesday, July 12, 2006

First post, yey!

Well, this is my first post to this blog and, in fact, my first blog post ever. This is really just a test to see how this thing works.

I plan to post mainly about my work and experiences working with the EPiServer CMS. I have found that there is not much information out there on this topic other than the official EPiServer developer forums. I plan to make this another source of interesting things.

Some other random topics to blog about:
  • Extensions to the product I have done
  • Tips and tricks
  • Things I would like to see added
  • Things I am thinking of doing, further extensions, functions etc
  • More code samples