Commerce的体系结构 – 了解有关导入和导出数据的信息

学习目标

完成本单元后,您将能够:

  • 给出两个为什么导入/导出模式文件很重要的原因。
  • 列出通常导入的两种数据。
  • 描述两种导入/导出模式。
  • 描述导出过程。
  • 解释为什么增量供稿很重要。

介绍

大多数商人都有后端系统,这是他们的记录系统。Salesforce B2C Commerce应用程序环境具有其自己的数据库和服务器,旨在支持店面。B2C Commerce导入/导出功能弥合了差距。

考虑一下数据流:从记录系统到B2C Commerce,从B2C Commerce捕获到记录系统。产品详细信息(例如SKU编号,产品描述,尺寸,图像,价格和视频)在记录系统中开发,然后导入B2C Commerce。购物者创建的订单将导出到外部系统进行处理。尽管可以将优惠券代码导入B2C Commerce,但购物者兑换优惠券的行为会创建导出的数据。

导入使用来自外部文件的数据来填充B2C Commerce数据库。导出使您可以从B2C Commerce数据库中提取数据并创建可用作外部系统供稿的XML文件。提要是特定的导入或导出过程。

从后端系统导入和导出

数据从生产中导出。

这些不是店面数据导入/导出过程。

  • 数据复制是指您将代码和数据从一个实例复制到另一个实例。我们将在下一个单元中讨论数据复制。
  • 业务管理器目录提要功能处理第三方文件(例如Certona)。
  • 站点导入/导出将特定于站点的配置和设置信息从一个实例移动到另一个。

模式

架构文件指定B2C Commerce导入和导出所需的文件结构。B2C Commerce仅接受以这些模式格式化的XML导入文件。架构还记录了所需的数据属性。导入的数据必须与架构匹配,否则将不会导入。

B2C Commerce以XML格式导出,但优惠券代码除外,后者以CSV格式导出。我们建议您使用第三方程序将.csv文件处理为所需的XML格式。使用纯.NET或Java平台(为处理分配了大量内存)来转换文件要快得多,效率也更高。

那么这些架构文件是什么?事实证明,其中有很多。这里有些例子:

  • sort.xsd
  • 优惠券
  • 优惠券兑换
  • order.xsd
  • Promotion.xsd

模式

您可以指定导入模式来定义B2C Commerce如何解释导入供稿中的数据。该模式适用于提要中的所有对象以及模式定义的所有导入文件。

导入和导出模式为合并,更新,替换和删除。

这些是导入模式。

模式说明
合并如果对象不存在,则会创建一个对象,并对该对象执行更新。
更新资料现有对象被修改。如果不存在,则不会创建。提要中提供的对象属性将更新。Feed中未提供的对象属性保持不变。
更换将使用提要中提供的数据重新创建对象。该对象不必已经存在。导入期间,将删除Feed中未提供的现有属性。替换模式与删除然后合并的模式相同
删除从数据库中删除了一个对象。提要中仅必须提供对象ID。其他对象属性将被忽略。

删除导入中的对象时要小心。删除模式将删除提要中的对象。同样,替换模式将删除提要,然后重新创建提要中的对象。仅执行更改导入即可更改一个对象,这会删除整个对象集。

某些模式在导入元素级别支持属性模式。在这种情况下,唯一支持的模式是删除,其中可以为特定元素覆盖流程的导入模式。这对于更改的信息很有用,在此情况下,单个导入过程可以创建,更新和删除对象。

生产提要

我们建议生产提要仅包含对先前提要的更改。这些称为增量供稿。它们较小,可以存档,可以更快地导入,并且更易于排除故障。但是,某些架构的元素会覆盖全局导入模式,并且始终使用替换模式。这些元素不能包含在增量Feed中,因为它们要求在每次导入中都包含完整的对象集。

列表类型元素

XML文件中列表类型元素的标准行为是替换整个列表,而不管导入方式如何。如果导入文件中未包含list元素:

  • 在合并模式下,列表保留。
  • 在替换模式下,列表被删除。

导入/导出过程

这是一个典型的导入过程。

  1. 使用WebDAV,SFTP或HTTPS将XML文件从后端系统传输到B2C Commerce实例。
  2. 对于登台或生产实例,请建立用于文件传输的安全连接。沙箱不需要它。
  3. 使用业务管理器将XML文件导入实例,或创建自定义控制器。B2C Commerce为大多数标准导入提供了导入管道,这些导入管道可以处理大型数据集,快速可靠,有效地使用系统资源。我们建议在必须将业务对象加载到B2C Commerce中时使用它们,而不是对B2C Commerce脚本或管道使用自定义逻辑。

这是典型的导出过程。

  1. 使用模式将数据库对象导出到XML文件。通过业务管理器或通过创建自定义控制器手动执行此操作。您可以对大多数出口使用B2C Commerce出口管道。在某些情况下,它们在对象方面比Business Manager更细化。您必须创建一个控制器以自动执行数据导出。
  2. 将文件从实例传输到商家后端系统。
  3. 如果需要满足PCI-DSS(安全性)要求以传输数据或满足后端系统要求,请配置安全连接。

实例特定的详细信息

根据实例类型,您将以不同的方式使用B2C Commerce导入/导出。我们分别探索每种实例类型。

数字实例具有独特的导入和导出注意事项。

沙盒

开发网站时,每个开发人员都使用一个单独的沙箱。您可以创建一个初始沙箱,用作其他沙箱的模板,这样站点配置只需完成一次。

您首先将数据文件从本地计算机传输到实例。然后,使用业务管理器将数据导入实例数据库。当第一个沙箱具有开发团队所需的配置和数据时,请使用“网站导出”导出网站内容和配置,然后将其下载到开发人员计算机。

在开发过程中,您可以将新产品和价格Feed直接导入每个沙箱。每个沙箱使用相同的导入文件,但必须独立地导入它们。您还可以创建自定义控制器以自动执行数据导入,通常需要执行此步骤以支持登台和生产系统的自动数据导入。然后,另一个沙箱可以使用“站点导入”来获取配置和内容。

注意

注意

某些对象只能使用网站导入/导出来导入。在执行此操作之前,请确保这些对象存在。如果导出网站的用户或权限设置,则将覆盖要导入到其上的沙箱上的数据信息。

分期和生产

主实例组(PIG)包含开发,登台和生产实例。使用自定义控制器通过安全连接将数据从后端系统移动到这些实例类型之一。对于不频繁的提要,仅将它们导入到暂存中,然后将其复制到生产中。这样可以保护您的生产实例免受导入数据问题的影响。

某些提要可能需要在Business Manager中进行其他增强。例如,如果您要手动添加仅网络描述或其他信息。需要增强的Feed在登台中进行更新,然后将数据复制到生产中。

暂存和复制必须经常更改的数据是不切实际的,因此频繁的提要直接导入到生产中。频繁的提要同时导入到暂存和生产中,因此实例保持同步。请记住,您的登台实例应始终反映生产情况。

使用控制器可增加导入/导出的灵活性。将业务逻辑添加到控制器中,以将值添加到导入文件中,自动更新搜索索引,或存档导入文件。从生产中导出数据时,可以将业务逻辑添加到控制器中,以更改导出文件的格式,添加值或进行其他处理。

发展历程

开发实例是生产实例的测试环境。您可以执行从站点到开发实例的初始站点导入/导出来进行设置。之后,使用数据复制来更新该实例上的数据和代码。

Commerce的体系结构 – 开始配置您的B2C Commerce网站

学习目标

完成本单元后,您将能够:

  • 列出实例类型。
  • 说明实例类型的用途。
  • 描述网站与组织的关系。
  • 描述如何管理多站点领域。

介绍

Salesforce B2C Commerce包括运行电子商务店面所需的资源和流程。您不会直接与云交互;这是支持您的网站的基础。本单元说明了它们如何工作:领域,PIG,SIG以及在它们上运行的实例的类型。

创建或配置站点时,它会被组织为所谓的领域,该领域包括两个组:主实例组(PIG)和辅助实例组(SIG)。领域是特定于商家的。两组都包括可用于配置电子商务网站的工具。

领域具有主要和次要实例组。

境界

商家通常只有一个适合他们的领域。领域包含在其上开发,测试和部署店面应用程序的实例。B2C Commerce实例是包含以下组件的应用程序基础结构:

  • 网络服务器
  • 应用服务器
  • 数据库服务器

