Eine Visual Basic 6.0-Anwendung durch die Integration der Windows-Desktopsuche und von Office Outlook erweitern

Sales Support: Eine hybride Visual Basic 6.0- & Visual Basic 2005-Anwendung, Teil 1

Scott Swigart

Februar 2008

Zusammenfassung: Dieser Artikel ist der erste einer vierteiligen Serie und zeigt, dass es nicht erforderlich ist, eine Microsoft Visual Basic 6.0-Anwendung nach Microsoft Visual Basic 2005 zu portieren, um die Vorteile von .NET nutzen zu können.

Klicken Sie hier, um das Setupprogramm für die Anwendung herunterzuladen.

Klicken Sie hier, um den Quellcode der Anwendung herunterzuladen.

Inhalt

Einführung

Die Anwendung "Sales Support"

Die Windows-Desktopsuche integrieren

Anwendungsarchitektur

Visual Basic 2005-Implementierung

Visual Basic 6.0-Implementierung

Schlussfolgerung

Weiterführende Informationen

Einführung

Unternehmen und andere Organisationen haben seit der Einführung von Microsoft Visual Basic 6.0 im Jahre 1998 Millionen Zeilen Quellcode erstellt. Wenn man die Kosten und den Zeitaufwand berücksichtigt, die bei der Migration einer Visual Basic 6.0-Anwendung nach Microsoft Visual Basic 2005 anfallen, ist es verständlich, dass viele Unternehmen die vorhandenen Visual Basic 6.0-Anwendungen warten und sogar weiterentwickeln.

Viele Entwickler und Unternehmen gehen davon aus, dass eine Anwendung zuerst auf das Microsoft .NET Framework portiert werden muss, um die im .NET Framework zur Verfügung stehenden Verbesserungen zu nutzen. Dies ist jedoch nicht der Fall. Sie können vorhandene Visual Basic 6.0-Anwendungen erweitern, indem Sie neue Komponenten in Visual Basic 2005 erstellen. Es ist nicht erforderlich, die komplette Anwendung nach Visual Basic 2005 zu portieren.

Diese Artikelserie stellt verschiedene Möglichkeiten vor, wie Sie eine vorhandene Visual Basic 6.0-Anwendung – in diesem Fall eine Beispielanwendung zur Unterstützung der Vertriebsmitarbeiter – durch den Einsatz von Visual Basic 2005 und des .NET Framework erweitern können.

Die Anwendung "Sales Support"

"Sales Support" ist eine sehr einfache Anwendung zur Unterstützung der Vertriebsmitarbeiter, mit der Kundenkonten, Kontaktinformationen und Umsatzprognosen abgerufen werden können. Diese Anwendung soll keine umfassende Lösung darstellen, sie dient als Beispiel für eine vorhandene Geschäftslösung, die mit Visual Basic 6.0 erstellt wurde. Des Weiteren dient sie als Ausgangspunkt für eine Reihe von nützlichen Anwendungserweiterungen, die sich am besten mit Visual Basic 2005 implementieren lassen.

Installation

