Freigeben über


Erstellen von .NET-Assemblys, die Daten aus mehreren externen Systemen für Business Connectivity Services in SharePoint Server 2010 aggregieren

Zusammenfassung: Lesen Sie hier, wie Sie eine .NET Framework-Assembly mit Business-Konnektivitätsdienste (Business Connectivity Services) in SharePoint Server 2010 erstellen und verwenden, um Daten aus zwei externen Systemen zu aggregieren: einer SQL Server-Datenbank und einer SharePoint-Dokumentbibliothek. Sie erfahren außerdem, wie Sie die Daten mithilfe von externen Inhaltstypen in SharePoint anzeigen und wie Sie Anmeldeinformationen aus Einmaliges Anmelden abrufen.

Letzte Änderung: Montag, 9. März 2015

Gilt für: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

Inhalt dieses Artikels
Einführung in Business Data Connectivity
Problemdefinition und implementierte Lösung
Schritt 1: Entwerfen und Implementieren einer .NET Framework-Assembly
Schritt 2: Zugreifen auf Anmeldeinformationen in Secure Store Service
Schritt 3: Abrufen von BLOB-Daten aus einer Dokumentbibliothek mithilfe von BDC
Schritt 4: Erstellen eines Geschäftsdatenwebparts
Schlussbemerkung
Weitere Ressourcen

Bereitgestellt von: Jyoti Jacob, Microsoft Corporation

Inhalt

  • Einführung in Business Data Connectivity

  • Problemdefinition und implementierte Lösung

  • Schritt 1: Entwerfen und Implementieren einer .NET Framework-Assembly

  • Schritt 2: Zugreifen auf Anmeldeinformationen in Secure Store Service

  • Schritt 3: Abrufen von BLOB-Daten aus einer Dokumentbibliothek mithilfe von BDC

  • Schritt 4: Erstellen eines Geschäftsdatenwebparts

  • Schlussbemerkung

  • Weitere Ressourcen

Klicken Sie, um Code abzurufen.  Code zum Herunterladen: Beispiel für das Aggregieren von Daten mithilfe von BCS und .NET-Assemblys ("CreateCandidateInfoTable.zip")

Einführung in Business Data Connectivity

Microsoft Business Connectivity Services (BCS) bietet eine Plattform namens Business Data Connectivity-Dienst (BDC) zum Abrufen von Daten aus externen Systemen in Microsoft SharePoint Server 2010 oder Microsoft Office 2010. Hierzu bietet BDC verschiedene Konnektoren zum Herstellen von Verbindungen zu und Abrufen von Daten aus Webdiensten Windows Communication Foundation (WCF)-Diensten und Datenbanken. Bei einem anderen Konnektor werden externe Daten mithilfe von Microsoft .NET Framework-Assemblys verwendet. Dies ist eine gute Möglichkeit, wenn Sie die externen Daten aggregieren, berechnen oder bereinigen müssen, bevor sie von SharePoint Server 2010 verwendet werden können.

Problemdefinition und implementierte Lösung

Das in diesem Artikel beschriebene Beispiel ist ein Datenaggregierungsproblem: Daten, die in verschiedenen externen Systemen gespeichert sind, müssen für die Verwendung aggregiert werden. Denken Sie z. B. an eine Anwendung für die Verwaltung von Bewerbern, in der die personenbezogenen Daten eines Bewerbers in einer Datenbank gespeichert werden und sein Lebenslauf in einer SharePoint-Dokumentbibliothek. Das Beispiel in diesem Artikel veranschaulicht, wie Sie die Daten aus diesen ungleichartigen externen Systemen abrufen und in aggregierter Form in einem Webpart in SharePoint Server 2010 anzeigen können.

Ziel ist es, einen externen Inhaltstyp zu erstellen, der die personenbezogenen Daten des Bewerbers sowohl aus einer Microsoft SQL Server-Datenbank als auch aus einer SharePoint-Dokumentbibliothek abruft und aggregiert. Die Daten können dann als externe Liste in SharePoint Server angezeigt und zu Microsoft Outlook 2010 oder Microsoft SharePoint Workspace 2010 synchronisiert werden. Der Lebenslauf ist ein Microsoft Word 2010-Dokument, das in einer SharePoint-Dokumentbibliothek gespeichert ist. Das Dokument wird mithilfe von BDC gestreamt, sodass es zusammen mit den zugehörigen aus der Datenbank abgerufenen Bewerberdaten in den Webparts in SharePoint Server 2010 angezeigt werden kann.

Die Datenbank ist eine Microsoft SQL Server 2008-Datenbank mit SQL Server-Authentifizierung. Das Beispiel zeigt darüber hinaus, wie Sie die Anmeldeinformationen, die in Einmaliges Anmelden in SharePoint 2010 in der .NET-Assembly gespeichert sind, entweder mithilfe von Business-Konnektivitätsdienste (Business Connectivity Services) oder durch direktes Aufrufen von Einmaliges Anmelden mithilfe des Objektmodells abrufen können.

