Verwenden von Smart Tags mit Recherchediensten für Microsoft Office System
Betrifft:
Microsoft Office System
Jan Fransen beschreibt, wie Sie ein Smart Tag für die Verwendung in einem Recherchedienst von Microsoft Office System erstellen und ein Smart Tag in die Antwort des Recherchedienstes integrieren. Zudem lernen Sie einige Tricks für die Kommunikation zwischen dem Smart Tag und dem Recherchedienst. Dieser Artikel enthält auch Links zu englischsprachigen Seiten.

Auf dieser Seite
Übersicht
Smart Tags in der Benutzeroberfläche
Smart Tag-Entwicklung
Erstellen eines Recherchedienst-Smart Tags
Hinzufügen eines Smart Tags zur Recherchedienstantwort
Neue Aktionen
Bestimmen der Hostanwendung mithilfe des Recherchedienstes
Senden von zusätzlichen Informationen
Nicht unterstützte Features
Schlussfolgerung
Übersicht
Microsoft Office 2003-Anwendungen enthalten ein Recherche-Feature zum einfachen Durchsuchen von integrierten und Onlineressourcen wie einem Wörterbuch oder Nachrichtenartikeln. Die Recherchefunktion lässt sich zudem erweitern, das heißt ein Entwickler kann einen Webdienst bzw. Recherchedienst erstellen, der speziell auf die Interaktion mit dem Aufgabenbereich der Recherche zugeschnitten ist.
In den meisten Recherchediensten wird ein Großteil der Arbeit auf dem Server erledigt. Die clientseitige Arbeit beschränkt sich auf das Senden einer Abfrage und das anschließende Empfangen und Anzeigen einer Antwort im Recherche-Aufgabenbereich. Wenn Sie Ihren eigenen Recherchedienst erstellen, möchten Sie mitunter auf Clientebene zusätzliche Funktionen bereitstellen. Zu diesem Zweck können Sie ein Smart Tag erstellen, das clientseitig ausgeführt wird, und anschließend XML hinzufügen, die das Smart Tag auf das von Ihrem Recherchedienst gesendete Rückmeldungspaket verweist.
In diesem Artikel erfahren Sie, wie Sie ein Smart Tag für die Verwendung mit einem Recherchedienst erstellen und ein Smart Tag in die Antwort des Recherchedienstes integrieren. Zudem lernen Sie einige Tricks für die Kommunikation zwischen dem Recherchedienst und dem Smart Tag.
Dieser Artikel enthält einige Beispiele für Microsoft Visual Basic .NET-Code aus einer Smart Tag-DLL und einem Recherchedienst. Es werden jedoch nicht alle Schritte erläutert, die Sie für das Erstellen des Smart Tags und des Recherchedienstes durchführen müssen. Eine detaillierte Erläuterung der Erstellung von Smart Tags finden Sie unter Developing Smart Tag DLLs und Building Smart Tags in Microsoft Visual Basic .NET.
Weitere Informationen zum Erstellen von Recherchediensten finden Sie unter Customizing the Microsoft Office 2003 Research Task Pane und im Microsoft Office 2003 Research Service Software Development Kit.
Smart Tags in der Benutzeroberfläche
Smart Tags gibt es seit Microsoft Office XP. Diese kleinen Schaltflächen stellen dem Anwender kontextbezogene Funktionen oder Informationen zur Verfügung, während er an einer Datei arbeitet. Das können Wörter eines bestimmten Typs (z.B. Personennamen oder Datumsangaben) oder gängige Muster wie Kreditkartennummern oder Postleitzahlen sein. Wenn Sie z.B. ein Datum in einen Word-Artikel eingeben und anschließend den Mauszeiger auf das Datum richten, sehen Sie eine interaktive Smart Tag-Schaltfläche, wie in Abbildung 1 dargestellt.
Abbildung 1. Die gestrichelte violette Linie zeigt an, dass ein Smart Tag das Datum erkannt hat.
Wenn Sie auf die interaktive Smart Tag-Schaltfläche klicken, sehen Sie eine Liste von geeigneten Aktionen für den erkannten Text, wie die in Abbildung 2 dargestellte Liste.
Abbildung 2. Smart Tag-Aktionen bieten schnellen Zugriff auf gängige Aufgaben.
In diesem allgemeinen Beispiel für ein Smart Tag wird das Smart Tag-Symbol angezeigt, weil der von Ihnen eingegebene Text von der Recognizer-Klasse eines auf Ihrem Computer installierten Smart Tags erkannt wird. In Microsoft Office System verwendet das Recherchefeature für die Suche nach zu markierendem Text kein Smart Tag-Erkennungsverfahren. Stattdessen gibt der Entwickler des Recherchedienstes an, wann und wo die interaktive Smart Tag-Schaltfläche angezeigt werden soll. In Abbildung 3 sehen Sie den Recherche-Aufgabenbereich mit einem Ergebnis, das eine interaktive Smart Tag-Schaltfläche umfasst.
Abbildung 3. Sie legen die Position der interaktiven Schaltfläche fest.
Smart Tag-Entwicklung
Microsoft Office System enthält mehrere vorgefertigte Smart Tags. Zudem bietet das Smart Tag-Modell Entwicklern die Infrastruktur für das Erstellen und Verteilen von benutzerdefinierten Smart Tags. Sie können zwar auch unter Verwendung von XML einfache Smart Tags erstellen, doch die meisten Smart Tags sind DLLs (Dynamic Link Libraries), die mit Microsoft Visual Basic, Microsoft Visual C++, Microsoft Visual Basic .NET oder einem anderen COM-System entwickelt wurden.
Eine Smart Tag-DLL kann sich aus zwei Teilen zusammensetzen:
-
Eine Recognizer-Klasse scannt den Artikel während Ihrer Texteingabe und hebt erkannte Begriffe durch eine gestrichelte violette Linie hervor. Wenn der Mauszeiger auf einen erkannten Begriff gerichtet wird, wird eine interaktive Smart Tag-Schaltfläche angezeigt.
-
Eine Action-Klasse wird aufgerufen, wenn der Benutzer auf die interaktive Smart Tag-Schaltfläche klickt. Sie enthält eine Liste der anzuzeigenden Menübefehle und definiert den Code, der bei Auswahl eines Menübefehls ausgeführt wird.
Sie müssen nicht sowohl eine Recognizer- als auch eine Action-Klasse in derselben DLL bereitstellen, da die Architektur lose gekoppelt ist: Diese beiden Klassen sind über einen Namespace verknüpft, der in der Smart TagName-Eigenschaft der Klassen definiert ist.
Wenn Sie einen Smart Tag entwickeln, das ausschließlich von einem Recherchedienst verwendet werden soll, müssen Sie keine Recognizer-Klasse erstellen: Der Recherchedienst sendet der Smart Tag-Action-Klasse alle erforderlichen Informationen für das Erstellen einer entsprechenden Aktionsliste.
Erstellen eines Recherchedienst-Smart Tags
Sie erstellen eine Smart Tag-Action-Klasse, indem Sie die Schnittstellen ISmart TagAction und ISmart TagAction2 implementieren und Code für alle Members der Schnittstellen hinzufügen. Beim Entwickeln von Smart Tags für den Recherche-Aufgabenbereich sind insbesondere drei Members für Sie von Interesse: Smart TagName, VerbCaptionFromID2 und InvokeVerb2.
Die Smart TagName-Eigenschaft definiert den eindeutigen Namen für den Smart Tag. Der Smart TagName setzt sich aus zwei Teilen zusammen: dem Namespace-URI und einem Tag-Namen für den Smart Tag. Diese beiden Teile sind durch ein Nummernzeichen (#) getrennt.
Ihr Recherchedienst muss den Namen umfassen, der in Smart TagName in der XML-Antwort definiert ist, die an den Recherche-Aufgabenbereich gesendet wird. Nachfolgend sehen Sie die Smart TagName-Eigenschaft, die für die Beispiele in diesem Artikel verwendet wird:
Public ReadOnly Property Smart TagName( _ ByVal Smart TagID As Integer) As String _ Implements Smart TagLib.ISmart TagAction.Smart TagName Get Return "urn:samples-microsoft-com#HelloWorldSmart Tag" End Get End Property
Wenn im Recherche-Aufgabenbereich eine interaktive Schaltfläche eingeblendet wird und der Benutzer darauf klickt, wird dem Benutzer eine Liste der möglichen Aktionen angezeigt. Der Text für diese Aktionen wird durch die VerbCaptionFromID-Eigenschaft bestimmt. Der Code für ein Einzelaktions-Smart Tag sieht wie folgt aus:
Public ReadOnly Property VerbCaptionFromID2( _ ByVal VerbID As Integer, _ ByVal ApplicationName As String, _ ByVal LocaleID As Integer, _ ByVal Properties As Smart TagLib.ISmart TagProperties, _ ByVal [Text] As String, _ ByVal Xml As String, _ ByVal Target As Object) As String _ Implements Smart TagLib.ISmart TagAction2.VerbCaptionFromID2 Get Return "Show Hello World" End Get End Property
Den Code für die Aktion(en) selbst finden Sie in der InvokeVerb2-Prozedur. Dieses einfache Beispiel zeigt ein "Hello, World"-Meldungsfeld an, wenn die Aktion ausgewählt wird:
Public Sub InvokeVerb2( _
ByVal VerbID As Integer, _
ByVal ApplicationName As String, _
ByVal Target As Object, _
ByVal Properties As Smart TagLib.ISmart TagProperties, _
ByVal [Text] As String, _
ByVal Xml As String, _
ByVal LocaleID As Integer) _
Implements Smart TagLib.ISmart TagAction2.InvokeVerb2
MsgBox("Hello, World!")
End Sub
Anmerkung Sie können weiterhin auch ein für Office XP mit der Smart Tag 1.1-Schnittstelle erstelltes Smart Tag in einem Recherchedienst verwenden. In diesem Fall befindet sich der Code, der beim Auswählen einer Aktion ausgeführt wird, in der InvokeVerb-Methode anstatt in InvokeVerb2, und der Text für das Aktionsmenü befindet sich in VerbCaptionFromID.
Hinzufügen eines Smart Tags zur Recherchedienstantwort
Sobald Sie den Smart Tag erstellt und registriert haben, können Sie ihn Ihrem Recherchedienst hinzufügen. Das Schema für den Inhalt von Rechercheantworten bietet einen Actions-Knoten, der die folgenden untergeordneten Elemente unterstützt:
-
Das Insert-Element fügt Text an der markierten Stelle in den aktuellen Artikel ein.
-
Das Copy-Element kopiert Text in die Zwischenablage.
-
Das Custom-Element ruft die Action-Klasse einer Smart Tag-DLL auf, falls es auf dem Clientcomputer installiert ist.
-
Das Hyperlink-Element ermöglicht einer Aktion das Starten eines Hyperlinks.
-
Das NewQuery-Element ermöglicht einer Aktion das Starten einer neuen Abfrage.
Weitere Informationen zum Schema für den Inhalt von Rechercheantworten finden Sie im Microsoft Office 2003 Research Service Software Development Kit.
Die vom Response-Code generierte XML sieht wie folgt aus:
<Actions> <Custom xmlns:hw="urn:samples-microsoft-com"> <hw:HelloWorldSmart Tag>Hello</hw:HelloWorldSmart Tag> </Custom> </Actions>
Der im Custom-Element definierte Namespace ist der Namespace des Smart Tag. Dieser Abschnitt muss mit dem Namespace übereinstimmen, der in der Smart TagName-Eigenschaft der Action-Klasse des Smart Tag definiert ist.
Dem Custom-Element-Smart Tag ist der Tag-Abschnitt des Namens untergeordnet, der in der Smart TagName-Eigenschaft definiert ist. Dessen Inhalt ersetzt das Erkennungsverfahren bei einem Smart Tag ohne Recherchedienst. Wenn ein Smart Tag in einer Office 2003-Anwendung einen Begriff erkennt, wird der erkannte Begriff normalerweise im Rahmen des Erkennungsverfahrens an die InvokeVerb2-Methode der Aktion gesendet. Bei einem Recherchedienst-Smart Tag sendet der Recherchedienst den erkannten Begriff als das Text-Argument und als Teil des Xml-Arguments an die InvokeVerb2-Methode. Bei dem obigen Beispiel empfängt die InvokeVerb2-Methode ein Text-Argument mit folgendem Wert:
'Hello'
sowie ein XML-Argument mit folgendem Wert:
'<xml xmlns='urn:samples-microsoft-com'> <HelloWorldSmart Tag>Hello</HelloWorldSmart Tag> </xml>'
Sie können den Code in InvokeVerb2 schreiben, um einen dieser Werte zu analysieren und gemäß dem gefundenen Wert entsprechende Aktionen zu ergreifen.
In Visual Basic .NET können Sie den Code zum Erstellen des Smart Tag-Abschnitts der XML-Antwort wie folgt erstellen:
Dim myXMLwriter As New XmlTextWriter(ioMemStream, Nothing)
With myXMLwriter
...
.WriteStartElement("Actions")
.WriteStartElement("Custom")
.WriteAttributeString("xmlns:hw", "urn:samples-microsoft-com")
.WriteElementString("hw:HelloWorldSmart Tag", "Hello")
.WriteEndElement() ' Custom
.WriteEndElement() ' Actions
...
End With
Neue Aktionen
Da der Smart Tag auf dem Client-Computer arbeitet, müssen Sie den Smart Tag natürlich auf dem Client-Computer installieren und registrieren. Andernfalls funktioniert der Recherchedienst zwar auch, dem Benutzer wird jedoch beim Klicken auf die interaktive Schaltfläche standardmäßig kein Menü angezeigt. Wenn Sie ein Installationspaket erstellen und dieses auf einer im Internet gehosteten Webseite oder in Ihrem Firmenintranet bereitstellen, kann der Benutzer das Smart Tag nach Bedarf installieren. Sie können auf den URL als Attribut des Custom-Elements verweisen:
<Actions> <Custom xmlns:hw="urn:samples-microsoft-com" url="<A href="http://www.example.com/">http://www.example.com</A>"> <hw:HelloWorldSmart Tag>Hello</hw:HelloWorldSmart Tag> </Custom> </Actions>
Wenn das Smart Tag nicht installiert ist und ein Benutzer auf die interaktive Schaltfläche klickt, wird der Menübefehl Check for New Actions (Auf neue Aktionen überprüfen) angezeigt, wie in Abbildung 4 dargestellt.
Abbildung 4. Sie können einen URL für neue Smart Tag-Downloads oder -Uploads angeben.
Der Menübefehl Check for New Actions (Auf neue Aktionen überprüfen) wird auch angezeigt, wenn das Smart Tag installiert ist. Benutzer können regelmäßig nach Updates sowie neuen Smart Tags suchen.
Bestimmen der Hostanwendung mithilfe des Recherchedienstes
Wenn eine Smart Tag-Aktion aufgerufen wird, empfängt die InvokeVerb2-Methode ein ApplicationName-Argument, so dass Sie je nach Hostanwendung unterschiedliche Funktionen bereitstellen können. So kann z.B. ein einzelnes Smart Tag das Einfügen einer Tabelle mit Informationen in Microsoft Office Excel 2003 ermöglichen und das Einfügen von Bildern und Text in Microsoft Office Word 2003 erlauben, in Microsoft Office PowerPoint 2003 und Microsoft Internet Explorer jedoch keinerlei Aktionen bewirken. Wenn Sie ein Recherchedienst-Smart Tag erstellen, können Sie die DLL des Smart Tag weiterhin zur Ermittlung der Anwendung verwenden. Das Smart Tag empfängt den Namen der Anwendung, die den Recherche-Aufgabenbereich hostet.
Oftmals wäre es Ihnen sicherlich lieber, dass der Recherchedienst festlegt, welche Smart Tags angezeigt werden sollen. Der Name der Anwendung ist in der XML-Zeichenfolge enthalten, die an den Abfragedienst gesendet wird. Dabei handelt es sich um das Namenselement des Query Office Context-Namespace (URN: Microsoft.Search.Query.Office.Context). Sie können den Anwendungsnamen ermitteln, indem Sie den Wert des Namenselements herausanalysieren, wie im folgenden Codebeispiel gezeigt:
<WebMethod()> Public Function Query(ByVal queryXml As String) _
As String
...
Dim requestXml As New XmlArticle()
Dim applicationName As String
requestXml.LoadXml(queryXML)
Dim nsmRequest As New XmlNamespaceManager(requestXml.NameTable)
With nsmRequest
.AddNamespace("ns", "urn:Microsoft.Search.Query")
.AddNamespace("sp", _
"urn:Microsoft.Search.Office.ServiceParameters")
.AddNamespace("oc", _
"urn:Microsoft.Search.Query.Office.Context")
End With
applicationName = _
requestXml.SelectSingleNode("//oc:Name", nsmRequest).InnerText
Sobald der Anwendungsname bekannt ist, können Sie wählen, welches Smart Tag angezeigt werden soll, oder ob überhaupt keine Aktion angezeigt wird. Der folgende Code fügt der Antwort nur dann eine interaktive Smart Tag-Schaltfläche hinzu, wenn es sich bei der Anwendung um Microsoft Office Word 2003 handelt:
If applicationName = "Microsoft Word" Then
.WriteStartElement("Actions")
.WriteStartElement("Custom")
.WriteAttributeString("xmlns:hw", "urn:samples-microsoft-com")
.WriteElementString("hw:HelloWorldSmart Tag", "Hello")
.WriteEndElement() ' Custom
.WriteEndElement() ' Actions
End If
Senden von zusätzlichen Informationen
Da Sie als Entwickler des Recherchedienstes auch die XML erstellen, die an das Smart Tag gesendet wird, sind Sie nicht auf das Senden eines einzigen Begriffs an das Smart Tag beschränkt. Sie können die Funktionalität des Smart Tag ausweiten, indem Sie vom Recherchedienst aus Attribute mit weiteren Informationen über den Absatz, die Überschrift, die Hostanwendung oder den Recherchedienst senden, über den bzw. die das Smart Tag aufgerufen wird.
Nehmen wir an, Sie haben ein Smart Tag erstellt, das den Benutzer zu einer Seite auf Ihrer Website führt, die Details über das im Recherche-Aufgabenbereich angezeigte Produkt enthält. Sie können diesen Smart Tag erweitern, um eine weitere Aktion bereitzustellen. Diese führt den Benutzer zu einer Webseite, auf der alle Produkte aufgeführt sind, die derselben Kategorie angehören wie das im Recherche-Aufgabenbereich angezeigte Produkt.
Das folgende XML-Beispiel zeigt einen Recherchedienst und ein Smart Tag, die für die Arbeit mit einer Datenbank für Gartenblumen entwickelt wurden:
<xml xmlns='urn:samples-microsoft-com'> <FlowerDatabase BloomTime='Spring' Zone='3'>Bleeding Heart</FlowerDatabase> </xml>
Das XML-Beispiel wird an ein Smart Tag mit dem Namen urn:samples-microsoft-com#FlowerDatabase gesendet. Neben dem Namen der Pflanze kann das Smart Tag zudem die Kategorien BloomTime und Zone verwenden.
The smart tag's InvokeVerb2 method can then parse the XML to determine the BloomTime and Zone
categories:Dim requestXml As New XmlArticle()
requestXml.LoadXml(Xml)
Dim nsmRequest As New XmlNamespaceManager(requestXml.NameTable)
nsmRequest.AddNamespace("ns", "urn:samples-microsoft-com")
strBloomTime = _
requestXml.SelectSingleNode("<A>//@BloomTime</A>", nsmRequest).Value
strZone = _
requestXml.SelectSingleNode("<A>//@Zone</A>", nsmRequest).Value
Nicht unterstützte Features
Das Recherchefeature unterstützt nahezu alle Funktionen, die auch von Allzweck-Smart Tags unterstützt werden. Dabei gilt eine Ausnahme: Microsoft Smart Tags 2.0 (die Smart Tag-Version, die für die Verwendung mit Microsoft Office System entwickelt wurde) unterstützt jetzt auch Untermenüs. Ein Untermenü in einer erkannten Smart Tag-Aktion in Word 2003 sieht aus wie in Abbildung 5 dargestellt.
Abbildung 5. Aktionsmenüs können nun in Allzweck-Smart Tags Untermenüs haben.
Wenn dieses Smart Tag in einem Recherche-Aufgabenbereich verwendet wird, sind dieselben Menübefehle verfügbar, die Darstellung ist jedoch eine andere. Anstatt in Form von Untermenüs werden die Menüoptionen mit drei Schrägstrichen (///) zwischen den einzelnen Ebenen angezeigt, wie in Abbildung 6 dargestellt.
Abbildung 6. Untermenüs werden im Recherche-Aufgabenbereich nicht unterstützt.
Schlussfolgerung
Sie können ein Allzweck-Smart Tag ganz leicht in einen Recherchedienst integrieren. Wenn Sie ein Smart Tag jedoch speziell für die Verwendung im Recherche-Aufgabenbereich entwickeln, müssen Sie keine Recognizer-Klasse erstellen, da der Recherchedienst die Action-Klasse des Smart Tags direkt aufruft. Darüber hinaus können Sie Ihre Smart Tag-Aktion optimieren, indem Sie zusätzliche Attribute in das XML-Fragment einfügen, das auf das Smart Tag verweist.
