Transforming BDC Models to BCS in SharePoint 2010

Upgrading BDC to BCS:   Due to certain changes in SharePoint Server 2010 Business Connectivity Services architecture and model’s schema changes, MOSS BDC Application Definition XML files cannot be directly imported post upgrade.  So, if we are planning to transform BDC in SharePoint 2010, we have to consider it before SharePoint 2010 upgrade happens. There is an excellent TechNet article on BCS upgrade - https://technet.microsoft.com/en-us/library/ff607947.aspx.  This approach works well if we are upgrading MOSS 2007 to SharePoint 2010.

SharePoint 2010 as a fresh installation?  

If we install SharePoint 2010 without upgrade from MOSS 2007, BDC definition files will not be imported to the system due to unavailability of Application Registry service.  There are some tools available that will automatically read in the BDC XML and create the appropriate BCS Model.  We can also upgrade BDC manually as suggested in this article https://msdn.microsoft.com/en-us/library/ff817559.aspx.  The other approach I recommend is ,

1. First do a single box SharePoint 2007 install.

2. Export meta data from your existing SharePoint 2007 environment into this newly build SharePoint 2007 box.

3. Then now upgrade fresh installation of SharePoint 2007 to SharePoint 2010.

4. Export BDC meta data from Admin UI of newly build SharePoint 2010.

5. Finally import it into your production environment, the newly installed SharePoint 2010 environment

This might be an intricate process but it ensures that a clean upgrade happens on top of BDC.

A note about few warning messages :

This Model contains LobSystem (External System) of Type 'WebService' which is deprecated and may be removed in future releases.

 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Model ...>
  <LobSystems>
    <LobSystem Type="WebService" Name="SampleWS">
     ...
    </LobSystem>
 </LobSystems>
</Model>

WebService has been deprecated in SharePoint 2010, use Wcf instead.

  <LobSystems>
    <LobSystem Type="Wcf" Name="https://Test/WSOrders2010/service.asmx?wsdl">
      ...
    </LobSystem>
 </LobSystems>

The TypeDescriptor 'Orderdate' on Parameter 'Return' on Method 'ExecuteView' of Entity (External Content Type) '' with Namespace '' has a DateTime Value, but there is no Interpretation describing what the External System expects and returns as the DateTimeKind. The dateTime value is assumed to be UTC.

 <TypeDescriptor 
    TypeName="System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, 
    PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral,      
    PublicKeyToken=b77a5c561934e089" Name="Orderdate" ReadOnly="true" />

DateTime.Kind is a property which gets a value that indicates whether the time represented by this instance is based on local time, Coordinated Universal Time (UTC), or neither.  In case we don’t specify any datetime kind property, it will take UTC by default.

 

The MethodInstance of type 'Finder' with Name 'GetAllEntities' does not have a Limit Filter.

Limit filter tells Business Data Catalog to bring back only the specified number of rows back from the line-of-business application.  Also the back-end method should support this functionality to return only the specified number of rows.

 <Method Name="ExecuteView">
  <FilterDescriptors>
       <FilterDescriptor Type="Limit" Name="Limit"/>
   </FilterDescriptors>
</Method>