Show Menu
THEMEN×

Hinzufügen zusätzlicher SQL-Funktionen

Einleitung

Adobe Campaign ermöglicht es dem Benutzer, eigene Funktionen zu definieren, die auf SQL-Funktionen zugreifen können, sowohl auf die Funktionen der Datenbank als auch auf die Funktionen, die nicht bereits in der Konsole verfügbar sind. Dies ist beispielsweise bei Aggregationsfunktionen (Durchschnitt, Maximum, Summe) nützlich, die nur auf dem Server berechnet werden können, oder wenn die Datenbank eine einfachere Möglichkeit bietet, bestimmte Funktionen zu implementieren, 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 Funktionen im Ausdruckseditor angezeigt.
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, dann die Install from file und befolgen Sie die Anweisungen im Importassistenten.
Warnung: Auch wenn die Liste der importierten Funktionen sofort im Funktionseditor angezeigt wird, sind sie erst nach einem Neustart von Adobe Campaign einsetzbar.

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 Namespace und die Beschriftung dienen nur Informationszwecken. Sie können eine Zusammenfassung des Pakets in der Liste der installierten Pakete anzeigen (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 "namespace"obligatorisch, ihr Name bleibt jedoch dem Benutzer überlassen, der entscheidet, und sie geben die Funktionsliste eindeutig an.
    Das bedeutet, dass beim Importieren einer weiteren Liste von Funktionen mit demselben Namespace-/Namenspaar (hier "cus::myList") die zuvor importierten Funktionen gelöscht werden. Wenn Sie dagegen dieses Namespace/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" )
    
    
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 verschiedenen Gruppen hinzufügen möchten, können Sie mehrere <group> Elemente in derselben 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.

Funktionsbeschreibung <function></function>

Der hier vorgestellte Fall ist ein allgemeiner Fall, bei dem wir die Funktionsdurchführung gewährleisten 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 Namen der Funktion, 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 Fenster des Ausdrucks-Editors angezeigt wird.
  • @display ist eine informative Nachricht.
    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.
    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 dieser ausgelassen, 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 Ausdruckssyntaxen 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 Ausdrücke Unterabfragen sein ("(Spalte aus Tabelle auswählen, bei der ...)"), die nur einen Wert zurückgeben. Dies ist beispielsweise bei Oracle der Fall (die Abfrage muss in Klammern geschrieben werden).
    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. Der Block "ProviderPart"ist dagegen 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".