Der Installer für Sales Support (https://download.microsoft.com/download/A/5/6/A56DD645-14AF-4CC2-BEC6-EEBE5B284167/installer.03.zip) wurde auf Microsoft Windows XP SP2 und auf Windows Vista getestet; er sollte aber auch mit älteren Betriebssystemversionen funktionieren. Da es sich um eine hybride Visual Basic 6.0- und Visual Basic 2005-Anwendung handelt, wird vom Installationsprogramm .NET Framework als Voraussetzung installiert. Diese Anwendung speichert die Daten in einer Backend-Datenbank. Aus diesem Grund installiert das Setupprogramm Microsoft SQL Server 2005 Express Edition, das Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) ersetzt.

Wenn die benötigten Komponenten noch nicht installiert sind, werden sie vom Installer automatisch heruntergeladen. Eine vorhandene Installation wird automatisch erkannt; es wird dann mit der Installation der Anwendung weitergemacht.

Mit Visual Studio 2005 ist die Installation der erforderlichen Komponenten extrem einfach. Wählen Sie hierzu lediglich die erforderlichen Komponenten aus, wie es Abbildung 1 zeigt.

Cc299499.1cb290f9-b3f5-4281-8d0d-fac3fba4e3b3(de-de,VS.80).gif

Abbildung 1: In Visual Studio 2005 die erforderlichen Komponenten auswählen

Wenn Sie einen Installer für eine Hybridanwendung erstellen, bietet sich als geeignetstes Verfahren an, in Visual 2005 ein neues Setup-Projekt zu erstellen, das dann dafür sorgt, dass alle erforderliche Komponenten wie .NET Framework und alle Visual Basic 2005-Erweiterungen für Ihre Anwendung installiert werden. Nachdem alle erforderlichen Komponenten und die Visual Basic 2005-Erweiterungen erfolgreich installiert wurden, ruft der Installer außerdem das Setupprogramm für Ihre Visual Basic 6.0-Anwendung auf.

Anschließend erstellen Sie wie gewohnt Ihren Visual Basic 6.0-Installer und verwenden hierzu den Visual Studio 6.0 Package and Deployment-Assistenten oder eines der exzellenten Bereitstellungsprodukte eines Drittanbieters. Die Anwender müssen dann lediglich einen einzigen Installer starten, um Ihre Anwendung und alles, was diese benötigt, zu installieren.

Verwendung

Nachdem die Anwendung installiert wurde, können Sie sie im Startmenü aufrufen. Suchen Sie nach dem Eintrag Sales Support8_3. Die Anwendung fordert Sie auf, sich einzuloggen. Um die Nutzung zu vereinfachen, stehen in den Textfeldern bereits Standardwerte, was Abbildung 2 zeigt. Klicken Sie einfach auf die Schaltfläche Login, um fortzufahren.

Cc299499.c5e67635-89de-4e6c-91b8-c0d3f48c2b82(de-de,VS.80).gif

Abbildung 2: Das Anmeldeformular der Anwendung Sales Support

Nachdem Sie sich erfolgreich angemeldet haben, wird das Hauptfenster der Anwendung angezeigt, das Sie in Abbildung 3 sehen. Die Anwendung stellt drei verschiedene Sichten auf die Verkaufsinformationen zur Verfügung. Die Registerkarte Accounts zeigt alle Kunden sowie einige Umsatzdaten an. Diese Ansicht kann sortiert werden, indem man die gewünschte Spaltenüberschrift anklickt. Auf der Registerkarte Contacts finden Sie die zweite Ansicht; diese zeigt ausführlichere Informationen zu den einzelnen Kontakten an. Die Registerkarte Forecast bietet die dritte Ansicht und zeigt Informationen zu den prognostizierten Umsätzen an.

Cc299499.9cd3fbb6-68bd-43b1-843f-62db877be604(de-de,VS.80).gif

Abbildung 3: Das Hauptfenster der Anwendung

Die Anwendung Sales Support soll keine fertige Lösung darstellen, sondern dient als Grundlage für realistische Erweiterungen einer Visual Basic 6-Anwendung.

Die Windows-Desktopsuche integrieren

Anwendungen, die der Unterstützung der Vertriebsmitarbeiter dienen, müssen in der Lage sein, die Kommunikation mit einem Kunden nachzuverfolgen. Eine logische Erweiterung der Sales Support-Anwendung wäre daher eine bessere Integration der E-Mail. Es wäre besonders nützlich, wenn die gesamte Kommunikation mit einem bestimmten Kontakt abgerufen werden könnte, und dies am besten direkt aus der Anwendung heraus.

Microsoft stellt diese Basisfunktionalität mit der kostenlosen Microsoft Windows-Desktopsuche (Microsoft Windows Desktop Search, WDS) zur Verfügung. WDS wird normalerweise als eigenständige Anwendung ausgeführt; aus Gründen der Benutzerfreundlichkeit wäre es besser, wenn die WDS-Funktionalität direkt in der Benutzeroberfläche von Sales Support zur Verfügung stünde.

Die erste Erweiterung für Sales Support macht genau das. Sie enthält ein neues, in Visual Basic 2005 implementiertes Formular, das WDS verwendet, um alle E-Mail-Nachrichten, die von und an einen bestimmten Kunden gesendet wurden, abzurufen. Die Datenbank mit den Kundendaten enthält eine Reihe von fiktiven E-Mail-Adressen. Damit Sie die WDS-Funktionalität nutzen können, sollten Sie die Daten eines Kunden ändern und dort die E-Mail-Adresse eines Kontakts eintragen, mit dem Sie tatsächlich kommuniziert haben.

So konfigurieren Sie eine tatsächliche E-Mail-Adresse:

  1. Starten Sie die Anwendung Sales Support.
  2. Klicken Sie auf die Registerkarte Contacts. Sie sehen dann die Liste mit den Kontakten, was in Abbildung 4 dargestellt ist.

Cc299499.9b0e3b46-fc72-4de7-8ac9-4e7522f2069f(de-de,VS.80).gif

Abbildung 4: Die Registerkarte Contacts

  1. Doppelklicken Sie auf den Namen eines Kontakts, um diesen zu bearbeiten.

Cc299499.2e7bb5bd-d7a5-4d68-ae9b-cf510eb7fed9(de-de,VS.80).gif

Abbildung 5: Einen Kontakt bearbeiten

  1. Ändern Sie die E-Mail-Adresse dieses Kontakts in Ihre eigene E-Mail-Adresse, die Ihres Vorgesetzten oder in die einer anderen Person, mit der Sie kommuniziert haben, und klicken Sie dann auf OK.

Auf die Suchfunktionalität wird über die neue Schaltfläche Communications zugegriffen, die sich auf der Registerkarte Contacts (siehe Abbildung 6) befindet.

Cc299499.7fa18c00-1a5e-4c54-a802-7f911cbaec64(de-de,VS.80).gif

Abbildung 6: Die Erweiterung mit der Windows-Desktopsuche

Wenn die Schaltfläche Communications angeklickt wird, ruft die Visual Basic 6.0-Anwendung ein Form auf, das mit Visual Basic 2005 erstellt wurde. Dieses Form wiederum verwendet WDS, um die E-Mail-Kommunikation mit dem ausgewählten Kontakt abzurufen, was Abbildung 7 zeigt.

Cc299499.7690f946-8293-4bd7-aa92-84faa3eb164a(de-de,VS.80).gif

Abbildung 7: Das neue Visual Basic .NET-Form zeigt die Suchergebnisse an

Da für diese Erweiterung Visual Basic 2005 verwendet wurde, erhält das Form eine Reihe Features als Zugabe. Die Splitterbar zwischen dem Grid und dem Textbereich funktioniert und benötigt nicht eine Zeile Code, da in Visual Basic 2005 das SplitPanel-Steuerelement zur Verfügung steht. Außerdem passen sich das Form und seine Steuerelemente intelligent an, da in .NET Framework Steuerelemente angedockt werden können. Die Steuerelemente verwenden dann einfach den Platz, der ihnen zur Verfügung steht.

Anwendungsarchitektur

Der Kern der Anwendung stellt eine Visual Basic 6.0-Anwendung dar, die mit einer SQL Server 2005 Express-Datenbank kommuniziert. Wenn Sie auf der Registerkarte Contacts die Schaltfläche Communications anklicken, wird die E-Mail-Adresse des Kontakts an das Visual Basic 2005-Form übergeben. Wenn das Visual Basic 2005-Form die E-Mail-Adresse kennt, ruft es die Windows-Desktopsuche auf, um die Liste der E-Mails abzufragen und verwendet dann Aufrufe in Microsoft Office Outlook, um die Inhalte der E-Mail-Nachrichten zu erhalten.

Cc299499.d4bd8aa3-623c-4a85-9730-332583021f13(de-de,VS.80).gif

Abbildung 8: Der Datenfluss der Anwendung

Visual Basic 2005-Implementierung

Um Forms zu erstellen, die von Visual Basic 6.0 aus aufgerufen werden können, installieren Sie Visual Studio 2005 und das Interop Forms Toolkit 2.0. Durch die Verwendung von Interop Forms Toolkit 2.0 können Sie Visual Basic 2005-Forms erstellen, die von Visual Basic 6.0 aus wie normale COM-Objekte aussehen.

Die ersten Schritte bestehen darin, das Interop Forms Toolkit 2.0 zu installieren, Visual Studio 2005 zu starten und ein neues Visual Basic 6.0 InteropForm Library-Projekt zu erstellen, was Abbildung 9 zeigt.

Cc299499.0d491787-4a97-48e7-af0b-6b6bb5eda224(de-de,VS.80).gif

Abbildung 9: Erstellen eines InteropForm Library-Projekts

Das neue Projekt enthält ein Element des Typs InteropForm. Bei diesem Element handelt es sich um ein normales Visual Basic 2005-Form, das zusätzliche Informationen enthält, die angeben, dass ein COM-Wrapper erstellt werden soll. Durch diesen Wrapper ist es für Visual Basic 6.0 einfach, dieses Form aufzurufen. Wenn Sie möchten, dass Ihre Komponente mehrere Forms enthält, können Sie weitere Elemente hinzufügen und verwenden dazu die Vorlage InteropForm, was Abbildung 10 zeigt.

Cc299499.8b846c5e-c282-4f77-9239-e4eb7c852270(de-de,VS.80).gif

Abbildung 10: Weitere InteropForms in das Projekt einfügen

Im InteropForm selbst können Sie verschiedene Eigenschaften und Methoden als mittels COM aufrufbar kennzeichnen. Bei Eigenschaften geben Sie das Attribut InteropFormProperty an, was Listing 1 zeigt.

    <InteropFormProperty()> _
    Public Property EmailAddress() As String
        Get
            Return m_emailAddress
        End Get
        Set(ByVal value As String)
            If value <> m_emailAddress Then
                m_emailAddress = value
            End If
        End Set
    End Property

Listing 1: Eigenschaften eines Visual Basic 2005-Forms für Visual Basic 6.0 verfügbar machen

Mit dieser Eigenschaft ist die Visual Basic 6.0-Anwendung in der Lage, die E-Mail-Adresse anzugeben, für die die Nachrichten gesucht werden sollen. Die Suche selbst wird von der Funktion Search vorgenommen, die Sie in Listing 2 sehen.

    <InteropFormMethod()> _
    Public Sub Search()
        LabelSearching.Visible = True
        Application.DoEvents()

        Dim cn As New OleDbConnection( _
            "Provider=Search.CollatorDSO;" & _
            "Extended Properties='Application=Windows';")
        Try
            cn.Open()
        Catch
            MessageBox.Show("Search functionality is dependent " & _
                "on Windows Desktop Search 3.0 or later, " & _
                "which is not installed.")
            Me.Close()
            Return
        End Try

        Dim da As New OleDbDataAdapter("Select System.Title, " & _
            "System.ItemURL, " & _
            "System.Message.SenderName, " & _
            "System.Message.SenderAddress, " & _
            "System.Message.ToAddress, " & _
            "System.Message.DateSent  " & _
            "from systemindex " & _
            "where (System.Message.SenderAddress = '" & _
                m_emailAddress & "' " & _
            "or CONTAINS(System.Message.ToAddress, '" & _
                m_emailAddress & "')) " & _
            "and CONTAINS(System.Message.MessageClass, 'MAPI')" & _
            "order by System.Message.DateSent desc", cn)

        Dim dt As New DataTable
        da.Fill(dt)
        dt.Columns.Add("To", GetType(String))
        For Each dr As DataRow In dt.Rows
            Dim toAddress As New StringBuilder
            For Each address As String In dr("System.Message.ToAddress")
                If toAddress.Length = 0 Then
                    toAddress.Append(address)
                Else
                    toAddress.Append(", ").Append(address)
                End If
            Next
            dr("To") = toAddress.ToString()
        Next

        bs.DataSource = dt

        WdsResultsDataGridView.AutoGenerateColumns = False
        WdsResultsDataGridView.DataSource = bs
        bs.ResetBindings(False)

        LabelSearching.Visible = False

        cn.Close()
    End Sub

Listing 2: Die Visual Basic 2005-Funktion Search

Sie können erkennen, dass diese Funktion mit dem Attribut InteropFormMethod versehen wurde, wodurch die Funktion Search von Visual Basic 6.0-Anwendungen aus aufgerufen werden kann.

WDS stellt einen OLE DB-Provider bereit, er es Ihnen erlaubt, mittels SQL-Anweisungen eine Abfrage an WDS zu erstellen. Im Beispiel können Sie sehen, dass die SELECT-Anweisung den Namen des Absenders, die "An"-Adresse, das Sendedatum und andere Informationen anfordert. Das Ergebnis sind die E-Mail-Nachrichten, die an den bzw. von dem Kontakt gesendet wurden; diese sind nach dem Datum sortiert. Die Details beim Erstellen einer WDS-Abfrage können ein wenig komplex sein, da WDS zahlreiche Felder und Suchoptionen unterstützt. (Weitere Links zum Thema WDS-Abfragen finden Sie im Abschnitt "Weiterführende Informationen".)

Da eine E-Mail mehrere Empfänger haben kann, wird weiterer Code verwendet, um eine kommaseparierte Liste aller "An"-Adressen zu erstellen und diese in einer eigenen Spalte anzuzeigen. Abschließend wird ein DataGridView–Steuerelement an die Ergebnisse gebunden.

In Abbildung 7 können Sie sehen, dass das Form eine Vorschau der tatsächlichen E-Mail-Nachricht anzeigt. Diese Informationen stehen nicht über WDS zur Verfügung, WDS liefert lediglich einen Index in die E-Mail-Nachrichten bzw. Dateien. Um den E-Mail-Inhalt zu erhalten, muss das Form mit Microsoft Office Outlook kommunizieren.

Wenn der Anwender eine neue E-Mail-Nachricht im Grid anklickt, wird im dahinter liegenden BindingSource-Objekt ein Ereignis ausgelöst. Das BindingSource-Objekt ist verantwortlich dafür, den aktuellen Datensatz mitzuhalten (ähnlich wie das Recordset–Objekt in Visual Basic 6.0) und bei jeglicher Änderung die entsprechenden Ereignisse auszulösen. Das Ereignis PositionChanged des BindingSource-Objekts ist eine gute Stelle, um die Inhalt des derzeit ausgewählten E-Mail-Elements abzurufen, was Listing 3 zeigt.

    Private Sub bs_PositionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles bs.PositionChanged
        If outlookNs IsNot Nothing Then
            Dim dr As DataRow = bs.Item(bs.Position).row
            Dim s As String = EIDFromEncodedStringWDS30(dr("system.itemurl"))
            Dim mailItem As Object = outlookNs.GetItemFromID(s, Nothing)

            If mailItem IsNot Nothing Then
                RichTextBox1.Text = mailItem.body
            Else
                RichTextBox1.Text = "Unable to show preview."
            End If

        Else
            RichTextBox1.Text = "Outlook is not installed.  " & _
                "Unable to show preview"
        End If
    End Sub

Listing 3: Den Inhalt einer E-Mail-Nachricht bei Microsoft Office Outlook abrufen

Die Elemente werden von Microsoft Office Outlook über eine Element-ID abgerufen. WDS gibt die Element-ID als einen Teil des Feldes ItemURL zurück. Die Anwendung extrahiert die ID aus dem Feld ItemURL und verendet das Office Outlook-Objektmodell, um das Element anzufordern. Nachdem das Element verfügbar ist, wird sein Inhalt in einem Rich-Text-Steuerelement angezeigt.

Visual Basic 6.0-Implementierung

Wie Sie sehen können, ist das Erstellen des neuen Forms in Visual Basic 2005 recht gradlinig und einfach. Auch das Aufrufen des neuen Forms von Visual Basic 6.0 aus ist gradlinig und einfach. Wenn Sie den Visual Basic 2005-Code kompilieren, wird er von Visual Studio automatisch als COM-Objekt registriert. In Visual Basic 6.0 ist die Komponente im Dialogfeld References (Verweise) sichtbar, was Abbildung 11 zeigt.

Cc299499.6f0b74d7-6ac8-4f30-ab59-6e47cae94eed(de-de,VS.80).gif

Abbildung 11: In Visual Basic 6.0 einen Verweis auf die Visual Basic 2005-Erweiterung erstellen

Nachdem Sie einen Verweis auf das Projekt eingefügt haben, können Sie den Visual Basic 2005-Code so aufrufen, wie Sie es mit jedem anderen COM-Objekt machen würden. Den Code, der das Suchformular anzeigt, finden Sie in Listing 4.

Private Sub cmdCommunications_Click()
    Dim frmSearch As VBNET_Extensions_WdsForm
    Set frmSearch = New VBNET_Extensions_WdsForm
    frmSearch.Show
    frmSearch.EmailAddress = rsContacts("Email")
    DoEvents
    frmSearch.Search
End Sub

Listing 4: Von Visual Basic 6.0 aus die Visual Basic 2005-Erweiterung aufrufen

Schlussfolgerung

Anhand dieses Beispiels konnten Sie sehen, dass es nicht schwierig ist, mit Visual Basic 2005 Erweiterungen für bestehende Visual Basic 6.0-Anwendungen zu erstellen; tatsächlich wird dies auch bei den meisten Legacy-Anwendungen der optimale und angemessene Weg sein. Wenn Sie Ihre vorhandenen Anwendungen mit Visual Basic 2005 erweitern, können Sie Ihre bisherigen Investitionen weiter sinnvoll einsetzen und sich im Verlauf der Arbeiten mit Visual Basic 2005 vertraut machen. Dieser Ansatz birgt kaum Risiken (vergleicht man ihn mit der Migration der gesamten Anwendung nach Visual Basic 2005) und ermöglicht Ihnen außerdem, schnell Ihre vorhandenen Anwendungen zu erweitern und zu verbessern.

Weiterführende Informationen

Über den Autor

Scott Swigart verbringt seine Zeit mit Consulting, mit Autorentätigkeit und ist als Referent über sich entwickelnde und neu entstehende Technologien tätig. Dank seiner mehr als 15-jährigen Erfahrung als Programmierer und seines permanenten Kontakts mit zukünftigen Technologien im Bereich der Softwareentwicklung ist Scott Swigart in der Lage, Unternehmen dabei zu unterstützen, das Beste aus den heutigen Technologien herauszuholen und sich dabei gleichzeitig auf die Verwendung von zukünftigen Technologien vorzubereiten. Scott Swigart ist außerdem Autor von mehreren Büchern zu .NET, zertifizierter Microsoft Trainer (MCT) und Entwickler (MCSD) sowie Microsoft MVP. Nehmen Sie mit Scott Swigart Kontakt auf über scott@swigartconsulting.com oder lesen Sie seine aktuellen Grübeleien unter blog.swigartconsulting.com.