丰富内容

聚合器允许您使用外部数据丰富内容。 此数据来自通用查询或链接表。

通用查询

查询通过​Aggregator​选项卡中的发布模板进行配置。

检索到的数据将通过其主元素丰富XML输出文档。

从收件人模式上的查询返回的示例(nms:收件人):

<book name="Content Management">
  ...
  <collection-recipient>
    <recipient lastName="Doe" firstName="John" email="john.doe@aolf.com">
    ...
  </collection-recipient>
</book>

<collection-recipient>​元素表示由文档产生的查询的输入元素。 检索到的数据在此元素下返回;在我们的示例中,收件人列表。

添加查询

查询参数是使用向导编辑的。

  1. 在第一页中,指定包含要检索的数据的标签和模式。

    注意

    编辑字段​Path​用于重命名查询输出元素。

  2. 在下一页中,您可以选择要检索的数据。

  3. 下一页定义筛选条件。

  4. 最后一页启动预览查询返回的数据。

链接的表

链接允许您检索链接到内容的外部数据。

链接数据有两种类型:

  • 内容链接:这是本机内容管理模式。 链接的内容会自动集成到XML输出文档中。
  • 指向外部表的链接允许访问数据库中的所有其他表,但约束是检索带有聚合器的所选链接的数据。

内容链接在数据模式中声明如下:

<element expandSchemaTarget="cus:chapter" label="Main chapter" name="mainChapter" type="string"/>

链接的定义填充在​string-type <element>​上,expandSchemaTarget​属性引用目标模式(我们的示例中为“cus:chapter”)。 引用的模式必须是内容模式。

目标元素的内容丰富了链接元素,即示例模式中的​<chapter>​元素:

<mainChapter computeString="Introduction" id="7011" title="Introduction" xtkschema="cus:chapter">    
  <page>Introduction to input <STRONG>forms</STRONG>.</page>
</mainChapter>
注意

链接的​计算字符串​由​computeString​属性显示。

在输入表单中,链接的编辑控件声明如下:

<input type="articleEdit" xpath="mainChapter"/>

使用​Magnifier​图标可打开链接元素的编辑表单。

要填充链接集合,请在数据模式中将​unboind="true"​属性添加到链接元素的定义中:

<element expandSchemaTarget="cus:chapter" label="List of chapters" name="chapter"  ordered="true" unbound="true"/>

目标元素的内容丰富了每个集合元素:

<chapter computeString="Introduction" id="7011" title="Introduction" xtkschema="cus:chapter">    
  <page>Introduction to input <STRONG>forms</STRONG>.</page>
</chapter>

在输入表单中,列表控件声明如下:

<input editable="false" nolabel="true" toolbarCaption="List of chapters" type="articleList" xpath="chapter" zoom="true"/>

将显示默认列,以便视图目标元素的​计算字符串

在数据模式中将声明指向外部表的链接,如下所示:

<element label="Main contact" name="mainContact" target="nms:recipient" type="link"/>

链接的定义填充在​link-type <element>​上,目标​属性引用目标模式(我们的示例中为“nms:收件人”)。

根据惯例,必须从数据模式的主要元素中声明链接。

计算字符串​和目标元素的键丰富主元素上的​<name>-id​和​<name>-cs​属性。

在我们的示例中,链接会填充到“cus:book”模式中,链接数据的内容包含在“mainContact-id”和“mainContact-cs”属性中:

<book computeString="Content management" date="2006/06/08" id="6106" language="en" mainContact-cs="John Doe (john.doe@adobe.com)" mainContact-id="3012" name="Content management" xtkschema="cus:book">

链接编辑控件声明如下:

<input xpath="mainContact"/>

您可以通过在输入表单中的链接定义添加​<sysfilter>​元素来限制目标元素的选择:

<input xpath="mainContact">
  <!-- Filter the selection of the link on the Adobe domain -->
  <sysFilter>
    <condition expr="@domain =  'adobe.com '"/>
  </sysFilter>
</input>
注意

此限制也适用于内容链接。

集合的定义与集合元素上列表的定义相同:

<element label="List of contacts" name="contact" unbound="true">
  <element label="Recipient" name="recipient" target="nms:recipient" type="link"/>
</element>

在输入表单中,列表控件声明如下:

<input nolabel="true" toolbarCaption="List of contacts" type="list" xpath="contact">
  <input xpath="recipient"/>
</input>

注意

该列表是可编辑的,允许您从上面显示的“链接”类型控件中选择链接。

目标元素的内容丰富了输出文档中的每个集合元素:

<contact id="11504978621" recipient-cs="Doe John (john.doe@adobe.com)" recipient-id="3012"/>
<contact id="11504982510" recipient-cs="Martinez Peter (peter.martinez@adobe.com)" recipient-id="3013"/>

引用的每个链接的内容仅限于目标元素的内部键和​计算字符串

JavaScript脚本用于通过SOAP查询丰富链接的内容。

示例:将收件人名称添加到“mainContact”链接和“contact”集合链接:

// Update <mainContact> link
var mainContactId = content.@['mainContact-id']
var query = xtk.queryDef.create(
    <queryDef schema="nms:recipient" operation="get">
      <select>
        <node expr="@lastName"/>
      </select>
      <where>
        <condition expr={"@id="+mainContactId}/>
      </where>
    </queryDef>)

var recipient = query.ExecuteQuery()
content.mainContact.@lastName = recipient.@lastName

// Update <contact> link collection
for each(var contact in content.contact)
{
  var contactId = contact.@['recipient-id']
  var query = xtk.queryDef.create(
    <queryDef schema="nms:recipient" operation="get">
      <select>
        <node expr="@lastName"/>
      </select>
      <where>
        <condition expr={"@id="+contactId}/>
      </where>
    </queryDef>
  )
  
  var recipient = query.ExecuteQuery()
  contact.@lastName = recipient.@lastName
}

执行脚本后获得的结果:

<mainContact lastName="Doe"/>

<contact id="11504978621" lastName="Doe" recipient-cs="Doe John (john.doe@adobe.com)" recipient-id="3012"/>  
<contact id="11504982510" lastName="Martinez" recipient-cs="Martinez Peter (peter.martinez@adobe.com)" recipient-id="3013"/> 

JavaScript代码的内容通过​Administration > Configuration > Content management > JavaScript Codes​文件夹添加,并且必须在每个转换的发布模板中填充。

在此页面上

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