通常,商家每个域接收九个实例。其中包括用于在PIG上进行登台,测试和部署的三个实例,用于在SIG上进行代码开发的五个沙箱实例,以及一个演示实例。为了实现可伸缩性,客户每个域最多可以有47个沙箱。

注意

注意

一个领域只有一个PIG和一个SIG。

在Business Manager(用于站点配置和管理的B2C Commerce工具)中,您可以按以下方式使用PIG实例。

  • 登台 -用于站点配置,数据充实和数据导入
  • 开发 -用于在部署之前测试站点
  • 生产 -用于托管购物者访问过的实时网站

单域和多域配置

通常,商家具有单个领域,可以在其中开发,登台和部署具有不同品牌或地区的多个站点。管理店面站点的人员不必位于同一位置。站点可以共享产品目录或具有不同的目录。他们甚至可以共享一些站点管理员设置。

具有多个业务线或全球团队且每个都有自己的流程或业务策略的商人通常使用多个领域。对于具有不同组织的商家来说,单独的领域也很有用,这些组织具有单独的后端集成,时间表或其他问题,可以更好地进行独立管理。

每个领域(无论是单个配置还是多个配置)都具有一个主实例组和一个辅助实例组。

虽然同一领域中的站点可以共享相同的产品数据主目录,但是不同领域中的站点不能通过目录结构共享数据。但是,他们可以通过将数据导入不同的领域来共享数据。

假设您有两个拥有不同品牌的站点:一个在欧洲,另一个在环太平洋。您可以为管理环太平洋站点的团队提供一个领域,为管理欧洲站点的团队提供另一个领域。

站点和组织

在业务管理器中,您可以在每个实例中配置一个或多个站点。特定实例上的多个站点被视为组织。例如,在配置设置时,可以将它们配置为特定于站点的(一个站点)或跨所有站点(组织)配置。

执行个体

B2C Commerce实例包含用于定制店面的工具和资源。通过在浏览器中键入实例URL来查看实例,或在业务管理器中打开实例。沙盒,分段,开发和生产这四种实例类型有不同的考虑因素:

沙盒分期发展历程生产
用法创建和更新店面代码。配置广告系列,促销,产品,目录和内容。模拟生产环境。用作使用代码测试内容的最后一步。通过B2C Commerce提供的CDN,但不缓存(内容)。用于店面交易的实时实例。已连接到B2C Commerce提供的CDN。
数据I / O对于沙箱,大多数系统作业均被禁用。数据和代码将上载到暂存中,然后复制到生产或开发中。从分段复制数据和代码。可以从实例中导出数据。从分段复制数据和代码。可以从实例中导出数据并将其导入到暂存中。

实例类型用户

根据团队的规模,一个人可以扮演多个角色。这些是一些一般责任。

角色实例类型职责范围
开发者沙盒,暂存开发人员在本地计算机上创建或修改模板,控制器和脚本,然后将它们上载到沙盒进行测试。开发人员将代码上传到登台。他们还可以导出商户在登台时添加的数据,以用作沙箱的测试数据。注意:开发人员仅在测试生产中的产品时才使用开发实例。
跟单员分期售货员创建活动和促销,管理产品信息并配置搜索行为。
管理员所有实例管理员授予对实例和实例功能的访问权限。他们重新启动实例,管理数据馈送,并上传证书。
质量保证工程师发展历程该工程师在尽可能接近生产的条件下测试现场。这里没有代码开发。

Salesforce B2C Commerce程序员 – 探索B2C商务业务对象

学习目标

完成本单元后,您将能够:

  • 说明业务对象如何定义Salesforce B2C Commerce店面数据结构。
  • 列出为什么要自定义系统对象的两个原因。
  • 列出使用自定义对象的两个原因。
  • 列出两个业务对象最佳实践。

介绍

B2C Commerce是一个面向对象的系统,因此了解一些从对象开始的基本原理非常重要。对象是包含数据的自包含实体。组织单个对象,以便数据描述该对象。例如,一个Dress对象看起来像这样:

连衣裙

  • 尺寸
  • 颜色
  • 场合
  • 袖子
  • 领口
  • 长度

礼服对象只包含描述礼服的数据。它不包含描述其他内容的数据,例如手镯。

数据(例如本示例中的Color)存储在也称为attribute的字段中。属性用于描述对象的一个​​方面。在这种情况下,如果您告诉朋友您要描述一些东西,然后说“尺寸,颜色,面料,场合,袖子,领口和长度”,他们可能会说您在谈论一件衣服(或者也许衬衫)。着装是对象,而颜色是对象的属性。

业务对象定义B2C Commerce店面数据的结构。业务对象可以是系统随附的系统对象,也可以是可用于向应用程序添加其他功能的自定义对象。自定义对象需要自定义代码。

系统对象

B2C Commerce提供了63种系统对象类型,从 Appeasement到TrackingRef。在您的Business Manager版本中,有些标记为只读。您不能通过创建新的系统对象来自定义内部B2C Commerce系统,但是可以创建新的自定义系统对象来满足您的业务需求。这是一个重要的区别!系统对象类型定义了系统对象中包含的属性。他们的行为就像一张地图。

Commerce Cloud店面参考体系结构(SFRA)使用系统对象来描述其站点的一部分。这使其成为店面应用程序开发的起点很有用,因为它是为与系统对象进行交互而开发的,从而消除了对自定义代码的需求。

为确保您的实现完全使用可用的系统对象,您应该熟悉它们。在B2C Commerce的在线工具Business Manager中,该工具用于配置,管理和开发店面应用程序,您可以:

  • 查看系统对象
  • 查看每个系统对象的属性
  • 编辑属性,包括创建新的属性值
  • 查看属性组
  • 创建新的属性组

B2C Commerce丰富的系统对象库已经满足了店面应用程序中所需的大多数数据,例如产品详细信息,内容,订单和促销。使用这些对象可以极大地加快实现速度,因为您可以利用为这些对象开发的代码。

这些是SFRA中使用的一些系统对象。

对象ID目的属性

Basket
代表购物车。 业务类型
channelType
货币代码
客户电子邮件
顾客姓名
客户编号
最后修改

Campaign
表示一个广告系列,它是可以针对特定框架部署的一组体验,例如广告位配置,促销或排序规则。 创立日期
描述
结束日期
最后修改
开始日期

Category
表示产品目录中的类别,并包含包含类别数据的属性。该对象通常用于(和自定义)控制类别在店面中的行为。 AlternativeURL
catBannerID
customCSSFile
描述
显示名称
enableCompare
headerMenuBanner

Content
表示内容资产,例如文本,图像,视频或音频。
身体
配置
创立日期
customCSSFile
卡塔
描述
最后修改

与上面的dress对象一样,Content对象包含多个属性,例如year,body和config。

扩展系统对象

您可以扩展系统对象,以从购物者那里收集更多信息,定制店面站点以显示其他信息,并根据后台需求帮助您更有效地处理订单。

例如,您可以 向购物篮对象添加addToEmailList属性,该属性将在购物车页面上显示“请将我添加到您的电子邮件列表”复选框。您还需要添加代码以显示和处理此数据。

组对象以收集更多数据

在Business Manager中,您可以管理店面数据,例如产品和内容详细信息。尽管系统对象带有一组标准的属性,但是如果要添加更多数据,则始终可以添加属性。例如,您可以通过添加属性,使购物者能够在实体商店中拾取商品。我们已经通过创建一个名为InStorePickup的属性组来添加了此属性,因为它是一个很棒的功能。

在店面中,此功能会在结帐时显示。但是在Business Manager中,它显示在您管理产品数据的“产品详细信息”页面上。您可以将特定产品设置为可在店内取货。

当然,您还必须在店面中编写处理此问题的基础应用程序代码,但我们只是在谈论业务对象。

要在Business Manager中显示系统属性,该属性必须属于一个组。否则,它将不会出现在业务管理器页面上。那和店面里的不一样。

让我们仔细看看。

产品系统对象包括称为属性组 InStorePickup包含这些属性。

属性描述类型
availableForInStorePickup该产品可在店内提货。布尔值(是或否)
storeTaxClass存放税种

该组显示在“业务详细信息”页面上的Business Manager中(您在其中创建新产品),因此您可以指定是否可用于店内取货。

选择是布尔值yesno

在店面的购物车页面上,显示一个字段,询问购物者是否要在商店取一件或多件商品。

属性组

系统对象可以全局存储,这使它们可用于整个组织和所有站点,或本地(每个站点)可用。系统对象本身始终可用于整个组织。

自定义对象

您可以使用自定义对象来扩展B2C Commerce模型以适合您的业务需求。在业务管理器中,您首先创建自定义对象类型并定义它们包含的属性。然后,您将基于这些属性创建自定义对象。

可以在为组织定义的所有店面站点中使用自定义对象类型。但是,在创建自定义对象时,可以选择它是特定于站点还是整个组织的。我们在此模块中讨论了业务管理器部门中的组织。

自定义对象类型

您可以为店面或业务逻辑扩展B2C Commerce模型所需的其他业务对象创建和管理自定义对象类型。例如,您创建一个自定义对象类型Sample,然后为其赋予属性SKU和Date。在业务管理器的“管理自定义对象”模块中,通过输入SKU和日期数据对来创建数据,如下所示:

AS-123342018年6月3日
AS-4456724-03-2018
TT-6544315-02-2018

您现在可以管理此新数据。

使自定义属性可编辑或不可编辑

您可以使用从后端记录系统直接输入到B2C Commerce中的自定义属性。为此,您可以在新属性中设置外部管理的标志。

在业务管理器中的自定义对象的属性中选择“外部管理”

这向业务管理器用户指示他们不应直接编辑这些属性。此类属性被认为是外部管理的,因为属性值是在外部系统中设置的。如果不可编辑属性的提要中包含错误的值,则可以通过取消选择“外部管理”选项并手动对其进行修复来在Business Manager中修复该值。固定该值后,请重新选择“外部管理”选项。

最佳实践

尽可能使用系统对象而不是自定义对象,以便更轻松地升级到最新的参考体系结构并消除不必要的自定义。

尽可能使用系统属性而不是自定义属性。

Salesforce B2C Commerce程序员 – 探索B2C商务业务对象

学习目标

完成本单元后,您将能够:

  • 说明业务对象如何定义Salesforce B2C Commerce店面数据结构。
  • 列出为什么要自定义系统对象的两个原因。
  • 列出使用自定义对象的两个原因。
  • 列出两个业务对象最佳实践。

介绍

B2C Commerce是一个面向对象的系统,因此了解一些从对象开始的基本原理非常重要。对象是包含数据的自包含实体。组织单个对象,以便数据描述该对象。例如,一个Dress对象看起来像这样:

连衣裙

  • 尺寸
  • 颜色
  • 场合
  • 袖子
  • 领口
  • 长度

礼服对象只包含描述礼服的数据。它不包含描述其他内容的数据,例如手镯。

数据(例如本示例中的Color)存储在也称为attribute的字段中。属性用于描述对象的一个​​方面。在这种情况下,如果您告诉朋友您要描述一些东西,然后说“尺寸,颜色,面料,场合,袖子,领口和长度”,他们可能会说您在谈论一件衣服(或者也许衬衫)。着装是对象,而颜色是对象的属性。

业务对象定义B2C Commerce店面数据的结构。业务对象可以是系统随附的系统对象,也可以是可用于向应用程序添加其他功能的自定义对象。自定义对象需要自定义代码。

系统对象

B2C Commerce提供了63种系统对象类型,从 Appeasement到TrackingRef。在您的Business Manager版本中,有些标记为只读。您不能通过创建新的系统对象来自定义内部B2C Commerce系统,但是可以创建新的自定义系统对象来满足您的业务需求。这是一个重要的区别!系统对象类型定义了系统对象中包含的属性。他们的行为就像一张地图。

Commerce Cloud店面参考体系结构(SFRA)使用系统对象来描述其站点的一部分。这使其成为店面应用程序开发的起点很有用,因为它是为与系统对象进行交互而开发的,从而消除了对自定义代码的需求。

为确保您的实现完全使用可用的系统对象,您应该熟悉它们。在B2C Commerce的在线工具Business Manager中,该工具用于配置,管理和开发店面应用程序,您可以:

  • 查看系统对象
  • 查看每个系统对象的属性
  • 编辑属性,包括创建新的属性值
  • 查看属性组
  • 创建新的属性组

B2C Commerce丰富的系统对象库已经满足了店面应用程序中所需的大多数数据,例如产品详细信息,内容,订单和促销。使用这些对象可以极大地加快实现速度,因为您可以利用为这些对象开发的代码。

这些是SFRA中使用的一些系统对象。

对象ID目的属性

Basket
代表购物车。 业务类型
channelType
货币代码
客户电子邮件
顾客姓名
客户编号
最后修改

Campaign
表示一个广告系列,它是可以针对特定框架部署的一组体验,例如广告位配置,促销或排序规则。 创立日期
描述
结束日期
最后修改
开始日期

Category
表示产品目录中的类别,并包含包含类别数据的属性。该对象通常用于(和自定义)控制类别在店面中的行为。 AlternativeURL
catBannerID
customCSSFile
描述
显示名称
enableCompare
headerMenuBanner

Content
表示内容资产,例如文本,图像,视频或音频。
身体
配置
创立日期
customCSSFile
卡塔
描述
最后修改

与上面的dress对象一样,Content对象包含多个属性,例如year,body和config。

扩展系统对象

您可以扩展系统对象,以从购物者那里收集更多信息,定制店面站点以显示其他信息,并根据后台需求帮助您更有效地处理订单。

例如,您可以 向购物篮对象添加addToEmailList属性,该属性将在购物车页面上显示“请将我添加到您的电子邮件列表”复选框。您还需要添加代码以显示和处理此数据。

组对象以收集更多数据

在Business Manager中,您可以管理店面数据,例如产品和内容详细信息。尽管系统对象带有一组标准的属性,但是如果要添加更多数据,则始终可以添加属性。例如,您可以通过添加属性,使购物者能够在实体商店中拾取商品。我们已经通过创建一个名为InStorePickup的属性组来添加了此属性,因为它是一个很棒的功能。

在店面中,此功能会在结帐时显示。但是在Business Manager中,它显示在您管理产品数据的“产品详细信息”页面上。您可以将特定产品设置为可在店内取货。

当然,您还必须在店面中编写处理此问题的基础应用程序代码,但我们只是在谈论业务对象。

要在Business Manager中显示系统属性,该属性必须属于一个组。否则,它将不会出现在业务管理器页面上。那和店面里的不一样。

让我们仔细看看。

产品系统对象包括称为属性组 InStorePickup包含这些属性。

属性描述类型
availableForInStorePickup该产品可在店内提货。布尔值(是或否)
storeTaxClass存放税种

该组显示在“业务详细信息”页面上的Business Manager中(您在其中创建新产品),因此您可以指定是否可用于店内取货。

选择是布尔值yesno

在店面的购物车页面上,显示一个字段,询问购物者是否要在商店取一件或多件商品。

属性组

系统对象可以全局存储,这使它们可用于整个组织和所有站点,或本地(每个站点)可用。系统对象本身始终可用于整个组织。

自定义对象

您可以使用自定义对象来扩展B2C Commerce模型以适合您的业务需求。在业务管理器中,您首先创建自定义对象类型并定义它们包含的属性。然后,您将基于这些属性创建自定义对象。

可以在为组织定义的所有店面站点中使用自定义对象类型。但是,在创建自定义对象时,可以选择它是特定于站点还是整个组织的。我们在此模块中讨论了业务管理器部门中的组织。

自定义对象类型

您可以为店面或业务逻辑扩展B2C Commerce模型所需的其他业务对象创建和管理自定义对象类型。例如,您创建一个自定义对象类型Sample,然后为其赋予属性SKU和Date。在业务管理器的“管理自定义对象”模块中,通过输入SKU和日期数据对来创建数据,如下所示:

AS-123342018年6月3日
AS-4456724-03-2018
TT-6544315-02-2018

您现在可以管理此新数据。

使自定义属性可编辑或不可编辑

您可以使用从后端记录系统直接输入到B2C Commerce中的自定义属性。为此,您可以在新属性中设置外部管理的标志。

在业务管理器中的自定义对象的属性中选择“外部管理”

这向业务管理器用户指示他们不应直接编辑这些属性。此类属性被认为是外部管理的,因为属性值是在外部系统中设置的。如果不可编辑属性的提要中包含错误的值,则可以通过取消选择“外部管理”选项并手动对其进行修复来在Business Manager中修复该值。固定该值后,请重新选择“外部管理”选项。

最佳实践

尽可能使用系统对象而不是自定义对象,以便更轻松地升级到最新的参考体系结构并消除不必要的自定义。

尽可能使用系统属性而不是自定义属性。

Salesforce B2C Commerce程序员 – 探索Commerce Cloud店面参考架构

学习目标

完成本单元后,您将能够:

  • 解释使用Commerce Cloud店面参考体系结构(SFRA)的好处。
  • 说明为什么参考架构为站点设计提供了蓝图。
  • 列出两个SFRA技术和UX组件。
  • 列出Mobile First的两个好处。

介绍

有什么比构建可以作为代码库查看和使用的网站更好的方法来显示在线店面网站的外观?这正是我们对SFRA所做的。但是,此体系结构不仅仅是代码库:它提供了站点设计的蓝图。

使用参考体系结构就是快速创新!利用行业最佳实践开发的完整核心站点功能库,可以更快地构建站点。数百种现成的功能包括购物车,结帐,主页,产品详细信息页面等。此外,快速采用Apple Pay等技术,可为购物者提供绝佳的体验。

SFRA定制模型使您可以轻松构建,维护和更新店面。它位于平台API层之外,并使用常规的模型-视图-控制器(MVC)架构。我们在Salesforce B2C Commerce Development Environment部门讨论了API和MVC架构。

开发人员可以自由定制和扩展SFRA代码库。品牌有权设计像素完美的网站,并精心打造独特的网络体验。开发人员引入新代码,与第三方提供商集成,并迭代其网站设计。结果,商家完全拥有自己的店面和基础代码库。

使用移动设备的人

移动优先设计

从历史上看,大多数Web设计人员首先关注台式机,其次是移动设备。即使采用响应式设计,重点也始于台式机,以及用于移动设备的其他代码。

响应式设计可根据屏幕尺寸调整屏幕上的内容。

移动不是趋势。是现在 越来越多的人使用移动设备来做各种事情,尤其是在网上购物。手里拿着一台电脑是一件强大的事情。

移动优先设计用于最小的屏幕,然后逐步提高。这是创建响应式或自适应设计的最佳策略之一。

自适应设计会检测设备和其他功能,然后根据一组预定义的视口大小和其他特征提供适当的功能和布局。

让我们来谈谈建筑

一个参考架构可作为在线店面设计的出发点,并在网站设计和店面架构结合最佳实践。它为您提供了构建和自定义电子商务店面的蓝图。

Commerce Cloud店面参考架构登录页面

Commerce Cloud店面参考架构(SFRA)使用JavaScript 控制器。在B2C Commerce中,控制器是处理店面请求的服务器端脚本。他们管理应用程序中的控制流,并创建模型和视图的实例以处理每个店面请求并生成适当的响应。例如,购物者单击类别菜单项或输入搜索词,这将触发呈现页面的控制器。

注意

注意

控制器使用JavaScript和B2C Commerce脚本编写。它们必须符合CommonJS模块标准。

SFRA使将B2C Commerce交付的代码,商户自定义和第三方集成代码分割成离散的盒式磁带变得容易,从而更容易维护和更新每个盒式磁带的内容。

在B2C Commerce中,盒带中包含代码或数据。这意味着开发人员可以构建新组件,例如,愿望清单,Apple Pay和付款集成等功能,并将它们独立地插入店面。这种体系结构允许轻量级和更简洁的代码库用于连续,迭代和演进的站点设计。核心代码不可编辑,而开发人员可以在其之上自由开发功能。

UI开发最佳实践

SFRA使用流行的Bootstrap前端组件UI库。Bootstrap是一个用于使用HTML,CSS和JS开发的开源工具包。它使您可以快速构建想法原型或使用其Sass变量和mixins,响应式网格系统,大量的预构建组件以及基于jQuery构建的强大插件来构建整个应用程序。

其他须知

如果商家开始新的站点实施或重新设计现有的店面,则可以利用SFRA。商家通常每3至5年重新设计其店面,并且由于网站的重新设计可能会占用大量资源,因此商家应根据预算,范围和业务影响来权衡时间表。为了使您走上正确的道路,SFRA附带了带注释的线框。您还可以利用用户组。

B2C商业零售业务团队可以提供店面设计咨询,以帮助商家优化其现有店面或转移到新的店面。

LINK合作伙伴

B2C商务LINK技术合作伙伴计划提供了具有丰富,强大功能的世界级生态系统,供商家用来提供一流的电子商务解决方案。LINK合作伙伴致力于将其技术与B2C Commerce集成。集成后,这些技术将通过LINK Marketplace提供给全球B2C Commerce客户。

SFRA中提供了最常用的LINK墨盒-Paypal,Cyber​​Source,Bazaarvoice(费率和评论),Avalara(税),Adyen,Experian QAS(AVS)。在评估新的站点设计或重新设计时,商人和SI实施者应考虑LINK生态系统以扩展商业体验。

Salesforce B2C Commerce程序员 – 探索Commerce Cloud店面参考架构

学习目标

完成本单元后,您将能够:

  • 解释使用Commerce Cloud店面参考体系结构(SFRA)的好处。
  • 说明为什么参考架构为站点设计提供了蓝图。
  • 列出两个SFRA技术和UX组件。
  • 列出Mobile First的两个好处。

介绍

有什么比构建可以作为代码库查看和使用的网站更好的方法来显示在线店面网站的外观?这正是我们对SFRA所做的。但是,此体系结构不仅仅是代码库:它提供了站点设计的蓝图。

使用参考体系结构就是快速创新!利用行业最佳实践开发的完整核心站点功能库,可以更快地构建站点。数百种现成的功能包括购物车,结帐,主页,产品详细信息页面等。此外,快速采用Apple Pay等技术,可为购物者提供绝佳的体验。

SFRA定制模型使您可以轻松构建,维护和更新店面。它位于平台API层之外,并使用常规的模型-视图-控制器(MVC)架构。我们在Salesforce B2C Commerce Development Environment部门讨论了API和MVC架构。

开发人员可以自由定制和扩展SFRA代码库。品牌有权设计像素完美的网站,并精心打造独特的网络体验。开发人员引入新代码,与第三方提供商集成,并迭代其网站设计。结果,商家完全拥有自己的店面和基础代码库。

使用移动设备的人

移动优先设计

从历史上看,大多数Web设计人员首先关注台式机,其次是移动设备。即使采用响应式设计,重点也始于台式机,以及用于移动设备的其他代码。

响应式设计可根据屏幕尺寸调整屏幕上的内容。

移动不是趋势。是现在 越来越多的人使用移动设备来做各种事情,尤其是在网上购物。手里拿着一台电脑是一件强大的事情。

移动优先设计用于最小的屏幕,然后逐步提高。这是创建响应式或自适应设计的最佳策略之一。

自适应设计会检测设备和其他功能,然后根据一组预定义的视口大小和其他特征提供适当的功能和布局。

让我们来谈谈建筑

一个参考架构可作为在线店面设计的出发点,并在网站设计和店面架构结合最佳实践。它为您提供了构建和自定义电子商务店面的蓝图。

Commerce Cloud店面参考架构登录页面

Commerce Cloud店面参考架构(SFRA)使用JavaScript 控制器。在B2C Commerce中,控制器是处理店面请求的服务器端脚本。他们管理应用程序中的控制流,并创建模型和视图的实例以处理每个店面请求并生成适当的响应。例如,购物者单击类别菜单项或输入搜索词,这将触发呈现页面的控制器。

注意

注意

控制器使用JavaScript和B2C Commerce脚本编写。它们必须符合CommonJS模块标准。

SFRA使将B2C Commerce交付的代码,商户自定义和第三方集成代码分割成离散的盒式磁带变得容易,从而更容易维护和更新每个盒式磁带的内容。

在B2C Commerce中,盒带中包含代码或数据。这意味着开发人员可以构建新组件,例如,愿望清单,Apple Pay和付款集成等功能,并将它们独立地插入店面。这种体系结构允许轻量级和更简洁的代码库用于连续,迭代和演进的站点设计。核心代码不可编辑,而开发人员可以在其之上自由开发功能。

UI开发最佳实践

SFRA使用流行的Bootstrap前端组件UI库。Bootstrap是一个用于使用HTML,CSS和JS开发的开源工具包。它使您可以快速构建想法原型或使用其Sass变量和mixins,响应式网格系统,大量的预构建组件以及基于jQuery构建的强大插件来构建整个应用程序。

其他须知

如果商家开始新的站点实施或重新设计现有的店面,则可以利用SFRA。商家通常每3至5年重新设计其店面,并且由于网站的重新设计可能会占用大量资源,因此商家应根据预算,范围和业务影响来权衡时间表。为了使您走上正确的道路,SFRA附带了带注释的线框。您还可以利用用户组。

B2C商业零售业务团队可以提供店面设计咨询,以帮助商家优化其现有店面或转移到新的店面。

