将动态内容添加到电子邮件中

小费

若要免费试用 Dynamics 365 Customer Insights,可注册参与 30 天试用

重要提示

本文仅适用于出站营销

动态内容在消息发送给特定个人之前解析。 您通常会使用动态内容来合并收件人联系人记录中的信息(如名字和姓氏)、放置特殊链接,以及从内容设置放置信息和链接。 如果您习惯使用代码,您还可以创建包含条件语句、for-each 循环等的自定义逻辑。 您可以在邮件正文中的任何位置使用动态内容,也可以在邮件头字段(主题、发件人地址和发件人名称)中使用几种类型的动态值。

使用内容设置为电子邮件设置标准值和所需值的存储库

内容设置是可用于市场营销电子邮件的一组标准值和必需值集。 每个设置都包括订阅中心链接、转发给朋友链接、社交媒体链接、您的邮政地址以及可以使用个性化功能作为动态值放入邮件中的其他信息。

Dynamics 365 Customer Insights - Journeys 附带一条默认内容设置记录,其预先配置为使用默认订阅中心(也包括开箱即用)。 您可以根据需要自定义此记录,也可以创建其他记录。 您将设置每个客户旅程以使用特定的内容设置记录,这意味着该旅程发送的所有邮件将使用相同的记录。 但是,每个旅程都可以使用不同的记录,这意味着您可以在两个或更多客户旅程中使用相同的市场营销电子邮件设计,每个旅程指定不同的内容设置记录。 如果您有多条内容设置记录,其中一个将是默认记录,并将自动应用于您创建的每个新客户旅程。

内容设置的值首先在发送时评估,这意味着您可以随时编辑内容设置记录,所有待处理和未来的电子邮件将自动使用最新值。

您使用的每个内容设置记录均必须可供外部市场营销服务使用,其负责管理电子邮件集合和投递。 因此,您必须在每次创建新内容时都通过选择上线来发布内容设置记录。

备注

如果您有经常在电子邮件中使用其他类型的值,和/或您想要在客户旅程级别进行管理,那么您可以将它们作为自定义字段添加到内容设置实体,就像您可以在 Dynamics 365 中添加其他实体类型的字段一样。 但是,在当前版本中,内容设置实体的所有自定义字段均必须是文本(字符串)类型。 详细信息:自定义 Customer Insights - Journeys

要查看、编辑或创建内容设置记录:

  1. 转到出站营销>市场营销模板>内容设置

  2. 将打开一个标准列表页面,您可以在其中查看、排序、搜索和筛选列表来查找特定记录,并使用命令栏上的按钮添加或删除记录。 选择要打开以进行编辑的记录,或在命令栏上选择新建创建新记录。

  3. 内容设置窗体将打开。 如果您正在编辑已经存在的记录,则必须在命令栏中选择编辑才能进行编辑。 如果您要创建一个新记录,您可以开始填写字段。

    内容设置窗体。

  4. 根据需要进行以下设置:

    • 名称:为客户设置记录输入名称。 这是您将内容设置分配给客户旅程或电子邮件预览时显示的名称。
    • 负责人:显示创建记录的 Dynamics 365 Customer Insights - Journeys 用户。
    • 地址主要部分:输入组织邮政地址的主要部分。 所有市场营销电子邮件都必须包含从内容设置记录中获取的有效主要地址。 选择 个性化按钮。 按钮以使用个性化功能输入引用现有记录中字段的表达式(如特定帐户记录中的地址字段)。
    • 地址行 2:输入补充邮政地址信息(如果需要)。 选择 个性化按钮。 按钮以使用个性化功能输入引用现有记录中字段的表达式(如特定帐户记录中的地址字段)。
    • 默认:设置为,使当前内容设置记录成为所有新客户旅程的默认值。 必须始终只有一个默认值;如果更改默认值,现有默认值将自动更改为
    • 负责业务部门的默认值:此设置仅在启用业务部门范围时才可用。 将此项设置为,使当前内容设置记录成为业务部门内所有新客户旅程的默认值。 业务部门范围必须始终只有一个默认内容设置;如果更改默认值,现有默认值将自动更改为
    • LinkedIn URLTwitter URLFacebook URLInstagram URLYouTube URLGoogle Plus URL:对于每种社交媒体服务,输入您的组织的登陆页的 URL。
    • 订阅中心:指定设置为订阅中心的现有市场营销页面。 所有市场营销电子邮件都必须包含从内容设置记录中获取的订阅中心链接。 选择 个性化按钮。 按钮以使用个性化功能输入引用您要使用的特定页面的整页 URL 字段的表达式。 生成的表达式看起来像这样(GUID 将根据您使用个性化选择的记录而变化):
      {{msdyncrm_marketingpage(3343053c-8daf-e911-a85e-000d3a3155d5).msdyncrm_full_page_url}}
    • 转发给朋友:指定一个设计为转发给朋友页面的现有市场营销页面。 选择 个性化按钮。 按钮从可用页面列表中进行选择。 选择 个性化按钮 按钮以使用个性化功能输入引用您要使用的特定页面的整页 URL 字段的表达式。 生成的表达式看起来像这样(GUID 将根据您使用个性化选择的记录而变化):
      {{msdyncrm_marketingpage(36458a9e-72af-e911-a859-000d3a3159df).msdyncrm_full_page_url}}
  5. 选择窗口右下角的保存保存设置。

  6. 如果您正在编辑已经存在的内容设置记录,则在保存时会自动重新发布该记录。 如果要创建新记录,请在命令栏上选择上线将其发布到市场营销服务,以便您可以开始使用它。