In diesem Artikel werden die folgenden Aufgaben beschrieben:

  1. Entwerfen und Implementieren einer .NET-Assembly mithilfe der Business-Konnektivitätsdienste (Business Connectivity Services)-Vorlage in Microsoft Visual Studio 2010.

  2. Anwenden verschiedener Methoden zum Zugreifen auf Anmeldeinformationen, die in Einmaliges Anmelden in einer .NET-Assembly gespeichert sind.

  3. Streamen von BLOB-Daten aus externen Systemen in SharePoint Server 2010 mithilfe von BDC. In diesem Fall bestehen die Daten aus Word-Dokumentdateien, die in einer SharePoint-Dokumentbibliothek gespeichert sind.

  4. Erstellen eines Webparts zum Aggregieren der personenbezogenen Daten des Bewerbers aus der SQL Server-Datenbank sowie der Lebenslaufdaten, die in einer SharePoint-Dokumentbibliothek gespeichert sind.

    Das Dokument mit dem Lebenslauf ist mit den personenbezogenen Daten des Bewerbers verknüpft und kann über das Webpart im Word-Dateiformat geöffnet werden.

Haftungsausschluss

Beachten Sie bei der Lektüre dieses Artikels Folgendes:

  • Der Zweck dieses Artikels liegt nicht in der ausführlichen Erläuterung des Business-Konnektivitätsdienste (Business Connectivity Services)-Objektmodells. Vielmehr wird hier beschrieben, wie Sie rasch eine Lösung entwickeln können, der Sie mithilfe des Business-Konnektivitätsdienste (Business Connectivity Services)-Laufzeitobjektmodells zusätzliche Funktionen hinzufügen können (siehe Business Connectivity Services-Klassenbibliotheken).

  • Nicht besprochen wird außerdem die Verwaltung von Konfigurationen und Anmeldeinformationen in Einmaliges Anmelden. Es wird davon ausgegangen, dass die Leser wissen, wie verschiedene Geschäftsanwendungen in Einmaliges Anmelden konfiguriert und wie Anmeldeinformationen für sie festgelegt werden.

  • Die Beispiele werden in C# bereitgestellt, wobei angenommen wird, dass Sie Microsoft Visual Studio 2010 verwenden.

  • Ebenfalls nicht Gegenstand dieses Artikels ist eine ausführliche Erklärung dazu, wie Sie Anwendungen mithilfe von Visual Studio 2010 entwickeln oder wie Sie die verschiedenen darin verfügbaren Vorlagen nutzen. Dieser Artikel richtet sich an Entwickler, die über Erfahrung in Visual Studio und C# verfügen.

  • Bei dem Beispiel in diesem Artikel wird davon ausgegangen, dass SharePoint Server 2010 und Visual Studio 2010 auf dem gleichen Computer installiert sind. Dieser Artikel enthält keine Anleitung dazu, wie Sie das BDC-Lösungspaket (WSP-Datei), das das BDC-Modell und die .NET-Assemblys enthält, mithilfe von Cmdlet-Tools auf einem separaten Produktionscomputer bereitstellen.

Voraussetzungen

Zum Durcharbeiten der Übungen in diesem Artikel benötigen Sie Folgendes:

  • Microsoft SharePoint Server 2010 muss auf dem Entwicklungscomputer installiert sein.

    Microsoft SharePoint Server 2010 mit Lizenz für den Zugriff auf den Enterprise-Client muss vorhanden sein, wobei Business-Konnektivitätsdienste (Business Connectivity Services) und Einmaliges Anmelden aktiviert sein müssen. Die Business Data Connectivity-Dienst (BDC)-Anwendung, die Einmaliges Anmelden-Anwendung und die zugehörigen Proxys werden in der Konsole für die SharePoint-Zentraladministration bereitgestellt.

  • Microsoft Visual Studio 2010 ist mit SharePoint 2010-Vorlagen installiert.

Schritt 1: Entwerfen und Implementieren einer .NET Framework-Assembly

Bevor wir die Implementierung beschreiben, untersuchen wir in diesem Abschnitt das Design, das zur Lösung des Problems verwendet wird. Wenn Daten aus einem externen System abgerufen werden sollen, besteht der erste Schritt darin, die externen Inhaltstypen zu definieren. Mit der Business-Konnektivitätsdienste (Business Connectivity Services)-Plattform können Sie BDC zum Aufrufen von stereotypen Vorgängen für den externen Inhaltstyp verwenden, z. B. Create, Update, Read, Delete und Query. BDC Unterstützt außerdem weitere stereotype Vorgänge, z. B. StreamAccessor, für das Streaming von BLOB-Daten in SharePoint 2010 oder Microsoft Office 2010. In diesem Artikel werden der Read-, Query- und StreamAccessor-Vorgang ausführlicher erläutert.

Je nach den geschäftlichen Anforderungen müssen die von BDC verwendeten .NET-Assemblys öffentliche Methoden verfügbar machen, die den stereotypen Vorgängen entsprechen. Die BDC-Laufzeit führt diese öffentlichen Methoden aus, um Daten aus dem externen System abzurufen und verschiedene Vorgänge auszuführen.

Als Erstes muss der externe Inhaltstyp definiert werden. Im vorliegenden Beispiel ist Candidate die Geschäftsentität. In dieser Entität werden alle persönlichen und Kontaktinformationen des Bewerbers gespeichert. Sie können den externen Inhaltstyp wie folgt in den .NET -Assemblys als Klasse definieren (die Entity-Klasse).

