Exemplarische Vorgehensweise: Verwenden von wiederverwendbaren BCS-Codekomponenten in einer deklarativen Lösung

Sie können eine anspruchsvollere deklarative Outlook-Lösung erweitern, indem Sie benutzerdefinierte Parts für externe Daten und Codeaktionen anzeigen und benutzerdefinierte Menüband-Manager verwenden. Das SharePoint 2010 SDK enthält das Codebeispiel: Wiederverwendbare Komponenten für eine deklarative Outlook-Lösung für AdventureWorks2008.

Letzte Änderung: Donnerstag, 2. September 2010

Gilt für: SharePoint Server 2010

In diesem Beispiel werden ein benutzerdefinierter Menüband-Manager, ein benutzerdefiniertes Part für externe Daten und eine Codeaktion definiert. Die Schritte zum Erstellen dieser Codekomponenten werden im Abschnitt Erstellen und Verwenden von wiederverwendbaren Codekomponenten in einer deklarativen Outlook-Lösung in diesem Thema erklärt. Im ersten Teil dieses Themas wird erläutert, wie Sie vorhandene Codekomponenten in einer anspruchsvolleren deklarativen Outlook-Lösung referenzieren und verwenden. Im zweiten Teil werden die Schritte zum Erstellen und Verwenden der wiederverwendbaren Codekomponenten in einer anspruchsvolleren deklarativen Outlook-Lösung beschrieben.

Wichtiger HinweisWichtig

Vor dem Packen der Lösung müssen Sie die Microsoft .NET Framework-Assemblys, die diese Codekomponenten definieren, in den Solution Artifacts-Ordner für die deklarative Lösung kopieren.

Auf einen Blick: Verwenden von vorhandenen Codekomponenten in einer anspruchsvolleren deklarativen Outlook-Lösung

Verwenden einer benutzerdefinierten Codeaktion

In der Datei OIR.config können Sie eine benutzerdefinierte Codeaktion wie im folgenden Beispiel geschildert verwenden.

<Declarative:CodeMethodAction Name ="CreateTaskAction" MethodType ="Custom" 
  MethodName="NewCustomVisitTask" 
  QualifiedTypeName="ContosoCustomer.CustomCodeAction, ContosoCustomer, 
  Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12">
  <Declarative:Parameters>
    <Declarative:ConstantParameter Name="Para1" 
                                   Value="EditRelatedOrderHeader" 
                                   ValueType="System.String"/>
  </Declarative:Parameters>
</Declarative:CodeMethodAction>

Verwenden eines benutzerdefinierten Parts für externe Daten

In der Layoutdatei können Sie wie im folgenden Code gezeigt auf ein benutzerdefiniertes Part für externe Daten verweisen.

<?xml version="1.0" encoding="utf-8" ?>
<Container ContainerType="Stack" 
  xmlns="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Layout" 
  xmlns:loc="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Localization">
  <CustomProperties />
  <Children>
    <OBPart DataSourceName="PrimaryEntityNameInContext" PartType="Custom" 
            Text="Related Order" FillParent="true" 
            QualifiedTypeName="ContosoCustomer.CustomOBPart, ContosoCustomer, 
            Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12">
      <CustomProperties />
    </OBPart>
  </Children>
</Container>

Verwenden eines benutzerdefinierten Menüband-Managers

Geben Sie in der Datei OIR.config den benutzerdefinierten Menüband-Manager wie im folgenden Code gezeigt an.

<SolutionSettings SolutionId="ContosoSalesManager" 
                  SolutionDisplayName="Contoso Sales Manager" 
                  SolutionVersion="1.0.0.0" 
                  xsl:type="Declarative:DeclarativeSolutionSettings" 
                  CustomRibbonManager="ContosoCustomer.CustomRibbonManager, 
                  ContosoCustomer, Version=1.0.0.0, Culture=neutral, 
                  PublicKeyToken=e355b6f7ef818b12"/>

Erstellen und Verwenden von wiederverwendbaren Codekomponenten in einer deklarativen Outlook-Lösung

In diesem Abschnitt werden die Schritte zum Erstellen und Verwenden von wiederverwendbaren Codekomponenten erklärt, nämlich einer benutzerdefinierten Codeaktion, eines benutzerdefinierten Parts für externe Daten und eines benutzerdefinierten Menüband-Managers. Zum Erstellen der Lösung in dieser exemplarischen Vorgehensweise müssen Sie zuerst die Schritte in Exemplarische Vorgehensweise: Erstellen einer anspruchsvolleren deklarativen Outlook-Lösung ausführen, um die Lösungsartefakte zu erstellen, die Sie in der vorliegenden exemplarischen Vorgehensweise ändern werden.

In dieser exemplarischen Vorgehensweise werden folgende Codeausschnitte verwendet:

Voraussetzungen

So entwickeln und erstellen Sie die Lösung und stellen sie bereit

  1. Erstellen Sie in Visual Studio 2010 ein C#-Klassenbibliotheksprojekt, und nennen Sie es ContosoCustomer.

  2. Fügen Sie dem Projekt die folgenden Verweise hinzu:

    • Microsoft.Office.Interop.Outlook

    • Office

    • System.Windows.Forms

  3. Fügen Sie die folgenden Assemblys, die spezifisch für Microsoft Business Connectivity Services (BCS) sind, aus dem Office-Installationsordner hinzu (der Pfad lautet üblicherweise C:\Program Files\Microsoft Office\Office14\, kann jedoch in Ihrer Umgebung davon abweichen):

    • Microsoft.BusinessData.dll

    • Microsoft.Office.BusinessApplications.Runtime.dll

    • Microsoft.Office.BusinessApplications.RuntimeUi.dll

  4. Fügen Sie dem Projekt eine neue Klassendatei hinzu, und nennen Sie sie CustomCodeAction.cs.

  5. Ersetzen Sie den Code in CustomCodeAction.cs durch den Code aus Codeausschnitt: Benutzerdefinierte Codeaktion.

  6. Fügen Sie dem Projekt eine neue Klassendatei hinzu, und nennen Sie sie CustomRibbonManager.cs.

  7. Ersetzen Sie den Code in CustomRibbonManager.cs durch den Code aus Codeausschnitt: Benutzerdefinierter Menüband-Manager.

  8. Fügen Sie dem Projekt ein neues Benutzersteuerelement hinzu, und nennen Sie es CustomOBPart.cs.

  9. Zeigen Sie den Code der Datei CustomOBPart.cs an, und ersetzen Sie den Inhalt durch den Code aus dem ersten Beispiel in Codeausschnitt: Benutzerdefiniertes Part für externe Daten.

  10. Ersetzen Sie den Code von CustomOBPart.Designer.cs durch den Code aus dem zweiten Beispiel in Codeausschnitt: Benutzerdefiniertes Part für externe Daten.

  11. Signieren Sie die Lösung.

    Aktivieren Sie in den Projekteigenschaften auf der Registerkarte Signierung die Option Assembly signieren, und erstellen Sie dann eine Schlüsseldatei. Sie können den Namen und das Kennwort für die Schlüsseldatei beliebig wählen.

  12. Erstellen Sie die Projektmappe.

    Dadurch wird die Assembly im Ordner bin\Debug (oder bin\Release) im Projektordner generiert.

  13. Kopieren Sie die Assembly in den Ordner für Lösungsartefakte. Die Assembly wurde generiert, als Sie die Projektmappe im vorherigen Schritt erstellt haben.

  14. Öffnen Sie die Datei OIR.config im Lösungsartefakteordner, und fügen Sie vor dem ContextDefinition-Endtag von OutlookContactCustomer den folgenden XML-Code für benutzerdefinierte Aktionen hinzu.

    Nachdem Sie die Schritte in Exemplarische Vorgehensweise: Erstellen einer anspruchsvolleren deklarativen Outlook-Lösung ausgeführt haben, sollte ein Lösungsartefakteordner vorhanden sein.

    <Declarative:CodeMethodAction Name ="EditRelatedOrderHeaderAction" 
                                  MethodType ="ShowTaskpaneLayout">
      <Declarative:Parameters>
        <Declarative:ConstantParameter Name="Para1" 
                                       Value="EditRelatedOrderHeader" 
                                       ValueType="System.String"/>
      </Declarative:Parameters>
    </Declarative:CodeMethodAction>
    <Declarative:CodeMethodAction 
      Name ="CreateTaskAction" MethodType ="Custom" 
      MethodName="NewCustomVisitTask" 
      QualifiedTypeName="ContosoCustomer.CustomCodeAction, ContosoCustomer, 
      Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12">
    </Declarative:CodeMethodAction>
    

    Bearbeiten Sie den XML-Code für benutzerdefinierte Aktionen. Ersetzen Sie im CodeMethodAction-Element den Wert des QualifiedTypeName-Attributs durch den mit der Assembly qualifizierten Namen des CustomCodeAction-Typs der Assembly, die beim Erstellen der Projektmappe in einem vorherigen Schritt generiert wurde.

  15. Öffnen Sie Ribbon.xml im Lösungsartefakteordner, und fügen Sie im tabs-Element die folgende Registerkarten- und Menübandschaltflächen-Definition für CreateTaskAction hinzu.

    <tab idMso="TabContact">
      <group id="ContosoCustomerSalesGroupID"
             label="Contoso Customer Sales" getVisible="GetVisible" tag="Context[OutlookContactCustomer.ContosoCustomerSalesGroupID]">
        <button id="NewCustomerVisitTaskButton"
                     size="large"
                     label="New Customer Visit Task"
                     onAction="OnAction"
                     image="TaskItem.bmp"
                     getEnabled ="GetEnabled"
                     tag="Action[OutlookContactCustomer.CreateTaskAction]"
                      />
      </group>
    </tab>
    
  16. Fügen Sie in Ribbon.xml die folgende Menübandschaltflächen-Definition für EditRelatedOrderHeaderAction in der ContosoCustomerSalesGroupID-Gruppe der Registerkarte ContosoSalesSolutionTabID hinzu.

    <button id="EditRelatedOrderHeaderButton"
            size="large"
            label="Edit Customer Orders"
            onAction="OnAction"
            image="ArrowGreen.jpg"
            getEnabled ="GetEnabled"
            tag="Action[OutlookContactCustomer.EditRelatedOrderHeaderAction]"
    />
    
  17. Fügen Sie dem SolutionSettings-Element in der Datei OIR.config das CustomRibbonManager-Attribut entsprechend dem folgenden XML-Beispiel hinzu.

    <SolutionSettings 
      SolutionId="ContosoSalesManager"
      SolutionDisplayName="Contoso Sales Manager"
      SolutionVersion="1.0.0.0"
      xsl:type="Declarative:DeclarativeSolutionSettings"
      CustomRibbonManager="ContosoCustomer.CustomRibbonManager, ContosoCustomer, 
      Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12"/>
    
  18. Ersetzen Sie den Wert des CustomRibbonManager-Attributs durch den mit der Assembly qualifizierten Namen des CustomRibbonManager-Typs der Assembly, die beim Erstellen der Projektmappe in einem vorherigen Schritt generiert wurde.

  19. Erstellen Sie im Lösungsartefakteordner eine Datei namens EditRelatedOrderHeader.xml, und fügen Sie ihr den folgenden XML-Beispielcode für benutzerdefinierte Parts für externe Daten hinzu. Speichern Sie die Datei anschließend im Lösungsartefakteordner.

    <?xml version="1.0" encoding="utf-8" ?>
    <Container ContainerType="Stack"
      xmlns="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Layout"
      xmlns:loc="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Localization">
      <CustomProperties />
      <Children>
        <OBPart DataSourceName="PrimaryEntityNameInContext" PartType="Custom"
                Text="Related Order" FillParent="true"
                QualifiedTypeName="ContosoCustomer.CustomOBPart, ContosoCustomer, 
                Version=1.0.0.0, Culture=neutral, PublicKeyToken=e355b6f7ef818b12">
          <CustomProperties />
        </OBPart>
      </Children>
    </Container>
    
  20. Bearbeiten Sie die Datei EditRelatedOrderHeader.xml. Ersetzen Sie im OBPart-Element den Wert des QualifiedTypeName-Attributs durch den mit der Assembly qualifizierten Namen des CustomOBPart-Typs der Assembly, die beim Erstellen der Projektmappe in einem vorherigen Schritt generiert wurde.

  21. Fügen Sie der Datei OIR.config das Layout hinzu. Fügen Sie in der Datei OIR.config im Layouts-Element vor dem ContextDefinition-Endtag von OutlookContactCustomer Folgendes hinzu.

    <Declarative:Layout Name="EditRelatedOrderHeader" 
                        LayoutFileName="EditRelatedOrderHeader">
    </Declarative:Layout>
    
  22. Packen Sie die Lösung, und stellen Sie sie dann bereit.

    1. Starten Sie das Tool zum Packen von BCS-Lösungen.

    2. Geben Sie einen Namen und eine Version für die Lösung an, und wählen Sie für die Art der Lösung Outlook Intermediate Declarative Solution aus.

    3. Wählen Sie den Lösungsartefakteordner als Source Folder Path aus.

    4. Erstellen Sie auf dem lokalen Computer einen Ordner, und wählen Sie ihn als Output Folder Path aus.

    5. Klicken Sie auf Package, um die Lösung zu packen.

    6. Klicken Sie auf Deploy, um die Lösung bereitzustellen.

HinweisHinweis

Die zuvor erwähnten XML-Beispiele enthalten bereits den mit der Assembly qualifizierten Namen der CustomCodeAction-, CustomRibbonManager- bzw. der CustomOBPart-Klassen für die CodeMethodAction-, CustomRibbonManager- bzw. OBPart-XML-Werte. Sie müssen die Werte für die mit der Assembly qualifizierten Namen jedoch aktualisieren, da der PublicKeyToken-Wert nach dem Signieren der Assembly dieser Lösung anders lautet. Darüber hinaus ändern sich die mit der Assembly qualifizierten Namen, wenn Sie einen anderen Namespacenamen oder andere Klassennamen verwendet haben, und müssen folglich aktualisiert werden.