使用个性化放置动态字段值

个性化可帮助您构建有效的动态表达式,以定位来自收件人联系人记录的字段值、邮件内容设置和其他数据库值。 每当在图形设计器中选择文本元素时,此按钮会在文本格式工具栏上提供。 该按钮还为某些设置字段提供,如主题、发件人地址和发件人名称字段。

备注

个性化对话仅显示与市场营销见解服务同步的实体和关系。 如果您需要显示未列出的一个或多个实体的信息或使用其关系,请要求您的管理员将相关实体添加到市场营销见解服务中。 如果您是管理员,请参阅选择要与市场营销见解服务同步的实体中的说明。

使用个性化放置动态表达式

要使用个性化:

  1. 将光标放在要插入动态文本的字段或文本元素中,然后选择个性化按钮 个性化按钮。 个性化对话将打开。

    个性化,第 1 页。

  2. 执行下列操作之一:

    • 选择动态内容来放置一个可以根据您使用消息的上下文更改的值,然后从此处的下拉列表中选择以下选项之一:
      • 联系人:放置来自收件人的联系人记录的字段值,如名字。 这些值因收件人而异。
      • ContentSettings:放置来自内容设置的字段值。 此处提供诸如订阅中心 URL、转发 URL 和发件人邮政地址等值。 这些值可能根据使用消息的客户旅程而有所不同。
      • FormDoiSubmission:为窗体双向确认放置动态字段。 此字段不需要关系值,如下所述。
      • 消息:放置与消息本身相关的值;目前,这包括打开网页 URL 和双向确认电子邮件中使用的各种动态值。
    • 选择静态内容放置来自特定记录的固定值(如近期活动的名称)。 无论您在何处使用消息或谁接收消息,此值都是相同的。 然后进行以下设置以确定包含所需值的实体和记录:
      • 选择选项(顶部组合框):选择实体(如活动或客户)。 要搜索实体,请将光标放在此框中,然后开始键入其名称,直到显示所需的实体。
      • 选择记录(底部下拉列表):按名称选择特定记录。 此列表显示所选实体的所有记录。 与实体一样,您也可以在此处搜索。
  3. 现在,您必须确定要放置的特定字段。 执行下列操作之一:

    • 选择相关实体以查找与您在上一页上选取的实体相关的实体中的字段。 然后进行以下设置以确定要显示的关系和字段:
      • 选择关系:关系定义您要跳转到的第二个实体,以及您到达那里使用的路径。 要搜索关系,请将光标放在此框中,然后开始键入其名称,直到显示所需的关系,然后选择它。 有关如何了解关系在此处的表示方式的更多信息,请参阅下一节
      • 选择字段:选择要显示的字段名称。 与关系一样,您也可以在此处搜索。 此下拉列表仅在您选择 N:1 关系时才可用。
  4. 在对话框的底部,您现在可以看到最终表达式。 选择插入放置表达式。

    个性化,第 2 页。

