Abbiamo già visto più volte ormai che cosa sono i Business Connectivity Services e a che cosa ci sono utili. Sapete quindi che, una volta creato il model vero e proprio (o tramite l'utilizzo di SharePoint Designer o tramite Visual Studio) è necessaria la presenza di una nuova lista di tipo "External list" per permetterci di visualizzare e gestire i dati prelevati dalla fonte di dati esterna.
Questa tipologia di lista la possiamo creare sia tramite l'interfaccia web di SharePoint 2010, sia tramite lo stesso SharePoint Designer, ma comunque entrambe le modalità prevedono l'intervento manuale.
Come la maggior parte delle operazioni che possiamo fare da interfaccia, possiamo sfruttare questa funzionalità anche all'interno della nostre applicazioni SharePoint personalizzate, in due differenti maniere:

  • tramite il modello ad oggetti
  • tramite la sintassi XML di provisioning di una lista (list instance)

Vediamo entrambi gli esempi.

Object model
SPListDataSource ds = new SPListDataSource();

ds.SetProperty(SPListDataSource.BDCProperties.LobSystemInstance, "NOME MODELLO BCS");
ds.SetProperty(SPListDataSource.BDCProperties.EntityNamespace, "http://NAMESPACE");
ds.SetProperty(SPListDataSource.BDCProperties.Entity, "NOME ENTITA'");
ds.SetProperty(SPListDataSource.BDCProperties.SpecificFinder, "NOME METODO DI TIPO SPECIFIC FINDER");

using (SPSite site = new SPSite("http://siteurl"))
{
using (SPWeb web = site.RootWeb)
{
web.Lists.Add("NOME LISTA", "", "Lists/LISTURL", ds);
}
}

In questo caso, ci viene in aiuto un overload del metodo Add della classe SPListCollection che ci da la possibilità di specificare la fonte di dati per la nostra external list.
Questo overload è disponibile solo per questo utilizzo. Quindi solo per la creazione di liste collegate ad un data model BCS.

List instance
<?xml version="1.0" encoding="utf-8"?>

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<ListInstance Title="TITOLO LISTA"
OnQuickLaunch="TRUE"
TemplateType="600"
FeatureId="00bfea71-de22-43b2-a848-c05709900100"
Url="Lists/LISTURL"
Description=""
>
<DataSource>
<Property Name="LobSystemInstance" Value="NOME MODELLO BCS" />
<Property Name="EntityNamespace" Value="http://NAMESPACE" />
<Property Name="Entity" Value="NOME ENTITA'" />
<Property Name="SpecificFinder" Value="NOME METODO DI TIPO SPECIFIC FINDER" />
</DataSource>
</ListInstance>
</Elements>

Ricordo che questo estratto di sintassi per il provisioning di una lista, lo dovete inserire all'interno del file Elements.xml che viene creato una volta che scegliete di inserire una nuova "list instance" all'interno della vostra soluzione Visual Studio.

Così facendo potete aggiungere anche la creazione di external list alle vostre soluzioni custom, che vedono già la creazione di modelli BCS.