Patrick\’s Bytes

1, December 2008

My new blog address

In case you drop by here. Do check out my new blog site at

I will stop posting at this side.


9, July 2008

MOSS 2007 BDC Definition Editor gotchas

Filed under: BDC,Sharepoint — patrickyong @ 2:32 pm

What is Business Data Catalog(BDC)?

The BDC is essentially a catalog of business applications that are of interest to SharePoint Server 2007 users, and it bridges the gap between the portal and business applications by bringing in key data from various applications to SharePoint sites, lists, search, and user profiles. The BDC is the key infrastructural component around which most of the other business data features of SharePoint Server 2007 are built. Administrators can register business applications in the BDC, after which the data in the application is immediately available to SharePoint through the business data features described below. A key requirement for each registered business application is an XML-based metadata model that describes the application programming interfaces (API) of the application or the schema of the database that maps to business objects (e.g. customer) and properties (e.g. name) that a SharePoint user can understand. These metadata models can be easily created by DBAs or database developers.

For example you can expose a table in a SQL Server database


On to a Business Data List webpart in MOSS 2007.


Creating an application definition use to be a pain because you have to define every properties and entities inside a XML file without the help of any tools. Then came BDC Man to over this problem but it comes with a pocket burning price tag. So somewhere early this year, SharePoint SDK update includes a simple BDC Definition Editor. Now you can have (almost) all the features found in BDC Man for free!

Connecting to a database is easy, fire up DBC Def Editor

image Click on Add LOB System

image On the Add LOB System window, you can connect to a DB or Webservice, for this I click on Connect to Database

image Key in the connection string and click Connect

image After that on the right you can see 2 new buttons, I click on Add Table to bring in a table now

image I select the table Currency and drag in over to the blue blank space.

image For this I going to use 1 table only, so I click at the bottom.

image Name it as ‘currency’

image  Now the definition has been created. Logically I can click Export and upload it to MOSS. The exported Application Definition is a XML file shown below

  <?xml version="1.0" encoding="utf-8" standalone="yes"?> <lobsystem xmlns="" 
	xsi:schemalocation=" BDCMetadata.xsd" 
	type="Database" version="" name="currency"> 	<lobsysteminstances> 		<lobsysteminstance name="currency_Instance"> 			<properties> 				<property type="System.String" name="rdbconnection Data Source">localhost</property> 				<property type="System.String" name="rdbconnection Initial Catalog">simpledb</property>  				<property type="System.String" name="rdbconnection Integrated Security">True</property>  				<property type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAccessProvider" name="DatabaseAccessProvider">SqlServer</property>  				<property type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAuthenticationMode" name="AuthenticationMode">PassThrough</property>  			</properties> 			</lobsysteminstance></lobsysteminstances> 			<entities> 				<entity name="Currency" estimatedinstancecount="10000"> 					<identifiers><identifier name="name" typename="System.String" /></identifiers> 					<methods><method name="Find_Currency"> 					<properties> 						<property type="System.Data.CommandType, System.Data, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="RdbCommandType">Text</property>  						<property type="System.String" name="RdbCommandText">Select "Name","Description" from Currency where Name=@Name</property>  					</properties> 					<parameters> 						<parameter name="@Name" direction="In"> 							<typedescriptor name="name" typename="System.String, mscorlib, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" identifiername="Name" /> 						</parameter> 						<parameter name="@Currency" direction="Return"> 							<typedescriptor name="Reader" typename="System.Data.IDataReader, System.Data, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" iscollection="true"> 							<typedescriptors> 								<typedescriptor name="Record" typename="System.Data.IDataRecord, System.Data, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 									<typedescriptors> 							 										<typedescriptor name="name" typename="System.String, mscorlib, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" identifiername="Name" /> 											<typedescriptor name="Description" typename="System.String, mscorlib, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" />																		</typedescriptors> 										</typedescriptor> 									</typedescriptors> 								</typedescriptor> 							</parameter> 						</parameters> 						<methodinstances> 							<methodinstance type="SpecificFinder" name="Find_Currency_Instance" returnparametername="@Currency" returntypedescriptorname="Reader" returntypedescriptorlevel="0" /> 						</methodinstances> 					</method> 					<method name="FindAll_Currency"> 					<properties> 						<property type="System.Data.CommandType, System.Data, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="RdbCommandType">Text</property>  						<property type="System.String" name="RdbCommandText">Select "Name" from Currency</property>  					</properties> 					<parameters> 						<parameter name="@Currency" direction="Return"> 							<typedescriptor name="Reader" typename="System.Data.IDataReader, System.Data, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" iscollection="true"> 								<typedescriptors> 									<typedescriptor name="Record" typename="System.Data.IDataRecord, System.Data, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 										<typedescriptors> 											<typedescriptor name="name" typename="System.String, mscorlib, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" identifiername="Name" /> 										</typedescriptors> 									</typedescriptor> 								</typedescriptors> 							</typedescriptor> 						</parameter> 					</parameters> 					<methodinstances> 						<methodinstance type="IdEnumerator" name="FindAll_Currency_Instance" returnparametername="@Currency" returntypedescriptorname="Reader" returntypedescriptorlevel="0" /> 					</methodinstances> 				</method> 			</methods> 		</entity> 	</entities> </lobsystem>  

Imagine you have to do this manually even for a single database table!!


So now go to your Shared Service Admin site to upload the def file.  Click on Import application definition

image Choose the file and click Import on the next screen.

image  There you go, no problem reported.


So now with the app def imported I go back to my SharePoint site to add the Business Data list webpart.


To bind my Currency table to the part, I open up the webpart editor. At the Type textbox click on the telephone book icon.


To my surprise, when I open up the Business Data Type Picker, it reported There are no Business Data Type loaded in the Catalog! So what went wrong? The Currency Add Def indeed imported.

Actually the def editor left out a couple of things which need the user to manually configure which I found out later.


First one, the Business Data List webpart uses a Finder method instance of the app def to list the data. The def editor by default only create the SpecificFinder and the IdEnumerator method instances.


To verify this, open up your Event Viewer and you will see errors in Application log.

To create another method instance, right click on Methods and click Add Method

Change the name of the new method to List


On RdbCommandText, copy the one from the SpecificFinder but remove the where clause

Then add a new Return parameter. Right click on Parameter and choose Add Parameter.

Change the name to @Currency


Now right click @Currency and select Create Root TypeDescriptor


Cut the story short, you now continue to construct the parameter as per the one on Find_Currency method. Only thing is you do not need to create the input parameter @Name.


Right click Instances and choose Add Method Instance, select the radio button ‘Finder’ on the Create Method Instance window. The Return TypeDescriptor should be Reader.


After that go over to Currency Entity, fill in the name of the Title field. The purpose of the Title field is to tell MOSS later which column to display the action menu.

Having mentioned action menu, I won’t be created any Action for this entity but instead use the default ‘View Profile’ action menu.


Now update the version number to 1.1 else BDC will complain version conflict. After that export the definition to xml file and import it to MOSS.


Double confirm the version number is 1.1 now.


Then go back to my SharePoint site, funny thing is now you need to remove the blank web part and insert a new Business Data List webpart. Then open the webpart editor and you will see your Currency table there.



Add that to the editor and exit the edit mode. You can now see the Currency table listed here.

1, July 2008

Microsoft Open Specification v1.0 released

Filed under: .NET Programming,Exchange,Office,Sharepoint,SQL Server,WCF,WPF — patrickyong @ 8:49 am

Awhile ago I blogged about Microsoft releasing products protocol documentation which are essential design specifications. That was about 2 months ago and the documents are of beta version.

Today the official version 1 is out that it covers the following products.

  1. Windows
  2. WCF
  3. Windows Server Protocol
  4. .NET Framework
  5. Office
  6. Office Binary File Format
  7. SharePoint
  8. Exchange
  9. SQL Server
  10. VBA Language Spec
  11. XAML

24, June 2008

Good read of SharePoint’s initial code name and history

Filed under: Sharepoint — patrickyong @ 3:04 pm

It’s really sleepy after a heavy lunch, if you want something interesting and geeky to read about, check this out.