重要提示

使用 for-each 循环创建的列表不会按特定顺序呈现,并且不可按任何字段排序。

个性化如何呈现数据库关系

在个性化中选择关系时,将使用以下命名约定之一显示选项:

  • FieldName (PrimaryEntity) -> SecondaryEntity
    当主要实体位于括号中并显示字段名称时,它是多对一 (N:1) 关系,此关系产生来自辅助实体的单个记录。 因此,您通常使用第二个下拉列表从辅助实体中选择要与表达式一起显示的字段。
  • PrimaryEntity -> FieldName (SecondaryEntity)
    当辅助实体位于括号中并显示字段名称时,它是一对多 (1:N) 关系,此关系可以产生来自辅助实体的多个记录。 因此,您无法选择字段(第二个下拉列表被禁用),而必须使用此关系作为 for/each 循环的一部分来显示每个可用相关记录的值。
  • PrimaryEntity -> SecondaryEntity
    当两个实体都不在括号中时,它是一个多对多 (N:N) 关系,此关系可以在两个方向上连接多个记录。 因此,您无法选择字段(第二个下拉列表处于禁用状态),并且您不能将此关系用于个性化设置。 这是因为关系由中间实体维护,而您只能从主要实体遍历到中间实体。

其中:

  • PrimaryEntity 是关系开始端的实体。 它始终在箭头左侧显示。 这是您在个性化对话的上一页中选择的实体。 例如,联系人(主要实体)可以通过联系人的公司名称字段(字段名称)与客户(辅助实体)相关联;这会显示为:公司名称(联系人) -> 客户
  • FieldName 始终显示在实体名称旁边(在括号中)。 这是建立关系的字段的名称。 命名的字段属于括号中的实体,并显示箭头另一侧实体的值(但实际上包含从中提取值的相关记录的 ID)。 在某些情况下,您会注意到相同的两个实体之间的关系,每个实体都流经不同的字段。
  • SecondaryEntity 是关系的目标。 它始终在箭头右侧显示。 随最终表达式一起显示的值将来自属于辅助实体的字段。

备注

对于 N:N 关系,没有字段值显示。 这意味着如果在相同的两个实体之间存在多个 N:N 关系,您将在下拉列表中看到多个长相一样的关系。 这种情况非常少见,但如果您看到它,则必须使用反复试验来确定要使用的正确关系。 要确认,您可以检查生成的表达式来查看您看似是否选择了正确的关系(关系在这里显示不同并且可能提供线索),或者设置包括两个版本 N:N 关系的测试消息,并使用测试客户旅程将其传递给您自己。

下面是一些示例:

  • 公司名称(联系人) > 客户联系人实体使用此关系在联系记录的公司名称字段中显示来自客户实体的信息。 换句话说,它链接到联系人工作的公司(客户)。
  • 管理合作伙伴(联系人) > 客户联系人实体使用此关系在联系记录的管理合作伙伴字段中显示来自客户实体的信息。 换句话说,它链接到充当联系人的管理合作伙伴的公司(客户)。
  • 联系人 -> 主要联系人(客户)客户实体使用此关系在客户记录的主要联系人字段中显示来自联系人实体的信息。 换句话说,它查找将当前联系人指定为主要联系人的所有客户。
  • 联系人 -> 联系人(活动注册)活动注册实体使用此关系在活动注册记录的联系人字段中显示来自联系人实体的信息。 换句话说,它查找由(或为)当前联系人进行的所有活动注册。

个性化创建的表达式

个性化创建使用如下格式的表达式:

  • {{EntityName.FieldName}}
  • {{EntityName(RecordID).FieldName}}
  • {{EntityName.RelationshipName.FieldName}}
  • {{EntityName(RecordID).RelationshipName.FieldName}}