namespace InterviewManagement.BdcNetModel
{
Public  partial class Candidate
    {
        public Int32 CandidateId {get;set;}
        public String FirstName { get; set; }
        public String LastName { get; set; }
        public String MiddleName { get; set; }
        public String PrimaryContactNo { get; set; }
        public String SecondaryContactNo { get; set; }
        public String PrimaryEmail { get; set; }
        public String SecondaryEmail { get; set; }       
        public Candidate()        {       }
}

Das Tool, mit dem die Lösung in diesem Beispiel entworfen und bereitgestellt wird, ist Visual Studio 2010. Visual Studio 2010 enthält eine neue Projektvorlage für SharePoint 2010 mit dem Namen Business Data Connectivity-Modell, wie in Abbildung 1 gezeigt.

Abbildung 1. Visual Studio 2010-Vorlage

Visual Studio 2010-Vorlage

Erstellen Sie ein Projekt mithilfe der Vorlage Business Data Connectivity-Modell. Fügen Sie dem Projekt die Candidate-Klasse hinzu, um den externen Inhaltstyp zu definieren.

Klicken Sie auf BDC-Explorer. Eine Vorlage wird angezeigt, die durch den externen Inhaltstyp vordefiniert ist. Klicken Sie auf Eigenschaften, und ändern Sie den vorhandenen Bezeichner in CandidateId mit dem Typ System.Int32, wie in Abbildung 2 gezeigt.

Abbildung 2. Hinzufügen des Bezeichners

Hinzufügen des Bezeichners

Als Nächstes wählen Sie im Bereich BDC-Methodendetails die ReadList-Methode aus. Löschen Sie die vorhandenen Vorlagenparameter (falls solche aufgeführt sind), und fügen Sie die erforderlichen Parameter hinzu, wie in Tabelle 1 angegeben.

Tabelle 1. Parameter für die ReadList-Methode

Parameter

Richtung

Typdeskriptor

Typ

username

EIN

usernameTypeDescriptor

System.String

password

EIN

passwordTypeDescriptor

System.String

returnParameter

AUS

CandidateList

InterviewManagment.BdcModel1.Candidate[], BdcModel1

Klicken Sie in der Spalte TypeDescriptor in den Methodeneigenschaften mit der rechten Maustaste, um den TypeDescriptor-Typ zu bearbeiten, und fügen Sie dann den Typ des Typdeskriptors hinzu.

Der CandidateList-Typdeskriptor ist eine Auflistung des komplexen Typs Candidate. Sie müssen den komplexen Typ im BDC-Modell definieren, damit BDC die Rückgabewerte den richtigen Feldern zuordnet. Zum Definieren der untergeordneten Typdeskriptoren klicken Sie in BDC-Explorer mit der rechten Maustaste auf CandidateList, und wählen Sie dann Typdeskriptor hinzufügen aus. Fügen Sie den Typdeskriptor Candidate und dann die untergeordneten Typdeskriptoren für Candidate hinzu, wie in Tabelle 2 gezeigt.

Tabelle 2. Untergeordnete Typdeskriptoren für Candidate

Typdeskriptor

Typ

CandidateId

System.Int32

FirstName

System.String

LastName

System.String

MiddleName

System.String

PrimaryContactNo

System.String

PrimaryEmail

System.String

SecondaryContactNo

System.String

SecondaryEmail

System.String

Abbildung 3 zeigt Candidate im Detailbereich für BDC-Methoden.

Abbildung 3. Detailbereich für BDC-Methoden

Detailbereich zur BDC-Methode

Diese öffentliche Methode gibt Bewerberinformationen zurück, die in der Datenbank gespeichert sind, und entspricht dem stereotypen Finder-Vorgang von BDC. Klicken Sie im Bereich BDC-Methodendetails auf Methodeninstanz hinzufügen und dann auf Finder-Instanz erstellen. Speichern Sie den Vorgang.

Im nächsten Schritt fügen Sie eine öffentliche Methode hinzu, die die Bewerberdaten basierend auf dem Bezeichner CandidateId zurückgibt. Diese Methode entspricht dem stereotypen BDC-Vorgang SpecificFinder. Gehen Sie nun wie beim Hinzufügen von ReadList vor, um die Parameter und den Typdeskriptor für die ReadItem-Methode hinzuzufügen, wie in Tabelle 3 gezeigt.

Tabelle 3. Parameter für die ReadItem-Methode

Parameter

Richtung

Typdeskriptor

Typ

Id

EIN

CandidateId

System.Int32, Identitifier: CandidateId

username

EIN

usernameTypeDescriptor

System.String

password

EIN

passwordTypeDescriptor

System.String

returnParameter

AUS

Candidate

InterviewManagment.BdcModel1.Candidate, BdcModel1

Fügen Sie die untergeordneten Typdeskriptoren für Candidate hinzu, wie in Tabelle 2 beschrieben. Speichern Sie die Eigenschaften, die in BDC-Explorer für den externen Inhaltstyp definiert sind. Dadurch werden automatisch die Methodenstubs für die Methoden hinzugefügt, die in BDC-Explorer als Teil der Klasse definiert sind.

Nachdem die Methoden nun definiert sind, müssen Sie die Logik zum Abrufen der Daten aus den externen Systemen hinzufügen. Die Kontaktinformationen für den Bewerber werden in einer SQL Server 2008-Datenbank gespeichert, das Dokument mit dem Lebenslauf ist in SharePoint Server in einer Dokumentbibliothek gespeichert. Für die SQL Server-Datenbank werden ein Benutzername und ein Kennwort für die Authentifizierung benötigt. Im nächsten Abschnitt wird beschrieben, wie Sie die Anmeldeinformationen mithilfe von Business-Konnektivitätsdienste (Business Connectivity Services) in SharePoint Server 2010 speichern können.

Zum Verbinden mit dem externen SQL Server-System fügen Sie mithilfe der Vorlage LINQ to SQL eine Klasse hinzu und fügen Sie eine Verbindung zur Datenbank des externen Systems hinzu. Diese Vorlage konvertiert die SQL-Klassen in LINQ, sodass Sie Abfragen in SQL Server ausführen können. Mit dem folgenden Code werden alle Daten über alle Bewerber in ReadList abgerufen.

using System.Linq;
using System.Text;
using InterviewManagement.BdcNetModel;
  private const string connString = @"Data Source= <server>;Initial Catalog=TestDB;User ID={0};Password={1};";
public Candidate[] ReadList(string username, string password)
        {

         // Error checking removed for brevity.
          String conn = String.Format(connString,username,password);
            List<Candidate> candidateList = new List<Candidate>();
            using (DataClasses1DataContext db = new DataClasses1DataContext(conn))
                {
                    var allCandidatesInfo = (from candidateDB in db.GetTable<CandidateInfo>()
                                                  select candidateDB);

                     foreach (CandidateInfo candidateInfo in allCandidatesInfo)
                     {
                         Candidate candidate = new Candidate();
                         FillInDataFromDb(candidate, candidateInfo);
                         candidateList.Add(candidate);
                     }
                }
            

           return candidateList.ToArray();
  }

// FillInDB method takes the Candidate query result and maps it to the candidate object.

Da die SQL Server 2008-Datenbank mithilfe von SQL Server-Authentifizierung authentifiziert wird, muss die .NET-Assembly den Benutzernamen und das Kennwort übergeben. Im nächsten Abschnitt wird erklärt, wie Sie die Anmeldeinformationen abrufen und an die .NET-Assemblys übergeben können.

Schritt 2: Zugreifen auf Anmeldeinformationen in Secure Store Service

In SharePoint 2010 wird Secure Store Service zum Verwalten von Anmeldeinformationen bereitgestellt. In diesem Artikel wird nicht erklärt, wie Sie Einmaliges Anmelden konfigurieren und verwalten. Es wird davon ausgegangen, dass Sie mit der Verwaltung von Einmaliges Anmelden vertraut sind.

Da der Zugriff auf die SQL Server-Datenbank von SQL Server selbst authentifiziert wird, werden zum Herstellen der Verbindung zum externen SQL Server-System ein Benutzername und ein Kennwort benötigt. Diese Anmeldeinformationen werden in Einmaliges Anmelden gespeichert und können zur Laufzeit von BDC abgerufen werden, um eine Verbindung zur SQL Server-Datenbank des externen Systems herzustellen. Die Anmeldeinformationen werden dem Benutzer zugeordnet, der die .NET Assembly ausführt.

Es gibt mehrere Möglichkeiten, mithilfe von Business-Konnektivitätsdienste (Business Connectivity Services) auf die Anmeldeinformationen in Einmaliges Anmelden zuzugreifen. In diesem Abschnitt werden die folgenden Optionen erklärt:

