Hinzufügen zusätzlicher SQL-Funktionen

Einleitung

Adobe Campaign ermöglicht es dem Anwender, eigene Funktionen zu definieren, die auf SQL-Funktionen zugreifen können, sowohl auf Datenbankfunktionen als auch auf Funktionen, die nicht bereits in der Konsole verfügbar sind. Dies ist beispielsweise bei Aggregat-Funktionen (Durchschnitt, Maximum, Summe) nützlich, die nur auf dem Server berechnet werden können oder wenn die Datenbank eine einfachere Möglichkeit zur Implementierung bestimmter Funktionen bietet, anstatt den Ausdruck manuell in die Konsole zu schreiben (z. B. Datumsverwaltung).

Dieser Mechanismus kann auch verwendet werden, wenn Sie eine kürzlich verwendete oder ungewöhnliche Datenbank-Engine-SQL-Funktion verwenden möchten, die noch nicht von der Adobe Campaign-Konsole angeboten wird.

Nachdem diese Funktionen hinzugefügt wurden, werden sie wie andere vordefinierte Ausdruck-Funktionen im Editor angezeigt.

WICHTIG

SQL-Funktionsaufrufe in der Konsole werden nicht mehr automatisch an den Server gesendet. Der hier beschriebene Mechanismus wird daher die einzige Möglichkeit, den ungeplanten SQL-Funktionsserver aufzurufen .

Installation

Die hinzuzufügenden Funktionen befinden sich in einer "Paket"-Datei im XML-Format, deren Struktur im folgenden Absatz beschrieben wird.

Um das Paket über die Konsole zu installieren, wählen Sie im Menü die Optionen "Extras"/"Erweitert"/"Paket importieren"aus, klicken Sie dann auf "Aus Datei installieren" und befolgen Sie die Anweisungen im Import-Assistent.

WICHTIG

Warnung: selbst wenn die Liste importierter Funktionen sofort im Funktionseditor angezeigt wird, sind sie erst nach dem Neustart des Adobe Campaigns nutzbar.

Allgemeine Struktur des zu importierenden Pakets

Die hinzuzufügende(n) Funktion(en) befindet/befinden sich in der Datei " package"im XML-Format. Hier ein Beispiel:

<?xml version="1.0" encoding='ISO-8859-1' ?>
<!-- ===========================================================================
  Additional SQL functions for Adobe Campaign
  ========================================================================== -->
<package
  namespace   = "nms"
  name        = "package-additional-funclist"
  label       = "Additional functions"
  buildVersion= "6.1"
  buildNumber = "10000">

  <entities schema="xtk:funcList">
    <funcList name="myList" namespace="cus">
      <group name="date" label="Personalized date">
        <function name="relativeMaturity" type="long" args="(<Âge>)" help="Returns the difference between a date and 18 years"
                  minArgs="1" maxArgs="1" display="Relative maturity of the person born on the date $1">
          <providerPart provider="MSSQL,Sybase,PostgreSQL" body="extract(year from age($1))-18"/>
        </function>
      </group>
    </funcList>
  </entities>
</package>
  • Der Name, der Namensraum und das Etikett dienen lediglich Informationszwecken. Sie ermöglichen die Ansicht einer Zusammenfassung des Pakets in der Liste der installierten Pakete (Explorer/Administration/Paketverwaltung/Installierte Pakete).

  • Die Felder buildVersion und buildNumber sind obligatorisch. Sie müssen der Servernummer entsprechen, mit der die Konsole verbunden ist. Diese Informationen finden Sie im Feld "Hilfe/Info".

  • Die folgenden Blöcke, Entitäten und Funktionslisten sind obligatorisch. In funcList sind die Felder "name"und "Namensraum"obligatorisch, ihr Name bleibt jedoch dem Benutzer überlassen, der die Liste der Funktion eindeutig bestimmen kann.

    Das bedeutet, dass beim Importieren einer anderen Liste von Funktionen mit demselben Namensraum-/Namenspaar (hier "cus::myList") die zuvor importierten Funktionen gelöscht werden. Wenn Sie dagegen dieses Namensraum-/Namenspaar ändern, wird die neue Reihe importierter Funktionen der vorherigen hinzugefügt.

  • Mit dem group -Element können Sie die Funktionsgruppe angeben, in der die importierten Funktionen im Funktionseditor angezeigt werden. Das Attribut "@name"kann entweder ein bereits vorhandener Name sein (in diesem Fall werden die Funktionen der betreffenden Gruppe hinzugefügt) oder ein neuer Name (in diesem Fall wird er in einer neuen Gruppe angezeigt).

  • Erinnerung: Mögliche Werte für das Attribut "@name"im <group> Element sind:

      name="aggregate"      ( label="Aggregates"         )
      name="string"             ( label="String"           )
      name="date"               ( label="Date"             )
      name="numeric"          ( label="Numeric"        )
      name="geomarketing" ( label="Geomarketing"     )
      name="other"              ( label="Others"           )
      name="window"          ( label="Windowing functions" )
    
WICHTIG