请注意,生成的表达式中用于关系名称的表示法与它们在个性化对话中的表示方式不匹配。 以下是生成的表达式的一些示例:

  • {{contact.firstname}}
    放置收件人的名字。
  • {{msdyncrm_marketingpage(3343053c-8daf-e911-a85e-000d3a3155d5).msdyncrm_full_page_url}}
    放置括号中的 GUID 指定的市场营销页面记录中的 msdyncrm_full_page_url 字段的值。 您通常可以在内容设置记录中使用此窗体的表达式来指定订阅中心或转发给朋友页面。
  • {{msdyncrm_contentsettings.msdyncrm_subscriptioncenter}}
    放置为发送消息的客户旅程配置的内容设置中确定的订阅中心页面的 URL。
  • {{msdyncrm_contentsettings.msdyncrm_forwardtoafriend}}
    放置为发送消息的客户旅程配置的内容设置中确定的转发页面的 URL。
  • {{Message.ViewAsWebpageURL}}
    放置用于在 Web 浏览器中打开当前消息的 URL。
  • {{msevtmgt_event(8a519395-856c-4e22-b560-650ce6d6a79d).msevtmgt_webinarurl}}
    放置由指定活动 ID(在括号中)标识的活动的网络研讨会 URL。
  • {{msdyn_survey(39128da2-c968-4627-9595-f030b6571be4).msdyn_name}}
    放置由指定的调查 ID(在括号中)标识的调查的名称。
  • {{contact.contact_account_parentcustomerid.name}}
    此表达式查找联系人工作的公司的客户名称。
  • {{contact.contact_account_msa_managingpartnerid.name}}
    此表达式查找联系人所在公司的客户管理合作伙伴的名称。

当您有了有效的表达式后,您可以将它复制并粘贴到任何地方。 您不必每次都使用个性化。

重要提示

在字段表达式中最多可以有两个跳跃点(句点)。 不要尝试通过向使用个性化生成的表达式添加更多跳跃点来创建更复杂的表达式。

提示

如果您需要个性化支持的数据类型,通常最好使用个性化功能放置代码而不是尝试从头开始键入代码。 这将确保实体、关系和字段名称与数据库中使用的名称匹配,并可帮助您避免拼写错误。

备注

Dynamics 365 Customer Insights - Journeys 的电子邮件发送功能不支持计算字段。

收件人、发件人名称、发件人地址和回复字段中的动态值

市场营销电子邮件窗体的摘要选项卡上,您可以在发件人和收件人部分为您的消息进行各种与内容无关的设置。 这包括用于建立消息将使用的收件人、发件人名称、发件人地址和回复值的值和表达式。

电子邮件的发件人和收件人设置。

利用此功能的一种典型方法是将发件人名称发件人地址设置为联系人记录的负责人。 然后,通过将每个联系人记录的负责人分配给管理该联系人的销售人员,收件人将收到显示他们可能知道的某人的发件人地址的营销电子邮件,这可以大大增加打开率。 操作步骤如下:

  1. 如果您的 Customer Insights - Journeys 实例尚未设置为将用户 (systemuser) 实体与市场营销见解服务同步,请与您的管理员讨论此设置问题。 如果您是管理员,请参阅选择要与市场营销见解服务同步的实体中的说明。
  2. 打开您的电子邮件并转到摘要选项卡。
  3. 删除发件人姓名字段的内容,然后选择此字段旁边的个性化按钮 个性化按钮
  4. 在个性化对话的第一页上,选择上下文并将其设置为联系人。 然后选择下一步
  5. 在个性化对话的第二页上,选择相关实体,然后:
    • 将顶部下拉列表(关系)设置为负责用户(联系人) -> 用户
    • 将底部下拉列表(字段)设置为全名
  6. 选择确定放置表达式,该表达式应为:{{contact.contact_systemuser_owninguser.fullname}}
  7. 删除发件人地址字段的内容,然后选择此字段旁边的个性化按钮 个性化按钮
  8. 在个性化对话的第一页上,选择上下文并将其设置为联系人。 然后选择下一步
  9. 在个性化对话的第二页上,选择相关实体,然后:
    • 将顶部下拉列表(关系)设置为负责用户(联系人) -> 用户
    • 将底部下拉列表(字段)设置为主要电子邮件
  10. 选择确定放置表达式,该表达式应为:{{contact.contact_systemuser_owninguser.internalemailaddress}}