LINK合作伙伴

B2C商务LINK技术合作伙伴计划提供了具有丰富,强大功能的世界级生态系统,供商家用来提供一流的电子商务解决方案。LINK合作伙伴致力于将其技术与B2C Commerce集成。集成后,这些技术将通过LINK Marketplace提供给全球B2C Commerce客户。

SFRA中提供了最常用的LINK墨盒-Paypal,Cyber​​Source,Bazaarvoice(费率和评论),Avalara(税),Adyen,Experian QAS(AVS)。在评估新的站点设计或重新设计时,商人和SI实施者应考虑LINK生态系统以扩展商业体验。

Salesforce B2C Commerce程序员 – 探索B2C商业发展环境

学习目标

完成本单元后,您将能够:

  • 列出用于Salesforce B2C Commerce店面的客户部分的两个工具。
  • 列出三个关键的B2C Commerce软件开发工具。
  • 描述MVC体系结构的元素。
  • 列出可以使用脚本和控制器执行的三个任务。

介绍

无论您是新手还是经验丰富的B2C Commerce店面应用程序开发人员,您都了解情况。您首先查看工具。

扳手-工具包的一部分

三个关键的B2C Commerce软件开发工具是Business Manager,UX Studio和Commerce Cloud店面参考体系结构(SFRA)。其他工具包括:

  • 范本
  • 表格定义
  • 资源包
  • 剧本
  • 控制器

我们将在一分钟内深入探讨更多细节,但首先让我们讨论一下架构。

MVC架构

我们使用模型-视图-控制器(MVC)架构,该架构将应用程序分为三个部分。

  • 该模型是应用程序基础的业务逻辑,数据和规则。传统上,模型存储用于填充视图的数据。在B2C Commerce中,数据由API表示,API提供帮助程序类而不是存储数据。
  • 该视图是购物者在店面中看到的。它是登录页面,产品详细信息页面,QuickView或购物车页面。
  • 控制器从输入字段,按钮单击等中获取购物者输入,并将其转换为模型或视图消耗的动作或数据。
MVC体系结构-模型,视图和控制器

尽管此体系结构提供了元素如何协同工作的示意图,但是代码仍然需要部署机制。那就是墨盒的所在。

B2C商务墨盒

盒式磁带是B2C Commerce打包和部署程序代码和数据的方式。它提供通用或特定于应用程序的功能。例如,一个商人出售多个品牌,每个品牌都有自己的网站。因为他们销售服装,所以所有站点都有类似的流程。但是这些站点的外观和品牌因品牌而异。通用盒带包含标准流程,而专用盒带包含品牌专用代码和数据。

让我们从我们正在建造的东西开始

让我们从上至下开始讨论我们正在构建的内容。

无论客户端是台式机还是移动设备,店面页面都会显示在客户端上。这些是一些标准的店面页面:

  • 类别
  • 产品详情
  • 搜索结果

这些页面使用基于HTML的专用ISML,并且使用CSS进行格式化-行业标准。购物者可以通过单击按钮和标签并在字段中输入文字来在这些页面上进行交互。此处使用的开发工具称为 模板表单定义

使用这些工具,您可以:

  • 验证购物者输入
  • 提示购物者进行确认
  • 显示错误或信息框
  • 条件化HTML

客户端和服务器上都有一个应用程序处理组件。这是从页面获取点击和数据输入并对其进行处理的代码。此处使用的开发工具是脚本控制器

使用这些工具,您可以:

  • 向业务流程添加计算和逻辑
  • 致电网络服务
  • 集成后端系统
  • 跨用户共享信息

现在让我们谈谈处理部分。

编码店面页面

店面页面是视觉效果-漂亮的产品,华丽的广告和精心制作的折扣。对于这些,您需要模板,表单定义和资源包(仅基于客户端)。

范本

模板定义了如何将数据和页面信息转换为基于HTML的网页。这些页面使用CSS进行浏览器呈现,使用CSS进行页面布局和样式设计,并使用B2C Commerce表单定义进行数据显示和验证。模板以Internet商店标记语言(ISML)进行编码,可动态生成HTML。它提供了许多预定义的标签(例如,<isif> / <isloop>),并使用了脚本块和表达式。

使用ISML,您可以使用一个模板来显示数千种产品。例如,搜索结果页面以模板定义的图块的行和列显示产品列表。

表格定义

表单定义使您可以控制如何验证客户输入的值并在浏览器上呈现它们。例如,对于表格,您可以指定邮政编码必须以精确的整数序列输入;名称和地址信息必须以字符串形式输入。与ISML一样,B2C Commerce表单定义使用独特的语言并且是专有的。

地址表格示例

表单定义存储在墨盒的Forms文件夹中(cartridge / forms / default)。表单架构文件标识允许的元素和属性。表单定义与店面应用程序的显示和处理部分都相互作用。

资源包

您要避免在店面代码中对购物者可见的文本字符串进行硬编码。通过将标题,标签,消息,按钮和字段名称存储在资源包(也称为.properties文件)中来执行此操作。将此文本与显示布局分开可以轻松地出于不同目的更改文本,尤其是在支持不同区域设置时。

处理店面申请

应用程序的处理部分显示,发送,计算或检索从到达到结帐的正确详细信息,所有这些操作均由购物者主动进行。为此,应用程序使用脚本和控制器。

要上载代码,必须使用UX Studio或上载实用程序,例如标准协议webdav。上载实用程序可从GitHub中的B2C Commerce社区存储库中获得。您还可以使用标准的JavaScript工具,包括短绒和静态代码分析工具。

剧本

您可以在UX Studio中本地开发应用程序,但可以在服务器上运行它。JavaScript解释器在应用程序服务器上运行,以处理每个JavaScript类或方法。对于JavaScript解释器而言,脚本调用的源无关紧要。这使您可以灵活选择工具。

B2C Commerce与B2C Commerce脚本API和Open Commerce API(OCAPI)具有一些严肃的应用程序接口(API)。OCAPI是一种RESTful API,可接收HTTP请求并返回响应。请求构造和响应消耗由您决定。

使用B2C Commerce API构建店面用户体验的所有部分。使用OCAPI集成第三方系统,并统一超越Commerce Cloud托管体验的客户旅程。

B2C Commerce Script API支持行业标准:

  • Rhino JavaScript(包括ECMAScript 5,Mozilla扩展至JavaScript 1.8和E4X)
  • JavaScript 2.0 / ECMA第4版提案和ActionScript提供的可选类型规范支持
  • 全局parseInt(String)函数的ECMAScript 5兼容性修补程序

控制器

控制器是处理店面请求的服务器端脚本。控制器协调店面的后端处理,并创建模型和视图的实例,以处理每个店面请求并生成适当的响应。例如,单击类别菜单项或输入搜索词会触发呈现页面的控制器。

控制器使用JavaScript和B2C Commerce脚本编写。控制器的文件扩展名可以是.ds或.js。控制器必须位于墨盒顶部的controllers文件夹中。

您可以将任何IDE与JavaScript编辑器一起使用来开发控制器。

入门

使用此环境开始时,有很多步骤,但可以归结为以下步骤:

  1. 在Salesforce B2C Commerce XChange客户门户中注册,以访问Salesforce B2C Commerce支持和开发人员论坛。
  2. 从B2C Commerce支持(或LINK合作伙伴计划经理,如果您是LINK合作伙伴开发人员)获得一个沙箱。
  3. 下载并安装UX Studio(Eclipse IDE插件),您可以在其中:
    1. 创建一个工作区。
    2. 连接到您的沙盒服务器。
    3. 创建一个新的店面项目。
  4. 打开业务管理器,在其中:
    1. 注册您的墨盒。
    2. 将Storefront Reference Architecture数据导入沙箱,以便您可以将其用作起点或代码示例。
    3. 确保禁用页面缓存,以便您可以立即看到所做的更改。
    4. 生成搜索索引,以便搜索在您的应用程序中正常运行。
    5. 查看店面。

LINK合作伙伴

LINK市场是开发人员可以使用第三方软件扩展其站点的地方。

第三方软件提供商加入了Salesforce B2C Commerce LINK技术合作伙伴计划,以针对最新的Commerce Cloud技术验证其墨盒。使用LINK墨盒可实施最具突破性和创新性的电子商务技术。

这些弹药筒准备就绪后,可大大减少实施时间。解决方案很多,其中许多类别如下:

  • 付款提供商
  • 评分和评论
  • 税务地址验证
  • 社会个性化

