Archives

Archives / 2004
  • SharePoint RunTimeFilter and audiences... an investigation

    In the web.config file of SharePoint Portal Server you find the line:

     

    <RuntimeFilter Assembly="Microsoft.SharePoint.Portal, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Class="Microsoft.SharePoint.Portal.Audience.AudienceManager" BuilderURL="audience_chooser.aspx" />

     

    I was wondering what this line was doing here, and what other things you can implement using RunTimeFilter configurations. Fired up Google… nothing. Fired up reflector, and after some disassembling I came to the following (possibly non-valid) conclusions:

     

    Microsoft.SharePoint.Portal.Audience.AudienceManager implements the interface Microsoft.SharePoint.WebPartPages.IRuntimeFilter.

     

    This is an interface in the Windows SharePoint Services namespace, so my assumption is that the runtime filter mechanism is also supported in WSS.

     

    The interface that must be implemented is:

     

    public interface IRuntimeFilter
    {
    // Methods
    [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)]
    bool CheckRuntimeRender(string IsIncludedFilter);
    [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)]
    ArrayList InitializeStrings(CultureInfo cultureInfo);
    [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)]
    bool IsFilterActive();
    [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)]
    string ValidateIsIncludedFilter(string persistedString);
    }

     

    What these methods exactly should do is not documented, so after some disassembling of Microsoft.SharePoint.Portal.Audience.AudienceManager:

    :

     

    public bool IsFilterActive()
    {
      if (PortalApplication.GetContext() == null)
      {
        return false;
      }
      return true;
    }

     

    So this filter is only active if there is a portal context, that means only for SharePoint Portal Server, not for WSS. Makes sense for audience manager because this functionality is only available on the portal.

     

    public bool CheckRuntimeRender(string isIncludedFilterOrg)
    {
    :

    }

     

    This method seams to do an intersection between the selected target audiences for a web part, and the list of audiences the current user is part of. This is probably done for each web part, because targeting to audiences can be applied per web part. This would mean that the RunTimeFilter mechanism is only there for web part filtering: is a web part displayed or not for the current user (anyone?). Intersection computation is done through the stored procedure DBO.Orgle_MatchOrgleList. If there is an intersection the web part is rendered.

     

    public string ValidateIsIncludedFilter(string PersistedString)
    {

    :
    }

     

    Not sure what happens here… I think the PersistedString parameter is the string returned by the selection of the audiences. Probably a concatenation of audience ID's. There is some translation going on to guid's returning a new comma separated string of guid's.

     

    public ArrayList InitializeStrings(CultureInfo ci)
    {
    :

     

    :

    }

    Looks like this function does some initial initialization of a string table based on a culture… which is ignored in the AudienceManager. Still not completely understand the complex way things are implemented in this function, but the result is that the texts to be used for the functionality for targeting (the "Target Audiences" section in the "Advanced" part of web part configuration) is retrieved. Strings like "Target Audiences" and "Select" (for on the button).

     

    The aspx page specified in the RunTimeFilter tag (BuilderURL="audience_chooser.aspx") is hooked up to the button for the selection of the audiences.

     

     

    If you look at the hooked up pages for audience selection in the current implementation, you see the following code:

     

    <%@ Page language="C#"

    Inherits="Microsoft.SharePoint.Portal.SitePage,Microsoft.SharePoint.Portal,Version=11.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>

    <%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

     

    <html dir="ltr">

    <head>

    <SPSWC:PageHeadTags runat="server" TitleLocId="AudienceChooser_PageTitle_Text" OldExpires="0" PageContext="SiteAdminPage"/>

    <SPSWC:ExternalHtmlResourceElement runat="server" HtmlElement="Script" FileContext="SharedScript" FileName="audpicker.js" />

    </head>

    <body>

    <form runat="server" ID="AudienceChooser2" method="POST" action="Audience_Chooser2.aspx">

    <Sharepoint:FormDigest runat="server" id="FormDigest" />

    <SPSWC:PageLevelError id="AudiencePageLevelError" runat="server" />

    <SPSWC:AudiencePicker id="AudiencePicker" SupportRuntimeFilter="true" runat="server" />

    </form>

    </body>

    </html>

     

    With the actual real implementation in the server control

    <SPSWC:AudiencePicker id="AudiencePicker" SupportRuntimeFilter="true" runat="server" />, meaning the class: Microsoft.SharePoint.Portal.WebControls.AudiencePicker

     

     

    A simple test reveals that only one entry of RunTimeFilter is allowed in the web.config. This is a pity, it is not possible to implement your own web part display filtering on top of the existing one. If you really want to this can probably be easily done by implementing a new filter and call in this filter multiple other filters. On the other hand: if you want to change this, you probably want to change this completely.

     

    I never was really impressed by the way that audiences were implemented. Can be that I don't really understand the intended way of usage;-) Some of my problems with it are (incomplete list):

     

    • Audiences are precompiled, so not "real-time"
    • Audiences are rules based on profile properties (coming from active directory), often there is already a company directory available in large organizations, and replication of all the needed information to the profile is not always the way you want to go
    • Due to the the restricted possibilities in the audience definitions you can make I always end up with way to many audiences. For example: if you have an audience definition depending on the country and office you are in, you have to define country*office audiences, instead of targeting to a country, and/or an office

     

    On top of my head the only places audiences are used are in listings and in web part targeting. Web part targeting can be overruled by implementing your own RunTimeFilter. For listings and the targeting in here you probably need to reimplement all the portal web parts showing listings because you have to implement your own filtering on listings.

     

    How it works with listing I did not investigate yet. Maybe a topic for a next weblog entry!

     

    If anyone has more info on this stuff, please reply!!!

     

    Disclaimer: all made assumptions are speculative, based on disassembling and (I hope) some common sense.

  • SharePoint lists... did you know?!

    I use SharePoint a lot... as a developer. Ok, our intranet runs on SharePoint, and I know my way around as a user (I did build a large part of it) but most of the time I REALLYwork with SharePoint I'm diving in the object model, programming against it. A few days ago I was scoring use-cases together with collegue developers for a huge SharePoint implementation for a customer. In those use-cases there was a description of some sorting functionality in a list that we thought would take a long time to implement. We called in the analist who wrote the use-case to blame him for writing way to difficult use-cases, and he looked at us as if we were really stupid. And he was right.

    As a developer you sometimes forget to look at the functionality that is available just out of the box. One of those things is the standard functionality that is available in the SharePoint lists. Most people knowledgable of SharePoint will think: what is your point? Didn't you know this? Why do you bother me with this: read the f*cking manual. For those other people who forgot to read the manual, I would like to enumerate some things about lists that are "out of the ordinary".

    Did you know that:

    • Lists based on the "Links" list have a "Change Order" option in the menu bar of it's views that allow you to reorder the list items
    • Lists based on "Tasks" and "Issues" have an "Assign to:" field that is a lookup to users in the UserInfo list for the web the list is on. This list contains all users that ever visited the list. What does this mean:
      • Users who did not visit the web yet are not in the list
      • Users who ever visited the web site, but whom's account is now removed is still in the list (Should be like this: task/issue can be assigned to user that is now gone, if you edit the task/issue to change something, the user shouls still be in the list, otherwise it must always be reassigned on edit.)
      • System accounts that crawl the list are in the list (we filter those out using the MacawSharePointSkinner)
    • Lists based on "Issues" have an option to sent the "Assigned To" person a notification e-mail (General Settintgs ->Email Notification) on changed item or when ownership is assigned.
    • Lists based on "Issues" have a "View reports" action with reports to track issue trends
    • Lists based on "Contacts" have "Export Contact" functionality in the menu of an entry that created a vcard file
    • Lists based on "Contacts" can "link to Outlook", this creates a read-only contacts list in outlook, with in each item a link to update the contact. This list in outlook stays up to date automatically
    • Lists based on "Contacts" can import contacts from the address book
    • Lists based on "Events" can "link to Outlook", this creates a read-only calendar in outlook, with in each item a link to update the event. This list in outlook stays up to date automatically
    • Lists based on "Discussion" support threading on items, and that this list sucks for discussions (in my opinion). We rewrote the new/edit/view pages to se things like the thread you are replying on, the complete thread of a single discussion item, see the newest discussion thread first. This makes it usable.
    • List items can have multiple files attached
    • There are no events available on lists, only on libraries. When I asked Mike Fitzmaurice about this on the PDC 2003 he answered that it was due to lack of time. There was a big launching customer who needed events on libraries, so this was implemented.

    All this functionality is somewhere available in the list definitions, so if you define your own template you can combine all this functionality!!

    Maybe I will write some more on the libraries (Forms/Documents/Pictures) in the future. Who knows...

    Are there any other hidden gems out there that is good to know about... let me know in a response on this post.

  • WSS logging level

    A few weeks ago I had a problem with WSS. Really strange things happened, but nothing was written to the eventlog. After some searching I found the logging file written by WSS, but the amount of information logged is really minimal. SPS has much more extensive logging, see manual, but WSS specific things are even on an SPS server logged to the WSS logging mechanism.

    After some searching I found on http://wss.sharepointtips.com/pages/III%20-%20Administration.aspx on Q: 04 the following text:

    "STS 1.0 had logging to C:\WINNT\system32\LogFiles\W3SVC1 (and W3SVC2, W3SVC3 etc.)

    WSS has (RTM) a configurable registry key that you can set to control how verbose the logging is.
     
    Critical events will be logged to the application log in the event viewer.
     
    The stsadm.exe comman line utility uses a log file called stsadm.log which is stored in the temp directory of the person running this utility.
     
    The log for the w3wp process (w3wp.log) is stored in the windows temp directory."
     
    As stated in this text, the logfile can be found in c:\windows\temp\w3wpMSSharePointPortalAppPool.log (in my case). This name depends on name of the identity pool your SharePoint site is running under.
     
    Especially the sentence "WSS has (RTM) a configurable registry key that you can set to control how verbose the logging is." puzzeled me. We opened a call to Microsoft Support or more information on this and got back the following answer:
     
    Location to change the LogLevel
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\6.0
    Change the LogLevel to Value Data of 9

    The Loglevel is by default set to 0. If you look in this container you also find the key MaxLogSizeKB. I assume this specifies the maximum log file size, don't know what happens if this size is reached.

    More logging is available after setting this registry key, not overwhelming, but more than it was before! Strange those kind of things are not just documented....

     

  • NAnt: concatenate filenames

    I'm currently constructing some NAnt build scripts for our continuous integration build environment for SharePoint development. One thing  I want to do is that on the development server is that I want to install compiled web part assemblies and their references assemblies using the InstallAssemblies tool. This tool has in the command line version the option to install a set of assemblies using the "assembly:x,y,z" parameter. This parameter needs to have the assembly files separated by ','. I concatenate those filenames using the following code:

    <project name="concat.test" default="concat.filenames" basedir=".">
     <target name="concat.filenames" description="concatenate filenames">
      <property name="concatenated.filenames" value=""/>
      <foreach item="File" property="filename">
       <in>
        <items>
         <include name="files\*.*" />
        </items>
       </in>
       <do>
        <property name="concatenated.filenames" value="${concatenated.filenames}${filename},"/>
       </do>
       <!-- now remove the trailing ',' -->
      </foreach>
      <property name="concatenated.filenames" value="${string::substring(concatenated.filenames, 0, string::get-length(concatenated.filenames) - 1)}"/>
      <echo message="${concatenated.filenames}"/>
     </target>
    </project>

    Result: [echo] C:\projects\NantTest\files\file1.txt,C:\projects\NantTest\files\file2.txt,C:\projects\NantTest\files\file3.txt

  • SharePoint custom solutions: Storing extra data in SharePoint

     

    When developing SharePoint solutions there is often the need to store extra information at certain levels in SharePoint. In this blog I enumerate some of the possible levels where extra information can be stored:

     

    WSS list: just add an extra field, easy!

     

    Web: SPWeb object has a property called… properties. This property is of type

    Microsoft.SharePoint.Utilities.SPPropertyBag. This property bag is an extension of the .Net framework class System.Collections.Specialized.StringDictionary, a hashtable with the key strongly typed to string. In this property bag you can store any object by name. Don't forget to call the Update method on this SPPropertyBag to persist your modifications to this property bag to the database. Because information is stored persistently to the database, I assume the object stored in the property bag must be serializable.

     

    Site: It is sometimes still difficult to differentiate between what is a site and what is a web in SharePoint terms.  From the manual: "The SPSite class represents a collection of sites on a virtual server, including a top-level site and all its subsites." This collection of sites are called the webs. Each SPSite has at least an SPWeb connected to it, you can get this web using the OpenWeb() method. So there is no need to store extra data at the site level, store it in the corresponding web as described above.

     

    Area: The Portal area's have a fixed set of extra properties that can be assigned. Have a look at the Bool1..Bool3, DateTime1, Int1..Int3, NText1, NVarChar1..NVarChar4 properties (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/spptsdk/html/cArea.asp). Use those properties to store extra information, and don't forget to call the Update method after setting those fields! This information is quite restricted, but can be used for fast querying on area's. Each area also has a connected SPWeb accessible through the Web property, where the property bag can be utilized as described above.

     

    Area Listing:  The Portal area listings extensibility is patterned along the same lines as the area. Again we have properties Bool1..Bool3, DateTime1, Int1..Int3, NText1, NVarChar1..NVarChar4 (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/spptsdk/html/pAreaListings.asp).

  • SharePoint search querying documented..

    There was already some information available on the SQL Search syntax of SharePoint Portal Server Search.

    Some of this documentation was for the old version of SPS2001, but did still apply:

    Deep Traversal of SQL Full-Text Extensions, by Margriet Bruggeman, Nikander Bruggeman (http://www.asptoday.com/Content.aspx?id=1410). This link is on a pay-site.

    Now there is some new documentation available: Microsoft SharePointPSSearch SQL Syntax (Preview). Have a look at: http://www.microsoft.com/downloads/details.aspx?familyid=d6a10783-a4e4-4463-8444-f88be48760b3&displaylang=en

    Quote:

    This download includes a preview of the reference documentation for Microsoft SharePointPSSearch the SQL Syntax used for Microsoft SharePointPSSearch Full Text Search with Microsoft Office SharePoint® Portal Server 2003. Look for updates to this documentation in the Microsoft SharePoint Products and Technologies 2003 Software Development Kit (SDK).

  • Great SharePoint Explorer tool

    Have a look at http://www.ontolica.com/English/SharePointExplorer/Home.html for a great explorer tool with the following capabilities (quote from website):

    WSS Features

    • View and modify the object properties of Virtual servers, Sites, Lists, List templates, Document Libraries, Files, Folders, List items and List fields.
    • Delete site collections, sites, lists, files and file versions.
    • Download files from document libraries.
    • View the content of any text file.

    SPS Features

    • View and modify the object properties of Virtual portal servers, Portal sites, Areas, Keywords, Listings, Catalogs, Content Sources and Scheduled Tasks.
    • Delete content sources and search schedules.
    • Import/Export list of content sources including search schedules. Makes it easy to copy the list of content sources to another SPS installation.
    • Start/Stop crawling.
    • Really good!!
  • MacawSharePointSkinner, a tool for non-intrusive modifications to SharePoint

    UPDATED: VERSION 1.0.0.1 IS RELEASED. See http://weblogs.asp.net/soever/archive/2006/01/12/435105.aspx for more information.

    I did mention (http://weblogs.asp.net/soever/archive/2004/06/30/169988.aspx) before a tool I was working on, the MacawSharePointSkinner.

    What does the MacawSharePointSkinner? I will not try to repeat myself, so I copied the introduction from the documentation of version 1.0.0.0:

    Welcome to the MacawSharePointSkinner. MacawSharePointSkinner is a tool designed to enable non-intrusive modifications to the visual and functional design of SharePoint. The tool can be used for both Windows SharePoint Services 2.0 and for Microsoft Office SharePoint Portal Server 2003. Actually, it can be used for any web site utilizing the ASP.NET technology.

     

    One of the major issues that we encounter in the implementation of SharePoint within organizations is that organizations want modifications to the visual and functional design that are almost impossible to implement without a major overhaul of the standard files and templates provided with SharePoint. SharePoint is constructed as a kind of standard product that is best used out of the box. Some design can be applied by specifying themes (for team sites) or by modifying CSS stylesheets (for the portal). The possibilities here are limited however, and changes to the actual HTML that is rendered results in changes to hundreds of the standard files.

     

    When implementing customer requested visual modifications, one of the big problems that we encountered in making extensive modifications to the files and templates delivered with SharePoint was that the rendering of the same HTML is implemented differently by different pages. Some pages contain the actual HTML that is outputted and can be easily modified. Other pages contain server controls that do the rendering of the same HTML. These pages are almost impossible to modify. Another problem is that modifications must often be made to hundreds of pages.

     

    The approach that MacawSharePointSkinner takes is that it lets SharePoint render the final HTML, and just before this HTML is sent to the browser MacawSharePointSkinner makes the needed modifications to this HTML. This is done in such a way that no modifications are needed to the internal files of SharePoint, so it is non-intrusive. Another advantage is that it will survive service packs (although the output HTML may change in a service pack!) and template modifications.

     

    MacawSharePointSkinner is implemented as an HttpModule that provides functionality for powerful replacements in the HTML output rendered by SharePoint.

    Where can it be downloaded? At the below mentioned GotDotNet workspace. This is also the place to report bugs and discuss about the MacawSharePointSkinner, although I will also blog on it in this weblog. The workspace also contains the license under which the MacawSharePointSkinner is released. This can be summarized as: "You can use this Software for any commercial or noncommercial purpose, as long as the MacawSharePointSkinner is not marketed and sold as if it is your own application."

    Please let me know if it works for you. It is fun to hear something back on all the effort you make to produce a tool. If you have any questions, please drop me a message!

    DOWNLOAD AT: http://www.gotdotnet.com/workspaces/workspace.aspx?id=3ed68681-ae28-4d33-8c36-403e6af7fa11

  • SharePoint usage blob parsing

    Usage data can be retrieved from an SPWeb by calling GetUsageData(). Problem is that only 2000 records for the site are returned. There is also a GetUsageBlob RPC call that returns all information, but the format of the blob was not documented. Until now.

    At Microsoft downloads: Windows SharePoint Services: Usage Blob Parser (http://www.microsoft.com/downloads/details.aspx?FamilyID=8ed64398-4992-47cb-9075-afec32060986&DisplayLang=en)

    Quote: "Use this sample download to retrieve the daily and monthly usage BLOBs that are processed from the front-end Web servers in a deployment of Windows SharePoint Services. The Usage BLOB Parser sample demonstrates how to use the GetUsageBlob RPC method to return usage data and how to parse the data."

    It is a pity the code is in C++, but the file usagedata.cpp contains the info about the format of the blob data.

    I could not get the tool working even on my local portal due to unauthorized exceptions. The info should be enough however to parse the data in a c# program doing the GetUsageBlob RPC call.

  • VS 2005 website Framework settings trouble + solution

    I installed VS 2005 on my development  machine where I also run SharePoint. This did not work. My SharePoint did not function anymore because the 2.0 framework was now parsing the web.config file and pages of SharePoint, and compatibility is not 100% yet.

    To get this working again (for SharePoint and other applications), go to IIS Manager, and on each web site click properties, and under the ASP.NET tab you can specify which framework to use for this web site.

  • Setting the default target frame for links in HTML (HTML + SharePoint)

    Never too old to learn a neat trick:

    <html>
    <head>
    <base target="_blank">
    </head>
    <body>
    <a href="
    http://www.macaw.nl">macaw</a>
    </body>
    </html>

    Now all links open up in a new window!

    Found this trick when working with FrontPage on a SharePoint page. When you select page properties, you can set the default target frame in the “General“ tab, which generates the base target code made bold above.

     

  • SharePoint course by U2U

    Last week we had a very good onsite SharePoint developers course for 10 of our developers given by U2U (http://www.u2u.be), a Belgian certified trainingscenter on .Net technology. We had a (slightly modified) version of the course USPPS (http://www.u2u.be/CoursePage.aspx?CODE=USPPS) that comes with their own written training material. We slightly modified the training schedule because within our organization we do already a lot of development using SharePoint and wanted to go a little bit further in the course. The training was given by Patrick Tisseghem (read his weblog at http://radio.weblogs.com/0126624/), a great guy and good trainer who is very knowledgable on SharePoint, amongst a large range of related technologies like the new IBF framework that U2U is ging to promote in EMEA.He isn't the kind of trainer that just follows the book, he can help you out with your real-life SharePoint issues. Really recommended, and their on-site deal is really good! Soon a next course will follow (yes we do a lot of SharePoint development! See http://www.macaw.nl/xq/aspx/id.1065/qx/ShowDocument.aspx for more information)

  • WebDrive: Accessing SharePoint document libraries through drive letters

     

    Aren't you annoyed by the fact that you can only access SharePoint document libraries from the newer versions of Office (XP, 2003), and not from applications like Photoshop (before version 6), textpad, autocad etc?

     

     Wouldn't it be great to have some drive-letter mappings to the document libraries you are working on, and that every application can access the documents in this document library on all versions of Windows?

     

    I just stumbled across a tool called WebDrive from South River Technologies that does exactly this and much more! I can now access my favorite document libraries through drive-letters on our intranet that works over SSL. I love it.

     

    This is a great solutions for all those organizations still on old OS's, old versions of Windows and using applications that no nothing about the WebDAV protocol. Costs: $39.95 per user, multi-user packs and site licenses available)

     

    Have a look at http://www.southrivertech.com

     

    PS: use WebDAV protocol, and remove encoded characters from url, so %20 must be replaced with a space.

  • Getting started on XSD

    UPDATE: My excuses to VS.NET 2003, I just did not find some of the features of the schema editor and xml editor. Joshua Flanagan thanks for pointing this out!

    Although I'm working with XML for years and years, have used DTD's and schema's and on a global level know quite well where to apply which technology I never really wrote my own XSD. Most of the time someone else in the project did this part.

    OK, so I was constructing my first schema for a configuration file format for a tool I'm working on: the MacawSharePointSkinner (a tool to modify the looks of SharePoint without having to dig into the almost non-existent SharePoint way of changing the SharePoint looks).

    I started out with VS.NET's schema designer. This sucks big time It is “sub-optimal“

    • Terrible sub-optimal documentation
    • no possibility to set attribute values like minOccurs and maxOccurs through the designer F4 -> properties
    • no functionality to derive a schema from an existing XML file
    • no functionality to generate a test XML document based on the defined schema
    • no functionality to generate documentation for the schema
    • no functionality to check my text XML document against the schema Automatically done when referencing the schema

    Yesterday at TechEd Europe I walked into Altova XmlSpy in the exhibition hall, just a few hours after a stressful night with VS.NET. I explained what I needed, and they demonstrated their tool. I loved it! Today I fired up the full-functional demo copy and tried to get started.Still some trouble but I did get much further.. my schema is finished! Love the tool

    What I missed in XmlSpy is good documentation on XSD itself, for example I could not get the following defined:

    :
    <foo a=“x“/>
    <bar a=“x“>u</bar>
    <bar a=“y“>v</bar>
    <bar a=“z“>w</bar>
    :

    Where foo and bar can be used mixed.

    • xs:sequence defines a fixed sequence
    • xs:all does only allow minOccurs=0 maxOccurs=1, not maxOccurs=unbounded

    It is just not possible to define this in schema (as far as I know), the tools says that something is wrong when trying those alternatives, but don't tell you why...

    After searching for some good documentation for starters I came up with the following links to be read in sequence, although the first article was good enough for me to finish my schema:

  • Backup and restore of SharePoint Portal Server 2003

    I got the following question through e-mail, and I thought I try to reply here, so if i'm talking nonsense other people can correct me:

    I'm sorry to be bothering you, but I don't know what else to try and our team is reaching the peak of frustration . We're trying to recover a Sharepoint Portal Server 2003 on another machine (read «move it to a new machine» - preserve the same machine name, same IP address, etc, since it's purpose is to substitute the old one), we successfully recover the portal using the Sharepoint Portal Server Backup and Restore Tool, however when we try to access the portal site we receive this message:

    «Cannot complete this action.

    Please try again.»

    The SharePoint Sites seem to be restored ok and seem to be working (Team Sites, Document Workspaces, etc). - BUT the user logins fail to work however, only the username «Administrator» is working.

    When we try to access the PORTAL we receive the error describe above («Cannot complete this action .» - see the attached screenshot), on every page, meaning we can't even take a peek at the site settings, since those also return the error.

    We don't know what else to try . and all the documentation we find is vague and doesn't give a step-by-step how-to which could point us to «what the hell are we doing wrong?!» (this includes the «SharePoint Products and Technologies Resource Kit Chapter 28: Disaster Recovery (Preview)» http://www.microsoft.com/downloads/details.aspx?FamilyID=60bd8fe5-804e-4a49-83db-ea41beb80f3b&displaylang=en ).

    I've read somewhere that you might be required to recreate «some registry keys», but can't find any documentation that states which ones .

    I don't know if this information might be of any use, but we have both webpart's installed using the stsadm.exe tool (.cab files) and webpart's (.dwp) uploaded directly to the WebPart Library via the Site Settings on the original Portal Site that we are trying to move to a new machine. We have recreated by hand the Active Directory domain controller on the new machine as well, and double checked all the user and group informations.

    My reply:

    You probably had the situation that you did rebuild the complete machine that also acted as the only active directory domain controller, and that you recreated the users by hand. This means that all users got new SID's (unique ID's). If you had another AD controller, the new AD domain controller would synchronize existing account using correct SID's. The Administrator account does ALWAYS have access to SharePoint as a portal administrator (has all the rights). What you can try is to empty the UserInfo table in the XXX_SITE table, and probably recreate all security in your portal (maybe groups will remain, so if you are using groups and cross site groups you are lucky, you only have to add the correct account to these groups again!). Please note that this are all assumptions, and that I have no idea if it will solve your problem or maybe completely ruin your installation. I hope that other people who have more insight in this topic will respond as well!

  • AlternateHeader magic to style your SharePoint pages

    Both in the portal and in team sites the underlying functionality is managed by an SPWeb. SPWeb functionality uses many generic ASPX pages defined in the folder Local_Drive:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\TEMPLATE\LAYOUTS\1033. All pages in this directory look at the SPWeb property AlternateHeader. This property can be used to set the URL for an alternate .aspx page to use for rendering the top navigation area in SharePoint pages. Each ASPX page in this directory contains code to determine if the default header must be rendered or the specified header. it contains code like:

    <%
    string alternateHeader = SPControl.GetContextWeb(Context).AlternateHeader;
    if (alternateHeader == null || alternateHeader == "")
    {
    %>
    <TR><TD WIDTH="100%" COLSPAN="3"><!--Top bar-->
    <TABLE class=ms-bannerframe cellSpacing=0 cellPadding=0 width="100%" border=0>
    <TBODY>
    <TR>
    <TD vAlign=center noWrap><IMG id=onetidHeadbnnr0 alt=Logo src="/_layouts/images/logo.gif"></TD>
    <TD class=ms-banner id=HBN100 vAlign=center noWrap width="99%"><!--webbot Bot="Navigation" startspan--><?XML:NAMESPACE PREFIX = SharePoint /><SharePoint:Navigation runat="server" LinkBarId="1002"></SharePoint:Navigation></TD>
    <TD class=ms-banner>&nbsp;&nbsp;</TD>
    <TD class=ms-banner style="PADDING-RIGHT: 7px" noWrap><SharePoint:PortalConnection runat="server"></SharePoint:PortalConnection></TD></TR></TBODY></TABLE></TD></TR>
    <%
    }
    else
    {
        Server.Execute(alternateHeader);
    }
    %>

    Normaly this AlternateHeader is empty, but all SPWebs underlying the areas in the portal have this property set to PortalHeader.aspx, and all MySites have this property set to MySiteHeader.aspx. These files can be found in the folder Local_Drive:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\TEMPLATE\LAYOUTS\1033.

    PortalHeader.aspx:

    <%@ Page language="C#"     Inherits="Microsoft.SharePoint.Portal.SiteAdminPageNoBrowserCheck,Microsoft.SharePoint.Portal,Version=11.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>
    <%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <tr> <td colspan="3" width="100%">
     <SPSWC:PageRedirectControl runat="server" />
     <SPSWC:ExternalHtmlResourceElement runat="server" HtmlElement="StylesheetLink" FileContext="SharedStyle" FileName="ows.css" />
     <SPSWC:ExternalHtmlResourceElement runat="server" HtmlElement="StylesheetLink" FileContext="SharedStyle" FileName="menu.css" />
     <SPSWC:ExternalHtmlResourceElement runat="server" HtmlElement="StylesheetLink" FileContext="SharedStyle" FileName="sps.css" />
     <SPSWC:CustomCSSResourceElement runat="server"/>
     <SPSWC:PageHeader id="PageHeaderID" runat="server" PageContext="SitePage" ShowTitle="false" HelpID="NavBarHelpHome"/>
     <div class="ms-phnav1wrapper ms-navframe"> <SPSWC:CategoryNavigationWebPart runat="server" id="HorizontalNavBar" DisplayStyle="HorizontalOneLayer" /> </div>
    </td> </tr>

    MySiteHeader.aspx:

    <%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <SPSWC:PersonalSpaceNavigationResponse runat="server" />
    <tr><td colspan="3" width="100%">
     <SPSWC:PersonalSpaceNavigation runat="server" />
    </td> </tr>

     

  • PDC 2003 presentations... the new location

    There was a location where the PDC 2003 presentation were available: http://microsoft.sitestream.com/PDC2003/Default.htm. Was... they are gone now. You get the inspiring message: This content is no longer available online. No link to where it is available now...

    Have a look at: http://msdn.microsoft.com/events/pdc/agendaandsessions/sessions/default.aspx and you get happy!

  • SharePoint data view web part not something FrontPage specific

    UPDATE:I made a “typo“ in the title... My original title was “SharePoint data view web part not something SharePoint specific“, but of course I meant “SharePoint data view web part not something FrontPage specific“...

    The data view web part is not something from SharePoint, it's functionality is already available on any standard SharePoint installation. Only the web part definition (DWP file) is not available on a SharePoint installation. See the DataViewWebPart class in the object model: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/spptsdk/html/smpcDataViewWebPart.asp for more information on the data view web part.

    This web part is one of the most powerful web parts available in SharePoint, and FrontPage 2003 unleashes it's power by providing the functionality to create views on databases, web services, XML files and the lists and libraries defined in SharePoint. FrontPage also provides the functionality to convert list views into XSLT views by converting the CAML defining the list view to XSLT code. See also http://weblogs.asp.net/soever/archive/2004/03/10/87295.aspx for more information. FrontPage is only a tool to do this conversion and configuration of this XSLT, but after that the created web part is in no way depending on FrontPage. The actual rendering is performed in the object model.

    It is almost impossible to do the creation and configuration of a data view web part by hand. FrontPage is an invaluable tool to create and configure the initial data view web part. Problem is that FrontPage contains some “features“ that make it impossible to modify a data view web part on a source that returns a lot of items. You can increase this performance during development by ensuring that only a few items are returned in the query defined by the data view web part, for example by setting a filter through the Data Source properties:

    Data Source Properties view in FrontPage 2003

    For example reduce the list of items to only items posted by myself. Don't forget to remove this filter after you are ready with developing your view!

    You can also modify the data view web part through the default web interface to modify properties in the web part tool-pane. If you don't need to do configuration as available through the FrontPage interface this approach is sometimes even easier than using FrontPage. See http://weblogs.asp.net/soever/archive/2004/05/14/131551.aspx for more information on enabling editing of list view pages and list item edit pages through the web interface.

     

  • Make SharePoint List pages editable through web interface...

    Currently doing a lot with the pages in a SharePoint list. I'm trying to improve the discussion list functionality (going quite well!). One of the problems is that the discussion list contains 288 items, and that I'm trying to modify XSLT data views, converted from initial list views (in CAML) using FrontPage which takes ages even in “code“ view of FrontPage. Seems like it's trying to rerender all 288 items on typing each character! It would be great if it was possible to modify the data view web part using the web interface, like you can do in “normal” SharePoint pages. And yes... this is possible after adding some “magic code”.

    Change the following code in the view pages (AllItems.aspx, ...):

    ....<SPSWC:RightBodySectionSearchBox runat="server" SearchResultPageURL="SEARCH_HOME" FrameType="None" WebPart="true" __WebPartId="{D3BCAB36-897B-4BAF-A947-1C71A63112F3}"/></td></tr> <tr style="padding-right:1px">......

    To

    ...<SPSWC:RightBodySectionSearchBox runat="server" SearchResultPageURL="SEARCH_HOME" FrameType="None" WebPart="true" __WebPartId="{D3BCAB36-897B-4BAF-A947-1C71A63112F3}"/></td></tr>
       <tr> <td nowrap align="right" class="ms-vb"><WebPartPages:SettingsLink runat="server"/> </td> </tr>
       <tr style="padding-right:1px">

    Change the following code in the item pages (DispForm.aspx, EditForm.aspx, NewForm.aspx):

    ...<SharePoint:ListItemProperty Property="Title" MaxLength=40 runat="server"/></a><!-- --></td> </tr></table>...

    To

    ...<SharePoint:ListItemProperty Property="Title" MaxLength=40 runat="server"/></a><!-- --></td> </tr> 
    <tr> <td nowrap align="right" class="ms-vb"><WebPartPages:SettingsLink runat="server"/> </td> </tr>
    </table>...

    And now add &mode=edit after you URL of the list page and you get the well none “Modify Shared Page” functionality and you can add extra web parts and configure the existing web parts like you are used to.

    You need to add these modifications using FrontPage or directly in the list pages in the list template.

  • Search for weblogs.asp.net

    There is currently no search available on weblogs.asp.net, but that's no problem. The world's best search engine can be used:

    In google type: site:weblogs.asp.net sharepoint and you find everything about sharepoint in all weblog entries, posts etc.

     

  • Strange implementation of groups in SharePoint portal listings

    Every portal area has a  “Portal Listings” list. A strange list that is managed in another way than all other lists. No properties can be changed or removed like with ordinary lists. The list cant be deleted like ordinary lists.The list is managed in a separate table in the database for optimal performance (no additional column mapping needed, all fields are available “as is” in the table).

    For each portal listings list in an area groups can be definied. Initially there are three groups available that cannot be removed. The first group is “Highlight”, the second and third groups are “General” and “Expert”. All these groups can be renamed. Strange thing however is the “Highlight” group. You can rename the “Highlight” group, but in the “Grouping and Ordering” view you have the options in the actions list of a listing to “Highlight” a listing or “Remove Highlight” from a listing when the listing is in the “Highlight” group, even if you renamed the “Highlight“ group. When you choose “Remove Highlight”, the group is set to the second group. It is not possible to apply highlighting on top of a chosen group. This would be the best behaviour; highlight items in a given group. Strange behaviour...

  • SharePoint & FrontPage... know how to search

    People often think that I know a lot. Wrong. I know how to search. And Google knows the answers on my search questions!

    For example: currently I am busy working on SharePoint in combination with Frontpage data views. After some initial searching I found out that there is one guy from Microsoft (I think he does testing of the XML data part in Frontpage) who answers lots of questions, and his answers are good. So now I want to know more about approaches I can take, issues there are etc. Fire up Google and search for:

    "John Jansen" Microsoft SharePoint

    Don't only search web, there are just a few results... search in Groups (the newsnet news groups) and be amazed by the wealth of information that appears...

  • CAML2XSL.XSL... is this where the magic happens?!

    When working with Frontpage against SharePoint sites, you have the great possibility to convert a list view to an XSLT dataview, resulting in a block of XSLT code that can be modified. What happens seems to be pure magic, but now I found a file C:\Program Files\Microsoft Office\OFFICE11\CAML2XSL.XSL that seems to do the trick! List rendering is defined in CAML format, and this XSL transformation script can convert this CAML into corresponding XSLT. Great it works this way because we have some trouble with this sometimes (the transformation contains some bugs) so now we can fix this script. If anyone has more info on this.... please let me know!

  • PDC Longhorn & Whidbey hands-on labs available for download...

    This info is already available for a long time, but didn't know it! Might be useful if you want to do some experimenting.

    PDC Longhorn hands-on labs: http://www.microsoft.com/downloads/details.aspx?FamilyID=d573714a-2b6b-4187-a64c-3d408893b9b1&DisplayLang=en

    PDC Whidbey hands-on labs: http://www.microsoft.com/downloads/details.aspx?FamilyID=2567f00f-09a4-4c72-8b23-72f51317e694&DisplayLang=en

    Longhorn seems to be available now for MSDN subsscribers... didn't check it out yet.

    All presentations of the PDC can be found at http://microsoft.sitestream.com/PDC2003/Default.htm

  • WinFS and the ReiserFS filesystem...

    There are more filesystems that go (or already are) into the same direction as WinFS: have a look at the ReiserFS at http://www.namesys.com.

    Oke, it is for Linux, but an interesting read.. and of course really interesting for all the people out there running on Linux.

    Note: Especially the "Future vision" document is interesting when comparing to WinFS.

    See also: http://www.newsfactor.com/story.xhtml?story_title=The_Secret_World_of_ReiserFS&story_id=23157&category=databases

  • IE client side Javascript and htc inclusion problem...

    Today we had the strangest problem wit a piece of javascript that was including a htc as follows:

    <html xmlns:xp>
     <head>
      <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
      <link type="text/css" rel="stylesheet" href="skins/quicktime/skin.css">
      <link type="text/css" rel="stylesheet" href="container.css">
      <?import namespace="xp" implementation="xpc.button.htc">
      <?import namespace="xp" implementation="xpc.gallery.htc">
      <?import namespace="xp" implementation="xpc.moduledef.htc">
      <?import namespace="xp" implementation="xpc.module.htc">
      <?import namespace="xp" implementation="xpc.panel.htc">
       :

    In our test code, a html file containing the above code, everything worked just fine. Time to integrate in our server side code!

    After integration we were getting a strange error message about a missing object. After hours of debugging and creating completely similar minimal files with one derived from out test html file and one derived from our server generated code we were clueless.

    Time for WinDiff, and to our surprise the server generated file started with four strange characters!

    The problem was that the htc files and test html file are all in ANSI, while the server generated code is UTF-8. Problems occur when you import htc files in ANSI format in a UTF8 format html file!!!

     

  • Testing BlogJet - with picture

    I have installed an interesting application - BlogJet. It's a cool Windows client for my blog tool (as well as for other tools). Get your copy here: http://blogjet.com

    "Computers are useless. They can only give you answers." -- Pablo Picasso

     

    My son Scott his best wishes for 2004

    Oke, the text above is inserted by BlogJet, but I first have to try it out. One of it's great features is that you can post on .Text blogs (which I'm testing now).

    Besides this it is simple to use, and you can insert pictures (like the one above of my son Scott) that are automatically uploaded to an ftp directory of your choice. I was exactly looking for this!

    Oke... lets try it out. My first blog entry with BlogJet!

  • OneNote and blogging

     I'm wondering what all the HTML markup like FONT and <SPAN style="FONT-WEIGHT: bold">OneNote</SPAN> for bold is doing in a OneNote entry while I only use bold, italic and some simple markup. This reduces the usability of it to write entries for my web log. I wrote a big one with OneNote and used the Word stripper that removed ALL markup, and I had to do the markup by hand again. Goes faster than loosing all your text when editing entries through the web interface like I did already a few times, but still… not the way to. I tried the NewsGator .Text plug-in. Works great, but the only problem I had was that it uses a different time than the server, resulting in my post not showing up in the weblogs.asp.net main page because it was on posting already too old (time problem)! Anyone on the fastest, easiest most powerful way of blogging here, with keeping markup in your produced text?

  • Organizing your digital information

    I am one of those disorganized people that have their documents and source code scattered over multiple computers, often multiple hard disks per computer, and some (incomplete) backups on CD-ROM, floppy and tapes. Most of the time I forget to make backups, so I lost the source code to numerous projects I started (and sometimes even completed!), and numerous documents with "bright" ideas. Every hard disk crash is a great cleanup of a loads of hours hard work.

    I am a bit used to this chaos because it is the same with all my non-digital paperwork and stuff like photo's, legal documents, bills etc. in my personal life! Advantage of non-digital stuff is that it is somewhere in your house, and your house does not burns down as often as your hard disks… ;-) For now I don't really bother about the non-digital stuff… I will fix that when I'm retired!

    Time to get organized a bit on the digital stuff… but how?

    Using my web log is one way… Although I find it fun that other people are reading my web log entries, and that I even get a reaction sometimes, it is also a great way to collect information that does not get lost. I sometimes even get back at my own info when I'm using Google to find something… And now pray that Scott has a good backup procedure for weblogs.asp.net!!!

    I really like the Wiki that I did set up at my company using OpenWiki (www.openwiki.com). A great place to just start typing and dump down your ideas, links you collected, code snippets etc. and see others complete your information and add their own ideas and code. Not so long ago we introduced our new incarnation of our Intranet based on SharePoint Portal Server 2003. A great system, especially for collaboration in teams. Problem is that we now have two system that have some overlap, and everyone seems a bit 'lost" about where to put which information, resulting in a slow down of information sharing within our company.

    Problem is that I have a lot of my own stuff that I want to organize, especially in the following categories: links, quick notes, photo's, personal documents, work/technical document, source code, my website, my addresses and my mobile phone from which I lost my collection telephone numbers more than once;-).

    A short requirement analysis of the features I need on the different types of content, and some brain dump on how the "problem' could be solved:

    Links:
    I would like to have the following data available about links: title, url, description.

    On every computer I log on to I want to have the same collection of links (in my IE favorites), and if I add a link, it must be replicated to all computers I work on.

    A colleague of mine is working on such a system, it works really well. All your favorites are synchronized/merged through a web site, and automatically updated on all your computers linked to the internet.

    Another implementation is PowerMarks from www.kylon.com. I did not spend much time with it yet, but what I did not like is that a linear list of all my favorites is displayed, and that added links are not automatically synchronized to my favorites.

    Another great feature would be to have both public and private nodes in the favorites tree, and the ability to have merges of the favorites trees of different people. The personal links should have different types: personal links that stay at only this computer, personal links that are replicated only to my personal computers, personal links that are replicated to all computers I work on (including company computers).

    Problem with the IE favorites is that they are so bare. A description that is displayed as a tooltip is not even supported.. The tooltip is there but... it displays the title of the favorite and the URL!?!.The information could be stored in the files that are constructed for your favorites… they are in the format of a Windows INI file and those files don't bother about additional info that other tools could pick up. For some info on the content of favorites files (couldn't find much info at Microsoft): http://www.cpcug.org/user/clemenzi/technical/ie/IE_Favorites.htm, http://vbnet.mvps.org/index.html?code/internet/inetfavinfo.htm.

    If you look at SharePoint Portal Server and the areas… this is actually a really big favorites system. Could be fun to make a synchronization system to your favorites for fast access of information. Might even be a better approach than the area browser I'm currently creating in Flash… hmm.. another project!

    Enough about links… on to…

    Quick notes:
    I really like the Wiki concept (http://c2.com/cgi/wiki). I have been thinking about setting up my personal Wiki, just to keep track of all my personal notes, brain dumps, initial starts of new posts, articles etc. A great way to collect knowledge over time. Problem is that a Wiki must be centrally hosted. I don't have a public website where I can host applications, I can only have static pages. Besides the hosting problem that can be easily overcome by throwing some money at a hosting company, or hosting a Wiki at a Wiki farm (http://c2.com/cgi/wiki?WikiFarms), it is difficult to take your Wiki (offline) with you (although a system like OpenWiki can store everything in a simple access database that is "portable").  Another approach would be to use OneNote… actually, I'm writing this story in OneNote, and I actually like it a lot!!! OneNote saves each section (the tabs at the top) in a separate .one file in you’re My Documents/My Notebook directory. Problem is that I want to be able to work with my Notes on all computers I work with….

    There could be multiple approaches to this problem. For example by copying the files to a central location that could be reached from all my computers. This could either be the computer at work, or my internet provider where I can have storage up to 50MB (supports ftp, rsh). The computer at works is maybe the best approach (250 MB storage), because this is also the place where I am most of the time. There must be a way to synchronize the My Documents directories… I actually never looked into this, but I assume this happens automatically. I have a VPN connection to work, so this should be no problem. Another approach could be a piece of software written by "A frustrated man" as he calls himself: http://www.waka.dk/Blog/PermaLink,guid,cf191c12-1062-486a-9480-df727521b19b.aspx. I did not look into this yet.

    Problem is that there are more files that probably need to go the same route, so the "My Documents" route seems right.

    But…. At my company we are working with SharePoint, and we probably are trying to replace file shares with SharePoint (s is the vision of Microsoft), so "My Documents" should probably end up in "My Site". This will work fine for Office documents, but how about all those other software that does not know a thing about WEBDAV and the web services to communicate with SharePoint.

    Any ideas? Maybe some software to synchronize My Documents with My Site, but what if file shares are not supported anymore, where do I place My Documents? Locally? No more support for roaming profiles? I never looked into this, so just call me stupid if I oversee something.

    Photo's:
    This is a difficult one. Easiest thing is just somewhere in the file system. I now have them in directories with the date that I copied them from my digital camera to my hard disk. The hard disk is big enough (250GB external drive), but I can never find the photo I am looking for… I want relationships! I want to organize my photo's over more than one axis (the folder structure). I want…. WinFS!!!!! Any good practices on this one?

    I am currently looking into Macromedia Contribute 2, together with templates made in Macromedia Dreamweaver MX 2004 to create my website… these tools could be , but those tools are not usable to get Wiki like potential.

    Personal documents, work/technical document, source code:
    This is an interesting one… I have so many 'My Documents" directories, on both my 5 different installed operating systems (either Windows 2000, Windows XP or Windows 2003), on swappable disks (I have two hard disks with my laptop, one with two operating systems, one with one operating system). Besides that I have LOADS of "project" directories scattered over all those hard disks and backups…. I'm lost (and so are my documents and code). I would prefer to have one single system to store all this documents, with it's storage preferably on a server accessible over http(s). Probably the best place: the "My Documents" at the company. Should I use Visual SourceSafe for this? I hate the fact that you can only have files checked out once (well you can check out multiple times, but not much support for merging). SourceSafe 2004 seems to be better in this, but it comes with Whidbey, I don't want Whidbey on all my systems, there is not much documentation yet, it's still very beta, and you shouldn't trust this job to beta software. Microsoft itself uses software from www.perforce.com. Looks great, can also handle binary data, is free for up to two users. This seems a problem when working from more than one computer, where you should have a different user for each computer so you see which computer has which files checked out. Licenses for perforce are pricy, at least for personal use. And… does perforce work with Visual Studio 2003? It also needs a server running, and I don't let my home computer running when I'm at work an vice versa. I could run a server at home and a server at work, pointing to the same database on the file system, located in the My Documents at work… Are you lost already? I am!

    My website:
    Because I can only host plain HTML files, no ASP.NET etc, and only have ftp and rsh access to it I'm currently looking into Macromedia Dreamweaver MX 2004 and Contribute 2. Seems like a powerful combination. Create the temples in Dreamweaver, add content with Contribute. I will let you know how this works out.

    My addresses:
    Currently in the Exchange Server 2003 at work. Works great, so seems the way to go. Now also using Plaxo (www.plaxo.com) to keep my contacts up to date… interesting software, integrates perfectly into Outlook. Have a look at it!

    My mobile phone:
    Hmmm… this one should be easy, install the Nokia software that came with the phone and sync the phone numbers with something like Outlook. Problem is that this is a manual action, has to be done on my laptop (is the only one with infrared) that has no contact to the internet when I'm at home (never got it working over my null-modem Ethernet connection to my desktop that is connected to my ADSL Ethernet modem, I have two network cards…. Anyone?).

    As you can see: a lot of ideas, nothing concrete yet, and a lot of work to do. If you have any ideas or pointer on how to get all (or part) of this accomplished…. let me know!

  • C# reference

    Thanks to my new colleague Martijn Hoogendoorn who will start tomorrow, but is already actively sharing information within our company: a great pointer to a hyperlinked, searchable C# language specification. Check it out at http://www.jaggersoft.com/csharp_standard/index.htm. See also the other information at the homepage of Jon Jagger. Good piece of work and very useful.

  • SharePoint Portal Server 2003 and Windows SharePoint Services capacity planning

     There is now some information available on capacity planning for SharePoint Portal Server 2003 and Windows SharePoint Services.

    The documentation I could find was:

    ·        Capacity Planning for Windows SharePoint Services (Microsoft, TechNet)
    Interesting capacity and scale limits, must read

    ·        SharePoint Portal Server Capacity Planning (MSD2D, Brien Posey)
    Limited interest, only single server capacity computations

    ·        The Intranets_Planning.doc file in the Microsoft Solution Accelerator for Intranets, version 2.0, November 25, 2003 (Microsoft, Download Center)
    Interesting read, most interesting for large configurations

    ·        Capacity Planning Guide for SharePoint Portal Server 2003 Beta, based on Beta, not linked anymore (Microsoft, SharePoint assistance)
    Interesting read, most interesting for smaller configurations (info might be out of date)

    ·        Microsoft SharePoint Portal Server 2003 Performance Summary, info by HP, mostly included in the Intranets_Planning.doc file pointed out above.

    ·        Example HP ProLiant Server Configurations for Deployment of Microsoft SharePoint 2003 Products & Technologies, info by HP
    Interesting read, also describes small configuration (2 servers) with what hardware you exactly need

    Another interesting read in this context is the description of Microsoft’s own implementation of their Intranet based on SharePoint products and technologies:

    ·        Deploying SharePoint Products and Technologies for Enterprise Collaboration (Microsoft IT Showcase, HTML, Microsoft TechNet)
    MUST READ!! Irritating that TechNet does not have it’s docs in Word or PDF format… after some searching:
    www.sharepointcustomization.com/resources/whitepapers/ OTG%20Sharepoint%20Deployment.doc
    Also have a look at: Hosted Solution Facilitates Team Collaboration (Microsoft IT Showcase)


  • SharePoint Portal Server 2003 and the Research feature of Office 2003 and Internet Exporer 6

    A collegue of mine (thanks Carlo!) pointed out a standard feature of SharePoint Portal Server 2003: you can search your Portal through the Research pane in Office 2003 and Internet Explorer 6. There is actually not much information on this topic available. This information is for example NOT documented in the SharePoint Portal Server User help and Administrators help (some work to do for the next version of the documentation, you guys at Microsoft!!!!). In most online Microsoft documents you don't find much more than: Integration in the Microsoft Office System Research and Reference Pane: Microsoft Office System users can search a SharePoint portal site from the Research and Reference Pane I can't find anything on the “Reference Pane”, I think it is the same thing as the research Pane. You can find it under “Tools - Research...” menu in your Office 2003 applications. Funy thing is that they find it really important if you look at the default configured shortcut: Alt-Click. Microsoft offers even a whole one day course on the topic: http://www.microsoft.com/traincert/syllabi/2016afinal.asp

    I did some Googling, but the only real documentation on how to configure it can be found in the whitepaper “Microsoft® SharePoint™ Portal Server 2003 - Specific Arabic Features“, a must read! I love those screenshots! Have a look at http://www.microsoft.com/middleeast/arabicdev/dotnetservers/SharePointPortal/wpapers2003.asp#37 for the whole document.

    In short (shameless copy of their information):

    1. Microsoft Office System users can search a SharePoint portal site for Arabic data, from the Research and Reference Pane. Microsoft Office System users can search a SharePoint portal site from the Research and Reference Pane.


      Figure 22 - Share Point Portal Server 2003

      Through the Research options dialog box, the user can add SharePoint Portal as a service for searching. To enable this service, please follow the following steps:
      1. Launch any Office component (Word, Excel, etc...).
      2. On the Tools menu, click Research.
      3. In the Research task pane, click Research options.
      4. Add research services, click Add Services.


        Figure 51 - Share Point Portal Server 2003

      5. Add a Microsoft Office SharePoint Portal Server 2003 site, type http://your root directory/_vti_bin/search.asmx.(Example: http://Share/_vti_bin/search.asmx.)
      6. Click Add. The service is automatically enabled for searching, and it will appear in the Search for list the next time you open the Research task pane.
      7. Select the portal name and write an Arabic word to search for (Example ãÇÌÏ), then press the Search icon


        Figure 52 - Share Point Portal Server 2003

    This can also be configured in your Internet Explorer 6: View - Explorer Bar - Research...

    If you like to know more about developing for the Research pane, check out the following articles and the SDK:

  • Game development using the .NET Compact Framework

    As soon as I got my hands on Everett, the beta of VS.NET 2003, I dived into the Compact Framework... great to be able to develop your applications within VS.NET for such a small formfactor as the Pocket PC. One of the things I looked at was the possibilities for game development for Pocket PC, not that I am twisted enough to be able to develop a game (trust me, you need to be a twisted to come up with bright game ideas, I worked with some of these guys!), I'm just very interested in graphical applications.

    Of course there is the possibility to use the Forms library to do all kinds of graphics (see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetcomp/html/netcfgaming.asp for an example), but the real performance you will only get using direct access to the screen buffers. What you really want is the PocketPC variant of DirectX... it's a pity: only the DirectPlay part is available for communication(http://www.microsoft.com/windows/directx/default.aspx?url=/windows/directx/downloads/directplay.htm). On the Pocket PC you have GAPI (http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=d9879b0e-4ef1-4049-9c61-e758933d84c4), a very simple game API with only the basic functions available for screen buffer access.

    On top of GAPI some nice game development libraries are available like PocketFrog (http://pocketfrog.droneship.com/) and GapiDraw (http://www.gapidraw.com, works on multiple platforms). Another really interesting initiative is by a Dutch company called Overloaded (www.overloaded.com) who developed the Overloaded Game Foundation SDK, and a whole program to develop games and publish it with them in participation and get revenues. Their website seems down (http://overloaded.pocketmatrix.com) so I don't know if their initiative survived. See http://www.mobigeeks.com/e/forum/showthread.php?s=8b025d293af64be37828ab90eb2dde1c&threadid=191 for more info.

    Problem with all these libraries is that you need to be a hardcore C++ programmer who knows everything about WIN32 (although Overloaded created a really nice framework containing all you needed to write games). I have bin there, but I really don't want to go back. I love the speed of development with C# and managed code. I tried to get interop between C# and GAPI working, but I just did not have the time to really dive into it.

    Today I found some links to articles describing just that a .NET layer on top op GAPI with a lot of extra functionality. I did not have the time yet to read it all and try it out, but it looks very promissing... Is there a future for game development for the Pocket PC using .Net? Have a look at:

  • Web client side programming... how to make life easier

    Last weeks I had to do some extensive client side programming in good old Javascript, and I used a set of tools that made life a lot more bearable than it was in past development where I had the feeling I was completely working in the dark. My last client side project was a tree menu navigation web part for SharePoint portal server 2001 (have a look at: http://spsutil.sourceforge.net), and did I get frustrated not knowing what was going on...

    OK, the set of tools I used this time (they deserve some plugging!):

    Instant Source, from Blazing Tools (http://www.blazingtools.com). Great tool to look at the code in your browser: both the code that came from the server as the current state of the DOM. The “element under cursor” view is also very useful. 30 day full test version available for download.

    PrimalScript 3.1 from Sapien (http://www.sapien.com). The best script editor I have ever seen (did also use it for ActionScript 2.0 editing, I love it!). It interprets the MSDHTML and uses the found info for code completion, it knows your Javascript functions and shows a list of them as children of your file in the file list, it can find the declaration of functions... I was working on HTC files (HTML components, IE specific) and I had to add the HTC extension to HTML file types to get it working.

    VS.NET 2003 from Microsoft, great for debugging!!!

    HTML debugger in Javascript (http://www.bitesizeinc.net/project/jsDebugger - thanks Daniel) I just stumpled into this one, check it out, looks really promising!!! Catches Javascript bugs in a meaningful way, and it allows you to explore the DOM visually and even change the values. Client side programming and debugging becomes fun again..

    There are even unit test frameworks (http://www.jsunit.net/, look also at http://www.xprogramming.com/software.htm if you are interested in unit testing) available!!

    The power of client side code is overlooked by most programmers, especially in the current .Net era with ASP.NET server controls where programmers don't look at the resulting code thrown at the browser. All those postbacks... all those HUGE pages (OK, gzip compression solves a problem here, but is OFF by default in many browser configurations. IE sets it OFF by default within the intranet zone!). Would't it be great if web applications were written like Microsoft Outlook Web Access, the online “Outlook” client  (great work!).

  • SharePoint 2003 (WSS+SPS)... and keeping yourself 'documented'

    Things are moving fast in the SharePoint world... especially with respect to documentation. Before you know it the documentation of SharePoint is updated. It is a huge product, and on release it was quite clear the documentation wasn't finished.

    The documentatation that came with the product is out of date, the SDK's that you downloaded are probably out of date as well.

    To get the latest version of the regular documentation (for administrators and the user help) keep an eye on:

    http://www.microsoft.com/downloads/results.aspx?productID=353C4E9D-9E78-4435-A360-01BB7F540D17&freetext=&DisplayLang=en

    For the developers out there, keep an eye on the online documentation in MSDN that is the most recent:

    http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28001891

    This is the entry point to all the developer information. It is also possible to download the SDK's from the first given link, but it will always be behind the online documentation. Problem is that search on MSDN just does not work, so for finding info fast I still prefer the downloadable help files. If this information does not “satisfy” me I check out the online documentation.

    Note that in the online documentation you have to go to 'SharePoint Products and Technologies'->'SharePoint Products & Technologies (2003)' -> 'SDK Documentation'. Here you find two folders 'Platform' and 'Applications'. WSS (Windows SharePoint Services) is the platform, SPS (SharePoint Portal Server) is an application build on top of WSS.

    If you missing info on the search XML query syntax, download the Office 2003 Research Service Software Development Kit (SDK) at the following link: http://www.microsoft.com/downloads/details.aspx?familyid=d3fc8129-63f7-43b5-8d99-de4058ade0ec&displaylang=en. This SDK provides documentation and samples on (quote):

    The Microsoft® Office 2003 Research Service Software Development Kit (SDK) provides you with a set of Web methods for developing information services that are searchable with the Microsoft Office 2003 Research feature. The Research feature is available in Microsoft Office Word 2003, Microsoft Office Excel 2003, Microsoft Office Outlook® 2003, Microsoft Office OneNote™ 2003, Microsoft Office PowerPoint® 2003, Microsoft Office Publisher 2003, Microsoft Office Visio® 2003, and Microsoft Internet Explorer.

    But it also provides the schema of the XML query language used in the SharePoint Search webservice (and through the object model) and documentation about the XML query language.

    The topic itself (writing web services that can be used in the Research feature) is also very interesting! Did you ever check it out in Internet Explorer 6? Select menu 'View' - 'Explorer bar' - 'Research'. How sweet would it be if you could search for sites, people and content in SharePoint.... 

  • SharePoint Portal Server 2003 with anonymous access

    We are currently investigating the possibility of enabling anonymous access on SharePoint Portal Server 2003. This works by creating an additional web site as described in the Microsoft Office SharePoint Portal Server 2003 Administration Guide. What we are planning to do is to have users that are not in the corporate active directory access the web site that is configured with anonymous access. Users that are in the corporate active directory access the website configured with integrated security. The anonymous access website will have a “login” button available that switches to the integrated security website with code as simple as:

    javascript:window.location.href = window.location.href.replace(”anonymous.website.com”, “integrated.website.com”);

    This switches to the new site, and if the user is in the corporate active directory, he does not have to login, otherwise you get a login box. Some of users that are not in the corporate active directory but have to be able to contribute content cab be put in a special active directory group to enable them to log in.

    One important thing is that if you have custom developed code, you have to go one extra step clearly described in the following Microsoft Knowledge base entry: http://support.microsoft.com/default.aspx?scid=kb;EN-US;830424

  • Blogging on Flash in a .Net oriented weblogs environment...

    Due to the great integration of Flash MX 2004 with web services that can be developed on the .Net platform, the usage of XML within Flash that can be provided by ASP.NET pages and numerous other possibilities of using Flash a a rich client connected to .Net based technology on the server side, it is my feeling that blogging on Flash might be of interest to the .Net community. Let me know if I'm wrong... and I might shut up!

    I'm very interested in the view of other people in the .Net community on the usage of Flash in the creation of Rich Internet Applications, and the experiences with it. Please let me know in a comment!

  • Flash MX 2004... rich Internet applications...?

    Two weeks vacation in Italy are a terrific opportunity to dive into technology that you know could be interesting, but have never time to look into during “normal” life. This Christmas vacation was dedicated to the possibilities of Flash MX 2004 to build rich Internet applications. As a Microsoft tools user I already looked with much interest to the possibilities of the usage of Windows Forms applications within IE and the future developments that Longhorn will bring to us in the arena of web based applications. Problem with these technologies are the fact that you need to run Windows and have the .Net framework installed on the client PC, or the fact that although looking very promising release will be far in the future. The possibilities of Flash MX 2004 and the great penetration of Flash (> 500.000.000 downloads!?) on multiple operating systems (Linux, Windows, Mac) and multiple form factors (pocket PC, mobile telephones etc.) did get me interested and I did write my first little custom component that provides a treeview of the SharePoint Portal Server 2003 area structure connecting to a custom SharePoint webservice (written in good old c# ofcourse). A lot of fun!  I will cleanup my code and post it soon to show you the power of the new ActionScript incarnation (internal programming language of Flash) based on Javascript.