添加其他 SQL 函数

简介

Adobe Campaign允许用户定义​其自己的函数,这些函数可以访问SQL函数,包括数据库提供的函数和控制台中尚未提供的函数。 这对聚合函数(平均、最大值、和)很有用,例如,只能在服务器上计算,或者当表达式库提供了实现某些函数的更简单方法时,而不是在控制台中“手动”写入数据(例如,日期管理)时,才能计算这些函数。

如果您希望使用Adobe Campaign控制台尚未提供的最近或不常见的数据库引擎SQL函数,也可以使用此机制。

添加这些函数后,它们将像其他预定义函数一样显示在表达式编辑器中。

重要

控制台中的SQL函数调用不再自然地发送到服务器。 因此,此处描述的机制成为在计划外SQL函数服务器上调用​的唯一方式。

安装

要添加的函数位于XML格式​"package"文件中,其结构在以下段落中有详细说明。

要从控制台进行安装,请从菜单中选择​工具/高级/导入包​选项,然后选择​Install from file ,然后按照导入向导中的说明进行操作。

重要

警告:即使导入函数的列表直接出现在函数编辑器中,它们在重新启动Adobe Campaign之前将不可用。

要导入的包的常规结构

要在​"package" file​中找到要添加的函数,其格式为XML。 以下是一个示例:

<?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>
  • 名称命名空间​和​标签​仅供参考。 它们允许您在已安装的包列表(Explorer/Administration/Package management/Installed包)中视图包的摘要。

  • buildVersion​和​buildNumber​字段为必填字段。 它们必须与控制台所连接的服务器号相对应。 此信息位于“帮助/关于”框中。

  • 以下块(entities​和​funclist)是必填项。 在funcList中,字段“name”和“命名空间”是必填字段,但其名称由用户自行决定,并且它们以唯一方式指定函数列表。

    这意味着,如果导入了具有相同命名空间/名称对的另一列表函数(此处为“cus::myList”),则将删除之前导入的函数。 相反,如果更改此命名空间/名称对,则新的导入函数系列将添加到上一个函数。

  • 通过​group​元素,可指定在函数编辑器中显示导入函数的函数组。 @name属性可以是已存在的名称(在这种情况下,函数将添加到被考虑的组)或新名称(在这种情况下,它将显示在新组中)。

  • 提醒:<group>元素中@name属性的可能值为:

      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" )
    
重要

确保完成@label属性:这是将在可用函数列表中显示的名称。 如果您未输入任何内容,则组将没有名称。 但是,如果输入的名称不是现有名称,则整个组的名称将发生更改。

如果要向多个不同的组添加函数,可以使多个<group>元素在同一列表中被跟踪。

最后,<group>元素可以包含一个或多个函数的定义,即包文件的用途。 <function> 元素在以下段落中详细说明。

函数描述符<function></function>

此处介绍的案例是一个一般案例,我们希望提供​函数实现

以下是"相对成熟度"函数的示例,该函数使用年龄来表示该人被认为成熟的年份。

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

@name​字段引用函数的名称,而“args”是将在说明中显示的参数的列表。 在这种情况下,该函数将在函数选择窗口中显示为“relativeMaturity(<age>)”。

  • 助是表达式编辑器窗口底部显示的字段。

  • @ display是一条信息性消息。

    注意

    在@help和@display属性中,字符串"$1"表示在第一个函数参数(此处为"Age")中指定的名称。 $2、$3…表示以下参数。 在下面详细的@body属性中,$1指定在调用过程中传递给函数的参数值。

    注意

    说明必须是包含有效XML字符的字符串:请注意使用“<”和“>”而不是<和>。

  • @ type是函数返回类型,是标准值(long、string、byte、datetime…)。如果省略,则服务器在实现该功能的表达式内确定可用类型中的最佳类型。

  • @ minArgsand ​maxArgs指定参数的参数数(最小和最大)。例如,对于具有2个参数的函数,minArgs和maxArgs将分别为2和2。 对于3个参数,加上1个可选参数,它们分别为3和4。

  • 最后,providerPart​元素提供函数实现。

    • provider​属性是必需的,它指定了为其提供实现的数据库系统。 如示例中所示,当表达式语法或基础函数不同时,可以根据数据库提供替代实现。
    • @body​属性包含函数实现。 请注意:此实现必须是表达式,使用数据库语言(而不是代码块)。 根据表达式库的不同,查询可以是仅返回一个值的子(“(从表中选择列,其中……)”)。 例如,Oracle中就是这种情况(查询必须写在方括号中)。
    注意

    如果定义的函数可能只查询一个或两个数据库,我们始终只能提供与这些数据库对应的定义。

“传递”函数描述符

特殊的函数描述符是​"pass-through"​块,具有未指定的"provider"数据库系统。 在这种情况下,“body”实现只能包含一个语法不依赖于所使用数据库的函数调用。 同时,“ProviderPart”块是唯一的。

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

在这种情况下,添加函数仅用于使数据库函数成为默认情况下不可用的函数,现在客户端可见。

示例

在预定义的包"xtkdatakitfuncList.xml"中可以找到更多函数示例。

On this page

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now