I am pretty sure you all have customers/users that use Word, Excel and PowerPoint 2003 in combination with SharePoint 2007. And you probably explained them all the when they want to edit a document, they need to open the context menu and select "Edit in ....". Instead of just clicking on the name in the view. This opens the document as readonly on Office2003.
Users then make changes to the document, hit the save button and get the Save As dialog. If 'Require checkout' is enabled, they need to save the document using a new name, because the document cannot be overwritten. It is pretty hard to explain and for users it is hard to get used to it.
I have created a custom document library schema that has 2 extra viewfields. These fields, when clicked make the Office applications behave just like when users click the link "Edit in Microsoft Word" for a Word document. After you installed the template and you open a Word document in Word 2003, Words asks if you want to check-out the document (if this is enabled, otherwise it just opens the document in edit mode).
I have called the document library an "Edit Document Library". You can download it from our CodePlex site. Before you install it, please note that you will only benefit from this when you use Office 2003. Office 2007 behaves like you would expect. After running the installer, and deploying the solution to your web application(s), your top level sites have a new site collection feature called "Edit Document Library":
After activating this feature, all subsites now have a new document library template available:
After you created your new document library, you are done. If you look at the view definition of the All Documents view, you will notice the new field that is selected as the "Name" field:
In fact, your library has 2 new fields:
- Name (linked to Edit document)
- Name (linked to Edit document, with edit menu)
The last part of this post is for those of you who are interested in how I created this library. In the schema.xml of the list template, I created the 2 new field definitions. I changed the DisplayPattern of the Name (linked to Edit document) field. The CAML part that actually renders the link now looks like this:
It renders a link to the document and when the user clicks this link, it calls the javascript function "editDocumentWithProgID2". It checks the ForceCheckout property of the list and the value of the Checkoutuser to find out the correct value for the check-out behavior.
<HTML><![CDATA[<A onfocus="OnLink(this)" HREF="#]]></HTML>
<HTML><![CDATA[" onclick="javascript:editDocumentWithProgID2(']]></HTML>
<Field Name="EncodedAbsUrl"/>
<HTML><![CDATA[', '', 'SharePoint.OpenDocuments',]]></HTML>
<FieldSwitch>
<Expr>
<ListProperty Select="ForceCheckout"/>
</Expr>
<Case Value="1">
<IfEqual>
<Expr1>
<Column Name="CheckoutUser" />
</Expr1>
<Expr2></Expr2>
<Then>
<HTML><![CDATA[1]]></HTML>
</Then>
<Else>
<HTML><![CDATA[0]]></HTML>
</Else>
</IfEqual>
</Case>
<Default>
<HTML><![CDATA[0]]></HTML>
</Default>
</FieldSwitch>
<HTML><![CDATA[, ']]></HTML>
<HttpVDir />
<HTML><![CDATA[', 0);">]]></HTML>
<UrlBaseName HTMLEncode="TRUE">
<LookupColumn Name="FileLeafRef"/>
</UrlBaseName>
<HTML><![CDATA[</A>]]></HTML>
<IfNew Name="Created_x0020_Date">
<HTML><![CDATA[<IMG SRC="/_layouts/[%=System.Threading.Thread.CurrentThread.CurrentUICulture.LCID%]/images/new.gif" alt="]]></HTML>
<HTML>$Resources:core,new_gif_alttext</HTML>
<HTML><![CDATA[">]]></HTML>
</IfNew>
Please download the code from the CodePlex site if you want to see this snippet in the context.