Deploy a BDC Model project to SharePoint Foundation 2010 using Visual Studio 2010

Deploy a BDC Model project to SharePoint Foundation 2010 using Visual Studio 2010

Rate This
  • Comments 22

Business Connectivity Services (BCS), one of the key components of SharePoint 2010, helps you to access external line-of-business (LOB) data. The SharePoint team posted a blog entry which demonstrates how to create your first BDC (Business Data Connectivity) model using Visual Studio 2010. As indicated in the post, you can use Visual Studio 2010 to deploy your BDC model to Microsoft SharePoint Server 2010.

However, if you are using Microsoft SharePoint Foundation 2010 on your develop machine, or you want to make the model deployable to Microsoft SharePoint Foundation 2010 on other machines, you will need to write a Feature Event Receiver to enable the deployment of BDC models from within Visual Studio 2010. In this blog post, I’ll show you how to create a Feature Event Receiver to do so.

Here are the detailed steps:

  1. In Visual Studio 2010, create a BDC project (read this post to learn how) or open your existing BDC project (e.g. “BdcModelProject1”).
  2. Add Feature Event Receiver to BDC project. In Solution Explorer, add a new Feature Event Receiver by right clicking on the feature (Feature1 in this sample) under Features folder and selecting Add Event Receiver.
  3. Write code for the Feature Event Receiver. In the generated code file (the default name is Feature1EventReceiver.cs/vb), replace the code with the sample code (Download here).
  4. Add reference.
    1. Copy Microsoft.BusinessData.dll assembly out of GAC. To do so: Start->Run, type in C:\Windows\assembly\gac_msil. Find Microsoft.BusinessData folder, and then copy Microsoft.BusinessData.dll to folder C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI.
    2. Add the following two assembly references to your project:
      1. In .Net tab, select Component Name = System.Web, Version=2.0.0.0.
      2. In Browse tab, navigate to folder C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI, and then add Microsoft.SharePoint.dll and Microsoft.BusinessData.dll.
  5. Set BDC SPI (SharePoint item) property. In Solution Explorer, select the SPI folder (e.g. “BdcModel1”), open Properties Window and update the following two Feature Receiver properties:
  6. C# Project -
    - Assembly = $SharePoint.Project.AssemblyFullName$
    - Class Name = BDCModelReceiver.Features.Feature1.ImportModelReceiver

    VB Project –
    - Assembly = $SharePoint.Project.AssemblyFullName$
    - *Class Name = BdcModelProject1.BDCModelReceiver.Features.Feature1.ImportModelReceiver
    * Replace “BdcModelProject1” with your own project name

  7. Set Feature property. In Solution Explorer, expand Features\Feature1 folder, double click on Feature1.Feature and open Properties window and update the following Feature property:

    C# Project -
    - Receiver Class = BDCModelReceiver.Features.Feature1.ImportModelReceiver
  8. VB Project -
    - *Receiver Class = BdcModelProject1.BDCModelReceiver.Features.Feature1.ImportModelReceiver
    * Replace “BdcModelProject1” with your own project name

  9. Now you can deploy the BDC project (Project->Deploy) or debug the BDC project (F5) to SharePoint Foundation 2010. You will find the external content type being deployed to the metadata store.

For more information about Business Connectivity Services, please also check out BCS Team blog.

Rong Lu

