Thursday, 26 November 2009
OT: Copy contacts between C905 and Satio
Friday, 20 November 2009
Move My Site web application in MOSS 2007
Use this guide to add a host header.
Make sure you use the Default zone (or else you can not browse to 'Advanced Permissions' or add web parts).
Update "My Site" settings in the SSP
Recrawl the content source which index the user profile database, or else you will not be able to search for users.
Fix Hyper-V VHD for Virtual Box 3.0.10
The solution was to download VPC 2007 and run the Disk Wizard and compact the VHD (as stated here).
Thursday, 12 November 2009
This Page has been modified since you opened it. You must open the page again
A lot of suggestions how to solve this:
- Add a "PublishingPageLayout" to the elements.xml file.
-Inherit from TemplateRedirectionPage instead of PublishingLayoutPage in the page layout file.
- MSO_PageHashCode is not cleared for detached pages.
None of the above had anything to do with my problem.
In my case it was two problems that throw the same error. I had one event receiver attached to a Pages library that did a call to "RunWithElevatedPrivileges" and did a SPListItem.Update() which caused the page to display the error message. I updated the event receiver according to this article, using the SPUserToken instead.
The other problem was that I had created a page with SharePoint Designer by right-clicking a Page Layout in masterpage and then choosing "New from Existing Page". This created the page but associated it with the wrong content type. Use SharePoint Manager 2007 and you will see that it attached the "Page" content type. Instead I used the web interface to create a new page and checked the content type which now was using "Welcome Page".
This leads me to the conclusion that the articles stating that you need to add a property "PublishingPageLayout" to your elements.xml files when provising (ex: create and upload files during feature activation) files are correct. But in my case I created a new page the wrong way (using SPD and not the web interface).
Friday, 23 October 2009
Failed to create feature receiver object from assembly
Thursday, 8 October 2009
User Profile Import stuck on "Enumerating"
The import cannot be stopped, if the server is restarted then the error doesn´t disappear according to several posts in newsgroups.
So what to do? I checked and double-checked the SSP database and the values in the Profile_Stats, MIPObjects and MIPScheduleJob tables which all had values related to the Profile Import. But nothing that I did could solve the problem.
But then I remembered that the crawler application is based on the good old Indexing Service which means that the registry is also used to store settings. So after some digging I found the solution by changing a value in the registry for the crawler.
Open the registry editor. Browse to “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\12.0\Search\Applications”. Here you will find a key for each SSP in the farm. Drill down to "
I changed the number in the key “CrawlNumberInProgress” to “0xffffffff” and then restarted the “Office SharePoint Server Search” service for the settings to be applied.
The error message disappeared from “User Profiles and Properties” and I could start a new full import to the “User Profile Import”
Disclaimer: remember to backup your registry before making any changes. I am not responsible for your system damages because of any registry errors
Monday, 5 October 2009
Saturday, 26 September 2009
Lifecycle problem with WSPBuilder and EditorPart
In the WebPart class that is created from WSPBuilder the CreateChildControls is triggered from the OnInit method. This has the consequence that the ApplyChanges method in the EditorPart class will be triggered after the CreateChildControls in the WebPart class. My solution was to remove the method call in OnInit and then the ApplyChanges method was firing correctly.
Saturday, 29 August 2009
The project location is not trusted and a zip file
Thursday, 2 July 2009
SPListItemVersion and Dates
Monday, 29 June 2009
Outlook 2007 and HTML email
I was generating HTML e-mails that are sent via SharePoint (SendEmail method). But the e-mail wouldn´t render correctly in Outlook 2007. The e-mail was just cut off in Outlook 2007. I ran the HTML that was generated in validators and making sure that all tags was closed but nothing seemed to make me come closer to the solution.
Finnaly I stumbled across the solution! The problem was that I created a long string without linebreaks (\r\n)!
So my guess is that Outlook 2007 reads the HTML into a pre-definied string buffer and the parses it for output and in this case the HTML I sent was to long for this buffer.
Thursday, 25 June 2009
Unable to break role inheritance
“Cannot complete this action.
Please try again. at Microsoft.SharePoint.Library.SPRequestInternalClass.ResetSecurityScope(String bstrUrl, UInt32 dwObjectType, String bstrObjUrl, Guid guidDoc, Boolean bUnique, Boolean bCopyRoleAssignments, Guid& pguidScopeId, Int32& piError)
at Microsoft.SharePoint.Library.SPRequest.ResetSecurityScope(String bstrUrl, UInt32 dwObjectType, String bstrObjUrl, Guid guidDoc, Boolean bUnique, Boolean bCopyRoleAssignments, Guid& pguidScopeId, Int32& piError) “
Inspired by this solution I just broke the inheritance of the permission levels and inherited it again to fix the issue of not being able to break the role inheritance.
Fast recap:
Browse to http://
Break the inheritance
Enable the inheritance again
// Henrik
Tuesday, 9 June 2009
Another surprise in SharePoint
When updating the field and using SPItem.SystemUpdate(false) (in code) the field don´t get a new entry (as it does when editing a field of this type via the UI). Nope, it simply overwrites the current text and updates the field.
One solution to this is to concatenate the old value with the new, with the drawback that the datestamp will always stay the same until a new version of the item is created.
I removed the append option and did the appending of the field myself instead.
// Henrik
Wednesday, 3 June 2009
"Copy to GAC" problem with WSPBuilder
// Henrik
Thursday, 28 May 2009
"The given key was not present in the dictionary"
It turned out I had misspelled "Number" to lowercase "number" in my field definition file. Amend the line and upgraded the solution and the problem was resolved
WSPBuilder: Unicode characters
"The filename of the CAB file must not contain Unicode characters!"
I had some some swedish characters in my projectfolder name. I removed it and updated the SLN file with the new path. Problem solved.
// Henrik
Monday, 6 April 2009
File attachment and Infopath 2003 SP1
Infopath 2003 provides a File Attachment Control which enables the end-user to select and attach a file to the form. Infopath automatically encodes the file in Base64 and adds a dynamic header in the front of the file. So we wanted to use the "AddAttachment" web service available to post the file, one of the parameters is a Base64 encoded string. Great! Well, the header added by Infopath is also included in the encoding. We only have Jscript or VBScript to use in Infopath 2003 if we don´t want to start to deploy extra code on the clients (which I try to prefer to stay away from) and the support for decoding/encoding files in those languages are not to great.
So our solution is to extract the filename from the header (code below) and the attach a list item event receiver for "ItemAttachmentAdded" which decode the file, removes the header and saves the file again serverside.
Here is the code for extracting the filename from an Infopath Base64 encoded attachment:
dim node
Set node = XDocument.DOM.documentElement.selectSingleNode("/my:myFields/my:FileAttchmentControl")
If(node.text <> "") Then
'typecast the node to base64 as Infopath doesn't do this in node definition
node.DataType = "bin.base64"
'convert base64 node value to binary and store in nodeValue byte array
nodeValue = node.nodeTypedValue
dim convertByteArrayToHexString
convertByteArrayToHexString = ""
For intCounter = 1 to LenB(nodeValue)
convertByteArrayToHexString = convertByteArrayToHexString & Right("0" & Hex(AscB(MidB(nodeValue, intCounter, 1))), 2)
If(intCounter = 100) Then 'Assuming that the header is no longer that 100 bytes
exit for
end if
Next
dim filenameBuffer
dim filename
filename = ""
filenameBuffer = 0
'The length of the filenamebuffer is stored on pos 20-24 (byte), which means 41.47 in Hex and 1 as startpos for Arrays
filenameBuffer = getFilenameBuffer(convertByteArrayToHexString,41,47)
'Read the filename from position (49 to filenamebuffer * unicode - "\n") as end char
filename = getFileName(convertByteArrayToHexString,49,filenameBuffer*4 + 49 - 2)
Function getFilenameBuffer(data,startLoop,stopLoop)
dim k
dim filenameBuffer
for k = startLoop to stopLoop step 2
dim y1
dim y2
dim y3
y1 = Mid(data,k,2)
y2 = CLng("&h" & y1)
y3 = y3 + Int(y2)
filenameBuffer = y3
next
getFilenameBuffer = filenameBuffer
End Function
Function getFileName(data,startLoop, stopLoop)
dim k
dim filename
for k = startLoop to stopLoop step 4
dim h1
dim h2
dim h3
h1 = Mid(data,k,2)
h2 = CLng("&h" & h1)
h3 = Chr(h2)
if(h3 <> "") then
filename = filename & Cstr(h3)
end if
next
getFileName = filename
End Function
Friday, 3 April 2009
SharePoint Designer - now for free
Tuesday, 17 March 2009
Additional user information import with BDC
I use "RevertToSelf" in the ADF which makes the access to the BDC run with the account for the service "Office SharePoint Search Server".
So the account needs "Execute" permissions for the BDC application and all entities, DBDataReader to the SQL Server (or any other read permission) and finally "Manager User Profiles" under "Personalization Permissions". When troupbleshooting this the ULS is yor friend.
Make sure that no other accounts gets permission to the application in BDC, you want to avoid to expose the BDC application to the built-in web parts.
Thursday, 12 March 2009
Moving to WSPBuilder
We have been using STSDev for sometime now, but it feels like the development have stalled and other participants also noted that you need to fix bugs in the tool to make it work in different situations. So we have decided to switch to WSPBuilder instead for coming projects. Hopefully it cuts down the time developers needs to write code in the OM.