Saturday, November 13, 2004

Office Information Bridge Framework (IBF)

Office Information Bridge Framework (IBF) is a new solution that provides a standardised way for developers to integrate data from enterprise applications (CRM,HR, ERP,...) into Office. IBF is an example of a service oriented architecture in which your LOB applications are connected to Office through a webservices layer. At the clientside IBF leverages the smart tag and smart document functionality of Office 2003 Professional.


Links
  • Download IBF

  • MSDN technical whitepaper about IBF

  • Technical overview IBF

  • Video about IBF on OfficeZealot

  • How to Build Solutions with the Information Bridge Framework
  • Office for Small Business Management

    Office for Small Business Management has been announced. This version
    will includes the familiar Microsoft Office 2003 programs as well as an updated version of Microsoft Office Outlook 2003 with Business Contact Manager and Microsoft Office Small Business Accounting—a new, comprehensive financial management package. So also take a look at http://msdn.microsoft.com/isv/technology/sba/ I guess that when Microsoft will get the localization issue right, it will even become popular worldwide. But don't put your bets on it yet , II overheard saying that Microsoft seems to think that localization is the difference between English UK and English US, ... :-)

    Friday, November 12, 2004

    MSCMS - Disabling delete for authors

    The last couple of months I have been doing a lot of Microsoft Content Management Server (MSCMS) development and I think it definitely allows you to do some cool stuff. For those of you who don't know, MSCMS allows users without any html knowledge or special tools to publish content to a corporate website while maintaining a common look and feel and supporting an approval process for all of your published content.


    The product has however some shortcomings and last week the functional analyst of our project stumbled on one of them. For every posting you can define an approval process with authors, editors and moderators, so after an author creates a posting, the editor first approves the layout and then the moderator approves the content (This is a very quick overview). So for about every change, you need to go through this approval process EXCEPT for deletion of postings


    The obvious thing todo to disable the delete for authors was to add an ASP.Net panel control around the delete section in the defaultconsole.ascx and put it to visible false when a user had no editor or approve rights. Well this doesn't seem to be very simple:

  • Microsoft.ContentManagement.Publishing.CmsContext.UserCanApprove : you can't use this one, since it is a site-wide check, if the user has somewhere in your site editor or moderator rights, this property will return true.

  • Microsoft.ContentManagement.Publishing.CmsContext.Posting.CanApprove : seemed to be promising, it already checks the rights for this specific rights, but unfortunately it also takes into account the postingstate of the mode, so when your posting is published it will return false even when the current user has sufficient rights to approve

  • Microsoft.ContentManagement.Publishing.CmsContext.PostingApprovers() : returns a Microsoft.ContentManagement.Publishing.UserCollection with all the approvers, but it also takes the posting state into account.



  • So basically I'm stuck, anybody any ideas....

    Gotdotnnet CMS code samples and more

  • MCMS Plumtree Integration Pack v.2 CODE
  • Building MCMS 2002 sites without Visual Studio.NET
  • XHTML compliant MCMS placeholder
  • Switch placeholders based on custom property
  • RSS aggregator placeholder control and a little more explanation about it on Stefans blog.

  • Multi-site Development with Microsoft Content Management Server 2002 on Windows XP Professional

  • Blog posting about CMS revisions
  • Thursday, November 11, 2004

    SOA - Part 2

    I had a little spare time so I decided to run through all the blog postings which I had marked for review or follow up in RSS Bandit. I found these interesting postings about SOA
  • David Chappell on why SOA will help business-oriented software reuse

  • What is SOA? and his follow up posting SO != WS

  • It seems that Sam Gentile did a talk about SOA for Boston.NET. Download the slides over here.
  • Tuesday, November 09, 2004

    What I'm reading.

    The books I'm currently reading:
  • SharePoint Products and Technologies Resource Kit (ISBN 073561881): an invaluable resource if you are interesting in doing SharePoint development

  • XML Web Services and Server Components Development with VB.Net - Study Guide exam 70-310 (ISBN 007222653) : I know, I should probably read the C# version, but hey I found this one at a book sale

  • Developing windows-based applications - Self paced training kit (ISBN 0735615330) : The last couple of years I have mainly done webdevelopment so it is probably time to get up to speed in winform development as well

  • Building Portals, Intranets and Corporate Web Sites using Microsoft Servers: Nice overview of the different server products, not very technical
  • Sunday, November 07, 2004

    Service Oriented Architecture (SOA) and other stuff....

    One of the hottest topics lately seems to be Service Oriented Architecture and how to implement it. But it is also a major source of confusion and I think that for most developers, SOA is still a big mystery. The main problem seems to be that we have to translate these high level concepts to low-level code, because in the end we just like to write code. However I still think that SOA is an important concept that every developers needs a basic understanding about, so the next couple of weeks I'm going to try to write some posting about SOA, providing some summaries of presentations that I saw and links to interesting sites and blogs.

    Lets start with the basics, what is SOA? At PDC 2003 Pat Helland gave a presentation about SOA. The key message was the following:

  • A service-oriented architecture is one where an application is cut into pieces called services

  • These services are invoked by messages, these messages are containers for information which is transmitted from one service to another. Since services only communicate with messages we create explicit boundaries for all our application building blocks.

  • Services allow for loosely coupled relationships, the only thing that needs to be defined is the contract for the message. Integration is based on message formats and exchange patterns, not on classes and objects.

  • Services are policy based and autonomous

  • Definitely check out Pats blog if you want to read more interesting stuff...



    A couple of months later I saw a presentation from Clemens Vasters, he mainly talked about the same concepts but things got a little clearer. There are only 2 types of services, message producers and message consumers. The messages flow through "pipelines", a pipeline is a sequence of services and each service transforms the message. He also gave some concrete tips :

  • The message should be XML based and not binary

  • Use ASP.Net webservices and extend these through WSE to add routing, security,...

  • Do things you have already been doing : isolate out business and data tiers, use serviced components, use stored procedures for data...

  • Think assynchronous


  • Now if you want to know more about it, check out:
  • Architect exchange

  • MSDN .Net architecture center

  • Rich Turner about "When to use ASMX, ES or Remoting"some nice guidelines about how to actually implement all this stuff.

  • Selling Service Orientation and Indigo

  • MSDN TV: Service Orientation and Today's Technologies

  • Dolmen is hiring

    The Belgian company I work for, Dolmen, is looking for new people, check out our job event and the profiles that we are looking for. By the way, also take a look at the blogs of two other Dolmen employees, Ken and Bart

    Is it going too fast?

    Everything just goes a little too fast... people who didn't even start developing soo long ago, in the mid of the nineties like me, have seen like 3 different development environments - VS 6, VS.Net 2002/2003 and VS.Net 2005 -, 3 different server OS - NT4, Windows2000 & Windows 2003 -, 4 versions of Office - 97,2000,XP and 2003 -, ... Well I guess you get the point... What do you think about it?

    Blogger went down

    Yesterday Blogger suddenly crashed and gave the great error listed underneath... I just love a nice stacktrace.... ;-)

    java.lang.RuntimeException: Unable to load blog object for blogID: 7753577
    at com.pyra.blogger.UserBlog.getBlog(UserBlog.java:176)
    at org.apache.jsp.blog_pyra._jspService(blog_pyra.java:589)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
    at com.pyra.blogger.frontend.PyraJspDispatchPipe.invoke(PyraJspDispatchPipe.java:83)
    at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
    at com.google.servlet.pipe.StatsPipe.invoke(StatsPipe.java:64)
    at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
    at com.google.servlet.pipe.PendingRequestPipe.invoke(PendingRequestPipe.java:31)
    at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
    at com.google.servlet.pipe.HttpRedirectPipe.invoke(HttpRedirectPipe.java:43)
    at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
    at com.pyra.blogger.frontend.IdentityCookiePipe.invoke(IdentityCookiePipe.java:137)
    at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
    at com.google.servlet.exceptionhandling.ExceptionHandlerPipe.invoke(ExceptionHandlerPipe.java:99)
    at com.google.servlet.pipe.ServletPipe.invokeNextPipe(ServletPipe.java:118)
    at com.google.servlet.pipe.LocaleContextPipe.invoke(LocaleContextPipe.java:134)
    at com.google.servlet.BaseServlet.doGet(BaseServlet.java:89)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)

    .... and so on.

    Friday, November 05, 2004

    How to create a webpart in ASP 2.0

    A couple of days I wrote a blogentry referring to a thread about the differences between webparts in SharePoint and ASP.Net 2.0. Well for those of you who want to dive right in check out this article about How to create a WebPart in ASP.Net 2.0

    Thursday, November 04, 2004

    More Office 12 details ...

    Microsoft Watch is a great site, and it regularly posts some hot stuff such as this one Office 12 details begin to trickle out. The first beta will be available in august 2005 and a final release is planned for july 2007. As part of the Office Server lineup we can also expect a new version of both CMS and SharePoint as well as some new server products - one for Excel and one for InfoPath. These are truly exciting times we are living in ;-)....

    Wednesday, November 03, 2004

    Citrix Metaframe 3.0

    The last couple of days I worked at a customer who was using Citrix Metaframe Presentation Server 3.0, it was the first time that I saw this product and I have to admit that I'm impressed. It enables user to start their everyday applications from within a browser environment. It was great to see that the web interface used ASP.Net and the nice thing is that you can completely customize it. If you run into problems, definitely check out the Citrix support site .



    After developing the UI we deployed it to a production server on which a previous version of Metraframe was running as well so we didn't do an install but copied the directory with the files and created the necessary virtual directories. Everything worked except the ICA files were not correctly handled. It seemed that we still associate the ICA extension with the aspnet dll in IIS.



    After installing ASP.Net, we however noticed that some of the users which were still using the Citrix 1.5, had problems logging into the web applications. They got a very strange error "error while encoding a gif file". It seems that while installing ASP.Net some userrights were removed. If you encounter this error, just give the anonymous user access to the nfuseicons directory

    Integrating SharePoint and Content Management Server

    One of the most posed questions lately seems to be how do we integrate SharePoint and Content Management Server. People often start working together on documents in SharePoint and later want to publish this document in an easy way to CMS (That authors can't work together on a CMS posting - because of the locking principle - is definitely a missing feature in CMS). With the release of SharePoint Connector for Content Management Server (Previously codenamed Spark) in february 2004- some things were solved.



    In short the connector enables the following :

    • Content from CMS can be displayed in SharePoint webparts

    • Documents in SPS can be exposed to MCMS managed sites

    • Integrating SPS search with the content in CMS



    Miscellaneous links

    Tuesday, November 02, 2004

    Monday, November 01, 2004

    SharePoint in only 28 steps ;-)

    This SharePoint Developer in 28 steps from Gregory is definitely a great posting,... I'm wondering how much time you would need to master all this stuff...

    SharePoint multilinguage features

    When you are living in a country which has 3 official languages like me - yes we have Dutch, French and German in Belgium - multilanguage definitely becomes an issue when doing a portal implementation. Unfortunately multilanguage is not a very strong feature in SharePoint. Windows SharePoint Services allows you to choose a different language at the moment of site creation when you install language packs, once the site is created it is not possible to switch the language anymore. For SharePoint Portal Server it is even worse, it only support the language of the SharePoint installation, so if you want to have a French Portal you have to install the French version of SharePoint Portal Server. There are however some articles which can guide you, but better multilanguage functionality is definitely something I want to see in the next version of SharePoint. One of the things I noticed which were very hard to find where the way of working of thesaurus files in SharePoint.The best documentation is found in the SPS 2001 Resource Kit and still seems to be correct. Another interesting document is the one on Technet which describes the international features of SharePoint 2003.



    I tried out the feature of expansion sets in SharePoint 2003 and how it works with files which have different languages and different formats. SharePoint uses thesaurus files to enhance its search functionality. The thesaurus allows you not only to search for the search term, but also for synonyms and other matching words, like words with the same stem. You can expand the thesaurus by adding tags to the thesaurus file(s). For example, when a user searches for ‘apple*’, you want to automatically search for ‘pomme*’ and ‘appel*’ as well so that documents containing the French and Dutch translations of the word ‘sugar’ will be added to the search results. This is an example of stemming. An expansion set for the word "author" is for example that it searches for documents containing "writer"



    There are different thesaurus files for every language, these are xml files - e.g. tsneu.xml is the neutral thesaurus file,tseng.xml is for English, tsnld.xml is for Dutch. The easiest way to test it, is to modify the xml files at local_drive\Program Files\SharePoint Portal Server\Data\Applications\Application UID\Config and then restart the service Microsoft SharePointPS Search.
    I added the following lines to the xml files
    <expansion>
    <sub weight="0.5">author</sub>
    <sub weight="0.5">writer</sub>
    </expansion>
    Well it seems that depending of the file type a different thesaurus file will be used, this happens because of the way how iFilters are implemented.
    Then I tried the search for different file types :

  • A plain text file : Uses tsneu.xml and none of the language specific ones

  • A word document : Works with tsenu.xml (english) and also with tsneu.xml (neutral). So for office documents the language is actually recognized

  • PDF files don’t seem to use the thesaurus files at all. I tried it with iFilter 5.0 and it didn’t use any of the thesaurus files. It seems that iFilter 6.0 has been released last week so I'll try that one later



  • Miscellaneous SharePoint links:

    Thursday, October 28, 2004

    Musings about InfoPath

    I presented some workshops around SharePoint technologies the last couple of months and one of the things that I always include is a quick overview and some demos of InfoPath . It seems that this is still one of Microsofts best kept secrets - both developers and IT decision makers seem to have little or no knowledge about this tool. For those of you who haven't heard about it, InfoPath is a tool for designing electronic forms and the coolest thing is that underlying it uses nothing but XML.


    I demo it in SharePoint workshops because of the excellent way it integrates with SharePoint through form libraries but you can also use it without SharePoint. Mostly I start off with the Microsoft Office InfoPath 2003 HL7 CDA Demo. It is easy and understandable, just as a demo should be.
    One of the major downsides of this product is however that every user needs a complete installed version. I think it would be much more popular if there would be a developer edition (to actually create the forms) and a freely distributable runtime for users who only use InfoPath to fill out forms. The InfoPath Viewer application that Mark Bower created is a good start but it is not enough especially because InfoPath is not standard available in all Office 2003 versions, only in the Professional Enterprise version.


    Yesterday I saw another Technet presentation - this time about InfoPath and SharePoint, the presentation was done by Jelle Druyts and Yves Kerwyn. Microsoft positions InfoPath as "The smart client for webservices". Well it seems that it is still lacking some features to be a really smart client. The first missing feature is support for different devices - there's for example no InfoPath for Pocket PC. The other feature is missing Offline support. Microsoft says that InfoPath supports offline scenarios through the use of Outlook outbox but this is not really an ideal scenario. Jelle Druyts presented a solution for supporting offline usage by showing us some code. I can't wait until we can download this code, must be very interesting.


    Interesting links:


    Tuesday, October 26, 2004

    Microsofts development process

    I really liked the Scott Guthrie's post about the ASP.Net development process, mostly because writing software still seems like a chaotic endeavour to me. I have been writing software for about 5 years now and I have read a lot about software engineering methodologies such as Extreme Programming, RUP (Rational Unified Process) and more general project management methodologies such as Prince2. But in the end it is still the code that matters and articles like this definitely illustrate this fact. On Benjaminm's blog there is also a nice followup article about it.

    Monday, October 25, 2004

    Customizing SharePoint

    I saw a MSDN evening session in june 2004 on SharePoint customization from Patrick Tisseghem but only found the time to
    start playing around with Frontpage and SharePoint today,... well better late than never. It seems that there are a lot of things you have to think about when doing SharePoint customization, luckily I found a lot of information on the Internet.




    In the meantime I have messed up my SharePoint VPC image so much that I think I need a rollback,... well at least it has been fun....