  • Verwenden von Systemfiltern

  • Direktes Aufrufen der Einmaliges Anmelden-APIs in der .NET-Assembly

Verwenden von Filtern

Business-Konnektivitätsdienste (Business Connectivity Services) bietet zahlreiche Filtertypen (System- und Benutzereingabefilter), mit denen der Benutzer die aus dem externen System abgerufenen Daten filtern kann. Auf diese Weise erfasst BDC Benutzer- oder Systemeingaben und bindet die komplexen Daten mithilfe des BDC-API-Aufrufs an. UsernameFilter und PasswordFilter sind zwei von Business-Konnektivitätsdienste (Business Connectivity Services) unterstützte Systemfilter, mit denen Sie Daten aus dem externen System nach Benutzer filtern können.

Mit dem UsernameFilter- und dem PasswordFilter-Filter in Business-Konnektivitätsdienste (Business Connectivity Services) können Sie Anmeldeinformationen aus Einmaliges Anmelden abrufen und den Eingabeparametern zuordnen, die mit den Filterdeskriptoren der aufrufenden Methode verknüpft sind.

Die ReadList-Methode hat einen Benutzernamen und ein Kennwort als Eingabeparameter. Bevor Sie die Filter den Eingaben zuordnen, müssen Sie den Filterdeskriptor definieren. Öffnen Sie im Visual Studio 2010-Projekt den BDC-Explorer, und öffnen Sie dann den Detailbereich für BDC-Methoden. Eine der Eigenschaften, die Sie für die Methode festlegen können, ist die FilterDescriptor-Eigenschaft. Klicken Sie auf Filterdeskriptor hinzufügen, wählen Sie den Filtertyp Username aus, und nennen Sie ihn userFilterDescriptor. Nachdem Sie den Filterdeskriptor definiert haben, wählen Sie den username-Parameter in ReadList aus und bearbeiten seine Eigenschaften. Wählen Sie die Associated Filter-Eigenschaft aus, und geben Sie den zuvor definierten Filterdeskriptor ein – userFilterDescriptor. Entsprechend fügen Sie den Filter Password hinzu und ordnen ihn der Kennworteingabe für ReadList zu.

Tabelle 4. Filter in BDC, der Eingabeparametern zugeordnet ist

Eingabeparameter

Filterdeskriptoren

username

username

password

password

Abbildung 4 zeigt die Filterdeskriptoren für ReadList.

Abbildung 4. Hinzufügen von Filterdeskriptoren zur ReadList-Methode

Hinzufügen der Filterbeschreibungen zur ReadList-Methode

In Einmaliges Anmelden werden sämtliche Anmeldeinformationen mit der Geschäftsanwendung gespeichert und verknüpft, die als Zielanwendung bezeichnet wird. Zum Abrufen der Anmeldeinformationen benötigt BDC Informationen über den von SharePoint verwendeten Einmaliges Anmelden-Anbieter, und die Zielanwendung, aus der es die Anmeldeinformationen abruft. Sie müssen diese Informationen als Eigenschaften auf LobSystemInstance-Ebene bereitstellen. Dazu öffnen Sie BDC-Explorer, wählen Sie die LobSystemInstance-Eigenschaft aus, und klicken Sie dann im Bereich Eigenschaften auf Benutzerdefinierte Eigenschaften. Geben Sie im Dialogfeld Eigenschaften-Editor die Eigenschaften, die Art der Eigenschaft und die Werte ein, die den Eigenschaften zugeordnet sind. Die Zielanwendung wird einer Eigenschaft namens SecondarySsoApplicationId zugeordnet, und die Anbieterinformationen werden der Eigenschaft SsoProviderImplementation zugeordnet.

Geben Sie die in Tabelle 5 gezeigten Eigenschaften und Werte ein.

Tabelle 5. LobSystemInstance-Eigenschaften für Secure Store Service

Secure Store Service-Eigenschaft

Eigenschaft

Typ

Wert

Zielanwendung

SecondarySsoApplicationId

System.String

DBCredentials

SSS-Anbieterdetails

SsoProviderImplementationDetails

System.String

Microsoft.Office.SecureStoreService.Server.SecureStoreProvider, Microsoft.Office.SecureStoreService, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c

Die Eigenschaften und Werte werden in Abbildung 5 gezeigt.

Abbildung 5. Zuweisen der LobSystemInstance-Eigenschaften in BDC-Explorer

Zuweisen der LobSystemInstance-Eigenschaften in BDC

BDC ruft zur Laufzeit die gespeicherten Anmeldeinformationen für den ausführenden Benutzer der Anwendung aus Einmaliges Anmelden ab, basierend auf der Zielanwendung, die in SecondarySsoApplicationId für LobSystemInstance angegeben wurde. Die Anmeldeinformationen werden den Eingaben zugeordnet, die mit dem UsernameFilter- und dem PasswordFilter-Filter verknüpft sind. Zur Laufzeit werden die Anmeldeinformationen automatisch in die Eingabeparameter eingelesen und können dann der Verbindungszeichenfolge zum Herstellen der Verbindung mit dem externen System hinzugefügt werden.

Im folgenden Beispiel werden der Benutzername und das Kennwort abgerufen.