您可以使用类似的技巧将负责用户的名称或电子邮件地址放在邮件内容的任何位置。 您可以使用个性化或复制/粘贴 handlebar 表达式来执行此操作,甚至可以手动键入 handlebar 表达式。

您可以使用动态表达式来定义图像元素的源 URL。 为此,选择图像元素,转到其属性面板,然后选择字段旁边的个性化按钮 个性化按钮,将动态文本作为 URL 的一部分放置。 您通常会将其与静态文本混合来组合完整的 URL。 例如,您可以包括收件人的联系人 ID 或公司名称,以选择与每个收件人相关的图像。

您也可以使用个性化来帮助构建动态表达式,来为图像设置链接目标。

备注

Dynamics 365 Customer Insights - Journeys 文件库为您上传的每个图像生成一个唯一的基于 GUID 的文件路径,这意味着文件库中的图像具有不可预测的 URL,这些 URL 不包含您的原始文件名。 因此,要使用此处描述的技术,您必须将图像托管在您自己的网站或 URL 可预测并且可以包含可从 Dynamics 365 字段轻松提取的值的任何第三方托管服务中。

查找记录 ID

非上下文字段表达式(使用窗体 {{EntityName(RecordID).FieldName}})需要记录 ID 来标识值必须来自的特定记录。 通常,个性化将帮助您查找这些 ID,但有时您可能需要在为消息设计动态功能时手动查找 ID。 若要查找任何记录的 ID:

  1. 打开要引用的记录。
  2. 查看浏览器地址栏中显示的 URL,该 URL 应显示如下所示的 URL:
    https://<MyOrg>.crm.dynamics.com/main.aspx?appid=c8cba597-4754-e811-a859-000d3a1be1a3&pagetype=entityrecord&etn=msevtmgt_event&id=5acc43d5-356e-e811-a960-000d3a1cae35
  3. 找到以 &id= 开头的 URL 部分,其后跟当前记录的 ID 号。 复制该数字(仅值),用于您的表达式中。

高级动态内容

您可以为电子邮件设计添加高级逻辑处理,这可以使内容对收件人、人口统计数据和上下文更加敏感。 这种类型的自定义需要您对脚本和编程有基本的了解。

正如您在前面的示例中看到的那样,动态内容使用双括号围住({{}})。 这包括使用个性化功能添加的标准字段值,以及本节中介绍的更高级的编程结构。

提示

如果要在消息中显示双括号,而不是使用它们来表示代码块的开头或结尾,则在第一个括号前加上反斜杠(转义),如 \{{\}}。 斜杠不会出现在最终呈现的消息中,但是双括号会出现。

条件语句和比较

条件 (if-then-else) 语句根据一个或多个条件表达式解析为 true 还是 false 来显示内容。 您可以通过将代码放在文本元素中,或者通过在其他设计元素之间放置自定义代码元素来添加创建这些语句所需的代码。 详细信息:如何在设计器中输入高级动态内容

条件语句采用以下形式:

{{#if (<operator> <value1> <value2>)}}
   Content displayed when the expression is true
{{else if (<operator> <value1> <value2>)}}
   Content displayed when the first expression is false and the second one is true
.
.
.
{{else}}
   Content displayed when all expressions are false
{{/if}}

其中:

  • 条件块必须始终以 {{#if … }} 打开。
  • 条件表达式必须包含在括号中。
  • 条件表达式以<运算符>开头,运算符必须是下表中列出的值之一。 它确定如何将第一个值与第二个值进行比较。
  • <value1><value2> 是要通过条件表达式进行比较的值,每个值可以是动态值或常量值。 如果 <value1><value2> 是一个常量字符串值(不是数字或表达式),那么它必须用单引号 (') 括住;对于实数,使用句点 (.) 作为十进制描述符。
  • 如果 <value1> 是布尔字段(在 Dynamics 365 中也称为两个选项字段),则不包括<运算符><value2> 或括号。 布尔字段的值始终为 true 或 false,因此您应该直接使用它们来建立条件,如:{{#if contact.is_vip}}
  • {{else}}{{else if … }} 子句是可选的。
  • 条件块必须始终以 {{/if}} 关闭。

下表列出了可以在条件表达式中使用的所有运算符。 其他运算符当前不可用,也不能在条件表达式中使用复杂的布尔表达式(如使用 AND 或 OR 运算符)。

Dynamics 365 Customer Insights - Journeys 语法(区分大小写) 运算符
eq 等于
ne 不等于
lt 小于
gt 大于
lte 小于等于
gte 大于等于

例如,此条件语句可用于根据每个邮件收件人的国家/地区建立邮件称呼中使用的语言:

<p>{{#if (eq contact.address1_country 'Denmark')}}
    Hej
{{else if (eq contact.address1_country 'US')}}
    Hi
{{/if}} {{contact.firstname}}!</p>

这是一个基于名为 is_vip 的布尔(两个选项)字段的条件语句的示例;请注意,因为布尔字段始终返回值 true 或 false,所以条件中不包含运算符、比较值或括号:

<!-- {{#if contact.is_vip}} -->
    <h3>Be sure to show your VIP card to receive a 20% discount!</h3>
<!-- {{/if}} -->

提示

您可以使用以下方法测试空字段值:

{{#if (eq contact.lastname '')}}

其中 '' 是两个单引号,而不是双引号。 这会找到空字段,但不会找到 null 字段。

提示

虽然您不能在条件表达式中使用复杂的布尔表达式,但您可以实现类似的功能,如下所示:

Not supported:

{{#if A and B}}<DisplayedContent>{{/if}

等效于 (supported):

{{#if A}}{{#if B}}<DisplayedContent>{{/if}}{{/if}}

 
Not supported:

{{#if A or B}}<DisplayedContent>{{/if}

等效于 (supported):

{{#if A}}<DisplayedContent>{{/if}} {{#if B}}<DisplayedContent>{{/if}}

提示

在测试存储为数据库中选项集的值时,请使用选项集的索引值,而不是显示值。 例如,您可能有一个名为 contact.customertypecode 的字段,该字段包含一个整数以标识其客户类型。 每个客户类型代码也有一个显示名称,如 0 = "copper"、1 = "silver"、2 = "gold"。 在这种情况下,您必须将表达式设置为使用索引(整数),而不是匹配的显示值。 因此,如果您正在寻找金牌客户,您应该使用:

{{#if (eq contact.customertypecode 2)}}

提示

当您测试较大的数值(如“1,932,333”)时,请在比较语句中省略千位分隔符 (,),即使您可能经常在 UI 中看到这些值。 要测试此值,您的表达式应如下所示:

{{#if (eq contact.customernumber 1932333)}}

For-each 循环

For-each 循环允许您单步执行与特定的当前记录相关的记录集合—例如,提供与给定联系人关联的所有最近事务的列表。 您可以通过将代码放在文本元素中,或者通过在其他设计元素之间放置自定义代码元素来添加创建这些语句所需的代码。 详细信息:如何在设计器中输入高级动态内容

For-each 循环采用以下形式:

{{#each Entity.RelationshipName }}
   ...
   {{this.RelatedField1}}
   ...
   {{this.RelatedField2}}
   ...
{{/each}}

其中:

  • 循环块必须始终以 {{#each … }} 打开。
  • Entity.RelationshipName 标识循环将迭代的一组相关记录。
  • 循环以第一个可用的相关记录开始,并为每个可用的相关记录重复,直到列出所有相关记录。 请注意,相关记录将以任意且不可预测的顺序返回。
  • {{this.RelatedField<n>}} 标识相关记录中的字段名称。 此表达式的“this”部分引用在当前循环迭代中处理的相关记录,必须后跟相关实体的有效字段名称。 您可以在每个循环中包含任意数量的字段。
  • 循环块必须始终以 {{/each}} 关闭。

例如,您的数据库可能包含联系人订购的产品列表。 您可以使用下面这样的代码在电子邮件中列出这些内容:

<p>You have purchased:</p>
<ul>
<!-- {{#each contact.contact_product_productid}} -->
<li>{{this.name}}</li>
<!-- {{/each}} -->
</ul>

在此示例中,Dynamics 365 Customer Insights - Journeys 系统已被自定义为包含名为 product自定义实体,其在 productid 字段的 contactproduct 实体之间设置为 1:N 关系。 要使产品实体可用于您的电子邮件,还必须与市场营销见解服务同步(照常)。

重要提示

仅将前 1,000 个相关项目添加到了关系中以用于电子邮件呈现目的。 电子邮件模板不支持对 1,000 多个项使用关系,这可能会导致意外结果。

另请注意,不支持关系级别服务。 因此,不允许使用以下语法:

{{#each Entity.RelationshipOnEntity}} 
    ... 
    {{#each this.RelationshipOnRelatedEntity}}
        ...
    {{/each}}
    ... 
{{/each}}

如何在设计器中输入高级动态内容

在设计器中输入高级动态代码时必须小心,因为有很多(有时是意外)方法可能会出错,这会破坏您的代码。 以下是有关如何输入和测试代码的一些提示:

  • 使用自定义代码元素在设计器选项卡上的设计元素之间放置代码段。这比使用 HTML 选项卡将代码直接放置在 HTML 中更加可见和可靠。不过,您也可以在文本元素使用动态代码,在这种情况下,您可能需要在 HTML 选项卡上清理该代码,如本列表后面所述。 (在全页编辑器中工作时,选择自定义代码元素以编辑其内容。)
    自定义代码元素。
  • 当您在设计器选项卡上的文本元素中输入代码时,您添加的任何额外空格和回车符都将在您的代码中创建 &nbsp;<p> 标记,这可能会破坏它。 以后请始终转到 HTML 标签,在那里你会看到所有这些额外的标记,并确保将它们删除。
  • 当您在文本元素中输入代码时,所有动态内容代码都必须包含在一组开始和结束标记(如 <p></p>)中,或 HTML 注释中(对于与显示的文本完全分开的代码)。 不要将代码放在注释或有效的 HTML 标记对(或自定义代码元素)之外,因为这会让编辑器混乱(特别是当您在 HTML设计选项卡之间切换时)。 您必须使用 HTML 选项卡来检查并更正文本元素中的 HTML。
  • 不要在属于同一表达式的代码元素之间放置回车符(如在 for-each 循环中),除非将每一行包含在其自己的一组 HTML 标记中(如此列表后面给出的 for-each 循环示例中所示)。
  • 个性化功能通常有助于构造从数据库中获取值的表达式,因为它可以帮助您查找数据库表、字段和关系名称。 在设计器选项卡上的文本元素中工作时,此工具可用,当输入的值属于某些支持它的字段时也可用(如电子邮件主题)。 在 HTML 选项卡或自定义代码元素中工作时,个性化不可用,因此您可以通过在任何文本元素中使用个性化开始,然后将生成的表达式剪切/粘贴到您的自定义代码元素或 HTML 中。
  • 创建循环或放置查找值时使用的关系名称必须与市场营销见解服务中使用的名称相匹配。 此关系名称不一定与用于自定义 Dynamics 365 的关系名称相同。 要查找正确的关系名称,请使用个性化功能。

例如,您可以通过在设计器的 HTML 选项卡上输入以下内容来设置电子邮件的称呼行(在文本元素的内部或外部):

<p>{{#if (eq contact.address1_country 'Denmark')}}Hej{{else if (eq contact.address1_country 'US')}}Hi{{/if}}{{contact.firstname}}!</p>

以下示例(前面也有显示)显示了如何使用注释来包含完全不在显示内容中的代码(也在 HTML 选项卡上):

<p>You have purchased:</p>
<ul>
<!-- {{#each contact.contact_product_productid}} -->
<li>{{this.name}}</li>
<!-- {{/each}} -->
</ul>