Hinzufügen zusätzlicher SQL-Funktionen

Einleitung

Mit Adobe Campaign kann der Benutzer seine eigenen Funktionen definieren, die auf SQL-Funktionen zugreifen können, sowohl auf Datenbankfunktionen als auch auf solche, 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, auf dem ungeplanten SQL-Funktionsserver aufzurufen.

Installation

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

Um es in der Konsole zu installieren, wählen Sie im Menü die Optionen Tools/Advanced/Import package und dann 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ügenden Funktionen befinden sich im XML-Format in der Datei "package". 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>
  • Die Variablen name, Namensraum und label dienen nur zu 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 funklist 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 Element group 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 @name-Attribut 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 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. <function> -Element im folgenden Absatz beschrieben.

Funktionsbeschreibung <function></function>

Der hier vorgestellte Fall ist ein allgemeiner Fall, bei dem wir die Funktionsimplementierung bereitstellen möchten.

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.

  • Hilft das am unteren Rand des Ausdruck-Editor-Fensters angezeigte Feld.

  • @ 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 >.

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

  • @ minArgsand ​maxArgsgibt 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 Attribut provider 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 Attribut @body 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.

Funktionsdeskriptor

Ein spezieller Funktionsdeskriptor ist der Block "pass-through" mit einem nicht angegebenen "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

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free