onsdag 3 december 2008

Firefox, Safari, SharePoint and modal windows

Ok, I've been taking a closer look at the problem with SharePoint, modal windows, Firefox and Safari.

Turns out the problem is NOT Firefox/Safari, rather, it is an issue with the setModalDialogObjectReturnValue() function in core.js. Basically, because of differences between Firefox/Safari and Internet Explorer, the result of the 'if' clause in this method is different. For Firefox/Safari, this has the result that the wrong method is used to set the return value of the window.

Here is a very quick and dirty workaround that works in FF3, Safari 3 and IE7 (and WSS 3.0 SP1/MOSS 2007 SP1).

Add the bold line to ...\12\TEMPLATE\LAYOUTS\1033\CORE.JS:

function setModalDialogReturnValue(wnd, returnValue)
{
  if (wnd.opener !=null &&
    typeof(returnValue)=='string' &&
    wnd.opener.document.getElementById('__spPickerHasReturnValue') !=null &&
    wnd.opener.document.getElementById('__spPickerReturnValueHolder') !=null)
  {
    wnd.opener.document.getElementById('__spPickerHasReturnValue').value='1';
    wnd.opener.document.getElementById('__spPickerReturnValueHolder').value=returnValue;
    wnd.returnValue=returnValue;
  }
  else
  {
    setModalDialogObjectReturnValue(wnd, returnValue);
  }
}

I put this here only to illustrate the problem and the solution. I have not tested this with older browsers - this code will probably break functionality with older browsers! Preferably, one should modify the 'if' clauses in this method. Also, mind that changes to this file is not supported by Microsoft. It might be overwritten by future Service Packs or upgrades, so you better hope that this bug is fixed in the next Service Pack, or somehow put this fix in some other file.


So who is to blaim? Who should fix it?

What Mozilla changed to make this problem arise in Firefox 3 was simply to add support for the IE specific method showModalDialog(). They didn't have to - they already had another way to do the exact same thing.

For Firefox 3/Safari 3, the JavaScripts in core.js now choose the "IE" method to open the window, the "Firefox" method to set the return value to the window, and then again the "IE" method to read the return value from the window. Hence, the return value will always be undefined or null. The JavaScript functions must be modified in some way so that they are concistent.

No one is to "blaim" - Firefox and Safari supports everything IE supports, and Microsoft made an effort to support Firefox in SharePoint, but even though SharePoint worked in all browsers available during its release, it now fails to properly detect modern browsers.

While it's possible to work around the problem, and it should be quite easy to make the fix as a custom SharePoint solution, I recommend anyone being troubled by this issue to open a support case with Microsoft.

tisdag 2 december 2008

Firefox vs SharePoint

One annoying thing when accessing SharePoint sites with Firefox is that it always requires the user to enter credentials when using NTLM authentication. It turns out, that's not a limitation, that is by design... Read this post by Patrick Cauldwell about how to make Firefox log in automatically to SharePoint sites.


Also, there's an issue in Firefox (and Safari) which disables most things which depend on popup windows, most notably, it's not possible to add web parts to a page.

Taking a look at the core.jss file, it appears that Microsoft put a fair bit of work into making this work in more than just IE, so it actually might be a bug in Firefox, not just Microsoft ignoring FF as I first thought. How about putting a vote for Bugzilla@Mozilla - Bug 463889 - Can't add web parts in Sharepoint 3 and MOSS 2007?

måndag 1 december 2008

Jan vs Microsoft Content Management Server 2002

My first post - and it's a REALLY REALLY long one!



I've recently had to deal with a configuration of Microsoft Content Management Server 2002 which had been moved around and upgraded over the years. Some of the problems I ran unto were fairly unusual and finding solutions to some of the problems were difficult at best. Here are those problems and the solutions that worked for me. If you run into any problems with CMS, you should first check out the following two pages:

Site Deployment FAQ

HOW TO: Troubleshoot Site Deployment Issues in Microsoft Content Management Server 2002



Unable to export data from a CMS site.

- Everything else, including imports, worked fine.
- CMS 2002 with SP2, upgraded from SP1a, running SQL Server 2005, upgraded from SQL Server 2000
- The export fails after almost exactly 30 seconds (stuck on 0% or 5%), then fails.
- The error details would specify "403 (Forbidden)".
- Using a packet sniffer like Fiddler would reveal the complete 403 reason to be Directory Listing Denied.
- The 403 is pretty irrelevant: If doing an export preview, the real error is revealed to originate from .Net SqlClient Data Provider, and have the description Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
- The pages linked to above offers a lot of suggestions, non of which helped us.

Solution: Install hotfix 913401:

FIX: If you try to perform a site deployment export operation to SQL Server 2005, the export operation fails in Content Management Server 2002 Service Pack 2

How to install the hotfix:
1. Make a backup of the CMS database!
2. Request it from the page above. (If you can't, see below.)
3. Download it, extract it using the password in the e-mail.
4. Copy _both_ files to the folder "(MCMS)\Setup Files\SQL Install". Make a backup of "_dca.ini" first.
5. Run the DCA. Re-select the database. When continuing, the DCA should ask you to confirm the database upgrade.
6. Done!

Thanks to:
David Longnecker
Stefan Gossner


Unable to view or request hotfix on support.microsoft.com

Not really an CMS issue, but when clicking the "View and request hotfix downloads" link on the hotfix page above, you get a page with no content.

Solution: Turns out Microsoft's support site isn't very well localized. It tries to show a localized (in my case a Swedish) version of the page, which doesn't exist. Click the link in the top right corner, above the search bar, to change your location to USA.


Unable to install or upgrade all components because they require "Microsoft Java VM", "Visual J#.NET redistributable 3.0", or doesn't detect your version of Visual Studio.

Solution: Here's the steps I've found necessary to safely install CMS SP2... Surely, lots can go wrong with this old system so it's of course not complete. It's probably not a bad idea to reboot between every step.

1. Install the original version, without SP:s. Check only the core Server component.

2. You need to uninstall the .Net framework 3.0/3.5, or Site Manager will not be available. (If you don't need the Site Manager, you can skip this step.) You can re-install the 3.0/3.5 framework afterwards, however, all this takes time, and you might break other things installed on the computer. There is a faster workaround - quoting Alan McBee:

This is a RegEdit thing, so the usual Warning About Tampering With The Registry apply/

In RegEdit, go to this key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\

Rename the subkey v3.0 to something else -- I used XXXv3.0XXX.


In fact, I myself had to use this method, because uninstalling the framework still left that 3.0 key, so the Site Manager option was still disabled in the SP1a installation wizard.

3. Install SP1a. If you need them, install the Site Manager, Site Stager and the Dev tools now.

4. Change back the 3.0 registry key or re-install the .Net framework 3.0/3.5 (if you want it).

5. Install SP2.

6. Check Microsoft Update. There should be one single update from CMS available on Microsoft Update (under the "Office" category, I think). It is described as a security update, but you MUST get it if you are going to use SQL Server 2005, otherwise you wont be able to select the database in the DCA.

7. Install the hotfix mentioned above, if you are going to use SQL Server 2005 and if you are going to use a database from SQL Server 2000.

8. Create two websites in IIS, and create a new database (or copy an existing). Set up the security configurations, all the accounts and that boring stuff, and run the DCA/SCA.

9. If upgrading database from SP1a, make sure any custom built form still works (see below)

10. Done!


Thanks to:
Alan McBee
Stefan


Unable to select SQL Server 2005 database in the DCA

Problem: Authentication errors and other errors when choosing a DB in DCA.

Solution: For CMS to support SQL Server 2005, CMS 2002 SP2 must be installed, AND an update must be installed from Microsoft Update! Check update.microsoft.com. There should be one single update from CMS available on Microsoft Update (under the "Office" category, I think). It is described as a security update, but you MUST get it if you are going to use SQL Server 2005.


Custom forms are broken after SP1a upgrade to SP2

Problem: After upgrading CMS 2002 SP1a to SP2, custom built forms are broken. They may refer to an invalid URL, giving the user a 404 when submitting a form. CMS is using ASP.NET.

Solution: This is because they introduced a bug in a JavaScript in SP2. First, the post-SP2 hotfix package MIGHT fix this, but only try this if your environment is "expendable", or if you manage to find more documentation than I did... Or possibly, there might be a fix available for ASP.NET.

Otherwise, you can do what we did - it's insanely ugly, but it works. Copy this little piece of code somewhere into all templates containing broken forms:


<script language=”javascript” type="text/javascript">
<!--
// hack to fix MCMS2002 SP2/ASP.NET generated action target
__CMS_PostbackForm.action = __CMS_CurrentUrl;
// -->
</script>

Basically, this line is for some reason not generated in the HTML output by CMS SP2, but it was in SP1a. So far we've seen no side effects from adding this snippet, please let me know if you do.



I hope any of this is helpful to anyone else! (I really mean that, otherwise I've wasted a lot of time writing this...)