Hinzufügen zusätzlicher SQL-Funktionen

Einleitung

Mit Adobe Campaign kann der Benutzer eigene Funktionen , die auf SQL-Funktionen zugreifen können, sowohl auf die von der Datenbank angebotenen Funktionen als auch auf die Funktionen, die noch nicht in der Konsole verfügbar sind. Dies ist beispielsweise bei Aggregatfunktionen (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 aktuelle oder ungewöhnliche SQL-Funktion der Datenbank-Engine verwenden möchten, die noch nicht von der Adobe Campaign-Konsole angeboten wird.

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

WICHTIG

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

Installation

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

Um es über die Konsole zu installieren, wählen Sie die Tools/Erweitert/Import-Paket Optionen aus dem Menü, dann die Aus Datei installieren und befolgen Sie die Anweisungen im Importassistenten.

WICHTIG

Warnung: selbst wenn die Liste der importierten Funktionen sofort im Funktionseditor angezeigt wird, können sie erst nach dem Neustart von Adobe Campaign verwendet werden.

Allgemeine Struktur des zu importierenden Packages

Die hinzuzufügenden Funktionen finden Sie im Abschnitt 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>
  • Die name, namespace und label dienen nur Informationszwecken. Sie können eine Zusammenfassung des Pakets in der Liste der installierten Packages anzeigen (Explorer/Administration/Package Management/Installierte Packages).

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

  • Die folgenden Blöcke entity und functionList sind zwingend erforderlich. In funcList sind die Felder "name"und "namespace"obligatorisch, ihr Name bleibt jedoch dem Benutzer überlassen, zu entscheiden, und sie geben die Funktionsliste eindeutig an.

    Wenn also eine andere Liste von Funktionen mit demselben Namespace-/Namenspaar (hier "cus::myList") importiert wird, werden die zuvor importierten Funktionen gelöscht. Umgekehrt wird die neue Serie importierter Funktionen zur vorherigen hinzugefügt, wenn Sie dieses Namespace-/Namenspaar ändern.

  • Die Gruppe -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:

      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 das Attribut @label ausgefüllt ist: 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 Gruppen hinzufügen möchten, können Sie mehrere <group> -Elemente in derselben Liste nachverfolgt werden.

Schließlich wird eine <group> -Element kann die Definition einer oder mehrerer Funktionen enthalten, also den Zweck der Paketdatei. Die <function> -Element wird im folgenden Absatz beschrieben.

Funktionsdeskriptor <function></function>

Der hier vorgestellte Fall ist ein allgemeiner Fall, in dem wir die Funktionsimplementierung.

Unten finden Sie ein Beispiel für eine Funktion der "relativen Reife", die anhand eines Alters angibt, für wie viele Jahre die Person als reif angesehen wurde.

 <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>

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

  • help ist das Feld, das unten im Ausdruckseditor-Fenster angezeigt wird.

  • @display ist eine informative Nachricht.

    HINWEIS

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

    HINWEIS

    Die Beschreibung muss eine Zeichenfolge aus 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 (long, string, byte, datetime…). Wenn es weggelassen wird, bestimmt der Server den besten Typ unter den verfügbaren Typen innerhalb des Ausdrucks, der die Funktion implementiert.

  • @minArgs und maxArgs gibt die Anzahl der Parameter (Minimum und Maximum) für einen Parameter an. Für eine Funktion mit 2 Parametern sind beispielsweise minArgs und maxArgs 2 und 2. Für 3 Parameter, plus 1 optional, sind sie 3 bzw. 4.

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

    • Die Anbieter -Attribut erforderlich ist, gibt es die Datenbanksysteme an, für die die Implementierung bereitgestellt wird. Wie im Beispiel gezeigt, können bei unterschiedlichen Ausdruckssyntax oder zugrunde liegenden Funktionen je nach Datenbank alternative Implementierungen bereitgestellt werden.
    • Die @body -Attribut enthält die Funktionsimplementierung. Bitte beachten Sie: Diese Implementierung muss ein Ausdruck in Datenbanksprache (kein Codeblock) sein. Abhängig von den Datenbanken können Ausdrücke aus Unterabfragen ("(Spalte aus Tabelle auswählen, wo…)") bestehen, die nur einen einzigen Wert zurückgeben. Dies ist beispielsweise bei Oracle der Fall (die Abfrage muss in Klammern geschrieben sein).
    HINWEIS

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

Funktionsdeskriptor "Pass-Through"

Ein spezieller Funktionsdeskriptor ist die "Pass-Through" -Block mit einem nicht spezifizierten "Anbieter"-Datenbanksystem. In diesem Fall kann die Implementierung von "body"nur einen einzelnen Funktionsaufruf mit einer Syntax enthalten, die nicht von der verwendeten Datenbank abhängig ist. 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 gewesen wäre und nun für den Client sichtbar ist.

Beispiele

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

Auf dieser Seite