Salesforce B2C Commerce程序员 – Commerce Cloud业务管理器入门

学习目标

完成本单元后,您将能够:

  • 列出跟单员在业务管理器中执行的三个任务。
  • 列出开发人员在业务管理器中执行的三个任务。
  • 列出在“商户工具”标签中配置的四个设置。
  • 在“管理”选项卡上列出可以执行的四个任务。
  • 描述本地化设置的两个功能。

介绍业务经理

业务管理器是用于配置和管理B2C Commerce店面的Salesforce B2C Commerce联机工具。此重要工具是B2C Commerce商品销售,管理和站点开发功能的命令中心。

业务经理登陆页面

要使用业务管理器,您必须有权访问B2C Commerce实例。在Trailhead Playground中无法使用B2C Commerce。如果您无权访问B2C Commerce实例,请询问您的经理是否有可以使用的实例。

业务管理器用户界面入门

打开业务管理器时,必须首先选择一个站点。您可以拥有几个站点,也可以有多个站点,这取决于公司的规模以及您支持的站点数量。选择一个站点后,只要您具有访问权限,就可以访问为其配置的数据,代码和权限,我们将在本单元后面讨论。

在B2C Commerce中,网站及其相关代码组合在一起以创建店面。店面是用户的在线体验。一个站点可以具有多个店面。(当提到商人的网站时,我们使用术语店面。)

点击店面,在另一个窗口中打开您选择的网站。这里显示的站点是一个示例站点,演示了B2C Commerce的体系结构。

B2C参考架构

通常,您希望看到自己的网站。

工具包图标

您可能还会看到Storefront Toolkit的图标,这是一个可帮助开发人员进行故障排除的开发工具。该工具箱自动链接到您刚来自的业务管理器站点。多么方便!

角色

具有三种工作角色的人员最有可能使用Business Manager。我们称这些工作角色为角色。

三个商人合作
  • 售货员配置站点数据,例如产品,图像,活动,促销和搜索设置。
  • 管理员配置B2C Commerce网站设置,导入和导出网站数据,并推出代码和数据更改。
  • 开发人员使用业务管理器直接访问店面应用程序以对问题进行调试和故障排除,并配置特定于开发的设置。
注意

注意

在B2C Commerce中,术语“ 客户”可以具有多个含义。如果我们将Salesforce客户称为商人,而将商人的客户称为购物者,则会有所帮助。

对于大型商人,每个角色都可以具有由多个人拥有的独特功能。大型商人通常与拥有开发人员团队的合作伙伴合作。中小型商人经常模糊角色,因此多个工作职责由几个人处理。

角色在业务经理中工作的地方

业务管理器中的两个选项卡(商人工具和管理)包含所有三个角色使用的功能。让我们探索一下第一角色,即商人。

商户工具标签

商家工具区域是供销售人员管理特定于站点的配置设置以及店面数据(例如产品,目录,内容,搜索,广告系列和促销)的位置。

业务经理商家工具模块

他们还在此处配置功能,以帮助将购物者带到网站;即搜索网址和robots.txt文件。网站管理员会创建此文件,以指示网络机器人(通常是搜索引擎机器人)如何在其网站上抓取网页。

商家也可以查看客户数据,尽管通常将其存储在外部数据库中。订单详细信息也是如此,这些详细信息可以直接来自店面的购物者,也可以通过诸如B2C Commerce和客户服务中心的订单管理之类的附加系统获得。这些产品是Commerce Cloud产品套件的一部分。

跨功能工具

Merchant Tools中的某些功能跨越了角色边界。这包括站点分析和内容位置。

Business Manager Analytics反映了在生产店面捕获的站点数据,这些站点数据是由B2C Commerce汇总并在Business Manager中报告的。购物车到订单之类的数据(购物车在总购物车数量中所占的百分比)对商人非常有用。但是,其他数据,例如管道性能摘要数据和对象流失趋势,对开发人员来说更有用。

一个内容时段可以嵌入在你的店面的任何部位,以显示产品,类别,内容资产,或静态HTML基于时间表。您可以根据客户组个性化其中包含的内容。内容资产可以是Flash图形,产品轮播,产品搜索结果集或营销图形。

夏季风格的内容广告位,其中将女装和女士珠宝显示为可点击的类别

内容槽需要开发人员和销售人员参与。首先,开发人员将代码添加到HTML页面,创建渲染模板,然后将代码上传到服务器。然后,推销员使用业务管理器来创建和安排插槽配置。

管理标签

我们的管理员和开发人员角色使用的第二个选项卡称为“ 管理”。在此选项卡中,管理员:

  • 导入和导出站点数据
  • 在站点实例之间移动数据和代码
  • 管理客户列表和内容库

如果您是管理员,则可以配置适用于组织中所有站点的全局设置。组织包含为商人配置的所有站点。全局设置(也称为 首选项)包括:

  • 语言环境和区域设置以支持多种语言
  • 业务管理器用户的密码限制和登录锁定策略
  • 时区
  • 订单和客户序列号

开发人员角色

最后,我们可以谈谈开发人员角色。这些人使用各种软件开发工具(在本例中为Business Manager)开发店面应用程序。

开发人员通常会打开三个窗口,其中包括:

  • 集成开发环境(IDE) ,在那里他们编写和测试应用程序
  • 业务经理,用于打开店面网站
  • 店面的应用,在那里他们看到的任何代码或数据变化实时结果

让我们专注于业务管理器,开发人员可以在其中执行以下操作:

  • 建立新网站
  • 解决问题。
  • 导航到Commerce Cloud社区门户XChange,他们可以在其中下载最新版本的UX Studio。
  • 配置代码版本
  • 向服务器注册盒带(包含代码或数据)
  • 管理页面缓存设置
  • 将网站设置为在线
  • 管理网站税收
  • 创建自定义错误和维护页面,以引导购物者购买他们想要的东西

业务管理器的操作任务也由开发人员完成。这包括配置凭据和安全性以及跟踪配额状态。配额是使系统正常运行的内部限制。

权限

对业务管理器区域或模块的访问基于作业任务,也称为角色。最重要的角色是管理用户和权限的管理员(admin)。管理员首先定义组织及其所有店面,然后设置默认语言。然后,他们创建其他角色。

商界人士在会议上

定义角色使管理员可以根据角色的权限集授予或限制访问权限。

  • 模块权限 -例如,产品和目录模块。这意味着您可以按角色关闭对数据的写访问。
  • 功能权限 -例如,分配 Manage_Site_Catalog可使一个人可以添加到网站目录中。这意味着您可以按角色限制功能。

这里有些例子:

用户角色访问
吉塔管理员可以不受限制地访问所有内容。
特劳德跟单员可以查看和编辑网站目录,价格和库存。只能查看其站点的数据,而不能查看其他站点的数据。
乔治网络运营无法查看目录,价格或库存数据。可以传输和复制数据。可以导入或导出数据。可以运行工作。
安妮开发者需要完全访问所有站点中的目录,价格和库存数据。还需要传输数据的权限。

本土化

Business Manager在其用户界面以及在其中创建,编辑和显示的基础数据中都支持多种语言,以便在店面中使用。您可以分别配置区域设置以查看应用程序和管理数据。例如,购物者可以使用日语业务经理查看英语产品和内容。

管理员用户在创建或编辑用户个人资料时,选择业务管理器显示语言的首选语言环境。然后,业务管理器用户可以在其用户配置文件中选择其他显示语言。

穿过办公楼大厅的商人

定制业务经理

您可以自定义Business Manager用户界面的以下部分以使其成为您自己的:

  • 菜单项
  • 菜单动作
  • 对话动作
  • 形式

开箱即用的业务管理器菜单使用菜单项操作来访问功能。因此,对这些区域的更改与标准用户界面操作确实集成得很好。换句话说,很容易定制用户界面的某些部分!

面向社区的Rich Publisher Apps -使用Apex触发器扩展可能性

学习目标

完成本单元后,您将能够:

  • 命名使用触发器与Rich Publisher Apps一起使用的用例。
  • 使用触发器构建智能的Rich Publisher App。
  • 描述Rich Publisher Apps API。

使用您的Apex触发技能

您不仅可以设置点击添加Rich Publisher Apps,还可以设置可以智能地预测成员所需信息的应用程序。例如,您的应用可以使用有用的数据或Rich Publisher App选择来回复成员帖子。成员不要单击应用程序图标。相反,Salesforce会在成员的帖子中自动包括相关的Rich Publisher App。

