Durchsuche das Wiki mit Bing (Beispielerweiterungsprojekt)

Das hier brauchte jetzt doch ein wenig Anlauf. Ich habe in den vergangenen Blogeinträgen ein paar Sachen gezeigt, die ich jetzt zu einem Beispiel für eine kleine, aber nützliche Erweiterung für das neue Microsoft Dynamics AX vereinen möchte. Unter anderem habe ich Beispiele für Ereignis-Abonnements, den Projektexport und -import, ein Anwendungsbeispiel der Klasse Browser, wie man ein Erweiterungspackage/-model erstellen kann und dass es sich lohnen kann, mit Bing im Wiki zu suchen gezeigt. Heute also will ich das alles in einer einfachen Solution zusammenbringen, die nur die Möglichkeiten von Extensions nutzt und AX eine Möglichkeit hinzufügt, das Wiki über Bing zu durchsuchen. Außerdem biete ich das Ganze zum Download an, damit du damit experimentieren kannst, wenn du möchtest.

Design

Die Lösung soll Wiki integrieren und nachdem AX das im Standard schon tut, war schnell der Plan gefasst, die Form SysHelpPane zu erweitern. Diese ist zu erreichen über das Fragezeichensymbol rechts oben in AX. Das Resultat sieht später so aus:

Suche im Wiki mit Bing SysHelpPane erweitert

Zunächst versuchte ich, das existierende Suchfeld zu nutzen, das ein QuickFilterControl ist, scheiterte aber daran, weil dies den eingegebenen Wert erst durch Klick auf das Lupensymbol annimmt (bzw. anbietet) und sich das auch nicht ohne Weiteres simulieren ließ. Eine mögliche Reaktion auf das, was im Standard gemacht wird im Anschluss an den Klick des Anwenders schloss sich dadurch aus, dass das alles privat und gekapselt ist. Also entschied ich, einen weiteren Reiter mit separatem Suchfeld und Schaltfläche zum Auslösen zu verwenden.

Die Solution

Die Solution enthält alle Objekte des neu erstellten Package axilityBingSearchTheWiki, das eine Erweiterung zur Application Foundation darstellt (weil die Hilfe-Objekte zur Foundation gehören). Sie besteht aus einer Erweiterung zur Form SysHelpPane, einem Event Handler, der das Ereignis beim Klicken der Schaltfläche abonniert und einer Hilfeklasse, die die Logik für alles rund um den benötigten Link zu Bing enthält. Außerdem gibt es ein Label File, das allerdings nur in en-us gepflegt wurde.

Suche im Wiki mit Bing Solution

Erweiterung Form

Ich benannte sie mit SysHelpPane.xltyExtension, damit es nicht zu Namenskonflikten mit Lösungen anderer kommen kann. Das Suchbegriffeingabefeld muss auf Auto Declaration = Yes gesetzt werden, damit man es später im OnClicked-Ereignis der Schaltfläche ansprechen kann.

Suche im Wiki mit Bing SysHelpPane.xltyExtension

Event-Handler-Klasse

Ich hab diese Klasse SysHelpPaneXltyEventHandler genannt, was bedeutet, dass mein typisches Präfix enthalten ist, sie sich aber bei den anderen möglicherweise vorhandenen SysHelpPane*-Objekten im Application Explorer einsortiert.

class SysHelpPaneXltyEventHandler
{
    /// <summary>
    ///     An OnClicked implementation for our extending button
    /// </summary>
    /// <param name="sender">
    ///     The button is the sender.
    /// </param>
    /// <param name="e">
    ///     There are event arguments but we don't need them here.
    /// </param>
    [FormControlEventHandler(formControlStr(SysHelpPane, xltyBingSearchTheWikiButton), FormControlEventType::Clicked)]
    public static void xltyBingSearchTheWikiButton_OnClicked(FormControl sender, FormControlEventArgs e)
    {
        FormStringControl searchTermControl = sender.formRun().design().controlName(formControlStr(SysHelpPane, xltyBingSearchTheWikiSearchTerm));
        str filterString = searchTermControl.text();
        xltyBingSearchTheWikiHelper helper = new xltyBingSearchTheWikiHelper();
        helper.openInNewTab(filterString);
    }
 
}

Helfer-Class

class xltyBingSearchTheWikiHelper
{
    /// <summary>
    ///     This method opens a new browser tab navigating to the AX Wiki using the search term provided.
    /// </summary>
    /// <param name = "_searchTerm">
    ///     The search term as string. It may include blanks.
    /// </param>
    public void openInNewTab(str _searchTerm)
    {
        Browser browser = new Browser();
        browser.navigate(this.getBingSearchAxWikiURL(_searchTerm), true, false);
    }
 
    /// <summary>
    ///     Prepares and returns a valid URL for a Bing search.
    /// </summary>
    /// <param name = "_searchTerm">
    ///     The search term as string.
    /// </param>
    /// <returns>
    ///     A valid Bing search URL.
    /// </returns>
    public str getBingSearchAxWikiURL(str _searchTerm)
    {
        return 'http://www.bing.com/search?q=' + this.getPreparedFilterString(_searchTerm) + '+site%3Ahttps%3A%2F%2Fax.help.dynamics.com%2F';
    }
 
    /// <summary>
    ///     We take it easy and only handle blanks and replace them by plus signs.
    /// </summary>
    /// <param name = "raw">
    ///     The unformatted input filter string.
    /// </param>
    /// <returns>
    ///     A formatted filter string prepared for being searched for on Bing.
    /// </returns>
    private str getPreparedFilterString(str raw)
    {
        return strReplace(strLRTrim(raw), ' ', '+');
    }
 
}

Label File

Der Vollständigkeit halber hier das Label File.

Suche im Wiki mit Bing Label File

Wie man es benutzt

Man öffnet einfach die Hilfe in AX, wechselt auf den Reiter BING, gibt einen Suchbegriff ins Feld ein und löst das Ganze mit Klick auf die Schaltfläche aus. Ein neuer Tab öffnet sich im Browser und zeigt die Resultate der Suche mit Eingrenzung aufs Hilfe-Wiki an.

Suche im Wiki mit Bing Suchergebnisse

Was ist das Coolste hieran?

Abgesehen vom direkten Nutzen möchte ich darauf hinweisen, dass es sich hier um eine reine Erweiterung (Extension) handelt. Es gibt keinerlei Modifikation bestehender Objekte von AX und trotzdem hinzugekommene Funktionalität. Künftige Updates von AX werden keine kostspieligen Konflikte produzieren und können mit an Sicherheit grenzender Wahrscheinlichkeit einfach eingespielt werden (das einzig denkbare Potential besteht darin, dass das aufnehmende Element des hinzugefügten Tabs in der Form nicht mehr da sein könnte).

Wo finde ich den Download?

Natürlich auf der Download-Seite.

Schreibe einen Kommentar