Code, Code, Revolution!
If your EPiServer site is running a version older than CMS5 R2 and you (or your clients) are using Internet Explorer 8 you’re having problems creating XForms. There are multiple issues with XForms in versions prior to CMS5 R2 that can be somewhat confusing. A form created with IE6 will work for a visitor using IE8, a form created with IE8 will not work for anyone. If you use IE8 you cannot save your form if it contains radio buttons or checkboxes. There is a posts on EPiServers forum where Vladimir Ljepoja claims a solution for EPiServer CMS 5 R1 SP2 and DropIT has published a blog post on how to fix the problem for EPiServer CMS 5 RC1.
I’ve investigated this problem thoroughly and found the reason why IE8 is causing problems and how you can solve it for all versions of EPiServer. This work is based on investigations in EPiServer 4.61.5.
When I started investigating this problem I obviously started in font-end with javascript debugging. The XForms editor javascript code is in a file named xformedit.js which is located at different places depending on your EPiServer version. For 4.6.1 it’s located in util\javascript. What’s causing the problem on the front-end is this line of code:
Keep reading and find out »
Microsoft Windows SharePoint Services 3.0 includes the same powerful infrastructure for auditing user access to list items, and documents and pages included in MOSS. The only difference in auditing functionality between MOSS and WSS is that the UI for configuring and viewing audit trails has been removed. Microsoft provides information and code on MSDN on how to programmatically activate the audit functionality.
SharePoint offers auditing for the following events:
Fortunately, you don’t need to write the code yourself because some guys has already published an excellent feature on Codeplex that enable the functionality: http://wssaudit.codeplex.com/. The current release from May 5th 2009 is listed as alpha 2, but don’t let the alpha version label fool you, this feature work great. The screen shots below are taken from my environment.
Enabling gzip compression is an easy way to make your site load faster, but how do you go about doing so for your EPiServer site and why should you?
Gzip compression will reduce the size of a text file (such as html markup, css, js and files) up to some 90%. If your user is on a slow connection, reducing the size of data does make a difference. The number of users on “slow” connections are actually growing by every sold smart phone and mobile broadband connection. Here’s a real world example:
| Content | Uncompressed | Compressed |
|---|---|---|
| Markup | 40kb | 40kb |
| CSS | 104kb | 18kb |
| JS | 368kb | 119kb |
| Toal | 512 kb | 177 kb |
Gzip will typically compress a text file around 65-90%. In this example this example we reach an average compression of about 70% for the static content. A web page usually contains more CSS and JavaScript content than the size of the specific pages’ markup. Although, this is only true for the initial page the user visit, for subsequent page views the visitors’ browser has already cached the static content making page markup the biggest part of text content.
If you’re on a broadband connection, meaning 2mbit+ and not including wireless broadband, downloading the page (ignoring images) uncompressed will take less than 2 seconds. If you’re on a slower connection however, say, 0.2-0.5 mbit, it will take about 7-10 seconds. With compression enabled a mobile user with not optimal coverage (which seems more common than good coverage with Telia) you can save some 5 seconds which is significant if you’re that user. There’s another aspect to compression aswell. Say you run a large site with 100.000 unique visitors per day, by reducing at least the first page view by 330kb that reduce your daily traffic with a whopping 3,9Gb of data!
Compressing the markup will reduce the size for each request but because the markup is generally not very big the download time improvement will not be as significant. Compressing dynamic content will also use up more server resources for each page view. IIS will store/cache compressed static files on disk at first request so the impact of compressing static files is minimal.
Here’s an old but still very informative blog post by Yahoo on front end optimization.
I recently banged my head against this one. I wanted a list of past meetings and another list for upcoming meetings in my meetings workspace. The calendar is picked up from the parent site using a DataFormWebPart and the “Connect to another library” function. This was all well and good, however, I needed the workspace url to link to the other meeting workspaces. With the list connected there is a field in the data source named Workspace, but that’s a boolean and there is no url to be found. Looking at the Xpath in SharePoint Designer for that field it points to @WorkspaceLink. The trick is to add the property “IncludeHidden” to the SPDataSource object for the web part and find the url by selecting @Workspace.