您可以使用针对Chatter对象的Apex触发器的功能来实现此目的。借助Apex触发器,您可以在更改Salesforce记录(如插入,更新或删除)之前或之后设置自定义操作。您可以添加一个插入后 FeedItem触发以收听成员帖子的内容并智能地插入Rich Publisher App。例如,您还可以添加触发器,以响应对其他对象(如评论或答案)的更改来更新应用程序。

让我们看一个 插入后 触发行动。

梦幻之梦

想象一下,您在Dreamforce上,并且正在寻找一些很棒的课程。在社区中输入问题作为您的问题,Looking for some DF sessions. 然后Looking for some cool DF sessions使用#标签添加详细信息#lookingForSessions。

Chatter发布者中的详细问题和主题

您单击“ 询问”,发布者将在发布的帖子中自动包含一个Rich Publisher App(Dreamforce校园地图)。

通过插入后触发器将Google Map附加到帖子

我们在这里做了什么?要获得此结果,您需要创建两件事。

  • Rich Publisher App,用于根据某些上下文将地图附加到提要项
  • 自动插入应用程序的触发器

梦想地图

首先,创建与第2单元中的支持案例应用类似的Rich Publisher App,但是这次使用Google Maps API。

用户无需点击图标,而是通过在Feed中输入特定主题来触发我们的地图应用。但是Rich Publisher App平台需要一个图标,那么您该怎么办?在这种情况下,您可以为该图标添加空白图像和一个空白的合成组件。

或者,您可以创建常规的点击添加应用并添加 插入后 触发附加体验。

这是为…编写基本触发器的一种方法 FeedItem。

trigger dreamforceMapInsertion on FeedItem (after insert) {
  // This is where we look for content in the post or topics. Based on our result, we can insert
  // a Rich Publisher App. Alternatively, we can continue adding a Rich Publisher App for each
  // post without the filtering. 
    
  // Get FeedItem Id & the body.
  String id = null;
  String body = “”;
  for(FeedItem f : Trigger.new) {
       id = f.id;
       body = f.body;
      }
  }
    
  if (id == null && !f.body.contains('#lookingForSessions’)) {
      return;
  }
  String communityId = Network.getNetworkId();
  String feedElementId = id;
  ConnectApi.FeedEntityIsEditable isEditable = 
    ConnectApi.ChatterFeeds.isFeedElementEditableByMe(communityId, feedElementId);
  
  // Make sure the post is user-editable before inserting the Rich Publisher App.
  if (isEditable.isEditableByMe == true) {

        // This is the setup for Rich Publisher App insertion. 
        ConnectApi.FeedItemInput feedItemInput = new ConnectApi.FeedItemInput();
        ConnectApi.FeedElementCapabilitiesInput feedElementCapabilitiesInput = 
          new ConnectApi.FeedElementCapabilitiesInput();
        feedItemInput.capabilities = feedElementCapabilitiesInput;
        feedItemInput.capabilities.extensions = new ConnectApi.ExtensionsCapabilityInput();
        feedItemInput.capabilities.extensions.itemsToAdd = new List<ConnectApi.ExtensionInput>();
        ConnectApi.ExtensionInput ext = new ConnectApi.ExtensionInput();
        
        // This is the id for your Rich Publisher App.     
        ext.extensionId = '<Insert your extensionId>'; // This would be something you get from 
          //Workbench which is the id for extension entity for example ‘0MYB00000001234567’
        
        // This is the payload associated with this instance of the app.
        ext.payload = '<Insert your payload>'; // This would be your JSON blob for example: 
          //‘{\”feedItemId\":\"'+id+’\”}’
        
        // This can change if you want to use multiple payload versions with different versions of
        // your app. Or you can just use 1 version. This is Optional.                	
        ext.payloadVersion = '<Insert your payloadVersion>'; // This can be anything like ‘1.0’

        // The following fields add metadata to your Rich Publisher App.
        // This is similar to our actions in Unit 2 when we added metadata to the lightning event.
	 alt.textRepresentation = '<Insert your text representation here>'; 
	 ConnectApi.AlternativeInput alt = new ConnectApi.AlternativeInput();
        ext.alternativeRepresentation = alt;
        
        // Add a Rich Publisher App to FeedItem capabilities.
        // Here you can add multiple Rich Publisher App instances in the itemsToAdd Array.
        feedItemInput.capabilities.extensions.itemsToAdd.add(ext);
    
        // Finally, edit the FeedItem to insert the Rich Publisher App.
        ConnectApi.FeedElement editedFeedElement = 
          ConnectApi.ChatterFeeds.updateFeedElement(communityId, feedElementId, feedItemInput);
  } 
}

在我们的代码示例中,我们介绍了许多有关如何编写 插入后 FeedItem 触发器以及如何使用Rich Publisher Apps API。

要将Rich Publisher App实例添加到您的供稿项,平台会编辑 FeedItem 在它创建之后 插入后触发。然后,它将Rich Publisher App实例作为FeedItem触发器中的表示形式。您可以在进行编辑之前进行过滤,以确定是否要进行插入。

在我们的示例中,触发器#lookingForSessions在提要主体中寻找主题。然后,它传递有效负载以向Rich Publisher App提供上下文。通过上下文,Rich Publisher App知道要显示Dreamforce校园的地图。您可以做各种事情来从帖子正文或其附件中获取上下文。有了上下文时,可以将其作为有效负载传递给Rich Publisher App,以便它可以呈现某些内容作为响应。您还可以向第三方服务提出请求。例如,您可以请求访问机器学习资源或其他智能API。这些代理可以在您的Rich Publisher Apps中提供智能响应。

颤振扩展

在我们的公共API中,Rich Publisher Apps API被称为 ChatterExtension。您只能通过Workbench使用SOAP API创建Chatter扩展。但是您可以使用Chatter Extensions Connect API (或Apex中的ConnectAPI)来获取它。创建Rich Publisher App时,基本上是ChatterExtension对象,如我们在单元2,第3步中介绍的那样。Salesforce将Rich Publisher Apps作为Feed的附件插入,类似于附加文件。这就是为什么您使用 扩展功能输入(或 Apex中的ConnectAPI)插入带有提要项的Rich Publisher实例的原因。

让我们回到我们的例子。有人看到您的问题,然后回复How to build Rich Publisher Apps at Moscone North。

更新的Google Map

即时,地图在Moscone North位置上用图钉更新。

另一个答案建议在洲际酒店举行会议。地图再次更新,这一次是在酒店位置使用图钉。

更新的Google Map

在这里,连同 FeedItem 触发,我们有一个 FeedComment触发正在监听评论。成员插入评论后,您的应用程序会将评论的内容主体与Dreamforce会话列表进行匹配。然后触发器编辑FeedItem 用上面提到的位置上的引脚更新有效负载。或者,您可以让Rich Publisher App收听外部第三方服务以获取要固定的位置列表。在这种情况下,FeedComment 触发器可以更新该第三方服务,而无需编辑 FeedItem。这样,您可以获得在地图上更新图钉的动态体验。

面向社区的Rich Publisher Apps -构建富发布者应用

学习目标

完成本单元后,您将能够:

  • 列出Rich Publisher Apps平台中提供的接口和事件。
  • 从头开始构建Rich Publisher App。
  • 在社区中配置Rich Publisher Apps。

步骤1.上传您的图标图像并获取其文件资产ID

问题发布者中的Rich Publisher App图标

要提供在供稿发布者中显示并与您的应用打包在一起的图标,您需要该图标的 fileAsset ID。

您使用 fileAsset 创建时的ID ChatterExtension实体。添加fileAsset ID到 ChatterExtension 可让您将图标文件与您的应用打包在一起。

这是您上传图标图像并获取它的方法 fileAsset ID。

注意

注意

Lightning Component框架具有两个编程模型,Lightning Web Components和Aura。在此模块中,我们使用Aura构建Rich Publisher Apps。

  1. 将您的图标文件上传到Salesforce。
  2. 复制文件ID。注意您可以从Salesforce中的文件详细信息中获取文件ID。转到“文件”页面,然后查看文件详细信息。从浏览器的URL复制文件ID。这是一个很长的数字,例如 069R00000003roQ。
  3. 转到Workbench,并获取以下值: ID 下 fileAsset。
    1. 在REST Explorer中,选择Post,然后输入路径: /services/data/v43.0/connect/files/[file_ID]/asset
    2. 对于[file_ID],输入您在步骤2中复制的文件ID。
    3. 在请求正文中,输入{}。
    4. 点击执行
    5. 展开 fileAsset 节点,将值复制为 ID,然后将其粘贴到以后的用户。