  private const string connString = @"Data Source=<server>;Initial Catalog=TestDB;User ID={0};Password={1};";
public Candidate[] ReadList(string username, string password)
        {
         // Error checking removed for brevity.
          String conn = String.Format(connString,username,password);
      }

Aufrufen der Secure Store Service-APIs in einer .NET-Assembly

Die zweite Möglichkeit zum Abrufen von Anmeldeinformationen aus Einmaliges Anmelden besteht darin, die Einmaliges Anmelden-APIs direkt in der .NET-Assembly aufzurufen. Dies ist ein vollständig auf Code basierender Ansatz, bei dem die Einmaliges Anmelden-APIs direkt im Code in der .NET-Assembly aufgerufen werden.

Diese Option wird zwar im aktuellen Beispiel nicht zum Abrufen der Back-End-Anmeldeinformationen verwendet, wird hier aber dennoch als alternative Methode zum Abrufen von Anmeldeinformationen aus Einmaliges Anmelden beschrieben. Eine Möglichkeit besteht darin, die Zielanwendung und die Anbieterinformationen als Eigenschaften auf der LobSystemInstance-Ebene zu definieren, anstatt diese Informationen als Teil des Codes hinzuzufügen. Dieser Ansatz gibt Ihnen mehr Spielraum beim Konfigurieren dieser Eigenschaften gemäß Ihren Anforderungen und ist zudem konsistent mit der Art und Weise, wie andere Business-Konnektivitätsdienste (Business Connectivity Services)-Konnektoren Anmeldeinformationen zur Authentifizierung aus Einmaliges Anmelden abrufen.

Wie greifen Sie in einer .NET-Assembly auf die LobSystemInstance-Eigenschaften zu? Ganz einfach: Sie implementieren die IContextProperty-Schnittstelle, die Zugriff auf die Metadatenmodelleigenschaften ermöglicht.

Im folgenden Beispiel wird gezeigt, wie Sie den Benutzernamen und das Kennwort abrufen.

using Microsoft.BusinessData.SystemSpecific;
public class CandidateService : IContextProperty   
#IContext properties
 public IMethodInstance MethodInstance

// Get the methodinstances properties.
 public  ILobSystemInstance LobSystemInstance

// Get the lobsysteminstance properties.
 public  IExecutionContext ExecutionContext

// Get the execution context.

Wenn die .NET-Assemblyklasse die IContextProperty-Schnittstelle implementiert, initialisiert die BDC-Laufzeit automatisch IContextProperty-Eigenschaften. Zur Laufzeit kann die in der .NET-Assembly implementierte Methode die Metadatenmodelleigenschaften lesen, weil der Code den Kontext hat (MethodInstance und LobSystemInstance), in dem sie ausgeführt wird.

Wie bereits erwähnt, werden die SecondarySsoApplicationID-Eigenschaft und die SsoProviderImplementation-Eigenschaft auf der Ebene der LobSystemInstance-Eigenschaft definiert. Durch Verwenden von IContextProperty können Sie diese Eigenschaften lesen, den richtigen Einmaliges Anmelden-Anbieter instanziieren und die richtige Zielanwendung aufrufen. Alle Einmaliges Anmelden-Anbieter implementieren die ISecureStoreProvider-Schnittstelle. Der erste Schritt besteht darin, das richtige Objekt für den Einmaliges Anmelden-Anbietertyp zu instanziieren. Wenn Sie ein ISecureStoreProvider-Objekt verwenden, können Sie die GetCredentials-API aufrufen, die eine Auflistung der Anmeldeinformationen vom Typ SecureStoreCredentialCollection für eine bestimmte Zielanwendung für den ausführenden Benutzer bereitstellt. Durchlaufen Sie die Auflistung, um ein Objekt vom Typ ISecureStoreCredential abzurufen, das den Typ und den Wert der Anmeldeinformationen enthält. In diesem Codebeispiel wird Einmaliges Anmelden aufgerufen, dann werden die Anmeldeinformationen abgerufen.

using Microsoft.BusinessData.Infrastructure.SecureStore;
using System.Runtime.InteropServices;
private string[] GetCredentialsFromSSS()
        {

// Error checking removed for brevity.
            string[] Credentials = new String[2];             

            // Get the provider information.
             string ssoProvider = this.LobSystemInstance.GetProperties()["SsoProviderImplementation"] as string;
                Type providerType = Type.GetType(ssoProvider);          
            ISecureStoreProvider provider =  (ISecureStoreProvider)Activator.CreateInstance(providerType);           

            // Get the credentials.
            string appTargetName = this.LobSystemInstance.GetProperties()["SecondarySsoApplicationId"] as string;      

// If the credentials need to be cached , do not use the using block.
           using (SecureStoreCredentialCollection credentials = provider.GetCredentials(appTargetName))
            {
                foreach (ISecureStoreCredential cred in credentials)
                {
                    if (cred.CredentialType == SecureStoreCredentialType.UserName)
                    {
                        Credentials[0] = GetString(cred.Credential);
                    }
                    else if (cred.CredentialType == SecureStoreCredentialType.Password)
                    {
                        Credentials[1] = GetString(cred.Credential);
                    }
                }
            }
            return Credentials;
        }

// Secure Store Service returns the credentials as SecureString. 
// Need to convert the SecureString into cleartext //string.
        private string GetString(System.Security.SecureString secureString)
        {
            string str = null;
            IntPtr pStr = IntPtr.Zero;
            try
            {   pStr = Marshal.SecureStringToBSTR(secureString);
                str = Marshal.PtrToStringBSTR(pStr);        }
            finally
            { Marshal.FreeBSTR(pStr);  }
            return str;
        }

Nachdem Sie den Back-End-Benutzernamen und das Kennwort abgerufen haben, können Sie diese Daten in der Verbindungszeichenfolge einsetzen und eine Verbindung zur SQL Server-Tabelle herstellen, um die Bewerberinformationen abzurufen.

Gehen Sie nach der gleichen Methode vor, wie bereits beschrieben, um die ReadItem-Methode in BDC-Explorer hinzuzufügen und der SpecificFinder-Instanz zuzuordnen. Auch diese Methode hat einen Benutzernamen und ein Kennwort als Eingabe und ordnet den Username- und den Password-Filter den Eingabeparametern zu. Im Folgenden der Code für die ReadItem-Methode.

public Candidate ReadItem(int id, string username, string password)
        {
// Error check is removed for brevity.
            Candidate candidate = new Candidate();                    
            CandidateInfo candidateInfo;
            String conn = String.Format(connString, username, password);
            candidate.CandidateId = id;
            using (DataClasses1DataContext db = new DataClasses1DataContext(conn))
                { candidateInfo = (from candidateDB in db.GetTable<CandidateInfo>()
                                     where candidateDB.CandidateId == candidate.CandidateId
                                     select candidateDB).SingleOrDefault();
                    FillInDataFromDb(candidate, candidateInfo);
                }            
            return candidate;
  }

// FillInDB method takes the Candidate query result and maps it to the candidate object.

Schritt 3: Abrufen von BLOB-Daten aus einer Dokumentbibliothek mithilfe von BDC

Sie haben die personenbezogenen Daten des Bewerbers aus der SQL Server-Tabelle abgerufen. Doch der Lebenslauf des Bewerbers ist in der Dokumentbibliothek in SharePoint Server 2010 gespeichert. Sie müssen auf den Lebenslauf zugreifen und ihn dann mit den personenbezogenen Daten aggregieren. In diesem Abschnitt wird beschrieben, wie Sie den Lebenslauf (ein Word-Dokument) mithilfe von Business-Konnektivitätsdienste (Business Connectivity Services) in das SharePoint 2010-Geschäftsdatenwebpart streamen und dann mit den personenbezogenen Daten des Bewerbers kombinieren können.

BDC bietet eine MethodInstance (siehe MethodInstance-Element in "MethodInstances" (BDCMetadata-Schema)) namens StreamAccessor zum Zugreifen auf Stream-Daten. Standardmäßig unterstützt die Projektvorlage in Visual Studio 2010 nur die grundlegenden stereotypen Vorgänge Create, Update, Read, Delete und Query. Der Benutzer kann jedoch in BDC-Explorer weitere stereotype Vorgänge hinzufügen, die von Business-Konnektivitätsdienste (Business Connectivity Services) unterstützt werden.

Wechseln Sie dazu in die Ansicht BDC-Explorer, und fügen Sie eine neue Methode namens GetResumeDetails mit den in Tabelle 6 gezeigten Parametern hinzu.

Tabelle 6. Parameter für die GetResumeDetails-Methode

Parameter

Richtung

Typ

Typdeskriptor

candidateId

Ein

System.Int32

Candidate Identifier:CandidateId

stream

Aus

System.IO.Stream

Stream

Fügen Sie die MethodInstance vom Typ StreamAccessor hinzu, wie in Abbildung 6 gezeigt.

Abbildung 6. Konfigurieren von StreamAccessor in BDC-Explorer

Konfigurieren von StreamAccessor in BDC-Explorer

Da der Lebenslauf als Word-Dokument gespeichert ist, empfiehlt es sich u. U., das Dokument im gleichen Format zu streamen und zu verwenden. Dazu unterstützt Business-Konnektivitätsdienste (Business Connectivity Services) weitere Eigenschaften für den MethodInstance-StreamAccessor. Tabelle 7 zeigt die Eigenschaften, die für das Öffnen des Dokuments im erforderlichen MIME-Typ unterstützt werden.

Tabelle 7. Eigenschaften für die Angabe des des MIME-Typs zum Lesen des Streams

Eigenschaft

Funktionalität

Wert

MIMEType

Gibt den MIME-Typ zum Anzeigen des Dokuments an.

application/vnd.openxmlformats-officedocument.wordprocessingml.document

FileName

Gibt den Dateinamen an, den BDC zum Anzeigen der Datei verwendet.

ResumeFile.docx

Die StreamAccessor-Methode wird in BDC-Explorer definiert. Dabei wird angenommen, dass der Ordner sich auf der gleichen Website befindet, auf der auch das Webpart ausgeführt wird. Ähnlich wie bei den Einmaliges Anmelden-Eigenschaften wäre es vorteilhaft, eine Eigenschaft auf LobSystemInstance-Ebene zu haben, auf die Sie den Ordnernamen festlegen können. Dadurch können Sie einen konsistenten Ordnernamen verwenden, müssen diesen aber auf Modellebene ändern. Zu diesem Zweck definieren Sie eine zusätzliche Eigenschaft auf LobSystemInstance-Ebene, wie in Tabelle 8 gezeigt.

Tabelle 8. Zusätzliche Eigenschaft auf LobSystemInstance-Ebene

Eigenschaft

Typ

Wert

FolderName

System.String

<Name des Ordners in SharePoint 2010>

Die Methodeneigenschaften werden in BDC-Explorer definiert. Speichern Sie die Modelleigenschaften. Im nächsten Schritt implementieren Sie den Code zum Zugreifen auf das Dokument und Streamen der Daten in SharePoint Server 2010.

Weiter oben wurde die IContext-Eigenschaft beschrieben und erklärt, wie Sie damit auf die LobSystemInstance-Eigenschaften zugreifen können. Mithilfe der IContext-Eigenschaft können Sie auf den FolderName in der Methode zugreifen.

Als Erstes beziehen Sie den Kontext der HTTP-Anforderung, über die der Zugriff erfolgen soll, sowie Informationen über die zugeordnete Website, Dokumentbibliothek und das zugehörige Ordnerobjekt. Die Klasse lautet SPServiceContext. Da die aufrufende Anwendung ein Webpart ist (HTTP-Anforderung), können Sie sie zum Beziehen des aktuellen Kontexts verwenden. Mithilfe des SPContext-Objekts können Sie das Websiteobjekt vom Typ SPWeb abrufen. Mit dem SPWeb-Objekt können Sie auf das Ordnerobjekt auf der SharePoint-Website vom Typ SPFolder zugreifen, wobei Sie den FolderName verwenden, der als Eigenschaft auf der LobSystemInstance-Ebene im BDC-Modell definiert wurde. Mithilfe des SPFolder-Objekts greifen Sie auf die Dokumentdatei im Ordner vom Typ SPFile zu und öffnen den BinaryStream zum Lesen des Inhalts des Dokuments, der dem Rückgabeparameter der Methode zugeordnet werden kann.

Im folgenden Beispiel wird die GetResumeDetails-Methode gezeigt.

Using Microsoft.SharePoint;
public Stream GetResumeDetails(Int32 candidateId)
        {

// Error handling removed for brevity.             
             String foldername = this.LobSystemInstance.GetProperties()["FolderName"] as string;
            SPContext context = GetSPContext();
            SPWeb site = context.Web;
            string fileName = "Candidate" + candidateId +".docx";
           SPFolder resumeFolder = site.GetFolder(foldername);
           SPFile file = resumeFolder.Files[fileName];
           Stream resumeStream = file.OpenBinaryStream(SPOpenBinaryOptions.SkipVirusScan);
            return resumeStream;
    } 
private SPContext GetSPContext()
      {
            SPContext spContext = SPContext.Current;
          return spContext;      
  }

Nachdem Sie diese Implementierung abgeschlossen haben, erstellen Sie das Projekt. Bei diesem Beispiel wird davon ausgegangen, dass Sie die BDC-Artefakte für SharePoint Server 2010 implementieren, das auf dem gleichen Computer installiert ist. Klicken Sie im Visual Studio-Projekt auf Erstellen und dann auf Lösung bereitstellen. Dadurch wird das BDC-Paket auf einem Server bereitgestellt, auf dem SharePoint Server ausgeführt wird.

HinweisHinweis

Wenn Sie das BDC-Paket auf einem anderen Computer bereitstellen möchten, verwenden Sie das Lösungspaket (WSP-Datei), das von dem Projekt generiert wurde, und stellen Sie es mithilfe von SharePoint-Cmdlets in SharePoint Server 2010 bereit.

Das Paket wird bereitgestellt, d. h. das BDC-Modell wird in SharePoint Server 2010 importiert, und die zugehörigen .NET-Assemblys werden ebenfalls in SharePoint Server importiert und dem richtigen LobSystem im BDC-Metadatenspeicher zugeordnet. Im nächsten Schritt führen Sie das Webpart aus und rufen die Daten aus der Datenbank des externen Systems und der Dokumentbibliothek in SharePoint Server 2010 ab.

Schritt 4: Erstellen eines Geschäftsdatenwebparts

SharePoint Server 2010 enthält mehrere Geschäftsdatenwebparts, z. B. die Webparts "Geschäftsdatenelement" und "Geschäftsdatenliste". Sie können ein beliebiges Webpart auswählen und dann den speziellen MethodInstance-Typ (Finder oder SpecificFinder) gemäß dem Webpart auswählen, das für den externen Inhaltstyp Candidate ausgewählt wurde.

So erstellen Sie ein Geschäftsdatenwebpart