Sharon Richardson, who is an ex-Microsoftie has an interesting blog post about SharePoint. After reading it you will make sense of some naming convention within the product.

There is also a thread on Facebook on the original SharePoint product codename (go check out if you want to ‘8’). Legend said, as with most Microsoft code names, is supposidly the place where the team goes when the product is delivered.

23, June 2008

SharePoint development methodology white paper published

Filed under: Sharepoint — patrickyong @ 10:09 am

Have you ever wonder how to manage code base when you want to move your custom SharePoint solution from you development team site to a UAT server or production server? The folks at Redmond came out with a whitepaper on the best practices to answer the following questions

  • How to manage team development for large MOSS projects?
  • How to deploy content and code between development and production environments?
  • How to prepare your develop efforts for deployment in a remote hosted environment?
  • How to enable developers to participate in several projects at the same time?

You can download it here.

11, June 2008

SharePoint by Day, SharePint by Night @KL

Filed under: Event,Sharepoint — patrickyong @ 12:40 am

It’s Malaysian version of SharePint as posted by Andrew Connell here! The evening started with Y Mi giving a prezzo on SharePoint Out of the Box which is Part 1 of the Advanced SharePoint course he running right now. The turn out was very good with guys from Versapac, IITG, Inceptio and Croesus coming so there was a total of 12 of us.

Many thanks to Richard from Croesus for hosting us at his office. 🙂

DSC00366 Our friends from Versapac and IITG

DSC00367Richard, Andy and Y-Mi getting ready

DSC00369 Eugene relaxing here

DSC00370 Light drinking session after the event

9, June 2008

SharePoint Developers, you can uninstall VS2005 for good

Filed under: Sharepoint,Visual Studio 2008,VSeWSS — patrickyong @ 12:36 am

SharePoint developers always have the pain of going back and forth between Visual Studio 2005 and 2008 because 2 of the most productive tools (one is SharePoint workflow project template in VS2008 and WSS3 tools for VS2005) is available in different versions of Visual Studio.

Well, that is the scenario until today the SharePoint team officially released Windows SharePoint Services 3.0 Tools for Visual Studio 2008 (VSeWSS) with the version number 1.2.

If the only reason you still having VS2005 in your PC is because of VSeWSS then it’s time to say goodbye and have a pure VS2008 development environment.

Download the bits here.

31, May 2008

SharePoint On Vista! Another good reason for dev to use Vista?

Filed under: Sharepoint,Windows Vista — patrickyong @ 9:13 pm

Yup, you read it right, SharePoint can runs on Windows Vista thanks to Bamboo Solution’s setup helper here. Many thanks to Jonas for commenting it on my blog post.

Go check it out today, there is a walkthrough with screenshots as well. It shows Windows SharePoint Services but I guess it might work for MOSS 2007 as well. 🙂

13, May 2008

Itchy Hand on Kerberos Service

Filed under: IIS,Sharepoint,Windows — patrickyong @ 6:35 am

I was setting up a demo for a talk today. Normally my VPC environment will be 1 Domain Controller (DC) and another server for SharePoint and Visual Studio.

Then out of sudden I went to disable the Kerberos service on my DC just to avoid the startup error created by Kerberos service. Note: VPC start up is slower and for DC, normally Kerberos service startup will timeout but eventually it will get started.

Without Kerberos, I still managed to sign in to my SharePoint VPC with no problem whatsoever. It is until I start developing a VS2008 SharePoint Workflow project, then I realize the IIS restart fails to response until VS2008 returns a SharePoint Server not found error.

It took me a few hours to find out what happen until I check my event logs and realize I notice my SharePoint app pool user try to start certain services but hit authentication error. This is when I realize it must have something to do with the Kerberos service being disabled.

Ta! Ta! Once the Kerberos service got started, everything returns to normal and my day got saved!

10, May 2008

SharePoint List Performance Tested

Filed under: Sharepoint — patrickyong @ 10:44 am

The SharePoint team in Redmond conducted a performance test on SharePoint List feature under different loads and modes of operation and published their findings here.

Next Page »

Create a free website or blog at