步骤2.创建用于合成和渲染的闪电组件

当社区成员单击Rich Publisher App图标时,该操作将导致打开合成模式。该模态包含一个闪电组件。Lightning组件使用户能够选择某些内容,搜索某些内容或生成某些内容。您可以根据自己的用例自定义此组件。

让我们看看一家公司如何使用Rich Publisher Apps平台将案例附加到帖子和问题上。

遇见摩ri座

摩ri座出售咖啡和高端咖啡冲泡设备,并以其客户服务而自豪。它的秘密之一是为客户服务代理商建立的社区,以讨论未决案例并就解决方案进行协作。摩ri座希望开发一个Rich Publisher App,用于将案例附加到帖子和问题上。他们希望给他们的代理商一种挖掘过去解决方案的方法,以解决目前的问题。这就是他们的工作。

A.创建第一个闪电组件

创建扩展Lightning接口的Lightning组件 闪电:适用于ChatterExtensionComposer。合成组件使用此接口。

摩ri座开发人员团队使用先兆迭代来显示组件代码中的列表项。这是闪电组件代码。

<aura:component implements="lightning:availableForChatterExtensionComposer" controller="caseController">
    <aura:handler name="init" value="{!this}" action="{!c.init}"/>
    
    <aura:attribute name="items" type="List" description="Contains a list of items for user to select."/>
    
    <div class="container">
        <aura:iteration items="{!v.items}" var="item" indexVar="index">
            <div class="itemContainer" onclick="{!c.selected}">
                <div class="itemLeft">
                	<img class="itemIcon" src="https://login.salesforce.com/logos/Standard/record/logo.svg"></img>
                </div>
                <div class="itemRight">
                    <div class="itemTitle">{!item.title}</div>
                	<div class="itemDescription">Case Number: {!item.caseNo}</div>
                </div>
            </div>
        </aura:iteration>
    </div>
</aura:component>

摩ri座团队在控制器中发出Apex请求 在里面函数获取选择列表的支持案例信息。这是与Lightning组件关联的控制器代码。

({
	init : function(cmp, event, helper) {
        var action = cmp.get("c.getCases");
        action.setCallback(this, function(response) {
            var state = response.getState();
            if (state === "SUCCESS") {
                var caseList = [];
                var response = response.getReturnValue();
                for (var i=0;i<response.length;i++) {
                    caseList.push({
                        "title": response[i].Subject,
                        "caseNo": response[i].CaseNumber
                    })
                }
                cmp.set("v.items", caseList);
            }
        });
        $A.enqueueAction(action);
	},
    
    selected: function(cmp, event, helper) {
        var selectedItem = helper.getSelectedItem(cmp, event);
		var compEvent = cmp.getEvent("sendChatterExtensionPayload");
		compEvent.setParams({
			"payload" : helper.getPayload(selectedItem),
			"extensionTitle" : helper.getTitle(selectedItem),
			"extensionDescription" : helper.getDescription(selectedItem)
		});
		compEvent.fire(); 
    }
})

这是与控制器一起使用的辅助代码。

({  
    getSelectedItem: function(cmp, event) {
        var clicked = event.currentTarget;
        var parent = clicked.parentElement;
        var total = parent.children.length;
        var selectedIndex = -1;
        for(var i=0; i<total; i++) {
            if(clicked === parent.children.item(i)) {
                selectedIndex = i;
            }
            $A.util.removeClass(parent.children.item(i), "selected");
        }
        $A.util.addClass(clicked, "selected");
        
        var selectedTh = cmp.get("v.items")[selectedIndex];
        return selectedTh;
    },
    
    getPayload: function(item) {
        return item;
    },
    
    getTitle: function(item) {
        return item.title;
    },
    
    getDescription: function(item) {
        return item.caseNo;
    }
})

这是为该应用编写Apex调用的一种方法 获取案例 功能。

public class caseController {
    
    @AuraEnabled
    public static List<Case> getCases() {
       List<Case> cases = [SELECT AccountId,CaseNumber,Subject,Description,Id FROM Case ORDER BY CreatedDate ASC NULLS FIRST LIMIT 20];
       return cases;
    }
}

您可以实现自己的方式让用户进行选择。您可以在Apex中使用任何逻辑,以使用内部或第三方服务来构建功能强大的Rich Publisher Apps来获取智能数据或新鲜数据。

重要的是要确保用户单击触发光环事件 闪电:发送ChatterExtension有效载荷在控制器代码中。在摩ri座的代码示例中,团队在已选功能。在事件中设置事件已选 当用户做出选择时,此功能会发送有效载荷以与提要项关联。

团队设定 extensionTitle 和 extensionDescription使用辅助函数将元数据与有效负载关联。此元数据用于非Lightning用例,例如电子邮件通知或经典视图。您也可以选择添加缩略图URL。

这是带有标题和缩略图的模态。

列出作曲家组件中的项目

Rich Publisher Apps平台还提供“ 添加”和“ 取消”按钮。在上一个图像中,“ 添加”按钮被禁用。Salesforce的启用 添加按钮后,才闪电:发送ChatterExtension有效载荷使用非空的有效负载触发事件。如果使用空的有效负载触发事件,则按钮保持禁用状态。

启用添加按钮

B.创建第二个闪电组件

接下来,摩ri座团队创建一个Lightning组件来扩展Lightning接口 闪电:可用ForChatterExtensionRenderer。当FeedItem被渲染。此接口有两个基本属性:变体 和 有效载荷。的变体 属性可让您根据所选应用是在发布者中预览还是在广告中呈现来决定如何呈现内容 FeedItem。的有效载荷 属性是用户在组合组件中选择的JavaScript对象。

<aura:component implements="lightning:availableForChatterExtensionRenderer">
    
    <div class="container">
        <a target="_blank" href="{!v.payload.url}">
            <div class="{! (v.variant == 'FEED' ? 'itemContainerBorder' : '') + ' itemContainer'}">
                <div class="itemLeft">
                    <img class="itemIcon" src="{!v.payload.icon}"></img>
                </div>
                <div class="itemRight">
                    <div class="itemTitle">{!v.payload.title}</div>
                    <div class="itemSubtitle">{!v.payload.subtitle}</div>
                    <div class="itemDescription">Case Number: {!v.payload.caseNo}</div>
                </div>
            </div>
        </a>
    </div>
</aura:component>

Capricorn 使用变体 饲料决定使用哪个CSS类。指某东西的用途饲料 向Salesforce发出信号,以在其中呈现Rich Publisher App FeedItem。要在发布商中呈现应用,请使用变体预习。有效负载信息显示要呈现的情况。在此示例中,有效负载是静态的。但是,您也可以使用服务器端Apex控制器来获取渲染器组件内部的实时动态信息。

这是有效负载在发布者内部作为预览的样子(预习):

Rich Publisher App有效内容的预览

有效负载在最终呈现的供稿项中的外观如下(饲料):

与Feed项目一起发布的Rich Publisher App有效负载

步骤3.在Workbench中创建Rich Publisher App

现在,您已经创建了Lightning组件并抓取了 fileAsset ID,您已准备好在Workbench中创建Rich Publisher App。

转到工作台,然后插入 ChatterExtension对象(工作台>数据>插入> ChatterExtension)。然后将所有组件值与ChatterExtension 领域。

获取组件值的一种方法是转到“设置”并搜索 Lightning Components。单击列出的组件以查看其详细信息。从浏览器URL复制组件ID。

ChatterExtension对象
  • 提供合成组件的闪电组件ID。
  • 为模式标题添加文本。
  • 为应用程序图标(在Feed发布者中显示的图标)添加悬停文本。
  • 提供 fileAsset 应用程序图标的ID。
  • 提供渲染组件的Lightning组件ID。
  • 对于 类型输入Lightning。当前,闪电是唯一可用的类型。
注意

注意

您可以在Translation Workbench中本地化标题和悬停文本。

步骤4.在您的社区中启用Rich Publisher Apps

当一切准备就绪时,摩ri座团队会将应用程序添加到其社区中的供稿发布者。您可以通过“体验工作区”中的“管理工作区”向社区添加最多五个Rich Publisher Apps。

  1. 转到体验工作区,然后单击“ 管理”磁贴。
  2. 在导航列中,点击Rich Publisher Apps
  3. 从“可用的应用程序”列中最多选择五个应用程序,然后将它们移动到“选定的应用程序”列中。
  4. 要设置发布者中图标的顺序,请在列表中上移或下移选定的应用。
  5. 点击保存