SharePoint 2010 Business Connectivity Services BCS: Heiter – 23 Grad, bei Herrn Müller Business Connectivity Services kombinieren Web und Unternehmensdaten Die MS BSC sind Bestandteil der SharePoint 2010-Edition und ermöglichen dem Benutzer einen einfachen Lese- und Schreibzugriff auf externe Systeme. BCS stellen den Nachfolger des BDC aus der Version 2007 dar, verfügen aber über weit mehr Funktionalität. Relevant wird der Einsatz von BCS, wenn es darum geht, Daten aus unterschiedlichsten Quellen zu integrieren, diese dem Benutzer in der MS Office-Welt anzubieten – und auch On-/Offline-Funktionalität bereitzustellen. Achim Karasek Achim Karasek E-Mail: [email protected] Achim Karasek ist Wirtschaftsinformatiker und leitet das Microsoft-Solutions-Team bei addIT. Seine technologischen Schwerpunkte sind SharePoint, Workflow Solutions und InfoPath. von BDC verwaltet wird. Dieses Model File wird von SharePoint Designer oder dem BDC-Model Visual Studio Template vorgeneriert. Abbildung1 zeigt die Hierarchie der Meta-Daten Objekte innerhalb des Models. Dieser Artikel zeigt, wie man „step by step“ eine Datenintegration aus unterschiedlichen Quellen vornimmt und mittels BCS in SharePoint und Outlook bereitstellt. Als Beispiel werden Kontaktinformationen aus einer Unternehmensdatenbank mit aktuellen Wetterinformationen aus dem Web kombiniert. Bevor hier direkt in die Praxis eingestiegen wird, das wichtigste zu Architektur, Konzepten und Voraussetzungen von BCS. External Content Types Zentrales Element bei dem Einsatz von BCS ist der sogenannte External Content Type (ECT). Wie die „normalen“ Content Types in SharePoint, definiert der External Content Type die statischen Eigenschaften (Metadaten) und das Verhalten (Methoden) eines Objekts (Entität). Darüber hinaus wird über den ECT auch definiert, wie der Zugriff auf das Backend-System erfolgt. Im konkreten Beispiel handelt es sich hier um die Entität „Kontakt“ aus der firmeneigenen Datenbank (i.d.R. das CRM-System). Der Kontakt verfügt über die üblichen Metadaten (Vor-, Nachname und Adressinformation. Zusätzlich wird der Kontakt mit Spalten für die Wetterinformation versehen). Das Verhalten des ECT wird über die sogenannten CRUD (Create, Update, Delete) Methoden beschrieben, die abhängig vom Solution-Design automatisch von SPD 2010 generiert oder aber mit Visual Studio 2010 selbst erstellt werden können (wie im Anwendungsfall dargestellt). Der ECT ist eine wiederverwendbare Komponente innerhalb des Office-Systems. Der ECT hält selbst keine externen Daten, diese bleiben im externen System. Werden externe Daten jedoch offline genommen (bspw. mit Outlook) wird der BCS Client Cache verwendet, in den tatsächlich externe Daten transferiert werden, um später online wieder synchronisiert zu werden. Metadata Model Das Model bildet das Herzstück für die Abbildung eines externen Systems (auch Line of Business oder Backend-System genannt). Im Model werden alle Entitäten des Backend-Systems und deren Beziehungen untereinander verwaltet. Das Model ist ein XMLFile, das nach dem Deployment im Meta Data Store www.VisualStudio1.de Abbildung 1: Hierarchie der BDC-Metadatenobjekte Im Vergleich zur 2007er Edition ist das Model nun der Root-Knoten. Dies ermöglicht die Abbildung von External Content Types, die aus unterschiedlichen LOB-Systemen kommen, in einem Modell, was Deployment und Versionsmanagement der Lösung stark vereinfacht. A nwendungsfall: „Das aktuelle Wetter bei meinen Kontakten“ LOB-Systeme sind meist auf einen eindeutigen Zweck (wie bspw. das CRM-System) ausgerichtet. Der klassische Information Worker muss in der Praxis aber oft Daten aus unterschiedlichsten Quellen manuell zusammenzufügen, um seine täglichen Jobs zu erledigen. Dazu kann es beispielsweise nötig sein, Informationen aus dem Web (Aktien-, Währungskurse, etc.) mit jenen aus den Unternehmensapplikationen zu kombinieren. Im Beispiel werden Wetterinformationen aus dem Web mit Kontaktinformationen aus dem Unternehmen kombiniert. Der Charme von BCS besteht darin, dass man dem Benutzer die aggregierten Informationen in der gewohnten Office-Umgebung und in SharePoint zur Verfügung stellt (natürlich schreibend und lesend, ein entscheidender Unterschied zum herkömmlichen Reporting). 53 SharePoint 2010 Abbildung 2: Diese Abbildung zeigt die Lösungsarchitektur für den Anwendungsfall Solution-Design Die Kontakte des Unternehmens werden in einer SQL Server-Datenbank gespeichert. Der Zugriff darauf erfolgt mit dem Entity-Framework. Aus einem WetterWebservice (http://www.geonames.org) werden mit den Schlüsselwerten „Place“ und „Country“ die GeoKoordinaten und in Folge die nächstgelegene Wetterstation und das aktuelle Wetter für jeden Kontakt individuell abgerufen. Abbildung 2 zeigt die einfache Architektur des Anwendungsfalls. Beide Quellen werden in einer BDC-Entität aggregiert. Schreibend stehen die Eigenschaften des Datenbankkontakts zur Verfügung - das Wetter kann man auch in diesem fiktiven Anwendungsfall nicht verändern ;-). Step by Step – Realisierung Über Visual Studio 2010 wird ein neues Projekt aus den SharePoint 2010-Templates „Business Data Connectivity Model“ erzeugt. Empfehlenswert ist es, für BDC-Model, LOB-Systems, Entities und Namespaces ein sprechendes Naming zu vergeben. Der nächste Schritt ist, dass die Felder der Entität sowie die CRUD-Methoden für den konkreten Fall definiert werden. Visual Studio hat durch das Template bereits die Listings „Entity1.cs“ und „Entity1Service.cs“ vorgeneriert. Das „Entity1.cs“-File definiert dabei die Meta-Daten des External Content-Types. Im Service- File werden die Methoden implementiert. Exemplarisch für alle CRUD-Methoden ist hier erklärt, wie die ReadList-Methode (im BDC-Jargon, eine Finder-Methode implementiert wird). Der Zugriff auf die Datenbank (SQL Server) wird mittels EntityFramework vorgenommen. Dadurch ergeben sich zwei „DataLayer“, die man in einem RealWorld-Szenario durch vernünftige NamingKonventions auseinanderhalten muss, bezeichnen sie ja doch immer dieselben Entitäten. In unserem Fall sprechen wir von dem „Contact“-Objekt für BDC und dem „dbContact“ Objekt für das Entity-Framework (siehe auch Abbildung 2). Für die Vorgenerierung der ReadList-Methode sollte man auf jeden Fall die „BDC Methode Details Pane“ verwenden. In weiterer Folge müssen die Input- und Return-Werte im BDC-Explorer richtig beschrieben werden (siehe Kasten „Beschreibung der Parameter“). Die Implementierung der Methode ist in Folge trivial und zeigt sich in Listing 2. Bemerkung: Die Methode „EnrichContactWithWeatherInfo“ erledigt den Web-Service Call, um für den Ort und das Land die aktuelle Wetterinformation zu liefern (wobei hierauf nicht näher eingegangen wird). Nach der Implementierung aller Methoden kann das Projekt deployed werden. Wie auch bei anderen SharePoint-Projekten wird ein WSP-File generiert und das inkludierte Feature mit dem External Content Type und dem Model steht sofort zur Verfügung (Abb. 3). Nachdem die Berechtigungen konfiguriert wurden (dies verhält sich exakt gleich wie bei jedem anderen External Content Type), kann der Content Type über den Content-Type-Picker ausgewählt werden und in einer externen Liste oder als External Data Column verwendet werden. Listing 1 Listing 2 Abbildung der Metadaten durch die Klasse ealisierung der ReadList Method im ServiceR Modul public partial class Contact { public int ID { get; set; } public string LastName { get; set; } public string FirstName { get; set; } public string Place { get; set; } public string Country { get; set; } } public static IEnumerable<Contact> ReadList() { dataBaseContext = new EFContacts(connectionString); List<Contact> contactList = new List<Contact>(); foreach (dbContact persistedContact in dataBaseContext.dbContacts) c ontactList.Add(EnrichContactWithWeatherInfo( persistedContact)); / read only properties for BCS / (set information in TypeDescriptors) public string FullName { get ; set; } public string WeatherToday { get ; set; 54 } return contactList; SharePoint 2010 Beschreibung der Parameter Wenn es in der Entität „Readonly“-Attribute gibt, müssen in der Klasse trotzdem Setter für alle Properties definiert werden. Das Readonly-Verhalten wird erst durch die Beschreibung des Parameters in der jeweiligen CRUD-Methode definiert (TypeBeschreibung). Jede CRUD-Methode verfügt über Parameter, deren „Richtung“ mit „In, Out, InOut und Return“ beschrieben wird. Standardmäßig bekommt eine ReadItem-Methode als „IN-Parameter“ einen ID-Wert. Als Return-Wert wird die gesamte Klasse zurückgegeben, wobei dieser Type über den sogenannten Type-Deskriptor genauer beschrieben werden kann. Im Anwendungsbeispiel muss der Eingabe-Parameter vom Type „Contact“ in der Update-Methode wie folgt beschrieben werden: Die Type-Deskriptoren „Fullname“ und „WeatherToday“ müssen daher entfernt werden, da diese beiden Properties nicht gesetzt werden dürfen. Durch diese Beschreibung des Parameters wird auch sichergestellt, dass das EditForm.aspx richtig generiert wird – und die Readonly-Attribute nicht zur Verfügung stehen. Eine gute Übersicht, welche Type-Deskriptoren bei welchen Methoden wie verwendet werden können, ist unter http://msdn.microsoft.com/enus/library/ff464437.aspx zu finden. www.VisualStudio1.de Um die externe Liste mit Outlook auch offline verfügbar zu machen, muss der External Content Type mit dem SharePoint Designer nachbearbeitet werden, um das Mapping zwischen den Office Type „Contact“ und der eigene Klasse herzustellen (Infos dazu unter http://msdn.microsoft.com/en-us/library/ee557243. aspx). Nach einem Redeployment der Lösung aus Visual Studio muss der Mapping-Vorgang mit dem SPD wiederholt werden. Die Ursache ist, dass sich Visual Studio und SPD die Änderungen im BDC Meta Store gegenseitig überschreiben. In einem Real-World-Szenario muss das Mapping in die VS-Lösung integriert werden. Der User findet nach dem Öffnen der SharePoint-Liste in Outlook nun folgendes Bild vor und kann wie gewohnt die Kontaktinformation in Outlook verwalten – und erhält zusätzlich immer die Information, welches Wetter der jeweilige Ansprechpartner gerade hat, was wie jeder weiß, sich ganz klar auf die Stimmung der jeweiligen Person auswirken kann ;-). (Abb. 4) Auch wenn der Anwendungsfall fiktiv ist, lässt sich damit gut die Mächtigkeit von BCS demonstrieren. Das direkte Einbinden von LOB-Systems und die Aggregation von Web-Daten in die Office-Welt ist mit BCS stark vereinfacht worden. Links und Quellen [1] http://msdn.microsoft.com/en-us/library/ ee556826.aspx 55