Aanvullende SQL-functies definiëren adding-additional-sql-functions

Met Adobe Campaign kan de gebruiker definiëren hun eigen functies die tot SQL functies kunnen toegang hebben, zowel die aangeboden door het gegevensbestand als die die niet reeds beschikbaar in de console zijn. Dit is nuttig voor geaggregeerde functies (gemiddelde, maximum, som) bijvoorbeeld, die alleen op de server kunnen worden berekend of wanneer de database een eenvoudigere manier biedt om bepaalde functies te implementeren, in plaats van "handmatig" de expressie in de console te schrijven (bijvoorbeeld datumbeheer).

Dit mechanisme kan ook worden gebruikt als u een recente of ongewone SQL-functie van de database-engine wilt gebruiken, die nog niet door de Adobe Campaign-console wordt aangeboden.

Zodra deze functies zijn toegevoegd, zullen zij in de uitdrukkingsredacteur enkel als andere vooraf bepaalde functies verschijnen.

IMPORTANT
SQL de functievraag in de console wordt niet meer van nature verzonden naar de server. Daarom wordt het hier beschreven mechanisme de enige manier om te roepen op de ongeplande SQL functieserver.

Installatie installation

De functie(s) die moet worden toegevoegd, bevinden zich in een "package"-bestand in XML-indeling, waarvan de structuur in de volgende alinea nader wordt beschreven.

Als u de toepassing vanuit de console wilt installeren, selecteert u de Gereedschappen/Geavanceerd/Importeren opties in het menu, en vervolgens de Install from file en volgt u de instructies in de wizard Importeren.

IMPORTANT
Waarschuwing: zelfs als de lijst met geïmporteerde functies direct in de functie-editor wordt weergegeven, zijn deze functies pas bruikbaar als Adobe Campaign opnieuw is gestart.

Algemene structuur van het te importeren pakket general-structure-of-package-to-import

De functie(s) die moet worden toegevoegd, vindt u in de "package"-bestand in XML-indeling. Hier volgt een voorbeeld:

<?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= "7.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>
  • De name, namespace en label uitsluitend ter informatie. Zij laten u een samenvatting van het pakket in de geïnstalleerde pakketlijst (Ontdekkingsreiziger/Beleid/het beheer van het Pakket/Geïnstalleerde pakketten) bekijken.

  • De buildVersion en buildNumber velden zijn verplicht. Ze moeten overeenkomen met het servernummer waarmee de console is verbonden. Deze informatie vindt u in het vak "Help/Info".

  • de volgende blokken, entiteiten en funclist zijn verplicht. In funcList zijn de velden "name" en "namespace" verplicht, maar de gebruiker kan zelf beslissen welke naam hij of zij gebruikt en geven de functielijst op unieke wijze aan.

    Dit betekent dat als een andere lijst met functies met dezelfde naamruimte/naamcombinatie (hier "cus::myList") wordt geïmporteerd, de eerder geïmporteerde functies worden verwijderd. Omgekeerd geldt dat als u dit naamruimte-/naampaar wijzigt, de nieuwe reeks geïmporteerde functies wordt toegevoegd aan de vorige.

  • De groep Met een element kunt u de functiegroep opgeven waarin de geïmporteerde functie(s) worden weergegeven in de functie-editor. Het kenmerk @name kan een naam zijn die al bestaat (in welk geval de functies worden toegevoegd aan de desbetreffende groep) of een nieuwe naam (in welk geval de functie wordt weergegeven in een nieuwe groep).

  • Herinnering: mogelijke waarden voor het kenmerk @name in het dialoogvenster <group> element are:

    code language-none
      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" )
    
IMPORTANT
Zorg ervoor dat u het kenmerk @label invult: dit is de naam die wordt weergegeven in de lijst met beschikbare functies. Als u niets invoert, heeft de groep geen naam. Als u echter een andere naam invoert dan de bestaande naam, verandert de naam van de hele groep.

Als u functies wilt toevoegen aan verschillende groepen, kunt u verschillende <group> elementen worden in dezelfde lijst bijgehouden.

Tot slot <group> -element kan de definitie van een of meer functies bevatten, dat is het doel van het pakketbestand. De <function> het element wordt in de volgende alinea nader beschreven.

Functiebeschrijving <function></function> function-descriptor--function-

Het onderhavige geval is een algemeen geval waarin wij de functie-implementatie.

Hieronder ziet u een voorbeeld van een functie van "relatieve rijpheid" die, op basis van een leeftijd, aangeeft hoeveel jaren de persoon als volwassen wordt beschouwd.

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

De @name in het veld wordt de naam van de functie weergegeven en in het veld args wordt de lijst met parameters weergegeven die in de beschrijving wordt weergegeven. In dit geval wordt de functie weergegeven als "relativeMaturity" ( <age> )" in het venster Functie selecteren.

  • help Dit is het veld dat onder aan het venster van de expressieeditor wordt weergegeven.

  • @display is een informatief bericht.

    note note
    NOTE
    In de kenmerken @help en @display vertegenwoordigt de tekenreeks "$1" de naam die is gegeven in de eerste functieparameter (hier, "Leeftijd"). $2, $3… zou de volgende parameters vertegenwoordigen. In het @body-kenmerk dat hieronder wordt beschreven, geeft $1 de argumentwaarde aan die tijdens de aanroep aan de functie wordt doorgegeven.
    note note
    NOTE

    De beschrijving moet een tekenreeks van geldige XML-tekens zijn. Let op het gebruik van '<' en '>' in plaats van < en

    .

  • @type Dit is het type geretourneerde waarde van de functie en is een standaardwaarde (lang, tekenreeks, byte, datumtime…). Als het wordt weggelaten, bepaalt de server het beste type onder de beschikbare types binnen de uitdrukking die de functie uitvoert.

  • @minArgs en maxArgs Hiermee wordt het aantal parameters (minimum en maximum) voor een parameter opgegeven. Voor een functie met 2 parameters zijn minArgs en maxArgs bijvoorbeeld 2 en 2. Voor drie parameters, plus 1 optioneel, zijn deze respectievelijk 3 en 4.

  • Tot slot de providerPart element verstrekt de functie implementatie.

    • De provider attribuut is mandatory, it specifies the database systems for the implementation. Zoals getoond in het voorbeeld, wanneer de uitdrukkingssyntaxis of onderliggende functies verschillen, kunnen de alternatieve implementaties volgens het gegevensbestand worden verstrekt.
    • De @body bevat de functie-implementatie. Opmerking: deze implementatie moet een expressie zijn in de databasetaal (geen codeblok). Afhankelijk van de databases kunnen expressies subquery's zijn ("(selecteer kolom in de tabel waarin…)") die slechts één waarde retourneren. Dit is bijvoorbeeld het geval in Oracle (de query moet tussen haakjes worden geschreven).
    note note
    NOTE
    Als slechts één of twee gegevensbestanden waarschijnlijk door de bepaalde functie zullen worden gevraagd, kunnen wij altijd slechts de definities verstrekken die aan deze gegevensbestanden beantwoorden.

Functiebeschrijving 'Pass-through' pass-through--function-descriptor

Een speciale functiebeschrijving is de "pass-through" blok, met een niet gespecificeerd "leverancier"gegevensbestandsysteem. In dit geval kan de implementatie van de 'body' slechts één functieaanroep bevatten met een syntaxis die niet afhankelijk is van de gebruikte database. Ondertussen is het blok "ProviderPart" uniek.

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

In dit geval dient het toevoegen van een functie alleen om een databasefunctie te maken die niet standaard beschikbaar zou zijn geweest, nu zichtbaar voor de client.

Voorbeelden examples

Meer functievoorbeelden vindt u in het vooraf gedefinieerde pakket "xtkdatakitfuncList.xml".

recommendation-more-help
601d79c3-e613-4db3-889a-ae959cd9e3e1