Leave a Comment
  • Please add 8 and 7 and type the answer here:
  • Post
  • Why the Feature Event Receiver is required for BDC feature deployment on SharePoint Foundation?

  • After following instructions for setting up SharePoint 2010 on Windows 7, following the first BDC Project instructions and following this blog about Fearure Event Receiver, I get 500 - Internal Server Error at the "Adding Solution" step of deployment process. Any suggestions?

  • Hi,

    You should try adding the EnableDiagnostics registry key (http://blogs.msdn.com/vssharepointtoolsblog/archive/2010/01/07/how-to-get-more-information-about-the-exceptions-that-can-happen-in-sharepoint-2010-projects.aspx) and in case you get any errors during deployment you will see the actual exception which makes it easier to troubleshoot.

    Peter

  • Hi James,

    To answer your question: BDC deployment relies on feature event receiver to take care of actions like model import/feature activation. Unfortunately the assembly where the feature event receiver lives does not ship with  SharePoint Foundation. And the reason for that is same assembly has other functionalities that we decided not to ship in Foundation and we couldn’t find a cost-effective way to support the receiver in Foundation.

    Hope this helps.

    Rong Lu

    Program Manager, Visual Studio team

  • Hi!..

    i've tried your solution but when i try to deploy it it gives me

    Error occurred in deployment step 'Add Solution': Failed to create receiver object from assembly "BdcModelProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6f4926deb40cae08", class "BdcModelProject1.BDCModelReceiver.Features.Feature1.ImportModelReceiver " for feature "BdcModelProject1_Feature1" (ID: a8a480c6-f1f0-4a5a-a37c-2259a0118919).: System.ArgumentNullException: Value cannot be null.

    Parameter name: type

      at System.Activator.CreateInstance(Type type, Boolean nonPublic)

      at Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

    Do you have any clue?

  • Hi nego.tk,

    From the error it looks like SharePoint failed to instantiate your receiver class. There is a possibility this happens because the feature receiver assembly/class settings do not match the receiver class name which is defined in Feature.EventReceiver.cs/vb file. Can you please check the property settings in step5 and 6, and make sure the receiver assembly and class properties in both places match the feature event receiver name exactly in code file? Please note that the settings in vb project is slightly different than C# project.

    Please let us know how this works out. If you still see the error, can you send your project to me (ronglu at microsoft.com) so we can help identify the problem?

    Best regards,

    Rong Lu

    Program Manager, Visual Studio team

  • Excellent - just what I wanted to learn.

    Following the first BDC Project instructions and following the blog entry about Fearure Event Receiver, I get 500 - Internal Server Error at the "Adding Solution" step of deployment process (in your video, when you press F5). I use Windows 7

    Any suggestions?

  • Hi MSSAP,

    Can you check if your SharePoint site can be accessed directly without using VS? i.e. open internet browser and type in your local SharePoint site address directly. I'm guessing you're seeing the error because VS is unable to communicate to your SharePoint server when F5. Let me know what you find out. If the SharePoint site is fine and you still see the error, I can't think of other possibilities at this moment, but if you can send me (ronglu at microsoft.com) your project, we should be able to help identify.

    Best regards,

    Rong Lu

    Program Manager, Visual Studio team

  • Hi!

    I'm having a similar problem to nego.tk where I receive the following error message:

    Error occurred in deployment step 'Add Solution': Failed to create receiver object from assembly "BdcModelProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6f4926deb40cae08", class "BdcModelProject1.BDCModelReceiver.Features.Feature1.ImportModelReceiver " for feature "BdcModelProject1_Feature1" (ID: a8a480c6-f1f0-4a5a-a37c-2259a0118919).: System.ArgumentNullException: Value cannot be null.

    Parameter name: type

     at System.Activator.CreateInstance(Type type, Boolean nonPublic)

     at Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

    I also find it strange that I've upgraded my development environment from Sharepoint Foundation to Sharepoint Server Standard and I still have to manually develop this feature event receiver.  I thought I shouldn't have to do so for Sharepoint Server?

    Please Help!

    Thanks,

    KBW

  • Hi KB Weeks,

    You should be able to deloy BDC model to SharePoint Server from within VS without having to manually add feature event receiver. It's strange you can't do so. What's the error message you see?

    I got your email that has your project and I'll try to get back to you as soon as possible. Sorry I'm caught in various things right now. Thanks for your patience.

    Best regards,

    Rong Lu

    Program Manager, Visual Studio team

  • Great post and really useful! I'm still getting my head around what all the steps actually mean (especially steps 5 & 6), but it all worked and got my list of Twitter friends in to an external SharePoint list.  Pointless, but fun anyway :)  Thanks!

  • Hi After following your instructions I get the following errors

    Error 1 Error occurred in deployment step 'Add Solution': Failed to load receiver assembly " BdcModelProject2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=359091437b6defd0" for feature "BdcModelProject2_Feature1" (ID: ed9d4d9b-bfe9-4778-8a8f-d24381fffa83).: System.IO.FileNotFoundException: Could not load file or assembly 'BdcModelProject2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=359091437b6defd0' or one of its dependencies. The system cannot find the file specified.

    File name: 'BdcModelProject2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=359091437b6defd0'

      at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)

      at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

      at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

      at System.Reflection.Assembly.Load(String assemblyString)

      at Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

    WRN: Assembly binding logging is turned OFF.

    To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.

    Note: There is some performance penalty associated with assembly bind failure logging.

    To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

    0 0 BdcModelProject2

    Any help would be appreciated

  • Perfect! I had a problem with DLL and followind this steps it was fixed!

Page 1 of 2 (22 items) 12