Vergewissern Sie sich, dass Sie das Attribut "@label"abgeschlossen haben: dies ist der Name, der in der Liste der verfügbaren Funktionen angezeigt wird. Wenn Sie nichts eingeben, hat die Gruppe keinen Namen. Wenn Sie jedoch einen anderen Namen als den vorhandenen eingeben, ändert sich der Name der gesamten Gruppe.

Wenn Sie Funktionen zu mehreren verschiedenen Gruppen hinzufügen möchten, können Sie mehrere <group> Elemente auf dieselbe Liste verfolgen.

Schließlich kann ein <group> Element die Definition einer oder mehrerer Funktionen enthalten, d. h. den Zweck der Paketdatei. Das <function> Element ist im folgenden Absatz beschrieben.

Funktionsdeskriptor <function></function>

Der hier vorgestellte Fall ist ein allgemeiner Fall, bei dem wir die Funktionsdurchführung bereitstellen wollen.

Nachstehend finden Sie ein Beispiel für eine Funktion der "relativen Reife", die anhand eines Alters anzeigt, wie viele Jahre die Person als reif gilt.

 <function name="relativeMaturity" type="long" args="(<Âge>)" help="Returns the difference between a date and 18 years"
              minArgs="1" maxArgs="1" display="Relative maturity of the person born on the date $1">
       <providerPart provider="PostgreSQL" body="extract(year from age($1))-18"/>
       <providerPart provider="MSSQL,Sybase,Teradata" body="[Other implementation]"/>
    </function>

Das Feld @name verweist auf den Funktionsnamen und "args"ist die Liste der Parameter, die in der Beschreibung angezeigt werden. In diesem Fall wird die Funktion im Funktionsauswahlfenster als "relativeMaturity ( <age> )"angezeigt.

  • help ist das Feld, das unten im Editor-Fenster des Ausdrucks angezeigt wird.

  • @display ist eine informative Nachricht.

    Hinweis

    In den Attributen "@help"und "@display"steht die Zeichenfolge "$1"für den Namen, der im ersten Funktionsparameter angegeben wurde (hier "Alter"). $2, $3… würde die folgenden Parameter darstellen. Im unten stehenden @body-Attribut gibt $1 den Argumentwert an, der während des Aufrufs an die Funktion übergeben wird.

    Hinweis

    Die Beschreibung muss eine Zeichenfolge mit gültigen XML-Zeichen sein: Beachten Sie bitte die Verwendung von '<' und '>' anstelle von < und >.

  • @type ist der Rückgabetyp der Funktion und ist ein Standardwert (lang, string, byte, datetime…). Wird sie weggelassen, bestimmt der Server den besten Typ unter den verfügbaren Typen innerhalb des Ausdrucks, der die Funktion implementiert.

  • @minArgs und maxArgs geben die Anzahl der Parameter (Minimum und Maximum) für einen Parameter an. Beispiel: Für eine Funktion mit 2 Parametern sind minArgs und maxArgs 2 und 2. Bei 3 Parametern plus 1 optional sind es 3 bzw. 4.

  • Schließlich stellt das providerPart -Element die Funktionsimplementierung bereit.

    • Das provider -Attribut ist obligatorisch und gibt die Datenbanksysteme an, für die die Implementierung bereitgestellt wird. Wie im Beispiel gezeigt, können bei unterschiedlichen Ausdruck-Syntaxen oder zugrunde liegenden Funktionen alternative Implementierungen entsprechend der Datenbank bereitgestellt werden.
    • Das @body -Attribut enthält die Funktionsimplementierung. Bitte beachten Sie: Diese Implementierung muss ein Ausdruck in Datenbanksprache sein (kein Codeblock). Abhängig von den Datenbanken können Ausdruck Unterwerte sein ("(Spalte aus Tabelle auswählen, bei der …)"), die nur einen Abfrage zurückgeben. Dies gilt beispielsweise für Oracle (die Abfrage muss in Klammern stehen).
    Hinweis

    Wenn nur eine oder zwei Datenbanken von der definierten Funktion abgefragt werden können, können wir immer nur die Definitionen angeben, die diesen Datenbanken entsprechen.

Funktionsbeschreibung für "Pass-through"

Ein spezieller Funktionsdeskriptor ist der "Pass-Through" -Block mit einem nicht spezifizierten "Provider"-Datenbanksystem. In diesem Fall kann "body"-Implementierungen nur einen einzelnen Funktionsaufruf mit einer Syntax enthalten, die nicht von der verwendeten Datenbank abhängt. In der Zwischenzeit ist der Block "ProviderPart"eindeutig.

    <function name="CountAll" args="()" help="Counts the values returned (all fields together)"
              type="long" minArgs="0" maxArgs="0">
      <providerPart body="Count(*)"/>
    </function>

In diesem Fall dient das Hinzufügen einer Funktion nur dazu, eine Datenbankfunktion zu erstellen, die standardmäßig nicht verfügbar wäre und nun für den Client sichtbar ist.

Beispiele

Weitere Funktionsbeispiele finden Sie im vordefinierten Paket "xtkdatakitfuncList.xml".

Auf dieser Seite