  1. Wählen Sie in SharePoint Server das Webpart Geschäftsdatenelement aus.

  2. Zum Bearbeiten des Webparts klicken Sie auf Öffnen Sie den Toolbereich.

  3. Klicken Sie im Webpart-Designer auf Entitätsauswahl, und wählen Sie dann die LobSystemInstance aus, die dem externen Inhaltstyp Candidate zugeordnet ist.

  4. Fügen Sie mithilfe der Auswahl das Standardelement zum Anzeigen der Daten für das Webpart hinzu, und klicken Sie auf Übernehmen.

Für jedes externe Element, das von SpecificFinder oder Finder zurückgegeben wird, ordnet Business-Konnektivitätsdienste (Business Connectivity Services) zur Laufzeit den Stream basierend auf dem Bezeichner zu, kombiniert die Daten und zeigt sie im Geschäftsdatenwebpart an, wie in Abbildung 7 dargestellt.

Abbildung 7. Mit StreamAccessor verknüpftes Geschäftsdatenwebpart

Dem Stream zugeordnetes Geschäftsdatenwebpart

Da der im BDC-Modell angegebene MIME-Typ den Typ Word hat, wird der Stream für die Anzeige als Word-Dokument geöffnet.

Schlussbemerkung

In diesem Artikel haben Sie Sie eine kurze, vier Schritte umfassende Anleitung zur Erstellung einer .NET-Assembly erhalten, über die Business-Konnektivitätsdienste (Business Connectivity Services) mithilfe von Microsoft Visual Studio 2010 externe Daten für Microsoft SharePoint Server 2010 abrufen kann. Außerdem wurde erklärt, wie Sie Anmeldeinformationen aus Einmaliges Anmelden beziehen und wie Sie BLOB-Daten mithilfe von Business-Konnektivitätsdienste (Business Connectivity Services) in SharePoint Server 2010 streamen.

Weitere Ressourcen

Weitere Informationen finden Sie in den folgenden Ressourcen: