Saturday, September 19, 2009
Tuesday, September 15, 2009
Updating document field value in SPItemEventReceiver.ItemCheckingIn() event handler
I have tried method 6
properties.AfterProperties.ChangedProperties["Field Internal Name"] = "New Value";
but I couldn't get it working.
"Field Internal Name" should be "vti_Field Internal Name". Microsoft purchased SharePoint from a company called something with VTI. Unfortunately this didn't work either.
This blog is also worth reading as it explains the sequence of events.
Saturday, August 15, 2009
Friday, August 07, 2009
Writing to SharePoint Unified Log
As an alternative you can write to SharePoint own log, Unified Log, as described here on msdn.
Btw - I wonder why people in other blogs copy the content from MSDN and place it on their own blogs. What's the idea? It doesn't add any value - it only created confusion as I tend to ask myself. What is the difference?
Thursday, July 30, 2009
ItemCheckingIn and version number - MOSS SP2 behavior
Thursday, July 23, 2009
Creating a site-collection programmatically
Saturday, July 04, 2009
Office - There has been a network or file permission error

It's hard to find an explanation for the issue but I found this blog quite interesting. Indexing services on Windows Vista could cause the problem.
Another great blog describes ways to solve it for Windows XP SP2 and Office 2007.
Friday, June 19, 2009
Thursday, June 04, 2009
ItemAdded - setting values - Microsoft recommendation
Thursday, May 28, 2009
Disable property promotion/demotion
Monday, May 25, 2009
Creating a web service in F#
Monday, May 18, 2009
More on SharePoint 2010
Tuesday, April 21, 2009
SharePoint 2010
Read the blog http://blogs.msdn.com/sharepoint/archive/2009/04/14/microsoft-sharepoint-14-is-now-microsoft-sharepoint-2010.aspx here.
Friday, April 03, 2009
MOSS Performance considerations
Using the List.Items.Count should be avoided at any costs. It basically send a very complex and expensive SQL query, especially on large lists. If you need statistics use the List.ItemCount instead which uses the statistics information from SQL Server about the list to provide data. No absolutely correct though.
Wednesday, March 04, 2009
Wednesday, February 11, 2009
Very large document libraries - very strange SQL
SELECT TOP 2147483648 t2.[tp_Created] AS c3c8,t1.[Type] AS c0,t3.[tp_ID] AS c10c5,UserData.[nvarchar10],t1.[Id] AS c15,t4.[tp_Created] AS c17c8,UserData.[tp_ItemOrder],UserData.[tp_ModerationStatus],UserData.[nvarchar1],UserData.[nvarchar6],UserData.[bit2],UserData.[tp_Created],t1.[CheckinComment] AS c23,UserData.[tp_WorkflowInstanceID],t2.[nvarchar4] AS c3c6,t3.[tp_Created] AS c10c8,UserData.[ntext1],t4.[nvarchar4] AS c17c6,t1.[DirName] AS c18,UserData.[tp_ID],t1.[ProgId] AS c13,UserData.[nvarchar5],UserData.[bit1],t1.[Size] AS c21,UserData.[tp_GUID],t1.[TimeCreated] AS c1,UserData.[tp_Editor],UserData.[tp_Author],t2.[nvarchar1] AS c3c4,t3.[nvarchar4] AS c10c6,UserData.[nvarchar2],UserData.[nvarchar7],UserData.[nvarchar13],UserData.[tp_ContentType],t1.[LTCheckoutUserId] AS c20,t1.[TimeLastModified] AS c9,CASE WHEN DATALENGTH(t1.DirName) = 0 THEN t1.LeafName WHEN DATALENGTH(t1.LeafName) = 0 THEN t1.DirName ELSE t1.DirName + N'/' + t1.LeafName END AS c11,t1.[ScopeId] AS c16,UserData.[tp_ContentTypeId],UserData.[sql_variant1],t4.[nvarchar1] AS c17c4,UserData.[tp_WorkflowVersion],t1.[ParentVersionString] AS c24,UserData.[nvarchar4],UserData.[tp_CheckoutUserId],UserData.[tp_Version],UserData.[nvarchar9],t5.[nvarchar1] AS c4,UserData.[tp_IsCurrentVersion],t2.[nvarchar5] AS c3c7,t3.[nvarchar1] AS c10c4,UserData.[tp_HasCopyDestinations],UserData.[tp_Level],UserData.[nvarchar12],t1.[MetaInfo] AS c14,t4.[nvarchar5] AS c17c7,t1.[Size] AS c19,t1.[LeafName] AS c2,UserData.[tp_Modified],UserData.[nvarchar3],UserData.[nvarchar8],UserData.[tp_UIVersion],t2.[tp_ID] AS c3c5,t3.[nvarchar5] AS c10c7,UserData.[tp_CopySource],UserData.[nvarchar11],UserData.[tp_InstanceID],t1.[IsCheckoutToLocal] AS c12,t4.[tp_ID] AS c17c5,UserData.[tp_UIVersionString],t1.[ParentLeafName] AS c25 FROM UserData INNER MERGE JOIN Docs AS t1 WITH(NOLOCK) ON ( 1 = 1 AND UserData.[tp_RowOrdinal] = 0 AND t1.SiteId = UserData.tp_SiteId AND t1.SiteId = @L2 AND t1.DirName = UserData.tp_DirName AND t1.LeafName = UserData.tp_LeafName AND t1.Level = UserData.tp_Level AND (UserData.tp_Level = 255 AND t1.LTCheckoutUserId =@IU OR (UserData.tp_Level = 1 AND (UserData.tp_DraftOwnerId IS NULL OR (UserData.tp_DraftOwnerId <>@IU AND 1=0 )) OR UserData.tp_Level = 2 AND (UserData.tp_DraftOwnerId = @IU OR 1=1 )) AND (t1.LTCheckoutUserId IS NULL OR t1.LTCheckoutUserId <> @IU )) AND (1 = 1)) LEFT OUTER JOIN AllUserData AS t2 WITH(NOLOCK, INDEX=AllUserData_PK) ON (UserData.[tp_Editor]=t2.[tp_ID] AND UserData.[tp_RowOrdinal] = 0 AND t2.[tp_RowOrdinal] = 0 AND ( (t2.tp_IsCurrent = 1) ) AND t2.[tp_CalculatedVersion] = 0 AND t2.[tp_DeleteTransactionId] = 0x AND t2.tp_ListId = @L3 AND UserData.tp_ListId = @L4) LEFT OUTER JOIN AllUserData AS t3 WITH(NOLOCK, INDEX=AllUserData_PK) ON (UserData.[tp_CheckoutUserId]=t3.[tp_ID] AND UserData.[tp_RowOrdinal] = 0 AND t3.[tp_RowOrdinal] = 0 AND ( (t3.tp_IsCurrent = 1) ) AND t3.[tp_CalculatedVersion] = 0 AND t3.[tp_DeleteTransactionId] = 0x AND t3.tp_ListId = @L3 AND UserData.tp_ListId = @L4) LEFT OUTER JOIN AllUserData AS t4 WITH(NOLOCK, INDEX=AllUserData_PK) ON (UserData.[tp_Author]=t4.[tp_ID] AND UserData.[tp_RowOrdinal] = 0 AND t4.[tp_RowOrdinal] = 0 AND ( (t4.tp_IsCurrent = 1) ) AND t4.[tp_CalculatedVersion] = 0 AND t4.[tp_DeleteTransactionId] = 0x AND t4.tp_ListId = @L3 AND UserData.tp_ListId = @L4) LEFT OUTER JOIN AllUserData AS t5 WITH(NOLOCK, INDEX=AllUserData_PK) ON (t1.[LTCheckoutUserId]=t5.[tp_ID] AND t5.[tp_RowOrdinal] = 0 AND ( (t5.tp_IsCurrent = 1) ) AND t5.[tp_CalculatedVersion] = 0 AND t5.[tp_DeleteTransactionId] = 0x AND t5.tp_ListId = @L3) WHERE (UserData.tp_Level= 255 AND UserData.tp_CheckoutUserId = @IU OR ( UserData.tp_Level = 2 AND UserData.tp_DraftOwnerId IS NOT NULL OR UserData.tp_Level = 1 AND UserData.tp_DraftOwnerId IS NULL ) AND ( UserData.tp_CheckoutUserId IS NULL OR UserData.tp_CheckoutUserId <> @IU)) AND UserData.tp_SiteId=@L2 AND (UserData.tp_DirName=@DN OR UserData.tp_DirName LIKE @DNEL+N'/%') AND UserData.tp_RowOrdinal=0 AND (t1.SiteId=@L2 AND (t1.DirName=@DN OR t1.DirName LIKE @DNEL+N'/%') AND t1.Type=0) ORDER BY t1.[Type] Desc,UserData.[tp_ID] Asc OPTION (FORCE ORDER)
This blog describes a similar issue, as well as this blog. Using
targetList.Items[...]
can cause this issue. Use
targetList.GetItemByUniqueId(...) or
targetList.GetItemById(...)
instead.
Also - might be related to this issue reported by Microsoft. A hotfix exists!
Thursday, February 05, 2009
RunWithElevatedPrivileges
Luckily I read this article from MSDN which describe that the
new SPSite(
requires privileges above Contributor to work. Running the code in the context of RunWithElevatedPrivileges sovles the problem. Fantastic.
Thursday, January 15, 2009
Content Type is still in use
I came across this blog that stated that you also needed to look into previous versions of the files as well as files hidden.
Despite the fact that I have done this I cannot delete the ContentType.
I therefore looked into the SQL database in the AllUserData table in the Content database with the following SQL
SELECT *
FROM AllUserData
WHERE (tp_DirName LIKE '
AND ((tp_ContentType = '
ORDER BY tp_DirName
Then I got a list of files using the content type.
The main issue now is that I cannot figure out how to get rid of the content type from these files. Ideas very much appreciated.
I have
- Checked in documents
- Published them all - i.e. major version
- Previous versions has been deleted
- Emptied recycle bin
- Ensured the content type I wish to delete is not default content type (apart from the fact that SharePoint suggest it to be the new default when uploading documents - which is strange. Maybe this is the reason?)
So what do I do?
Even if I DELETE the files and REMOVE them from recycle bin they still appear in the SQL search. No wonder I cannot get rid of the content type!
Even if I go through all files in the Document Library and explicitly set
oFile.Item("ContentType") = <...>
I cannot DELETE the content type afterwards. Very strange.
Saturday, January 03, 2009
Server Error - SPRequest.AddOrUpdateItem

Other documents works just fine but a few documents fails. Ideas very much appreciated. Googling find various ideas:
- Open document in Excel, Press Save As, and re-upload - don't help
- MS XML 6.0 de-installed on SharePoint Server - MSXML 6.0 SP2 installed
- Filesize - no relevant - file size is 54Kb
- Save as Excel 2007, then Excel 2003 Fixes the problem - unbelievable
Server Error in '/' Application.
Oplysningerne i Microsoft Office-dokumentet 06Emails/06-1912/Attachment/ABC.xls kunne ikke opdateres. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Runtime.InteropServices.COMException: Oplysningerne i Microsoft Office-dokumentet 06Emails/06-1912/Attachment/ABC.xls kunne ikke opdateres.Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace:
[COMException (0x81071003): Oplysningerne i Microsoft Office-dokumentet 06Emails/06-1912/Attachment/ABC.xls kunne ikke opdateres.]
Microsoft.SharePoint.Library.SPRequestInternalClass.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish) +0
Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish) +199
[SPException: Oplysningerne i Microsoft Office-dokumentet 06Emails/06-1912/Attachment/ABC.xls kunne ikke opdateres.]
Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish) +240
Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, Boolean bMigration, Boolean bPublish, Boolean bCheckOut, Boolean bCheckin, Guid newGuidOnAdd, Int32& ulID, Object& objAttachmentNames, Object& objAttachmentContents, Boolean suppressAfterEvents) +934
Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Boolean bCheckOut, Boolean bCheckin, Boolean suppressAfterEvents) +182
Microsoft.SharePoint.SPListItem.Update() +88
Microsoft.SharePoint.WebControls.SaveButton.SaveItem(SPContext itemContext, Boolean uploadMode, String checkInComment) +725
Microsoft.SharePoint.WebControls.SaveButton.SaveItem() +58
Microsoft.SharePoint.WebControls.SaveButton.OnBubbleEvent(Object source, EventArgs e) +249
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +115
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +163
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +177
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433
Sunday, December 07, 2008
SPListItem - SystemUpdate, UpdateOverwriteVersion, Update
| Method | bSystem | bPreserveItemVersion | bNoVersion |
| SystemUpdate() | true | false | false |
| SystemUpdate(false) | true | true | false |
| UpdateOverwriteVersion() | false | false | true |
| Update() | false | false | false |
Friday, December 05, 2008
SPRequest object was not disposed before the end of this thread
In order to figure out the reason behind this warning you can add a registry key thereby getting a full stack trace as outlined in this blog.
Saturday, November 22, 2008
Delete a file from SharePoint
SPFile.Delete()
method.
But when invoking this code from a custom web service I get "access denied" error.
Rather than creating my own web service I investigated using standard SharePoint web services. Files can be deleted using web services - as described in the blog where files are deleted from InfoPath.
This MSDN article also describes how to delete files.
Web services are just so much easier to use :-)
Tuesday, October 28, 2008
Working with SharePoint web services - GetList and GetListAndView

The web service contain one parameter:
listName
Whenever I use this web-service I always forget the it doesn't mean the name of the list, but the title of the list. Such a minor detail leads to waste of time - lot of time. And I'm probably not alone out here.
If you use the listName rather than listTitle you get the brilliant error message:
Does anyone know how to retrieve information about a list from it's listName rather than listTitle? As end users can rename lists easily the URL for the list is probably better to use than the name.
Sunday, October 26, 2008
The security validation for this page is invalid
Fortunately I came across this blog yesterday. Not sure it solves all my problems - but I tried it out and some of the exceptions disappeared. I'll make more research.
Saturday, October 04, 2008
Copying documents between doclibs - including metadata and versions
Basically - you'll need to write a program to do so.
Luckily this blog descibres how.
Tuesday, September 16, 2008
The document could not be created.
The document could not be craeted. The required application may not be installed properly, or the template for this document library cannot be opened.
The error happens when I try to use a PowerPoint template file from SharePoint, POT.
Ideas very much appreciated.
Sunday, September 14, 2008
Office doesn't behave properly with SharePoint - components missing
This blog refers to a possible solution.
Check out Microsoft KB 938888.
Monday, September 08, 2008
Office 2007 document upload - files corrupt
Upload goes fine - but when you try to open the file using Office you get the following errors:


The Office Open XML file
- Microsoft KB 928282 - Excel and Word related - not relevant
- Depressing news ...
Solution
SharePoint seems to have an error when adding documents to the filecollecting using the
SPFolder.Files.Add
function. If you add from a byte-array it simply fails with Office 2007 documents. But if you convert the byte-array into a stream, e.g. by saving the byte-array into a file and loading it into a stream, then it works. It's unclear to me why this error occurs - but Microsoft probably drops a single byte in the byte-scenario - which is critical for Office 2007 documents, but other documents seems to survive.
Input and comments very much appreciated.
Friday, August 29, 2008
Some files can harm your computer. If the file information looks suspicious or you do not fully trust the source, do not open the file.
Some files can harm your computer. If the file information looks suspicious or you do not fully trust the source, do not open the file.

SharePoint uses the ActiveXObject from the browser, SharePoint.OpenDocuments, and invokes the function CreateNewDocument (or CreateNewDocument2 in MOSS 2007) with the location of the template (http://...) and the default save location (set to the current folder).
This blog describes how to fix the issue.
However, this didn't change anything for me. Instead I checked out the htmltransinfo.xml file found in "c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML". Notice HandlerUrl - and also notice that when opening Word documents directly from SharePoint these errors doesn't occur. Didn't change anything either.
Some claims running Office Diagnostics solves the issue - haven't got time to try out this model - yet!

Tried it - no luck :-(
Thursday, August 28, 2008
Application Event Log: Unable to connect publishing custom string handler for output caching.
Unable to connect publishing custom string handler for output caching.
It would be excellent to learn how to avoid this issue.
Googling the issue many refers to modifying web.config and either add or remove entries to the httpModule section.
But what works? You tell me.
This blog most likely gives a great explanation of the issue. In SharePoint 2003 you had the concept of managed paths - so if you had other web applications on the server you needed to specify these explicit. In MOSS 2007 this feature is removed from the administration tool - and the above blog indicates that it should be added directly in web.config.
Saturday, August 16, 2008
Create a DOCX programmatically
Monday, August 11, 2008
Web part import - zoneIndex doesn't work
Unfortunately it turns out that zoneIndex only works if web parts are imported in sequence - so you'll need to make certain import is done in the proper sequence order.
After import zoneIndex cannot be modified programmatically - at least I've not found a way to do this.
Saturday, August 02, 2008
Adding a contenttype to a list using Office
How is this done.
- Open a Word dokument from another list with the content type you wish to use
- Save the Word dokument to the new list
Voila - missing accomplished.
The way Office and SharePoint support this feature is through the ContentTypeId property found in Word as outlined below.
As SharePoint runs promote/demote document properties the content type id is added to the list. I wonder what happens when documents are sent between organisations - will probably be quite messy!
Wednesday, July 30, 2008
?contents=1 - broken web part
Friday, July 25, 2008
Word did not save the document

We tried to research the problem using Google but didn't really find an answer - something we found quite strange. Then we checked the SharePoint log-files found in
C:\Program Files\Common Files\Microsoft Shared\Web server extensions\12\Logs
and voila, we could locate the issue in the log-file, outlined below:
07/25/2008 11:20:13.31 w3wp.exe (0x1054) 0x1364 Windows SharePoint Services General 72ng Medium RPC method = put document 07/25/2008 11:20:13.31 w3wp.exe (0x1054) 0x1364 Windows SharePoint Services General 72n3 Medium put file doc URL = 07Docs/07-1521/New document.docx 07/25/2008 11:20:13.40 w3wp.exe (0x1054) 0x1364 Windows SharePoint Services Database 6f8g Unexpected Unexpected query execution failure, error code 9002. Additional error information from SQL Server is included below. "The transaction log for database 'INTRANET_Content' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases" Query text (if available): "DECLARE @@S uniqueidentifier; DECLARE @@DocId uniqueidentifier; DECLARE @@Level tinyint; DECLARE @@DocUIVersion int; DECLARE @@DoclibRowId int; DECLARE @@iRet int;DECLARE @DN nvarchar(256); DECLARE @LN nvarchar(128); DECLARE @FU nvarchar(260); SET @@Level=255 SET @@DocUIVersion =1 SET @@DocId='331203E1-CF23-4BE5-A306-B53A7F289DDF' SET @@S='9E4A9A77-CF3E-4881-9E6A-AADF9B17AB86'; EXEC @@DoclibRowId = proc_GenerateNextId 'D44ED427-5B4E-4AE0-AC38-BDDB2E54142E','2E51B790-B64E-43... 07/25/2008 11:20:13.40* w3wp.exe (0x1054) 0x1364 Windows SharePoint Services Database 6f8g Unexpected ...5F-A1F2-253C7ADCD4C4'; SET @DN=N'Sager/07Docs/07-1521'; SET @LN=N'New document.docx';BEGIN TRAN; EXEC @@iRet = proc_AddDocument '9E4A9A77-CF3E-4881-9E6A-AADF9B17AB86','D44ED427-5B4E-4AE0-AC38-BDDB2E54142E',1,NULL,@DN, @LN OUTPUT, @@Level, @@DocUIVersion, @@DocId,'2E51B790-B64E-435F-A1F2-253C7ADCD4C4',@@DoclibRowId,?,?,54317,1274,1,0,332,NULL,NULL,0,2097153,0,0,0,-2,NULL,0,NULL,NULL,NULL,NULL,NULL,? OUTPUT,0,?,? OUTPUT; SET @FU = dbo.fn_GetFullUrl(@DN, @LN); IF @@iRet <> 0 GOTO done; EXEC proc_DirtyDependents @@S,1,@FU;IF @DN IS NULL SET @DN=N'Sager/07Docs/07-1521'; IF @LN IS NULL SET @LN=N'New document.docx'; EXEC @@iRet =proc_AddListItem @WebId='D44ED427-5B4E-4AE0-AC38-BDDB2E54142E',@SiteId='9E4A9A77-CF3E-4881-9E6A-AADF9B17AB86',@ListID='2E51B790-B64E-435F-A1F2-253C7ADCD4C4',@ItemId=@@Do... 07/25/2008 11:20:13.40* w3wp.exe (0x1054) 0x1364 Windows SharePoint Services Database 6f8g Unexpected ...clibRowId,@UIVersion=@@DocUIVersion,@RowOrdinal=0,@DocIdAdded='331203E1-CF23-4BE5-A306-B53A7F289DDF',@Size=0,@ItemName=N'New document.docx',@ItemDirName=@DN OUTPUT,@ItemLeafName=@LN OUTPUT,@ItemDocType=0,@UserId=1,@Level=@@Level, @TimeNow='20080725 09:20:12', @tp_ContentTypeId = ?,@nvarchar1=?,@nvarchar2=?,@nvarchar3=?,@nvarchar7=?,@nvarchar14=?,@nvarchar15=?,@sql_variant1 = 0, @error_sql_variant1 = 3,@tp_ContentType=?,@tp_ModerationStatus=?,@acl=NULL; IF @@iRet<> 0 GOTO done; SELECT @@iRet, @@DoclibRowId; done: IF @@iRet=0 BEGIN COMMIT; EXEC proc_GetLinkInfoSingleDoc @@S,@DN,@LN,@@Level; END ELSE ROLLBACK; SET ?=@@iRet;"
Quite simple really - the log file was full and no disk space available.
Thursday, July 10, 2008
Add a Web Part to SharePoint Page Programmatically
However, if you plan to store you web part's in galleries you need to retrieve them. Web Part Galleries are just traditional SharePoint lists, so you'll need to search through the list, and retrieve the content of the item in order to retrieve the web part xml. SharePoint doesn't offer any special Web Part lists.
The blog describes the model fairly detailled.
Monday, June 02, 2008
Document parsers in SharePoint - Office 2003 and 2007 promote-demote differently
However, this blog describe the concept of setting up property promote-demote. The DocParse.xml file is quite interesting - as Office 2003 and Office 2007 doesn't behave equally for property promotion-demotion. The reason could be this file - as the "doc" extension is not included, and SharePoint maybe for that reason uses another algoritm, thus leading to another result!
From this blog:
WSS includes built-in document parsers for the following file types:
- OLE: includes DOC, XLS, PPT, MSG, and PUB file formats
- Office 2007 XML formats: includes DOCX, DOCM, PPTX, PPTM, XLSX an XLSM file formats
- XML
- HTM: includes HTM, HTML, MHT, MHTM, and ASPX file formats
You cannot create a custom document parser for these file types. With the XML parser, you can use content types to specify which document properties you want to map to which content type columns, and where the document properties reside in your XML documents.
Wednesday, May 07, 2008
Connect to Outlook - scripting
The stssync protocol, outlined at msdn, is used to enable the synchronization to happen.
If you click Connect to Outlook as outlined below

Outlook will then display the following menu

Clicking advanced will bring up this menu

Various tools exists to enabel two-way synchronization between SharePoint and your desktop, of which Microsoft provide Groove as a part of Office while Colligo Contributor seems a far better solution as outlined in this blog. Also refer to this blog for relevant information about how to access information in SharePoint from OWA.
function ExportHailStorm(type,weburl,guid,webname,listname,viewurl,passport,listrooturl,folderurl,folderid)
Thursday, April 10, 2008
Google Maps in SQL Server - 2005 and 2008
Leveraging Google Maps enable you to build a simple web part which can map the address of a contact to a map in Google. Awesome. AJAX today - maybe jQuery in the near future.
Wednesday, April 02, 2008
ItemAdded - listItem is null
Sunday, March 30, 2008
Change approval status without changing ModifiedBy property on a document
When we move or copy the file we include properties as well as versions with Createdy, ModifiedBy, TimeCreated and TimeLastModified. Everything works fine except for one issue.
When we publish a document using SPFile.Publish() the ModifiedBy and TimeLastModified are changed - therefore we lose the version history.
Instead we try to fix the issue using the comment field - somehow it solves part of the issue but we would appreciate a better solution.

We have tried changing
oFile.Publish([comment])
to
oFile.Item.ModerationInformation.Status = SPModerationInformation.Approved
oFile.Item.ModerationInformation.Comment = [comment]
oFile.Item.SystemUpdate(false)
but unfortunately ModerationInformation is not available on the SPFile object.
This blog mention the same issue - without a solution. Ideas appreciated.As our last resort we're currently investigating creating a stored procedure which modified the SharePoint SQL database behind the scene. We would prefer not using this solution (albeit it works).
Monday, March 24, 2008
One of more field types are not installed properly
Unfortunately I get the error when I try to delete the field from SharePoint using oDocLib.Fields.Delete(
Fortunately this blog gave me some hints.
Sunday, February 03, 2008
Programmatically adding web parts to pages - audience targeting
For some web parts we wish to control audience, and to my luck I came across this page describing how to do this. However, understanding the AuthorizationFilter is a challenge.
Reverse engineering is probably the answer ... will update once I have figured this out.
Friday, January 18, 2008
Avoid checkin when uploading files
This can happen even for Document Libraries without versioning - and changing it to avoid checkin is not simple.
You need to ensure at least that:
- Require documents to be checked out before they can be edited = false
- No versioning af Document library - probably not required
- Ensure no mandatory columns exists - or ensure they have default values
Check out this blog for information.
Saturday, January 05, 2008
Copy files between document libraries
Instead, you need to traverse all versions of a document, which raises a critical issue. How to ensure the created, createdby, modified and modifiedby properties to be the same in the new document as in the old.
SPFileCollection contains an Add method to add new files. Unfortunately it doesn't exists with all the parameters needed, i.e. properties as well as created, createdby, modified and modifiedby. This method is missing:
SPFileCollection.Add (String, Byte[], Hashtable, Boolean, SPUser, SPUser, DateTime, DateTime)
As this method doesn't exists you have two options.
- Copy document with properties - and fix dates and users manually afterwards
- Copy document with dates and users - and fix properties manually afterwards
Both methods raises some issues - as you need to manipulate the SPFile and SPListItem object directly.
Manually manipulating createdby can be done as sketched below:
listitem["Created"] = new DateTime(2006, 11,1);
listitem["Modified"] = new DateTime(2006, 12,1);
listitem.UpdateOverwriteVersion();
as outlined on MSDN. Unfortunately this code doesn't work :-(
Other ideas very much appreciated.
Check out other blogs, such as this. Unfortunately it doesn't addess all the issues.
Hint to a solution?
Various investigations led me to analyzing the properties of the listitem after having added the item. It turns out that:
listitem[SPBuiltInFieldId.Created]
listitem[SPBuiltInFieldId.Created_x0020_Date]
are not equal! Created_x0020_Date contains the value of li["Created"] whereas SPBuiltInField.Created was the time the document was added to SharePoint.
This is even the case in situations where you use the
SPFileCollection.Add (String, Byte[], SPUser, SPUser, DateTime, DateTime)
which was a surpise to me !
Saturday, December 22, 2007
Google Maps and SharePoint

This blog describe how to inline a simple Google Map in SharePoint. Check out this link for documentation.
If you wish to learn more don't hesitate to contact me.
Saturday, December 01, 2007
Content By Type Web Part
Sunday, November 18, 2007
Large content databases - added indexes for performance improvements
As only a few properties are contained in indexes searches will most likely lead to table-scans. Having a few 1.000 documents in SharePoint might not lead to slow performance but if you're looking at 100.000+ documents the situation is obviously different as outlined in this excellent article.
Thursday, November 08, 2007
Potentially excessive number of SPRequest objects currently unreleased on thread
In order to avoid the problem in your code ensure to properly dispose the SPWeb object as outlined in this Microsoft article as well as in this blog. One important thing missing is the SPWeb.Webs() object - if using this object you also need to dispose all webs within the collection.
Potential reasons include:
- Invalid XSL stylesheet
- Drop down lists - simple C# example
- Orphans
Friday, November 02, 2007
SharePoint Content Database
Where is my content type used
DECLARE @ContentTypeName nvarchar(128)
SET @ContentTypeName='Document'
SELECT w.Title AS [Web Site], w.FullUrl AS [Web Url], al.tp_Title AS [List Title], ct2.* FROM ContentTypes ct1 JOIN ContentTypes ct2 ON LEFT(ct2.ContentTypeId, Len(ct1.ContentTypeId))=ct1.ContentTypeId LEFT OUTER JOIN dbo.ContentTypeUsage ctu ON LEFT(ctu.ContentTypeId, Len(ct2.ContentTypeId)) = ct2.ContentTypeId LEFT OUTER JOIN dbo.AllLists al ON ctu.ListId = al.tp_Id AND ctu.WebId=al.tp_WebId LEFT OUTER JOIN dbo.Webs w ON al.tp_WebId = w.Id WHERE ct1.ResourceDir=@ContentTypeName
Monday, October 22, 2007
SharePoint AJAX Toolkit
Sunday, October 21, 2007
AJAX on SharePoint - how to get started
Friday, September 28, 2007
Web Content Management Content Type IDs
Saturday, September 08, 2007
ASP.NET or SharePoint --> and SharePoint
Tuesday, August 21, 2007
SPFileCollection.Add ignores title property on upload
Adding system properties doesn't work:
dim oHash as new hashtable
oHash.add("DocumentType","Contract")
oHash.add("Title","Leasing agreement with Smart Leasing Inc.")
oFile = oFolder.Files.Add(
oFile.Item("Title") is not equal to "Leasing agreement...".
The only way is to modify it manually after having added the file, e.g.
dim li as SPListItem
li = oFile.Item
li("Title")="Leasing agreement..."
li.UpdateOverwriteVersion(); ' In order to avoid creating a new version
Any explanations why "Title" property cannot be set in oHash would be appreciated.
Other problems with Add has been reported various places. This blog is worth reading.
Wednesday, August 08, 2007
SharePoint explorer view - cut-paste issues
However, in a few situations the "explorer view" behaves quite strange.
If you try using Cut-Paste the file is moved from one place to another - including all the history, old versions etc. This is great. However - the Cut-Paste does not respect event handlers that are operational.
I have an ItemDeleting events that blocks deleting documents from certain document libraries. It works fine from all interfaces (Word, SharePoint, Web Dav) - except from cut-paste. Obviously Microsoft had to implement custom code to handle the clipboard in this situation - and it seems that they forgot to respect the event handlers. Just too bad.
Any experience with similar issues much appreciated - as well as workarounds.
Saturday, July 28, 2007
Wednesday, July 25, 2007
Great workflow tutorial - expense reporting
Wednesday, July 18, 2007
Friday, July 13, 2007
Monday, July 09, 2007
Managing Active Directory - SharePoint
Extending Active Directory with custom schemas is an excellent model for applications that can act as an LDAP client (e.q. Exformatics ESDH). This allows custom application attributes to be stored in Active Directory, thus maintaining one single point of administration for Users and Computers in organisations.
One of the challenges is that the standard Windows Users, Groups and Computers view doesn't allow for management of custom attributes. ADSI Edit is the answer. Read more here.
Friday, June 29, 2007
Exception (0x81071003): Unable to update the information in the Microsoft Office document
The exception occur in a ItemAdded event handler where I add a global unique human-readable document id to the document.
This most likely due to an error in the property promotion/demotion part of SharePoint.
If I try to open up the Excel sheet myself I get an error as inline VBA code cannot be executed. So if SharePoint tries the same no wonder it doesn't work. But how can you block promotion/demotion in such situations.
Ideas very much appreciated.
Monday, June 11, 2007
Search Query Web Service Test Tool for Microsoft Office SharePoint Server (MOSS) 2007
Tuesday, June 05, 2007
Office property promotion/demotion in SharePoint
Wednesday, May 09, 2007
SharePoint fine grained permission control
Wednesday, May 02, 2007
Approve a SPFolder programmatically
Conclusion: And it's just sooo simple --> check out this.
Luckily it seems that you can programmatically change the _ModerationStatus of a folder item using the ProcessBatchData operation of the SPWeb object as outlined in this blog.
Unfortunately for me I can't get it working - yet. My code for ProcessBatchData looks like this:
<?xml version="1.0" encoding="UTF-8"?><ows:Batch OnError="Continue" >
<SetList Scope="Request">{5234ebfe-58c5-4af3-8879-cde8ade42315}</SetList>
<SetVar Name="DatesInGregorian">TRUE</SetVar>
<Method ID="1,Update">
<SetVar Name="Cmd">Save</SetVar>
<SetVar Name="ID">14</SetVar>
<SetVar Name="owshiddenversion">1</SetVar>
<SetVar Name="owsfileref">http://intranet/Projects/Labbooks/ABC</SetVar>
<SetVar Name="urn:schemas-microsoft-com:office:office#_ModerationStatus">0</SetVar>
<SetVar Name="urn:schemas-microsoft-com:office:office#_ModerationComments">Exformatics Approved Folder</SetVar>
</Method>
</ows:Batch>
I get a proper reply back - but the folder is not yet approved. Maybe it only works in SharePoint 2003 and not in MOSS 2007. However, according to Joris Poelmans ProcessBatchData also works for MOSS 2007 - at least for creating new pages.
A good description with similar syntax can be found here - but not working either :-(
Wednesday, April 25, 2007
Strange workflow error - visual studio - Error 319 (0x13F)
Error 4 Property 'WorkflowProperties' has invalid value. Field type 'Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties' does not match with the expected type 'Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties'.

Any hints, ideas etc?
Workflow error codes can be found on MSDN, but little information about how to fix them.
I also get the error as outlined below:

Could not bind property 'WorkflowProperties'
Could not load file or assembly 'Microsoft.SharePoint.Library, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.
I'm also trying to update VS.Net 2005 with "Windows Workflow Foundation Extensions for Visual Studio 2005" as outlined in various guidelines. However, it seems that Microsoft has renamed the tool - at least I cannot find the latest released on MSDN. I often wonder why it has to be soooooooo difficult.
Saturday, April 21, 2007
Reorder properties in Document Libraries
Sunday, April 15, 2007
Controlling MOSS Document templates
Ton Stegeman has written an excellent blot about how to control MOSS document templates programmatically. Thanks you.
Monday, April 02, 2007
SPFieldUser with default value
Monday, March 26, 2007
SPItemEventReceiver - ItemAdded and ItemUpdated runs simultaneous
It appears that is it critical to use SystemUpdate(...) rather than Update() as outlined here. But a note claims this was only an issue for beta versions?
I have tried using SystemUpdate rather than Update as sketched below, read this blog.
this.DisableEventFiring();
anItem.SystemUpdate(false);
this.EnableEventFiring();
The sequence of events is also quite strange as outlined in many blogs, try reading this.
Solution: It seems that if you ensure using SystemUpdate and Disable/Enable EventFiring as sketched above consistently in your eventhandler you don't have any issues. But I'm not yet convinced.
Friday, March 23, 2007
InfoPath password field
A workaround, using a custom task pane is outlined here. Unfortuntale that will not work with MOSS workflows :-(
A custom ActiveX component might be the only solution - quite difficult to manage and setup. But it is possible to create the control is Visual Basic 6.0 as outlined here.
Other ideas very much appreciated.
It seems that I could use Visual Studio Tools for Applications (VSTA). Will elaborate more shortly...
Thursday, March 22, 2007
Custom columns not visible
Saturday, March 17, 2007
SPWebEventReceiver - SiteDeleting
So far I have not been able to get it working - but hopefully shortly.
Ideas and input very much appreciated.
I found a good example here.
Sunday, March 11, 2007
A duplicate name "_dlc_Exempt" was found.
Happens when I try to execute:
Microsoft.Office.RecordsManagement.InformationPolicy.Policy.CreatePolicy(SPContentType ct, Policy globalPolicy)
Conclusion: Believe it or not - simply ignore this error!!! The policy is created despite the exception - so catch the exception - and then continue. Excellent API.
Computed columns cannot be added to Document library

Friday, March 09, 2007
Custom Link field in a SharePoint Document Library
Depending on the version of the file I also wish to display different fields. I would like the published version of the file to be accessed from the same link always - and if a minor version exists this version should be accessed from another link in the list.
I have tried to create a feature with a custom field that contains exactly this stuff - no luck. The new custom field simply doesn't show up in my view.
I came across this blog but I couldn't get it working :-( Couldn't add an IF statement in a computed field. I got the error "The formula contains a syntax error or is not supported. " when I tried to add the IF statement. As a next step I studied the difference between Computed and Calculated fields as outlined in this blog. When I add the field as a Calculated field the above blog works - voila. However, changing fldtypes.xml is not recommended - would like to get it working using standard features. The other issue is that I would need to add this calculated field to all my document types in order to enable field selection on a view.
The issue currently is the fact that computed fields cannot easily be added to list or views - at least they don't show up if added as features. Calculated fields does.
Remember the difference between the two field types: Computed fields are not stored in the database but calculated fields are.
Further - you need to note the difference between columns, fields and properties - as described in this blog.
Still not fully understanding what is going on it seems that calculated fields are not really columns - so they cannot be viewed in the Site Columns collection (despite the fact they are added with other fields as part of the same feature). Neither - unfortunately - they cannot be added to a view.
If I look into the SPWeb object
.AvailableSiteColumns('
my column is returned. But how can I add it to the view?
Apparently other people have had this issue too - here and here.
In SharePoint 2003 I simply modified onet.xml to accomodate this new field, as outlined here.
Sunday, March 04, 2007
Modify SharePoint Content type order programmatically
While the code fixes the layout for the New button it unfortunately doesn't solves the issue for Upload, as Upload uses the default content type for the document library - not for the folder :-(
Any ideas much appreciated
Thursday, March 01, 2007
InformationPolicy - content types - challenges
However - there is a challenge that I have not yet managed to overcome. When associating the informatonpolicy with a content type within a document library it works just fine.
But when I create a site content type and then create a new document library and add the site content type (with the information policy associated) to the document library nothing works :-(
When inspecting the details it turns out that no event receivers are associated with the content type found on the document library.
I was assuming that once an information policy is associated it would be enforced in all locations. This assumption is not correct.
Tuesday, February 27, 2007
Wednesday, February 21, 2007
Delete a contenttype from a document library
From the administration UI you can remove a contenttype by selecting "Delete this content type" as outlined here:
But how do you do it programmatically?`
If you take a look at SPDocumentLibrary it has a reference to ContentTypes. The collection has a delete operation which takes a GUID of the content type as parameter, as outlined by Microsoft here.
dim oDocLib as SPDocumentLibrary
dim oCT as SPContentType
oCT = oDocLib.ContentTypes("Documents")
oDocLib.ContentTypes.Delete(oCT.Id)
Trying out this code raises an exception:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: id
at Microsoft.SharePoint.SPContentTypeCollection.Delete(SPContentTypeId id)
Inputs very much appreciated.
I got the idea to try using the Lists.asmx web service as described here by Microsoft. No luck so far.
You can get around the issue as described here. Set the content type programmatically before you add the items - but that is not really the answer long term :-(
Conclusion: Now it works!!!
I tried to delete the Documents content type found in the web collection AvailableContentType i.e. executing the code:
dim oWeb as SPWeb
dim oDocLib as SPDocumentLibrary
dim oCT as SPContentType
oCT = oWeb.AvailableContentTypes("Documents")
oDocLib.ContentTypes.Delete(oCT.Id)
this fails as described above.
The above code works.
Tuesday, February 20, 2007
Changing default content type in a Document Library
I have searched but couldn't find any information about how to modify the default content type and the sequence of content types in a document library. I found this blog saying it cannot be done.
Conclusion: It is possible - just read this blog.
Sunday, February 18, 2007
SPItemEventReceiver - Mapping end-user events to SharePoint events
- ItemAdding - i.e. adding a new item - ok
- ItemAdded - the new item has been added - ok
- ItemUpdating - updating an existing item
- ItemUpdated - an existing item has been updated
- ItemCheckingIn - about to checkin an item
- ItemCheckedIn - item checked in
- ItemCheckingOut - about to checkout an item
- ItemCheckedOut - item checked out
- ItemDeleting - about to delete an existing item
- ItemDeleted - an existing item is deleted
- ItemUncheckingOut -what does this really mean?
- ItemUncheckedOut - well
If you look at the SharePoint menu for an approved item it'll show the following menu items:

What puzzles me is the "Unpublish this version" menu item? Which event is linked with this operation?
When you check-in an item you can also choose to check-in and overwrite the existing version - thereby damaging the version control.
Conclusion: The ItemUpdating event is the answer! If you inspect the ModerationInformation field of the listitem you can find out the state - and block the Unpublish This Version event.
Saturday, February 17, 2007
List SPEventReceiver Before- and AfterProperties
I found this great posting which explains how.
Friday, February 16, 2007
Custom field type definition in SharePoint
Rather than reinventing the wheel I found this excellent post about the subject.
Tuesday, February 13, 2007
Replace MOSS 2007 built-in Approval Workflow
However, co-existing with SharePoint default content approval seems to be quite confusing - especially to end-users. Both approval workflows appears in the end-user interface as outlined below:

In the example above I have approved the content using the Sample Appoval Workflow from ECM. Notice that the status is Approved for Sample Approval Workflow - whereas it is still pending for the built-in approval workflow.
If approving using the built-in approval buttons the system will notify me during the approval with the following message:

resulting in the following screen:

Now my content has been approved by the built-in approval workflow - whereas it is cancelled in my custom workflow.
Ideas very much appreciated.
Monday, February 12, 2007
Filtering a view based on workflow status
Sunday, February 11, 2007
Replace MOSS 2007 built-in Approval Workflow
In some situations you might wish to replace this approval with you own custom workflow.
The tricky thing is how to accomplish this. While you can easily add new workflows to a list or a content type, I cannot figure out how the existing built-in workflow is replaced automatically.
The DefaultContentApprovalWorkflowId property seems to be solution - the only issue is that it doesn't work as the built-in workflow is not replaced.
Any ideas?
Thursday, February 08, 2007
Linking SPContentType with an Microsoft.Office.RecordsManagement.InformationPolicy
But how do you associate a content class with an Information Policy in code?
The Microsoft.Office.RecordsManagement.InformationPolicy object contains the Microsoft.Office.RecordsManagement.InformationPolicy.PolicyCatalog.FeatureList which is a PolicyFeatureCollection of all available PolicyFeatures installed.
It contains the following features:
- Barcode
- Label
- Expiration
- Audit
as well as my custom feature, RegulatoryDocumentManagement.
Linking a contenttype with an information policy is done through the CreatePolicy interface described at MSDN.
Monday, February 05, 2007
MOSS ItemAdded event - problem
I'm testing the DocIntegrityPolicy example found in ECM toolkit. It provides an example of implementing a custom information management policy. When new items are added to a document library, the ItemAdded event set the value of a certain property to a MH5 hash value of the file in order to ensure integrity of the file. So far so good.
Unfortunately, this behavior introduces a problem in SharePoint. Modifying the content during the upload process results in an error: "The file
Please also refer to this blog for a similar example.
The sequence of events is outlined below:
| 1. Pick the document for upload |
![]() |
| 2. Enter document properties |
![]() |
| 3. Error reported |
![]() |
The good news is the the document is uploaded just fine - with all properties (including the ones added in ItemAdded) set as expected. But why the error?
To make things even more compliacated it turns out that the modification of the list itself during event registration (i.e. adding the new field to the list) raises another issue with the error: "The object has been updated by another user since it was last fetched".
Friday, February 02, 2007
Modifying barcodes in Word - uniqueness
My experience with SharePoint has proved this as we have had a solution for regulatory document management based on SharePoint since 2001.
However, in SharePoint 2007 things are not as easy as we expected. As an example SharePoint build in barcodes - which I have assumed to be unique - can easily be modified by the end-user as sketched below.
First - take a look at the SharePoint document library:

Then we open the file in Word, and access the properties. Note that the barcode value has been synchronized with a Word property - which can be edited manually as sketched below:

When I finish editing my Word document and return to SharePoint document library the barcode has been modified:

The result is fairly disappointing as uniqueness of barcodes cannot be guaranteed by SharePoint.
Thursday, February 01, 2007
MOSS calculated field cannot point to a hidden field
I define a calculated field that points to a hidden field that I have also defined. When I try to add the new field to a site I get the error: "One or more column references are not allowed, because the columns are defined as a data type that is not supported in formulas".

If I remove the
Hidden="TRUE"
from the Field definition in the feature it works just fine.
Any ideas? If I add the field initially with HIDDEN="FALSE" everything works just fine. Afterwards I can change HIDDEN=TRUE without any issues - except from the fact that I cannot use the end-user interface to add a content type with that field in to a document library. But doing it programmatically works just fine - if I remember to toggle hidden in the operation. Strange.
Refer to this news-posting for similar experience.
Wednesday, January 24, 2007
ItemAuditing - fine grained custom auditing for SharePoint 2007
If you wish to develop your own auditing, you can use Windows SharePoint Services 3.0 and the ItemAuditing example. First read the whitepaper and setup instructions - then download the code and try it out. This example is also part of SharePoint Enterprise Content Management (ECM) SDK.
Monday, January 15, 2007
Failed on Start - MOSS workflow
Wednesday, January 03, 2007
MOSS Barcodes not unique

To our disappointment it turns out that SharePoint 2007, MOSS, barcodes are not unique.
SharePoint does not guarantee uniqueness.
Did I miss something?
Check out this blog for information.