Unfortunately, SharePoint Designer will throw an error at you for doing this when the list is not located in the same site as your webpart. But the end result in SharePoint will be glorius.
Here’s an example of how to display a link:
<a href="{substring-before(@Workspace, ',')}" title="{@Title}"> <xsl:value-of select="ddwrt:FormatDateTime(string(@EventDate) ,1033 ,'M/d/yyyy ')"/> </a>
This week we finally got around to upgrade our old Exchange 2003 server, fortunately we waited a few extra months and skipped Exchange 2007 for 2010. The upgrade was handled by our friendly neighbor and also our new ISP: DGC. We did encounter one problem after the upgrade that I assume others will face as well. Some accounts, mine included, couldn’t get the iPhone ActiveSync to work, it worked before the migration to 2010.
After the migration it didn’t. I tried the test service from Microsoft: Microsoft Exchange Server Remote Connectivity Analyzer and it clearly indicated that something was wrong with my account but suggested it had something to do with forms authentication being enabled, which it wasn’t. I found this error message in the event log on our new Exchange 2010 server:
Exchange ActiveSync doesn’t have sufficient permissions to create the “CN=Björn Sållarp,OU=Users,OU=Avantime Development,OU=Avantime Production,DC=avantime,DC=local” container under Active Directory user “Active Directory operation failed on KELLY.avantime.local. This error is not retriable. Additional information: Access is denied.
Active directory response: 00000005: SecErr: DSID-03151E04, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0
“.
Make sure the user has inherited permission granted to domain\Exchange Servers to allow List, Create child, Delete child of object type “msExchangeActiveSyncDevices” and doesn’t have any deny permissions that block such operations.Details:%3
Right.. This basically means the account lack permissions in the Active Directory. I figured out that because my account has been added to what’s called a “protected group” such as Domain Admins the setting for my account to inherit permissions has been removed by Active Directory. This excellent blog post explains how to get the inherited permissions back. http://www.ffoutpost.net/2009/11/10/resolve-issues-with-activesync-not-working-in-exchange-2010 remember to remove the account from the protected group before you enable inheritance, otherwise inheritance will be removed again by Active Directory within an hour or so.
If you want to buy a certificate for your Exchange 2010 server, and I suggest that you do instead of generating a self signed cert, have a look over at Entrust. We recently bought a 4 year cert from Entrust by recommendation of DGC whom helped us migrate from Exchange 2003 to 2010. So what’s great about Entrust? They allow you to insert multiple domains (10) in one cert without huge costs. This enables you to buy one certificate and it will cover the autodiscovery sub domain as well until you reach 10 unique domains. Find out more here: http://www.entrust.net/ssl-certificates/unified-communications.htm
The only negative part of ordering from Entrust is the rigorous validation process which takes up to a day or two. They will email you a couple of times and also call you which if you live in Europe will happen while you are sleeping. Fortunately you can call them and leave a voice mail to confirm that you really gave them the correct information.
I attended and spoke at a breakfast seminar hosted by Philips and DoRight Group together with Mårten Wahlström from Svensk Fastighetsförmedling last week. Mårten spoke about their NET TV initiative and I spoke about our experiences at Avantime when we developed the NET TV application “Hitta Hem” I’ve written about earlier. I was very happy to hear that Philips were so impressed by our application that they use it for promotion purposes in Europe!
Philips started the seminar by presenting their roadmap for NET TV what was happening with the platform in general. Apparently sales were a success, there are 80.000 NET TV enabled homes in europe already! How many NET TV enabled TVs that has been sold in Sweden still remains a secret though. Philips had some good news about the support from other manufacturers, many of the major TV manufacturers are already sitting in the CE-HTML boat or are about to join. This is huge for the CE-HTML standard and for companies looking to develop NET TV applications! I would love to see Samsung, LG and Panasonic to use the same platform. » Public SDK and Hitta Hem NET TV code
Spotify is an awesome app for the iPhone, however, you need a premium account. Or do you? Most users will probably use the off-line mode to avoid the sometimes overly expensive data plans. If you don’t want or need to stream music it turns out you really don’t need a premium account! At least not one account per device.
I noticed it this morning when I installed the Spotify app on my girlfriends’ iPod touch. I’ve been a premium customers since the launch and my girlfriend has a free invite from my account. While my iPhone was streaming music I logged into the same account on the touch and started offline sync’ing some playlists. The iPhone didn’t even stop streaming! I could off-line sync playlists on both devices at the same time. When i started playing a track on both devices however one got a message about the account being used elsewhere, even though the tracks were offline’ed. So as long as your devices remain unconnected to the net you can share your account with others.
I don’t know if this is intentional by Spotify but you could easily share one premium account with all your friends for iPhone/iPod use. It would be rather simple for Spotify to pair an account with one device but that could potentially annoy some customers. In my opinion that would be reasonable and perhaps they will add some kind of account sharing protection if it’s widely abused.
Happy account sharing while it lasts!
With this blog I try to provide useful tips and solutions for programming .NET, Objective-C and more. My name is Björn Sållarp, and I love writing code.