组的体系结构注意事项 和专业版

Salesforce CRM分为五层, 或版本:

  • 团体版 (GE)*
  • 专业版 (PE)
  • 企业版 (EE)
  • 无限版 (UE)
  • 性能版 (PXE)*

注意

团体版和性能版不再销售。对于比较图表 版本及其功能,请参阅 Salesforce 定价和版本 页面。

如果您计划将应用程序销售给现有的 Salesforce 客户,请务必了解 这些版本,因为它们会影响应用的设计。它 便于将它们视为集群,GE/PE 和 EE/UE/PXE,作为 每个集群中的版本都具有类似的功能。例如 你可能只想在应用需要时支持 EE/UE/PXE GE/PE 中不可用的某些对象和功能。也 您可以拥有 分层产品。这将包括GE/PE的基本解决方案 以及面向 EE/UE/PXE 客户的高级版本,可利用 附加功能。

EE/UE/PXE 具有最强大的功能。除了 Salesforce CRM 许可证外,它们还支持 Lightning Platform 平台许可证。如果您的应用程序不需要 Salesforce CRM 功能(如潜在客户、商机、案例等),Lightning Platform 平台许可证将为您提供最大的灵活性 将您的应用程序部署到通常可能不是 Salesforce 用户的用户。你的应用仍受版本限制和打包的约束 规则。

GE/PE 不包含您可以构建的所有功能 在 Developer Edition (DE) 中。因此,在 您的 DE 组织可能不会安装在 GE/PE 组织中。如果 您正在设计一个专门在 GE/PE 中工作的应用程序, 您必须了解这些版本的不同之处。

在以下情况下,还有许多其他注意事项需要牢记 决定是否支持这些版本。Lightning 平台平台许可证无法在 GE/PE 组织中配置。 这意味着只有现有的 Salesforce CRM 用户才能使用您的应用程序。有些功能不是 在GE/PE中可用。有几个特殊权限可用 到克服这些限制的合格合作伙伴应用。

请参阅以下部分,了解可用功能、限制和 其他设计注意事项。

  • 团体版和专业版的功能
  • 团体版和专业版的限制
  • 组内访问控制 和专业版
  • 在 Group Edition 和 Professional Edition 中使用 Apex
  • Group Edition 和 Professional Edition 中的 API 访问
  • 设计您的应用程序 支持多个版本
  • 示例设计方案
  • 团体版和专业版的功能
  • 团体版和专业版的限制
  • Group Edition 和 Professional Edition 中的访问控制
  • 在 Group Edition 和 Professional Edition 中使用 Apex
  • Group Edition 和 Professional Edition 中的 API 访问 GE 和 PE 组织通常不支持
    API 访问。但是,在您的应用通过安全审核后,您就有资格使用某些 API 来构建复合应用程序。
  • 设计应用以支持多个版本
  • 团体版和专业版的示例设计方案

团体版和专业版的功能

确定特定版本中可用的功能和对象的最简单方法 是通过查看版本比较表。您也可以查找 哪些版本支持特定功能或对象,方法是搜索联机帮助。这很重要 在开始设计应用之前,请检查这些资源,以便做出明智的决定 面向哪些版本。完成应用构建后,建议进行测试 它通过在 GE 和 PE 测试组织中安装您的软件包来确保一切正常运行 适当地。

下表显示了 GE 和 PE 之间的主要区别。

特征团体版专业版
资产是的
活动是的
合同是(使用 Sales Cloud)
预测是(无商机拆分或自定义字段预测)
想法是的
产品是的
解决 方案是的
记录类型是的
权限集是的是的
自定义配置文件是的
自定义报告类型是的
工作流程和审批否(请参阅注释。
顶点代码请参阅注释。请参阅注释。
共享规则是(对于某些功能)
应用程序接口请参阅注释。请参阅注释。
网站

注意

  • 所有列出的功能在 DE 中都可用。
  • 作为合作伙伴,应用程序中的工作流在 Professional Edition 组织中运行。然而 客户无法创建自己的工作流。他们必须直接从以下位置购买该功能 Salesforce的。
  • 客户端 ID 允许您的应用使用 API 与复合应用集成。查看更多 信息,请参阅在 Group Edition 和 Professional Edition 中使用 Apex 和在 Group Edition 和 Professional Edition 中使用 API 访问。

团体版和专业版的限制

所有 Salesforce 版本都有限制,这些限制可以限制的应用程序、对象和选项卡的数量 被使用。有关各种版本限制的详细信息,请参阅版本限制表。

对于已注册 ISV 计划的合作伙伴,任何托管包 在 AppExchange 上公开发布不再计入应用程序/对象/选项卡 Salesforce 版本的限制。这实际上意味着 ISV 合作伙伴不再需要担心软件包安装失败 因为超出了应用程序/对象/选项卡限制。此功能是 应用通过安全审核后自动启用。

群组和专业版的访问控制 版本

Group Edition 不支持字段级安全性或自定义配置文件。您可以管理字段级别 安全性,改用每个对象的页面布局。当客户安装您的应用时, 他们无法定义哪些配置文件有权访问哪些内容。确保您的设计适用于 标准用户配置文件。权限集可以安装,但不能在组和 专业版组织。

由于页面布局处理字段级别安全性,因此请添加要显示的任何字段 页面布局。要通过 API 或 Visualforce 访问字段,请将它们添加到 页面布局。

在 Group Edition 和 Professional Edition 中使用 Apex

你的应用可以包含业务逻辑,例如类、触发器、电子邮件服务等。 顶点。作为一般规则,GE/PE 不支持 Apex,因此它不会在这些 版本。但是,作为 ISV 应用的一部分开发并包含在托管包中的 Apex 可以运行 在 GE/PE 中,即使这些版本默认不支持 Apex。

您必须是 Salesforce 的合格合作伙伴,并且您的应用程序必须通过安全性 回顾。通过安全性后,将自动启用相应的权限 回顾。以下是在 GE/PE 中使用 Apex 的一些重要注意事项。

  • GE/PE 客户无法在您的应用中创建或修改 Apex;他们只能运行 现有的 Apex。
  • 您的 Apex 代码不应依赖于仅存在于 DE、EE、 UE 或 PXE,否则您的应用将无法安装。
  • 如果您计划将 Apex 方法公开为 Web 方法,请确保使用 REST 服务。无法调用已公开为 SOAP Web 服务的 Apex 类 从 GE/PE 中的外部 Web 应用。
  • 在 GE/PE 中允许使用 Apex 进行 Web 服务标注。例如,如果你是 计划对外部 Web 服务进行 Web 服务标注,只要托管 包,这些类将在 GE/PE 中运行。

Group Edition 和 Professional Edition 中的 API 访问

GE 和 PE 组织通常不支持 API 访问。但是,在您的应用通过后 安全审查,你有资格使用一些 API 来构建复合 应用。

  • 目前,GE 和 PE 应用支持标准数据 SOAP 和 REST API,并且 PE 应用支持元数据 API。若要请求 API 访问权限,请参阅如何获取应用的 API 令牌?您也可以联系 Salesforce 将 连接的应用程序,用于在 GE 或 PE 组织中使用 REST API。
  • 其他 API,例如作为 SOAP Web 服务公开的 Bulk API 2.0 和 Apex 方法, 仍然不可用。
  • 您可以使用连接的应用程序使用者允许列表启用基于 REST 的 Web 服务。
  • 您可以使用 API 令牌启用基于 SOAP 的 Web 服务,包括元数据 API 称为客户端 ID。在集成调用中将客户端 ID 追加到 SOAP 标头。这 通过特殊密钥,你的应用可以调用数据 API 的 GE 和 PE 组织,以及 PE 组织的 元数据 API,即使客户没有 API 访问权限。

客户端 ID 具有这些属性。

  • 不能在自定义 JavaScript、S 控件或 应用中任何位置,其价值将向最终客户公开。
  • 出于开发目的,通过 Environment Hub 创建的 GE 和 PE 组织已经具有 启用元数据 API 和 SOAP API(数据 API)。然后,您可以开发和测试您的应用程序 在安全审查之前。在您的应用通过安全审核后,您将获得 API 令牌,请再次测试您的应用以确保其正常工作。
  • 客户端 ID 授予 GE 和 PE 对 SOAP API 的访问权限,以及对元数据 API 的 PE 访问权限。 使用元数据 API,您可以动态创建通常 在设置中创建。例如,您可以在 PE 中动态创建自定义字段 使用 API 令牌的组织。

下表显示了使用 GE 和 PE 时可以访问的 API 以及访问方法。

应用程序接口获得 GE 和 PE
Web 服务 (SOAP)是的,使用令牌
作为 Web 服务 (SOAP) 公开的 Apex 方法
Web 服务 (REST)是,使用互联应用使用者许可名单
作为 Web 服务 (REST) 公开的 Apex 方法是,使用互联应用使用者许可名单
连接 REST API是的
元数据 API是的,使用令牌
批量 API 2.0
数据加载器工具(使用 SOAP Web 服务)否,无法设置令牌
  • 在组版和专业版
    中访问 REST API Lightning 平台 REST API 为您提供了功能强大、方便且简单的 API,用于与 Lightning 平台进行交互。作为合格的合作伙伴,您可以请求我们为您的应用程序启用对 GE 或 PE 组织的 REST API 调用。

将应用设计为支持多个 版本

支持多个版本提供了发布的机会 应用的更丰富版本,可支持更高级的功能 在 EE、UE 和 PXE 中找到。有两种技术可以利用 以支持多个版本。第一种方法使用扩展包 第二个利用 Dynamic Apex。两者都有好处, 因此,在设计应用之前,请务必查看这两种策略。

  • 使用扩展包支持多个版本
  • 使用 Dynamic Apex 支持多个版本

使用扩展包支持多个版本

此方法使用包含核心应用功能的基本托管包。基地 软件包中仅包含 Group Edition 和 Professional Edition 中支持的功能。然后,您使用 第二个托管包或扩展包,用于扩展和增强基本包。 扩展包添加了 Enterprise、Unlimited 和 性能版本。例如,您有一个跟踪库存的仓库应用程序 此应用的扩展包括工作流(在组中不可用)。您的团队 和专业版客户可以安装基本仓库应用程序,而 其他客户使用工作流安装基础包,然后安装扩展包 组件。

使用基础包和扩展包支持多个版本

使用扩展包可以避免多个代码集,并追加销售 客户。升级客户只需要安装扩展包。下面是创建扩展包的过程。

  1. 创建基础管理的软件包,该软件包使用 Group 和 专业版。
  2. 在单独的 Developer Edition 组织中安装基本管理的软件包。
  3. 在此组织中,创建包含更多功能的扩展包 在 Group Edition 和 Professional Edition 中受支持。您可以引用 base 管理的 包以避免重复功能。引用 Base 管理的包会自动触发此包成为扩展 包。

由于扩展包依赖于基础包,因此花费很重要 设计应用和包之间的接口的时间。例如,如果 扩展包调用基础包中的 Apex 类,您必须确保 所需的 Apex 类是全局的。考虑整个应用程序生命周期也很重要。例如,如果 您想要添加新功能,请将它们包含在相应的包中。确保更新 到基础包,不要破坏扩展包。

注意

访问历史记录信息 对于扩展包中的自定义对象,请与基础包所有者合作以启用 在组织中跟踪基础包的历史记录。在基地中启用历史记录跟踪 当您安装软件包并创建补丁组织时,软件包可能会导致错误 扩展包。

使用 Dynamic Apex 支持多个版本

使用动态 Apex、动态 SOQL 和动态 DML,可以创建一个托管 您计划支持的所有版本的包,而无需使用扩展包。你的应用 行为可能会根据客户版本中可用的功能动态更改。这 在设计旨在支持多个版本的应用时很有用。

做 确保包中的 Apex、工作流等不包含任何对 GE/PE 不支持的功能。这可能包括在不受支持的 标准对象,例如 Campaigns,或对多币种等功能进行 Apex 引用 或区域管理。当您引用包中的功能时,不 受 GE/PE 支持,此包依赖将导致安装失败。

相反,如果您使用动态 Apex 首先检查这些功能是否可用 引用它们,您可以在 GE/PE 中安装托管包。要考虑的重要部分 您必须以能够支持这两种用例的方式对 Dynamic Apex 进行编码。这确保了如果 你的客户没有特定的功能或对象,你的应用仍将正常运行。

面向团体和专业人士的示例设计方案 版本

下面是一些方案,可帮助你了解何时以及如何为 Group 和 Professional 进行构建 版本。方案 1:您想要构建使用记录类型的应用程序由于记录类型在 Group Edition 中不可用,因此请决定是否要支持此功能 版。假设您这样做,您可以构建一个不包含记录的基本托管包 类型。将此托管包以已发布状态上传后,可以将其安装到 另一个 Developer Edition 组织开始构建扩展。扩展可以添加记录 Professional、Enterprise、Unlimited 和 Performance Edition 客户可以使用的类型 安装和使用。方案 2:您想要构建一个包含 80 个自定义对象的应用通常,此方案会给组和专业版组织带来问题,因为 的自定义对象限制。但是,如果您使应用程序在 AppExchange 上可用,则 不计入自定义对象、选项卡和应用限制。因此,即使您的应用程序有 80 个自定义 对象,它可以在 Group 和 Professional Edition 组织中安装和工作。场景 3:您想要构建一个向 Web 服务发出 Apex 标注的应用Apex 通常不会在 Group Edition 和 Professional Edition 中运行。如果您得到托管 软件包在安全审查期间授权,您的 Apex 将按预期执行。为此 场景中,您可以构建 Apex 标注以调用外部服务,然后包含以下内容 包中的类。场景 4:您想要构建一个使用 Campaigns 的应用默认情况下,Group Edition 支持广告系列。对于此方案,您有两个 选项。

  • 选项 1 – 构建不引用广告系列的基于托管的包。在它的 完成、上传并安装到另一个 Developer Edition 组织中。建立活动 功能作为扩展包。现在,您的 Group Edition 客户可以安装基础, 而其余的人也可以安装扩展以获得额外的功能。
  • 选项 2 – 如果使用 Dynamic Apex 作为唯一包,则此选项只需要一个包 引用 Campaigns(如前所述),并且不要在 运动。然后,可以将应用安装在 Group Edition 组织及更高版本中。如果广告系列在 您的客户版本,则您的 Dynamic Apex 可以按预期操作广告系列。

场景 5:你想要构建一个复合应用,其中接收入站 API 调用您有一个单独的托管应用程序,要与 Salesforce 集成,因此您必须使 对 Group 和 Professional Edition 客户的 API 调用。默认情况下,此类调用是不可能的。 但是,如果你是符合条件的合作伙伴,请请求允许 SOAP 调用的特殊 API 令牌 与组和专业版组织集成。请务必将客户端 ID 嵌入到 外部代码的 SOAP 标头。

ISVforce 指南:构建和分发 AppExchange 解决 方案

作为独立软件供应商 (ISV) 建立蓬勃发展的 Salesforce 业务。开始者 加入 Salesforce 合作伙伴计划并熟悉对您有用的资源 AppExchange ISV 或咨询之旅。然后,学习计划、构建、分发、销售和支持 AppExchange 市场的解决方案。

  • 发行说明
    使用 Salesforce 发行说明了解 AppExchange 合作伙伴的最新更新和技术更改,包括打包、分析和安全编码工具。
  • 准备在 AppExchange 上分发 在 AppExchange
    上列出解决方案或咨询服务之前,请完成先决条件任务。首先,注册 Salesforce 合作伙伴计划。接下来,确认您有合作伙伴业务组织。然后,熟悉可帮助您高效导航合作伙伴旅程的资源和文档。
  • 使用托管软件包开发 AppExchange 解决方案
    托管软件包是 Salesforce 合作伙伴用来创建业务应用程序并通过 AppExchange 将其应用程序分发给客户的工具。托管软件包提供的功能套件可帮助您分发、许可、试用功能、排除故障并从产品中获利。
  • 设计您的 AppExchange 解决方案 了解影响 AppExchange 解决方案
    设计的体系结构概念和安全要求。
  • 通过 AppExchange 安全审核
    [生效日期:2023 年 8 月 9 日] 在 Salesforce,没有什么比客户的信任更重要。信任需要安全。要在 AppExchange 上分发托管软件包、Salesforce Platform API 解决方案或 Marketing Cloud API 解决方案,它必须通过我们的安全审查。了解如何准备并通过安全审查。
  • 在 AppExchange 上发布解决方案 使用 AppExchange
    合作伙伴控制台创建解决方案列表、启动安全审查、管理许可证设置以及查看列表的 Marketplace Analytics。
  • 使用 Checkout 在 AppExchange 上销售 使用 AppExchange Checkout
    直接从您的列表接受信用卡付款和银行转账。使用结账管理应用程序将您的销售和收入数据转化为见解和操作。
  • 使用 Analytics for AppExchange 合作伙伴
    监控性能 了解客户如何在 Marketplace Analytics 仪表板中找到您的 AppExchange 列表并与之交互。通过浏览 App Analytics 数据,了解订阅者如何使用您的套餐。
  • 使用 Channel Order App 向 Salesforce 报告订单 使用 Channel Order App
    (COA) 创建、管理订单并将其提交到 Salesforce。如果您是 OEM 合作伙伴,则可以使用 COA 来预配 Salesforce 许可证和收入分成。如果你是 ISV 合作伙伴,则可以使用 COA 进行收入分成。如果您使用 AppExchange Checkout 管理客户付款,请不要使用 COA。当客户购买您的 AppExchange 解决方案时,使用 Checkout 的合作伙伴的收入会自动报告给 Salesforce。
  • 提供 AppExchange 解决方案的免费试用 通过提供 AppExchange 解决方案
    的免费试用,提高客户转化率。探索试用选项,并确定解决方案的最佳类型。
  • OEM 用户许可证指南
    了解 OEM 合作伙伴可用的许可证类型。

准备好在 AppExchange 上分发

在 AppExchange 上列出解决方案或咨询服务之前,请完成 先决条件任务。首先,注册 Salesforce 合作伙伴计划。接下来,验证您是否 拥有合作伙伴业务组织。然后,熟悉可以 帮助您高效地驾驭合作伙伴之旅。

  • 加入 Salesforce 合作伙伴社区
    AppExchange 解决方案和咨询服务由 Salesforce 官方合作伙伴构建。要开始您的合作之旅,请加入 Salesforce 合作伙伴社区。
  • 验证对 Salesforce 合作伙伴业务组织的
    访问权限 作为 Salesforce 合作伙伴,您有资格加入合作伙伴业务组织 (PBO)。您的 PBO 包含用于设置和管理 AppExchange ISV 业务或咨询实践的工具。在开始构建解决方案或实践之前,请验证是否可以访问 PBO。
  • 申请 Salesforce 合作伙伴业务组织 如果您在加入 Salesforce 合作伙伴社区时未收到合作伙伴业务组织
    (PBO),请记录案例以请求。如果您在加入合作伙伴社区时创建了单独的用户名,请跳过此步骤。加入时,已自动预配 PBO。
  • 浏览面向 Salesforce 合作伙伴的学习资源 借助来自 Trailhead、合作伙伴社区等的精选资源,更快地实现 Salesforce 合作伙伴
    旅程中的里程碑并实现目标。

加入 Salesforce 合作伙伴社区

AppExchange 解决方案和咨询服务由 Salesforce 官方合作伙伴构建。 要开始您的合作之旅,请加入 Salesforce 合作伙伴社区。

您的业务目标决定了我们与您合作的方式。加入 Salesforce 合作伙伴之前 社区,了解 AppExchange ISV 和咨询合作伙伴关系。

提示

我们建议您为合作伙伴社区创建一个单独的用户名,甚至 如果您有现有的 Salesforce 用户名。通过这种方法,您可以立即访问您的 合作伙伴业务组织 (PBO),其中包含用于设置和管理 商。

  1. 转到 Salesforce 合作伙伴社区。
  2. 单击“成为合作伙伴”。
  3. 单击“继续”进行注册
  4. 单击加入合作伙伴社区
  5. 单击“获取 Salesforce 用户名”,然后填写所需的 领域。
  6. 单击创建用户名。我们会发送一封确认电子邮件,要求您验证您的帐户并设置 密码。
  7. 为您的帐户设置密码,然后单击“我有我的 Salesforce 用户名 – 加入合作伙伴社区。
  8. 登录到合作伙伴社区,然后完成剩余的设置任务。

验证对 Salesforce 合作伙伴业务组织的访问权限

作为 Salesforce 合作伙伴,您有资格加入合作伙伴业务组织 (PBO)。您的 PBO 包含用于设置和管理 AppExchange ISV 业务或咨询实践的工具。 在开始构建解决方案或实践之前,请验证是否可以访问 PBO。

  1. 登录 Salesforce,使用您在加入合作伙伴时创建的用户名和密码 社区。
  2. 单击应用程序启动器。
  3. 在“快速查找”框中,输入“Environment Hub”,然后单击“Environment Hub”。
  4. 如果重定向到 Environment Hub 应用,则表示你验证了 PBO 访问权限。如果 Environment Hub 应用程序在“快速查找”框中不可用,请在 Salesforce 帮助上记录案例以请求 PBO。

若要了解有关 PBO 的详细信息,请注册“了解合作伙伴业务组织” (PBO)Salesforce 合作伙伴学习营中的工具(需要登录)。

申请 Salesforce 合作伙伴业务组织

如果您在加入 Salesforce 时未收到合作伙伴业务组织 (PBO) 合作伙伴社区,记录案例以请求案例。如果您在加入时创建了单独的用户名 合作伙伴社区,请跳过此步骤。PBO 是自动预配的,当你 加入。

  1. 使用您注册 Salesforce 合作伙伴时所用的用户名登录 Salesforce 帮助 社区。
  2. 单击帐户切换器,并验证是否已选择您的合作伙伴帐户。
  3. 单击“联系支持人员”。
  4. 单击“创建案例”,然后填写必填字段。
    1. 对于主题,输入请求合作伙伴业务组织 (PBO)。
    2. 对于描述,请注意您是 Salesforce 合作伙伴,并且您正在请求 PBO。
    3. 当系统提示您选择产品时,单击“选择其他产品/” 主题
    4. 对于“产品”,选择“合作伙伴计划和权益”。
    5. 对于“主题”,选择“演示和合作伙伴业务组织”。
    6. 选择实例类型和严重性级别。
  5. 单击“创建案例”。

我们会审核案例,并与您联系以告知后续步骤。

浏览面向 Salesforce 合作伙伴的学习资源

借助 Salesforce 合作伙伴之旅,更快地达到里程碑并实现目标 来自 Trailhead、合作伙伴社区等的精选资源。

我想:推荐的资源
了解构建 AppExchange ISV 的基础知识 商。Trailhead:将您的业务发展为 AppExchange 合作伙伴
了解构建 Salesforce 咨询的基础知识 实践。Trailhead:将您的实践构建为 咨询合作伙伴
使用 AppExchange ISV 工具进行动手实践,并 技术,例如第二代托管包。Trailhead:将应用程序构建为 AppExchange 伙伴
了解构建安全的工具和最佳实践 解决 方案。Salesforce 开发人员:安全开发人员 中心
当我遇到困难时提出问题并获得帮助Salesforce 合作伙伴社区:问答社区 群
随时了解 Salesforce 合作伙伴的更改和更新 程序Salesforce 合作伙伴社区:官方:AppExchange 合作伙伴计划 社区组

使用托管包开发 AppExchange 解决方案

托管软件包是 Salesforce 合作伙伴用于创建业务应用程序的工具,以及 通过 AppExchange 将其应用程序分发给客户。托管提供的功能套件 软件包可帮助你分发、许可、试用功能、对产品进行故障排除以及从中获利。

程序包是您计划销售并分发给 Salesforce 的应用程序的容器 客户。创建一个包,然后添加包含的功能、自定义项和架构 你的应用。可以打包的元数据组件示例包括:

  • Apex 类和触发器
  • 标准对象上的自定义字段
  • 自定义元数据类型
  • 自定义对象
  • 闪电页面
  • 页面布局

您的包可以包含许多不同的元数据组件,也可以打包单个 组件,例如流。

Salesforce 提供第二代托管打包(托管 2GP)和第一代 托管打包(托管 1GP)。展望未来,我们建议每个人都使用托管 2GP 来 创建新应用。有关使用第二代托管打包的优势的详细信息,请参阅为什么要切换到第二代托管打包 包装?

设计您的 AppExchange 解决方案

了解影响 AppExchange 的架构概念和安全要求 解决方案设计。

注意

构建新应用?您是否考虑过使用第二代 托管软件包?灵活的版本控制和跨包共享命名空间的能力是 开发人员喜欢创建第二代托管包的两个原因。我们认为你会 也喜欢它。若要了解详细信息,请参阅:为什么要切换到第二代托管 封装以及第一代和第二代的比较 托管包。

  • AppExchange 合作伙伴和解决方案
    的安全要求 [生效日期:2023 年 8 月 9 日] 作为 Salesforce 合作伙伴,您负责实施和维护全面的安全计划,并维护您在 AppExchange 上列出或根据 AppExchange 合作伙伴计划分发的所有应用程序的安全性。
  • 组版和专业版的体系结构注意事项

AppExchange 合作伙伴和解决方案的安全要求

【生效日期:2023年8月9日】作为 Salesforce 合作伙伴,您负责 实施和维护全面的安全计划,并维护 您在 AppExchange 上列出或在 AppExchange 合作伙伴下分发的所有应用程序 程序。

注意

AppExchange 合作伙伴和解决方案的这些安全要求(以下简称“要求”)是 截至所列生效日期为止,并一直有效,直到或除非它们 在此相同或重定向的 URL 上被生效日期较晚的版本取代。SFDC可以 不时自行决定更新或修改这些要求,无论是否 通知。这些要求受 AppExchange 合作伙伴计划的约束,并成为 AppExchange 合作伙伴计划的一部分 政策和 Salesforce 合作伙伴计划协议 (“SPPA”),见 https://www.salesforce.com/company/legal/agreements/。本要求中未定义的大写术语具有以下含义 在SPPA中给予他们。

重要

合作伙伴应用程序,包括托管软件包、Salesforce Platform API 解决方案、Marketing Cloud API 解决方案以及本文提及的其他解决方案, 是 Salesforce 主要服务协议中定义的非 SFDC 应用程序(可在 https://www.salesforce.com/company/legal/agreements 或后续 URL)。尽管有 对合作伙伴应用程序进行安全审查时,Salesforce 不保证其质量 或任何合作伙伴应用程序的安全性,客户有责任评估 合作伙伴应用程序的质量、安全性和功能。

作为参与 AppExchange 合作伙伴计划的条件,您必须遵守 本文档中概述的安全要求。这些要求包括一般 适用于所有 AppExchange 合作伙伴和合作伙伴应用程序的要求,以及其他要求 特定于使用特定 或与特定 技术或旨在用于特定行业。在这些要求中,合作伙伴 应用程序也称为“解决方案”。创建或编辑 AppExchange 时 发布时,您需要确认自己符合这些要求。

本文档中的安全要求并不详尽。我们鼓励合作伙伴 遵循所有适用的行业安全标准。

一般 AppExchange 要求

  1. 所有合作伙伴都必须遵守安全策略中所述的要求 要求。
  2. 所有合作伙伴应用程序都必须符合防止安全编码冲突中所述的要求。
  3. 所有合作伙伴应用程序都必须通过 Salesforce 安全审查和评估,其中 根据 AppExchange 合作伙伴计划政策的要求。

B2C 商务解决方案安全要求

如果您的合作伙伴应用程序是 B2C Commerce Cartridge 或 Headless Integration,则必须 此外,请遵循保护您的 B2C 商务解决方案中所述的要求。这些 B2C Commerce 特定要求是另外的 到一般 AppExchange 要求。

Tableau Accelerator 安全要求

如果您的合作伙伴应用程序是 Tableau 加速器,您还必须遵循这些要求 在保护您的 Tableau 加速器中进行了介绍。这些 Tableau 特定要求 是对一般 AppExchange 要求的补充。

  • 安全策略要求 要求
    :在 AppExchange 上列出解决方案之前,您必须有一个安全计划来证明贵公司对安全的承诺。此外,为了帮助客户评估解决方案的质量,必须与他们共享计划信息。
  • 防止安全编码违规
    AppExchange 上列出的所有解决方案都必须遵守这些 AppExchange 安全要求。了解哪些违规行为最有可能出现在 AppExchange 解决方案中,它们为什么会带来安全风险,以及如何创建有助于避免这些风险的解决方案。
  • 保护您的 B2C 商务解决方案
    AppExchange 上列出的所有 B2C Commerce Cartridge 和 Headless 集成都必须遵守这些要求。
  • 保护您的 Tableau 加速器 AppExchange 上列出的
    所有 Tableau 加速器都必须遵守这些要求。

安全策略要求

要求:在 AppExchange 上列出解决方案之前,必须具有安全性 证明贵公司对安全的承诺的计划。另外,为了帮助客户 评估解决方案的质量,您必须与他们共享您的计划信息。

建议:我们建议在程序中包含这些元素。

指定安全专家

集成安全性后,可以更轻松地保护解决方案免受安全威胁 考虑进入开发的各个阶段。确保您的 解决方案遵循安全准则,即为您的开发指定一名安全专家 团队。让您的整个开发团队与安全专家协作完成所有工作 开发阶段:设计、实现和测试。推迟安检 在开发的最后阶段之前的注意事项会增加您的团队的可能性 在不知不觉中传播安全违规行为。定期协作可防止 不必要地积累安全违规行为,并有助于避免准备 成功提交 AppExchange 安全审查。

实施安全策略

制定企业安全策略,详细说明贵公司如何保护客户资产, 例如用户数据。告知客户他们可以采取哪些活动来帮助确保 从头到尾的解决方案。

列出服务和项目

列出解决方案中包含的服务和项目,例如 Web 和移动解决方案。 Web 服务、API 和 SDK。

清点第三方库

保留第三方库和 正确操作的解决方案。

创建架构图

提供显示数据接触点、信息流、 身份验证、授权和其他安全控制。

列出认证

共享所有适用的认证报告,例如:

  • HIPAA:健康保险流通与责任法案
  • PCI DSS:支付卡行业数据安全标准
  • SOC 2:系统和组织控制 管理客户数据的 2 个标准
  • ISO27001:信息安全管理

获取第三方审核

让独立的第三方进行安全审计。与您的分享摘要 客户。

文档安全保证活动

记录公司级别的安全保障活动,包括:

  • 软件开发生命周期 (SDLC) 方法
  • 漏洞管理
  • 修正服务级别协议 (SLA)
  • 供应商和依赖安全计划
  • 安全意识培训
  • 安全漏洞响应程序

列出敏感数据

列出解决方案处理或存储的所有敏感数据,例如付款方式 数据、个人数据和健康数据。

披露数据存储位置和提供商

如果解决方案存储或处理受管制的数据,例如个人身份数据 和健康数据,披露数据存储位置列表。确定国家/地区和提供商 例如 Amazon Web Services (AWS)、Azure 和 Google Cloud Platform (GCP)。

识别第三方数据共享

提供您与之共享客户数据的第三方供应商列表。

分享联系方式

发布联系信息,以便客户轻松获得支持和报告 安全事件。

防止安全编码违规

AppExchange 上列出的所有解决方案都必须遵守这些 AppExchange 安全性 要求。了解哪些违规行为最有可能出现在 AppExchange 解决方案中,以及为什么会出现这些违规行为 构成安全风险,以及如何创建有助于避免这些风险的解决方案。

  • 从第三方终结点
    加载 JavaScript 文件 避免从内容分发网络 (CDN) 动态加载第三方 JavaScript 文件。相反,请从包的静态资源文件夹中加载代码。
  • 在 Lightning 组件
    中加载第三方 CSS 包括级联样式表 (CSS) 和其他静态资源中的资源,而不是从第三方加载。
  • 使用 CSS 外部组件
    Salesforce Platform 试图确保每个命名空间都是一个隔离的沙盒,但不能始终保证隔离。如果发生命名空间隔离漏洞,一个组件可能会窃取另一个组件的点击,或以其他方式干扰另一个组件的预期用途。为了防止这种类型的滥用,请不要使用已知与组件中的样式隔离不兼容的 CSS 指令。
  • 在 Salesforce 域
    中运行 JavaScript 来自多个供应商的 JavaScript 代码可以在同一源中运行。为了防止代码干扰,供应商的 JavaScript 代码被沙盒化。不要尝试跳出沙盒或在源之外运行代码。使用 Visualforce、Aura 或 Lightning Web 组件,它们在正确的源中运行。
  • 调试
    时暴露机密数据 在生产环境中,使用 debug 语句记录机密数据是一个安全漏洞。不要在生产环境中记录机密数据、敏感信息、密码、密钥或堆栈跟踪。编辑数据或从日志中省略数据。
  • 不安全地存储敏感数据 当您从 Salesforce Platform 导出数据以及在平台中存储机密数据时,
    请遵循企业安全标准。
  • 使用具有已知漏洞的软件
    使用记录了与您的用例相关的常见漏洞和暴露 (CVE) 的软件是一个安全漏洞。如果您的解决方案存在已知漏洞,请在安全补丁可用时立即对其进行测试和部署。如果您的解决方案使用的软件具有与您的用例无关的 CVE 记录的漏洞,请准备误报文档。
  • 在生产环境中
    使用示例代码 仅将示例代码用作准备开发自己的应用程序的教育工具。构建生产代码时,请始终自己编写代码。避免从不直接控制的源复制代码。
  • 绕过对象级和字段级访问设置 设计解决方案以在标准和自定义对象上强制执行组织的创建、读取、更新和删除 (CRUD) 和字段级安全性 (FLS) 设置
  • 绕过 Apex 中的共享规则 在 Apex
    代码中尊重基于配置文件的权限、字段级安全性、共享规则和组织范围的默认值。
  • 由于数据库查询构造不安全导致的 SOQL 注入 要防止 Salesforce 对象查询语言 (SOQL) 注入,请使用绑定变量和输入卫生。
  • 跨站点请求伪造 跨站点请求伪造
    (CSRF) 是一种攻击,它迫使最终用户在其经过身份验证的 Web 应用程序会话期间执行不需要的操作。要防止 CSRF,请使用 或通过用户操作触发状态更改。confirmationTokenRequired
  • 打开重定向 当应用程序在未经任何验证的情况下动态重定向
    到用户控制的参数值时,就会发生打开重定向。使用硬编码重定向来防止打开重定向。
  • Lightning LockerService 已禁用
    Lightning LockerService 是 Lightning 代码的一项关键安全功能。它提供组件隔离,允许来自多个来源的代码使用安全、标准的 API 和事件机制执行和交互。为包含 Lightning 组件或应用程序的 AppExchange 软件包启用 Lightning Locker。
  • Lightning 组件中的转义不足 捆绑包中的每个组件都负责清理父组件
    、应用程序或 URL 参数提供给它的输入。
  • 组件
    中的异步代码 黑客可以操纵异步代码的时序来产生恶意结果。若要保留当前执行上下文,请将异步函数调用或批处理操作包装到单个请求中。
  • 安全通信
    确保只能通过安全连接(如 SFTP 和 HTTPS)访问解决方案。避免使用 HTTP 和 FTP,因为这些协议不会加密通过 Internet 传输的信息。

从第三方端点加载 JavaScript 文件

避免从内容分发网络动态加载第三方 JavaScript 文件 (CDN)。相反,请从包的静态资源文件夹中加载代码。从 CDN 或其他第三方动态加载第三方 JavaScript 文件不是 允许有两个原因。

  • 必须使用包版本 ID 对整个解决方案进行版本控制,以便有一个 定义明确的产品以供审查和跟踪。如果解决方案从 第三方终结点,外部托管代码可以在没有包的情况下进行更改 版本 ID 更改。管理员和 Salesforce 安全审查团队不是 意识到了这一变化。Salesforce 无法确保第三方代码继续 防范最新的安全漏洞。确保代码是 受制于包版本控制,从静态动态加载代码 resources 文件夹。如果不更改 软件包版本 ID。另外,版本 ID 更改会向管理员发出信号,并且 AppExchange 安全团队认为代码已更改。
  • 从第三方终结点动态加载代码可授予该终结点功能 将代码注入到安装软件包的任何 Salesforce 组织中。只 从 Salesforce 批准的 CDN 动态加载代码,由 Salesforce 管理代码, 而不是合作伙伴。

概括地说,解决方案是:

  1. 将第三方 JavaScript 文件保存在静态资源中。
  2. 将资源添加到解决方案包中。
  3. 从 URL 加载每个 JavaScript 文件。$Resource

Visualforce 示例

这些代码片段描述了安全违规以及如何在 Apex 和 for 中修复它 Aura 中的闪电组件。此 Visualforce 代码不安全,因为加载了 jQuery 来自第三方来源。

<apex:includescript value="https://code.jquery.com/jquery-3.2.1.min.js"/>

此 Visualforce 代码是安全的,因为它从静态加载 jQuery 的一个版本 resources 文件夹。

$Resource

<apex:includeScript value="{! $Resource.jQuery }"/>

光环示例

此 Aura 组件代码不安全,因为 jQuery 直接从第三方加载 源。

<aura:component>
   <ltng:require afterScriptsLoaded="{!c.initializeUI}"
   scripts="https://code.jquery.com/jquery-2.2.0.min.js”/>
<aura:component>

此 Aura 组件代码是安全的,因为 jQuery 是从解决方案包加载的,并且 使用 URL 作为静态资源引用。$Resource

<aura:component>
   <ltng:require afterScriptsLoaded="{!c.initializeUI}"
   scripts="{!$Resource.jsLibraries + '/jsLibOne.js'}"/>
<aura:component>

在 Lightning 组件中加载第三方 CSS

将级联样式表 (CSS) 和其他资源包含在静态资源中 而不是从第三方加载。

强制执行此要求的原因与从第三方终结点加载 JavaScript 文件中概述的原因相同。整个 解决方案必须受版本控制,并且组织管理员和 Salesforce 安全性 审核团队必须了解这一变化。

使用标签加载外部 CSS 资源违反了此安全策略。<link>概括地说,解决方案是:

  1. 将第三方 CSS 文件保存在静态资源中。
  2. 将资源添加到解决方案包中。
  3. 使用标签引用 CSS 在 .cmp 或 .app 标记中。<ltng:require>

有关更多信息,请参阅在 Lightning Aura 组件开发人员指南。

光环示例

这些代码片段描述了安全违规以及如何在 Lightning 中修复它 Aura 中的组件。此 Aura 组件代码不安全,因为它使用标签来加载外部 CSS 资源。

<link>

<aura:component>
     <link rel="stylesheet" href="https://example.com/styles.css" type="text/css">
<aura:component>

此 Aura 组件代码使用 ,其中 是引用作为静态上传的外部 CSS 资源的更安全方法 资源。

<ltng:require>

<aura:component>
    <ltng:require styles="{!$Resource.SLDSv1 + '/assets/styles/lightning-design-system-ltng.css'}" />
</aura:component>

使用 CSS 外部组件

Salesforce Platform 尝试确保每个命名空间都是一个隔离的沙盒,但 隔离并不总是得到保证。在发生命名空间隔离漏洞时,一个组件 可以从另一个组件窃取点击,或以其他方式干扰另一个组件的 有可能的用途。为了防止这种类型的滥用,不要使用已知不兼容的CSS指令 在组件中实现样式隔离。

CSS 示例

此 CSS 代码容易受到攻击,因为它使用不兼容的绝对定位 有风格 隔离。

#some_element {
   position: absolute;
   right: 80px;
   top: 160px;
}

此 CSS 代码通过使用相对 定位。

#some_element_revised {
   position: relative;
   right: 80px;
   top: 160px;
}

有关详细信息,请参阅组件中的 CSS 提示 Lightning Aura 组件开发人员指南。

在 Salesforce 域中运行 JavaScript

来自多个供应商的 JavaScript 代码可以在同一源中运行。防止代码 干扰,供应商 JavaScript 代码是沙盒的。不要试图冲出沙盒或 在源外部运行代码。使用 Visualforce、Aura 或 Lightning Web 组件,它们在 正确的来源。

许多不同类型的 JavaScript 代码在 Salesforce 组织中运行,包括未打包的 客户代码、Salesforce 代码和打包代码。通常,代码来自多个 无法相互协作的供应商。如果他们的代码运行在同一个 来源,来自一个供应商的代码可能会干扰其他供应商的代码。

为了防止代码干扰,供应商的 JavaScript 代码被沙盒化。使用 Visualforce 解决方案中,JavaScript 代码在特定于供应商的唯一来源中进行沙盒化。使用闪电 解决方案和 Lightning Web 组件 (LWC),JavaScript 被沙盒化为独特的, 特定于供应商的储物柜。

任何试图突破沙盒并在源之外运行代码的尝试都是一种安全编码 违反。安全编码冲突包括尝试运行供应商编写的 JavaScript 代码 在 Salesforce 源中通过主页组件、Web 链接或自定义按钮。

在大多数情况下,您可以使用 Visualforce、Aura 或 Lightning Web 组件,在正确的源中运行。

元数据示例

此示例中的元数据表示自定义对象。此自定义中的 Web 链接 对象是使用语句定义的。在一个 托管包,使用是一种安全性 漏洞,因为供应商正在将其代码注入 Salesforce 源。管理 包必须保留在其命名空间沙箱中,并且不能在此沙箱之外执行脚本 沙盒。

REQUIRESCRIPTREQUIRESCRIPT

<?xml version=”1.0”encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<actionOverrides>
<actionName>Accept</actionName>
      <type>Default</type>
</actionOverrides>
<webLinks>
     <fullName>Add_to_List</fullName>
     <openType>onClickJavaScript</openType>
     <url>{!REQUIRESCRIPT(&quot;/soap/ajax/30.0/connection.js&quot;)}</url>
</webLinks>
...
</CustomObject>

与其将代码直接嵌入到对象中,不如在 Visualforce Aura 组件,或使用 Lightning Web 组件。

调试时公开机密数据

在生产环境中,使用 debug 语句记录机密数据是一种安全性 脆弱性。不要在 生产环境。编辑数据或从日志中省略数据。

使用 debug 语句泄露机密数据会使 Salesforce 组织管理员感到困难 来控制对数据的访问。通常,允许查看日志的配置文件不是 允许查看机密的相同配置文件。

Apex 示例

在此 Apex 代码中,是一个 写入调试日志的加密密钥。若要避免此漏洞,请从生产中删除该语句 法典。

authenticationTokensystem.debug

if (varCount > 0){
   sensitiveUserData = JSON.serialize(AssignUsrs);
   ReqSignature = RequestWrapper.generateHmacSHA256Signature(sensitiveUserData, authenticationToken);
   system.debug('Token--->'+authenticationToken);
}

不安全地存储敏感数据

从 Salesforce Platform 导出数据时遵循企业安全标准 以及当您在平台中存储机密数据时。

不安全的敏感数据存储为黑客提供了许多构成威胁的途径。为 例如,组织管理员是唯一应该知道 API 密钥的人。 黑客可以使用公开的密钥通过管理通道将数据传送到远程 端点。

Salesforce 会认真对待源自解决方案的数据威胁。数据泄露 或因解决方案中的漏洞而造成的损失危及您与 Salesforce的。在以下情况下,请遵循存储敏感数据中的企业标准:

  • 从 Salesforce 平台导出客户数据。
  • 将加密密钥、会话 ID 或密码等密钥存储在 Salesforce平台。

元数据示例

此示例中的元数据表示自定义对象。此自定义对象定义 不安全,因为 API 的标记 key 字段设置为 。该字段可以在 平原 发短信。

<visibility>Public

<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
   <fields>
        <fullName>apiKey__c</fullName>
        <externalId>false</externalId>
        <fieldManageability>DeveloperControlled</fieldManageability>
        <label>apiKey</label>
        <length>50</length>
        <required>false</required>
        <type>Text</type>
        <unique>false</unique>
   </fields>
   <label>Phone Verify Setting</label>
   <pluralLabel>Phone Verify Settings</pluralLabel>
   <visibility>Public</visibility>
</CustomObject>

将密钥存储在自定义对象(如 API 密钥)中时,请对其进行加密。存储 加密密钥分别在受保护的自定义设置或受保护的自定义元数据 API 中 田。

使用具有已知漏洞的软件

使用记录了常见漏洞和暴露 (CVE) 相关漏洞的软件 您的用例是一个安全漏洞。如果解决方案存在已知漏洞,请进行测试 并在安全补丁可用时立即部署它们。如果您的解决方案使用以下软件: 具有 CVE 记录的与您的用例无关的漏洞,请准备误报 文档。

黑客可以快速攻击已披露的软件漏洞。大多数供应商提供 针对其软件中发现的漏洞进行修补或更新。要了解您的 解决方案使用具有已知漏洞的软件,请检查常见漏洞和披露 (CVE) 数据库。

应用与解决方案用例相关的所有修补程序或更新。如果漏洞 与您的使用案例无关,并且您正在为 AppExchange 准备解决方案 安全审查,将其记录为误报。解释为什么它对你的解决方案是安全的 以使用易受攻击的软件。我们的安全审查团队在做出决定时会使用此信息 是否批准在解决方案中使用该软件。有关详细信息,请参阅误报。

在生产环境中使用示例代码

仅使用示例代码作为教育工具,为开发自己的代码做准备 应用。构建生产代码时,请始终自己编写代码。避免复制 来自您不直接控制的来源的代码。

互联网上的开发人员可以使用很棒的示例代码。虽然在 学习最佳实践或新技术,不要直接在 生产包。直接重用可能会在许多包中传播漏洞, 无论示例代码作者是否有意为之。

绕过对象级和字段级访问设置

设计解决方案以强制执行组织的创建、读取、更新和删除 (CRUD) 和 标准对象和自定义对象上的字段级安全性 (FLS) 设置。

在 Salesforce Platform 上,您可以在配置文件和 权限集。CRUD 设置确定用户可以访问哪些对象。FLS 确定 用户可以访问哪些对象字段。使用 CRUD 和 FLS 限制对标准和 自定义对象和单个字段。

客户希望你的解决方案不会违反他们在 组织。设计解决方案,以在标准和 自定义对象。此外,请确保您的解决方案能够正常处理用户 访问受到限制。在某些用例中,绕过 CRUD 和 FLS 是可以接受的,例如在以下情况下:

  • 创建不直接公开数据的汇总摘要或聚合。
  • 修改自定义对象或字段,例如日志或系统元数据,以便它们 用户无法通过 CRUD 或 FLS 直接访问。
  • 从高特权方法访问对象,非管理员用户无法访问的方法 访问。
  • 当您的解决方案是社区或 网站。
  • 使用自定义安全策略访问属于命名空间的自定义对象。 在这种情况下,请将策略记录为 AppExchange 安全审查的一部分 提交。

若要了解有关 CRUD 和 FLS 强制执行的详细信息,请查看安全服务器端开发 模块。若要检测代码中的 CRUD/FLS 冲突,请考虑使用 代码扫描器,如 Salesforce Code Analyzer 的 Salesforce Graph Engine。

Apex 示例

在此 Apex 代码中,数据 操作语言 (DML) 语句在不检查用户是否具有创建访问权限的情况下运行 Account 对象的权限。该代码不会强制执行组织的访问权限 设置。

insert account

public static Account createIndividualModalData(String name, String email, String mobile) {
   RecordType recordType = [Select Id from RecordType where DeveloperName = 'IndustriesIndividual' and SobjectType = Account'];
   Account account = new Account();
   account.Name = name;

   if(recordType != null) account.RecordTypeId = recordType.id;
   insert account;
    ...
}

此 Apex 代码更安全,因为它强制执行组织的访问设置。它在执行 DML 语句之前调用该方法。如果返回 true,则用户具有创建访问权限 Account 对象的权限,并执行语句。否则,访问不足错误是 报道。

isCreatable()insert accountisCreatable()insert account

public static Account createIndividualModalData(String name, String email, String mobile) {
   RecordType recordType = [Select Id from RecordType where DeveloperName = 'IndustriesIndividual' and SobjectType = 'Account'];
   Account account = new Account();
   account.Name = name;

   if(recordType != null) account.RecordTypeId = recordType.id;

   if (Schema.sObjectType.Account.isCreateable()) {
      insert account;
   } else {
      ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'Error: Insufficient Access'));
   }
   ...
}

绕过 Apex 中的共享规则

尊重基于配置文件的权限、字段级安全性、共享规则和组织范围 默认值。

Salesforce Platform 广泛使用数据共享规则。每个对象可以有 指示哪些用户和配置文件可以读取、创建、编辑和删除的唯一权限 该对象类型的记录。当您的代码使用标准 控制器。

但是,自定义 Apex 类或 Visualforce 页面本质上并不遵循内置 配置文件权限、字段级安全限制或共享规则。默认情况下,一个 Apex 类可以读取和更新组织内的所有数据。

在 Apex 代码中,不要公开对用户隐藏的敏感数据。尊 基于配置文件的权限、字段级安全性、共享规则和组织范围的默认值。请遵循以下一般规则,以正确强制执行共享。

  • 在所有全局类上声明,或者 包含方法的类。 不要省略共享声明,也不要在解决方案的这些入口点上使用。with sharing@NamespaceAccessiblewithout sharing
  • 对于非全局或标记的控制器类,请将该类声明为 或 。不要省略共享声明,也不要在这些入口点上使用 溶液。@NamespaceAccessiblewith inherited sharingwith sharingwithout sharing
  • 将直接执行数据访问操作的所有类声明为 。如果解决方案中没有标记 的类,则也可以使用。with sharingwithout sharingwith inherited sharing

但是,也有一些值得注意的例外。在以下情况下,请勿遵循一般规则:

  • 你正在构建网站或社区,并希望拒绝来宾用户访问数据。
  • 您正在访问属于您的命名空间的自定义对象,并具有定制的安全性 政策。在这种情况下,请将策略记录为 AppExchange 安全审查的一部分 提交文件。此例外不适用于标准对象。组织管理员 独资拥有标准对象的安全策略。

Apex 示例

在此 Apex 代码中,关键字不是 添加到类头。默认情况下,共享规则不是 执行。

with sharing

public class maincontroller {
   @AuraEnabled public static String saveJobApplication(String vacId, String userId) {
      ...
   }
}

在此 Apex 代码中,关键字是 使用。强制执行共享规则。with sharing

public with sharing class maincontroller {
   @AuraEnabled public static String saveJobApplication(String vacId, String userId) {
       ...
   }
}

若要了解有关共享规则实施的详细信息,请查看安全服务器端开发 模块。

由于数据库查询构造不安全导致的 SOQL 注入

要防止 Salesforce 对象查询语言 (SOQL) 注入,请使用绑定变量和 输入卫生。

SOQL 注入是一种漏洞,用户直接控制 SOQL 的某些部分 数据库查询。在 Apex 中执行的 SOQL 查询不尊重用户权限。因此 SOQL 注入可用于提升用户的权限并允许他们访问数据 超出其用户权限。

两种类型的 SOQL 注入漏洞需要不同的保护 方法。

在第一种类型中,用户提供了不正确的表或字段名称进行查询。 当用户数据标识字段或表名称时,必须验证用户是否具有 访问命名表或字段的权限。请记住,此类型不是引用的 上下文。

在第二种类型中,用户提供带引号的 WHERE 子句的一部分。当用户数据 插入到带引号的字符串上下文中时,数据可以脱离带引号的上下文。这 首选的保护方法是使用绑定变量。或者,您可以使用 .这两种方法都会阻止用户 从引用的上下文中突破出来的数据。EscapeSingleQuotes()

永远不要允许用户提供除字段名称、表名称、 和 WHERE 子句输入。

避免在 Apex 中执行用户生成的查询,在 Apex 中,这些查询在系统模式下运行。如果必须 生成更复杂的客户端 SOQL,使用 REST 或 SOAP API,进行 SOQL 调用 牢牢。

要了解有关 SOQL 注入以及如何在代码中防止 SOQL 注入的更多信息,请查看安全服务器端开发 模块。

SOQL 示例

此 SOQL 语句是不安全的,因为它是通过将字符串与嵌入式连接起来构建的 用户输入。语句之前不进行输入审查 执行。

database.query

string objType = id.valueOf(deduped[0].recordId).getSObjectType().getDescribe().getName();
string soql = 'select id, ' + string.join(fields, ', ') + ' from ' +    objType +' where id in: lrIDs';
list<sobject> records = database.query(soql);

如果必须使用动态 SOQL,请使用该方法清理用户提供的输入。此方法添加 用户提供的字符串中所有单引号的转义字符 (\)。添加 转义字符可确保将所有单引号视为封闭式 字符串而不是数据库 命令。

EscapeSingleQuotes()

string objType = escapeSingleQuotes(id.valueOf(deduped[0].recordId).getSObjectType().getDescribe().getName());
string soql = 'select id, ' + string.join(fields, ', ') + ' from ' +    objType +' where id in: lrIDs';
list<sobject> records = database.query(soql);

跨站点请求伪造

跨站点请求伪造 (CSRF) 是一种强制最终用户执行 在经过身份验证的 Web 应用程序会话期间执行不需要的操作。为了防止 CSRF, 使用 或触发状态更改 与用户操作。

confirmationTokenRequired

在 Salesforce Platform 上发出的所有表单请求都受到保护。插入、删除、更新、 由用户操作(如按钮单击)触发的更新插入状态更改操作是 也受到保护。但是,页面上触发的状态更改或数据操作语言 (DML) 操作 实例化在页面的其余部分加载之前执行,它们绕过平台的 默认 CSRF 保护。类构造函数中的状态更改和 DML 操作是 如果它们由以下原因触发,则容易受到攻击:

  • Visualforce 页面
  • Lightning Web 组件 (LWC)
  • 光环
  • 从 Visualforce 页面的 action 参数调用的任何方法

Apex 示例

此 Visualforce 页面容易受到 CSRF 的攻击,因为该操作是在页面上触发的 初始化。

!init

<apex:page controller="maincontroller" action="{!init}">

public pageReference init(){

   UserSetting__c accountToUpdate;
   pageReference p = page.mainview;
   // Retrieve the password and redirect query string parameters from the current page URL
   String password = ApexPages.currentPage().getParameters().get('password');
   String redirect =   ApexPages.currentPage().getParameters().get('redirect');
   if(string.isBlank(redirect)){
       p.getParameters().put('redirect', '/home/home.jsp');
       p.setRedirect(true);
   } else {
       p.getParameters().put('redirect', redirect);
   }
   if(string.isBlank(password)){
       p.getParameters().put('password', 'blank');
       p.setRedirect(true);
   } else {
       p.getParameters().put('password', password);
       accountToUpdate = [SELECT password__c FROM UserSetting__c LIMIT 1];
       accountToUpdate.password__C = password;
       update accountToUpdate;
   }
   if(p.getRedirect()== true){
      return p; 
   }
   else {
       return null;
   }
}

黑客可以制作一个包含更改数据库语句的参数的 URL,从而允许 他们执行他们选择的恶意操作。当用户打开此类 URL 时 登录到您的应用程序,代码将使用黑客选择的 URL 参数执行。这 意外的数据库操作从受害者浏览器的上下文中执行。

Visualforce 页面保护

防止状态更改或 DML 时 Visualforce 页面中的 CSRF 漏洞 操作在页面初始化时执行,在 Visualforce 页面中启用布尔元数据字段。confirmationTokenRequired

如果设置为 true,则 GET 对页面的请求要求在 URL 中使用 CSRF 令牌。如果省略令牌,则页面为 无法。confirmationTokenRequired

默认设置为 false,这将删除 Apex 的内置 CSRF 令牌保护。您可以 通过转到组织设置中的相关 Visualforce 页面设置来配置此字段。

有关 , 请参阅元数据 API 中的 ApexPage 开发人员指南。confirmationTokenRequired

雷电和 LWC CSRF 保护

在实例化期间,请勿在 Apex 控制器中执行任何状态更改或 DML 操作 闪电或LWC。相反,使用用户操作(如按钮)触发状态更改 点击。要了解有关 CSRF 以及如何在代码中防止它的更多信息,请查看安全服务器端开发 模块。

打开重定向

当应用程序动态重定向到用户控制的 参数值,无需任何验证。使用硬编码防止打开重定向 重 定向。

开放重定向也称为任意重定向或未经验证的重定向。此漏洞是 用于网络钓鱼攻击,将用户重定向到任何 URL。

Apex 示例

在此函数定义中,该语句检索 URL 参数。该参数用于创建重定向 URL,然后 执行客户端重定向到构建的 网址。

String.redirect redirect

public PageReference changepassword(){
   PageReference savePage;
   String redirect = ApexPages.currentPage().getParameters().get('redirect');
   redirect = (redirect == NULL) ? '/home/home.jsp' : redirect;
   savePage = new PageReference(redirect);
   savePage.setRedirect(true);
   return savePage;
}

Visualforce 标记视图触发器 该操作,导致打开 重定向包中的漏洞。<apex:form>changepassword

<apex:form>
   Redirection action: <apex:inputText value="{!userInput}" />
   <br/><apex:commandButton value="Submit" action="{!changepassword}" />
</apex:form>

经修订的守则

开放重定向将您的重定向参数暴露给潜在的攻击者。您可以防止 使用多种策略打开重定向。一种策略是使用硬编码重定向。在一个 硬编码重定向时,您可以显式设置值,如下所示 例:

public PageReference changepassword(){
   PageReference savePage;
   savePage = new PageReference('/home/home.jsp');
   savePage.setRedirect(true);
   return savePage;
}

要了解有关开放重定向以及如何在代码中防止它们的更多信息,请查看登山口。

Lightning LockerService 已禁用

Lightning LockerService 是 Lightning 代码的一项关键安全功能。它提供 组件隔离,允许来自多个来源的代码使用 safe、 标准 API 和事件机制。为 AppExchange 软件包启用 Lightning Locker 包含 Lightning 组件或应用程序。

为所有自定义 Lightning Web 组件启用了 Lightning LockerService。服务是 在 17 年夏季版本中为客户激活。Lightning LockerService 未强制执行 适用于使用 API 版本 39.0 及更低版本的组件,该版本涵盖创建的任何组件 在 17 年夏季之前。当组件至少设置为 API 版本 40.0 时,将启用该组件。新增功能 AppExchange 安全审查和定期重新审查要求组件的版本为 40.0 或更高版本,以便启用 Locker。

元数据示例

在此组件的元数据中, 该字段将 API 版本设置为 39.0。 对于使用 API 版本 39.0 和 降低。

<AuraDefinitionBundle><apiVersion>

<?xml version="1.0" encoding="UTF-8"?>
<AuraDefinitionBundle xmlns="http://soap.sforce.com/2006/04/metadata">
     <apiVersion>39.0</apiVersion>
     <description>My Component</description>
</AuraDefinitionBundle>

在此组件的修订元数据中,该字段设置 API 版本 至 40.0。LockerService 对使用 API 版本 40.0 和 高等。

<AuraDefinitionBundle><apiVersion>

<?xml version="1.0" encoding="UTF-8"?>
<AuraDefinitionBundle xmlns="http://soap.sforce.com/2006/04/metadata">
     <apiVersion>40.0</apiVersion>
     <description>My Component</description>
</AuraDefinitionBundle>

有关更多信息,请阅读 2017 年夏季发行说明和 Lightning 安全性 Lightning Web 组件开发人员指南中的储物柜。

闪电组件中的转义不足

捆绑包中的每个组件都负责清理提供给它的输入 父组件、应用或 URL 参数。

单个组件的安全边界是组件捆绑包。中的每个组件 捆绑包负责清理父组件、应用程序、 或在 URL 参数中。假定公共或全局组件属性包含 攻击者控制的输入,除非被处理程序中的组件清理。onInit

未能清理输入可能会导致跨站点脚本 (XSS) 或 URL 重定向 攻击。

光环示例

在此 Aura 代码中,组件从全局属性中读取数据,然后将其呈现给 文档对象模型 (DOM) 没有充分转义。一个参数具有标签,该标签可被利用。黑客 或者恶意软件可以将 HTML 或 JavaScript 注入视图并触发跨站点脚本 (XSS) 攻击。

unescapedHTML

<aura:component controller="name_NewsController" access="global" extends="c:name_Name" implements="force:appHostable,flexipage:availableForAllPageTypes,forceCommunity:availableForAllPageTypes">
   <aura:handler name="baseReady" event="c:name_Name" action="{!c.doInit}"/>
   ...
   <aura:attribute name="newsDetails" type="String" default="" access="global"/>
   ...
   <div class="slds-col_padded slds-size_1-of-1 textDetail">
      <div class="slds-text-longform">
         <aura:unescapedHtml aura:Id="newsDetail" value="{!v.newsDetails}"/>
       </div>
   </div>
   ...
</aura:component>

此 Aura 组件代码是安全的,因为它不使用 .

unescapedHTML

<aura:component controller="name_NewsController" access="global" extends="c:name_Name" implements="force:appHostable,flexipage:availableForAllPageTypes,forceCommunity:availableForAllPageTypes">
   <aura:handler name="baseReady" event="c:name_Name" action="{!c.doInit}"/>
   ...
   <aura:attribute name="newsDetails" type="String" default="" access="global"/>
   ...
   <div class="slds-col_padded slds-size_1-of-1 textDetail">
      <div class="slds-text-longform">
         <aura:Id="newsDetail" value="{!v.newsDetails}"/>
       </div>
   </div>
   ...
</aura:component>

有关详细信息,请参阅“安全编码”中的“闪电安全” 指导。

组件中的异步代码

黑客可以操纵异步代码的时序来产生恶意结果。自 保留当前执行上下文,将异步函数调用或批处理操作包装到 单个请求。

当您使用异步函数(如 和)引用 组件,则退出框架的生命周期。如果在用户中的其他位置导航 接口 在执行异步代码时,框架会取消渲染并销毁 发出异步请求的组件。您仍然可以对此进行引用 组件,但它不再有效。黑客以有害的方式利用此漏洞,用于 例如,使应用崩溃。setTimeout()setInterval()

若要安全地重新进入框架,请将代码包装在函数中。然后,为了确保组件仍然有效, 在执行之前使用函数 回调中的任何内容。或者,使用 将多个操作批处理到一个请求中。$A.getCallback()component.isValid()enqueueAction()

注意

此漏洞不适用于针对 Summer ’17 版本创建的组件 (API v40.0) 或更高版本。

这些示例描述了安全违规以及如何解决它。

光环示例

该函数使您可以访问 文档对象模型 (DOM)。但是,访问 DOM 是在 Lightning 框架之外的上下文中发生的。有 无法保证父组件的状态 – 该函数可能没有 父组件。如果状态发生更改,回调函数可以对其数据执行操作 不拥有,或者它可以等待从未显示的数据。在这些情况下,应用会引发 一条错误消息,该消息将停止整个 Salesforce 页面,并且组件停止响应。

setInterval()setInterval()

vars.Timer = setInterval(function(){ helper.action(component); },1);

使用 getCallback() 示例修改的代码

若要安全地重新进入框架,请将代码包装在函数中。然后,为了确保组件仍然有效, 在执行之前使用函数 回调中的任何内容。$A.getCallback()component.isValid()

用于包装访问 正常重新渲染生命周期之外的组件,例如在 OR 调用中。 保留当前执行上下文,并授予对 异步代码。否则,框架将失去上下文,只允许访问全局 资源。$A.getCallback()setTimeout()setInterval()$A.getCallback()

window.setTimeout(
   $A.getCallback(function() {
      if(cmp.isValid()){ 
         cmp.set("v.visible", true); 
      }
   }), 5000
);

使用 enqueueAction() 示例修改后的代码

或者,使用 ,这会添加 服务器端控制器操作添加到要执行的操作队列中。而不是发送 对于每个单独的操作,框架分别请求处理事件链和 将队列中的操作批处理为一个请求。这些操作是异步的,并且具有 回调。enqueueAction()

var action = component.get(“c.usually_a_server_side_controller”);
action.setCallback(this, function()(response) {...});
$A.enqueueAction(action2);

要了解更多信息,请查看我们的安全客户端开发 模块。

安全通信

确保解决方案只能通过安全连接(如 SFTP)访问 和 HTTPS。避免使用 HTTP 和 FTP,因为这些协议不会对 通过 Internet 流动。

发送和接收文件传输时使用 SSH 文件传输协议 (SFTP)。SFTP 使用 加密算法可安全移动文件并提供比 FTP的。

使用安全超文本传输协议 (HTTPS) 在 Web 浏览器和 网站。在 HTTPS 中,通信使用传输层安全性 (TLS) 进行加密,该 保护传输中的数据。使用安全版本的 TLS,禁用弱密码,生成 长键,并将使用 HTTP 的传入请求重定向到 HTTPS。

要防止中间人降级攻击,请使用 HTTP 严格传输安全 (HSTS)。 在这些攻击中,黑客拦截通信并从 HTTPS 重定向访问者 将资源的版本复制到 HTTP 副本。

若要了解详细信息,请参阅安全编码 安全 通信。

保护您的 B2C 商务解决方案

AppExchange 上列出的所有 B2C Commerce Cartridge 和 Headless 集成都必须遵守 满足这些要求。

加密、加密和秘密存储

使用强大的加密方案保护静态数据,并保护加密密钥。

请参阅加密和 密码学和秘密 存储。

身份验证和授权

在处理带有特权操作的请求之前,请对 请求。此外,在读取或写入机密信息时强制执行身份验证和授权 Order、Customer 和 PaymentInstrument 等对象。

请参阅身份验证和 授权。

Open Commerce API (OCAPI) 和 Salesforce Commerce API (SCAPI) 设置

遵循 OCAPI 和 SCAPI 权限的最小特权原则。为用户提供 执行任务所需的最低权限集。记录权限,以及 与您的客户分享它们。

请参阅 SCAPI 的 OCAPI 设置和授权。

敏感数据存储和日志记录

敏感数据是必须防止未经授权的访问的任何信息。 不同的法规将信息归类为敏感数据,可能包括付款 仪器、受保护的健康信息、个人身份信息、访问 令牌和加密密钥。记录并向客户披露敏感数据列表 由解决方案存储或处理。编辑 B2C Commerce 日志文件中的敏感数据。

请参阅存储敏感数据。

密码学

使用受支持的加密 API,例如 dw.crypto。不实现 自定义加密。

客户端脚本

从 B2C Commerce 墨盒静态包含和提供所有客户端脚本。避免动态加载 来自内容分发网络 (CDN) 或其他第三方的第三方脚本。

代码注入

不要将任何输入数据解释为脚本。静态包含所有源代码。

用户输入验证

确保用户输入与解决方案所需的数据类型完全相同。全部验证 处理前的用户输入。

请参阅数据验证。

用户输入

在任何上下文中呈现所有用户提供的内容之前,请转义它,包括 HTML 和 JavaScript的。

请参阅模板最佳实践。

跨站点请求伪造 (CSRF)

在所有状态更改控制器中包括 CSRF 保护。

请参阅跨站点请求伪造。

打开重定向

开放重定向用于网络钓鱼攻击,将用户重定向到任何 URL。从不重定向用户 基于不受信任的数据。遵循开放重定向攻击中的做法。

内容安全政策

记录您的内容安全策略并与客户共享(如适用)。

补丁和升级

为了简化修补程序的安装和升级,请指导客户使用单独的磁带盒 尽可能进行自定义。

环境

在设置、管理、 并开发您的 Salesforce B2C Commerce 环境。

保护您的 Tableau Accelerator

AppExchange 上列出的所有 Tableau 加速器都必须遵守这些规定 要求。

允许的功能

在 Accelerator 中仅使用内置的 Tableau 功能。不要使用仪表板 扩展程序、来自 Tableau Exchange 的第三方连接器、外部第一方或第三方连接器 代码或与外部服务器的连接。

链接和 URL 操作

请勿在 Accelerator 中包含 URL 操作或外部链接。

示例数据来源

Tableau 加速器依靠示例数据在用户连接之前填充仪表板 他们自己的数据。您可以自行创建此示例数据,也可以获得使用权和 分发示例数据,以便可以在 Accelerator 中对源进行归因 清单。

去标识化数据

加速器的数据必须经过去标识化处理。它不能包含个人 可识别的信息,例如真实企业或商业实体的名称。你 不希望用户能够从 您的数据集。

数据打包

创建所有示例数据的平面提取,并将其打包为 TWBX 工作簿文件的一部分 为您的加速器。在打包数据之前,请隐藏未使用的字段。不包括直播 查询,甚至对平面文件。不要实现自定义加密。

数据源凭据

验证数据源与基于云的数据的连接,并删除 来自 Accelerator 的基于云的数据源连接。用户必须输入自己的 用于连接到数据的凭据。

AppExchange应用试用管理 – 提供您的试用

学习目标

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

  • 列出部署免费试用版的方法。
  • 说明如何创建注册请求。
  • 描述托管试验的好处。

选择您的Trialforce交付方式

选择Trialforce是因为您想向所有人展示您的最佳作品。您已经花时间创建了身临其境的体验,并将其打包到模板中。现在是时候将它们提供给全世界了。您有三种投放方式。您可以:

  • 将免费试用版放在AppExchange上,潜在客户可以在这里直接下载它。
  • 根据潜在客户的要求提供试用。
  • 设置自定义的Web表单以按需提供托管试验。

AppExchange选项是最简单的方法。另外两个允许您与潜在客户互动。让我们从最简单的开始。

在AppExchange上试用

正如我们所说,这是最简单的选择,但它也是最有限的。例如,您一次只能提供一个Trialforce模板。此外,您会错过“注册请求”,这是一个非常酷的功能,用于捕获有关潜在客户的更多信息。一分钟内会详细介绍。但是,如果您只有一个模板,并且只想在那里进行试用,则此方法可以解决问题。

您可以通过从AppExchange列表中启用Trialforce来进行试用。为此,请将Trialforce模板链接到AppExchange列表。

  1. 登录到Salesforce合作伙伴社区。
  2. 在发布控制台上,点击清单
  3. 找到您的列表,然后单击它。
  4. 在试用标签上,选择提供免费试用组织,然后点击更改模板。  选择在您的清单上提供免费试用组织
  5. 按照屏幕上的提示将试用模板添加到列表中。
  6. 点击保存

现在,当客户访问您的列表时,他们可以选择免费试用安装您的应用程序。
安装在新的免费试用按钮中

我们为在AppExchange上开始试用的潜在客户收集联系信息。我们要求他们同意您的条款和条件以及我们的主订阅协议。提供此信息的每位潜在客户都会收到一封电子邮件,其中包含指向试验组织的链接。如果您使用Trialforce Management Org设置电子邮件品牌,则电子邮件来自您。

如前所述,Trialforce试用组织是一个功能全面的Salesforce组织。潜在客户可以使用您的应用程序,并可以在试用期间内安装他们认为合适的其他应用程序。

另两种方法要求您在进行试验之前从潜在客户那里获取信息。该信息是通过注册请求收集的。

通过注册请求交付试用

如果您有多个模板,或者希望潜在客户在给他们提供试用版之前为您提供更多信息,则“注册申请”可以帮助您运送定制的试用版。

注册请求是用于使用Trialforce模板生成试用版的标准对象。每个注册请求都包含有关潜在客户和相关模板的基本信息。新的 合作伙伴业务机构已安装了“注册请求”功能。如果您的合作伙伴业务组织没有此文件,则可以通过打开支持案例来提出要求。

您可以通过输入新记录来手动创建Signup Request对象,也可以通过Signup Request API自动创建。我们向您展示两种方法。

注意

在使用“注册请求”功能之前,用于创建模板的Trialforce源组织(TSO)必须经过批准才能使用。要获得批准,请 创建一个新的支持案例。

注册请求对象包含有关您的潜在客户的基本信息:其名称,公司,电子邮件和试用用户名。它还标识了用于试用的Trialforce模板。每个注册请求还具有一个历史记录,其中包含有关试用状态和配置的信息。

由于它只是一个普通的旧Salesforce对象,因此您可以创建自定义字段来捕获潜在客户的其他信息。您甚至可以添加适合您业务流程的验证和工作流。

注册请求对象和历史记录

根据要求提供试用

有时,您想与潜在客户进行互动,然后再对其进行试用,使其具备资格,验证其联系信息或就其需求进行采访。

如果您想与潜在客户谈谈,然后再进行试用:

  1. 登录到Salesforce合作伙伴社区。
  2. 在发布控制台上,点击清单
  3. 点击您的列表。
  4. 点击应用,然后在“客户应如何安装您的应用”下,选择他们应与我们联系以进行安装。  列表页面:根据要求提供试用的设置

潜在客户会在您的AppExchange列表中看到免费试用版的链接。当他们单击它时,会看到提示您提供联系信息的提示,然后您会通过电子邮件收到这些信息。您可以联系他们讨论他们的需求或验证他们的信息。然后,您可以通过添加注册请求记录为他们创建试用版。

进行新的注册请求记录:

  1. 在Salesforce Classic中,点击注册请求
  2. 点击新建
  3. 选择潜在客户的公司,或者,如果未在列表中看到,请输入名称。
  4. 填写潜在客户的名字和姓氏。
  5. 选择一个在Salesforce中唯一的用户名,因为很难知道潜在客户的电子邮件地址是否已在另一个组织中使用。与所有Salesforce用户名一样,它必须采用有效的电子邮件格式。例如,如果您的潜在客户的名称是Pat Jones,而您的公司名称是AcmeApps,请使用Pat_Jones@AcmeApps.Demo.Org。如果选择的名称存在于Salesforce中的其他位置,则会在“注册请求”历史记录中看到错误。  注册申请表,按请求填写
  6. 选择一个用于您的试用版的模板。您创建的每个模板都有一个唯一的ID。您可以在Trialforce Source Org(TSO)中找到模板的ID。
    1. 在单独的浏览器窗口或标签中,登录到您的TSO。
    2. 在设置中,在快速查找框中输入Trialforce,然后选择Trialforce模板。  从Trialforce模板页面复制模板ID
    3. 现在,将要使用的模板的ID复制到另一个窗口的“注册请求”对话框的“模板”字段中。

如果您需要做一些特殊的事情来配置Trialforce组织,然后再让潜在客户看到,请选择“禁止注册电子邮件”。这样可以防止Trialforce自动发送电子邮件,并在设置完毕后让您与潜在客户联系。

由于它可以为您提供很多控制,因此这种方法是为内部用户创建演示组织的好方法。您也可以将其用作对外销售的一部分,为潜在客户提供未经请求的试用。

响应每一次免费试用的请求都会给您很多控制权,但这也需要您花费大量时间。如果您有很多客户,请谨慎使用此方法,并确保迅速跟进他们的要求。

按需托管试验

如果您既要自定义又要自动化,请提供托管试用。您可以从自己的网站部署此试用版:

  1. 登录到Salesforce合作伙伴社区。
  2. 在发布页面上,单击清单
  3. 点击您的列表。
  4. 点击应用,然后在“客户应如何安装您的应用”下,选择来自您的网站
  5. 提供您的网站的URL。
  6. 点击保存

然后,您在自己的站点上提供一个Web表单。准客户填写此表格以请求免费试用。该请求使用API调用生成“注册请求”记录 。该记录为该潜在客户创建了一个试用版。有关参数和错误代码的列表,请参阅 注册请求对象开发人员文档。

要创建Web表单,可以使用传统的HTML表单:您可以创建一个选择列表,显示与模板ID对应的用户友好模板名称。这使您的潜在客户可以选择自己的经历。

构建表单时,请包括指向Salesforce主订购协议的链接 和供潜在客户接受其条款的复选框。

您也可以在表单中添加自定义字段以收集更多信息,但要保持简单-毕竟,您希望您的潜在客户将其保留到最后!您的Web表单必须与“注册请求”对象具有相同的字段,因此请确保它们匹配。

如果您对按需设置托管试验存有疑问,请参阅我们的博客文章,分为两部分,以获取详细指导和示例代码。

  • 注册申请:让您的客户轻松进行试用-第1部分
  • 注册申请:让您的客户轻松进行试用-第2部分

将您的产品放在那里

让我们回顾一下Salesforce为您提供的将潜在客户转变为付费客户的工具:

  • 可安装的试用版:产品试用版,直接放在客户现有的组织中,这是让您的应用自行销售的好方法
  • 测试驱动器:在您自己的组织中启动简单的免费试用版的最简单方法,只要您可以销售产品而无需潜在客户操纵数据
  • Trialforce:一个成熟的框架,可为您的客户量身打造沉浸式体验。销售团队喜欢它!

您从审判中获得的收益取决于您投入的审判。您计划如何在免费试用中展示产品的方式越多,您从该试用中获得的客户就越多。我们提供执行计划所需的工具。

让我们向大家展示为什么他们需要您提供的产品!

AppExchange应用试用管理 – 提供您的试用

学习目标

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

  • 列出部署免费试用版的方法。
  • 说明如何创建注册请求。
  • 描述托管试验的好处。

选择您的Trialforce交付方式

选择Trialforce是因为您想向所有人展示您的最佳作品。您已经花时间创建了身临其境的体验,并将其打包到模板中。现在是时候将它们提供给全世界了。您有三种投放方式。您可以:

  • 将免费试用版放在AppExchange上,潜在客户可以在这里直接下载它。
  • 根据潜在客户的要求提供试用。
  • 设置自定义的Web表单以按需提供托管试验。

AppExchange选项是最简单的方法。另外两个允许您与潜在客户互动。让我们从最简单的开始。

在AppExchange上试用

正如我们所说,这是最简单的选择,但它也是最有限的。例如,您一次只能提供一个Trialforce模板。此外,您会错过“注册请求”,这是一个非常酷的功能,用于捕获有关潜在客户的更多信息。一分钟内会详细介绍。但是,如果您只有一个模板,并且只想在那里进行试用,则此方法可以解决问题。

您可以通过从AppExchange列表中启用Trialforce来进行试用。为此,请将Trialforce模板链接到AppExchange列表。

  1. 登录到Salesforce合作伙伴社区。
  2. 在发布控制台上,点击清单
  3. 找到您的列表,然后单击它。
  4. 在试用标签上,选择提供免费试用组织,然后点击更改模板。  选择在您的清单上提供免费试用组织
  5. 按照屏幕上的提示将试用模板添加到列表中。
  6. 点击保存

现在,当客户访问您的列表时,他们可以选择免费试用安装您的应用程序。
安装在新的免费试用按钮中

我们为在AppExchange上开始试用的潜在客户收集联系信息。我们要求他们同意您的条款和条件以及我们的主订阅协议。提供此信息的每位潜在客户都会收到一封电子邮件,其中包含指向试验组织的链接。如果您使用Trialforce Management Org设置电子邮件品牌,则电子邮件来自您。

如前所述,Trialforce试用组织是一个功能全面的Salesforce组织。潜在客户可以使用您的应用程序,并可以在试用期间内安装他们认为合适的其他应用程序。

另两种方法要求您在进行试验之前从潜在客户那里获取信息。该信息是通过注册请求收集的。

通过注册请求交付试用

如果您有多个模板,或者希望潜在客户在给他们提供试用版之前为您提供更多信息,则“注册申请”可以帮助您运送定制的试用版。

注册请求是用于使用Trialforce模板生成试用版的标准对象。每个注册请求都包含有关潜在客户和相关模板的基本信息。新的 合作伙伴业务机构已安装了“注册请求”功能。如果您的合作伙伴业务组织没有此文件,则可以通过打开支持案例来提出要求。

您可以通过输入新记录来手动创建Signup Request对象,也可以通过Signup Request API自动创建。我们向您展示两种方法。

注意

在使用“注册请求”功能之前,用于创建模板的Trialforce源组织(TSO)必须经过批准才能使用。要获得批准,请 创建一个新的支持案例。

注册请求对象包含有关您的潜在客户的基本信息:其名称,公司,电子邮件和试用用户名。它还标识了用于试用的Trialforce模板。每个注册请求还具有一个历史记录,其中包含有关试用状态和配置的信息。

由于它只是一个普通的旧Salesforce对象,因此您可以创建自定义字段来捕获潜在客户的其他信息。您甚至可以添加适合您业务流程的验证和工作流。

注册请求对象和历史记录

根据要求提供试用

有时,您想与潜在客户进行互动,然后再对其进行试用,使其具备资格,验证其联系信息或就其需求进行采访。

如果您想与潜在客户谈谈,然后再进行试用:

  1. 登录到Salesforce合作伙伴社区。
  2. 在发布控制台上,点击清单
  3. 点击您的列表。
  4. 点击应用,然后在“客户应如何安装您的应用”下,选择他们应与我们联系以进行安装。  列表页面:根据要求提供试用的设置

潜在客户会在您的AppExchange列表中看到免费试用版的链接。当他们单击它时,会看到提示您提供联系信息的提示,然后您会通过电子邮件收到这些信息。您可以联系他们讨论他们的需求或验证他们的信息。然后,您可以通过添加注册请求记录为他们创建试用版。

进行新的注册请求记录:

  1. 在Salesforce Classic中,点击注册请求
  2. 点击新建
  3. 选择潜在客户的公司,或者,如果未在列表中看到,请输入名称。
  4. 填写潜在客户的名字和姓氏。
  5. 选择一个在Salesforce中唯一的用户名,因为很难知道潜在客户的电子邮件地址是否已在另一个组织中使用。与所有Salesforce用户名一样,它必须采用有效的电子邮件格式。例如,如果您的潜在客户的名称是Pat Jones,而您的公司名称是AcmeApps,请使用Pat_Jones@AcmeApps.Demo.Org。如果选择的名称存在于Salesforce中的其他位置,则会在“注册请求”历史记录中看到错误。  注册申请表,按请求填写
  6. 选择一个用于您的试用版的模板。您创建的每个模板都有一个唯一的ID。您可以在Trialforce Source Org(TSO)中找到模板的ID。
    1. 在单独的浏览器窗口或标签中,登录到您的TSO。
    2. 在设置中,在快速查找框中输入Trialforce,然后选择Trialforce模板。  从Trialforce模板页面复制模板ID
    3. 现在,将要使用的模板的ID复制到另一个窗口的“注册请求”对话框的“模板”字段中。

如果您需要做一些特殊的事情来配置Trialforce组织,然后再让潜在客户看到,请选择“禁止注册电子邮件”。这样可以防止Trialforce自动发送电子邮件,并在设置完毕后让您与潜在客户联系。

由于它可以为您提供很多控制,因此这种方法是为内部用户创建演示组织的好方法。您也可以将其用作对外销售的一部分,为潜在客户提供未经请求的试用。

响应每一次免费试用的请求都会给您很多控制权,但这也需要您花费大量时间。如果您有很多客户,请谨慎使用此方法,并确保迅速跟进他们的要求。

按需托管试验

如果您既要自定义又要自动化,请提供托管试用。您可以从自己的网站部署此试用版:

  1. 登录到Salesforce合作伙伴社区。
  2. 在发布页面上,单击清单
  3. 点击您的列表。
  4. 点击应用,然后在“客户应如何安装您的应用”下,选择来自您的网站
  5. 提供您的网站的URL。
  6. 点击保存

然后,您在自己的站点上提供一个Web表单。准客户填写此表格以请求免费试用。该请求使用API调用生成“注册请求”记录 。该记录为该潜在客户创建了一个试用版。有关参数和错误代码的列表,请参阅 注册请求对象开发人员文档。

要创建Web表单,可以使用传统的HTML表单:您可以创建一个选择列表,显示与模板ID对应的用户友好模板名称。这使您的潜在客户可以选择自己的经历。

构建表单时,请包括指向Salesforce主订购协议的链接 和供潜在客户接受其条款的复选框。

您也可以在表单中添加自定义字段以收集更多信息,但要保持简单-毕竟,您希望您的潜在客户将其保留到最后!您的Web表单必须与“注册请求”对象具有相同的字段,因此请确保它们匹配。

如果您对按需设置托管试验存有疑问,请参阅我们的博客文章,分为两部分,以获取详细指导和示例代码。

  • 注册申请:让您的客户轻松进行试用-第1部分
  • 注册申请:让您的客户轻松进行试用-第2部分

将您的产品放在那里

让我们回顾一下Salesforce为您提供的将潜在客户转变为付费客户的工具:

  • 可安装的试用版:产品试用版,直接放在客户现有的组织中,这是让您的应用自行销售的好方法
  • 测试驱动器:在您自己的组织中启动简单的免费试用版的最简单方法,只要您可以销售产品而无需潜在客户操纵数据
  • Trialforce:一个成熟的框架,可为您的客户量身打造沉浸式体验。销售团队喜欢它!

您从审判中获得的收益取决于您投入的审判。您计划如何在免费试用中展示产品的方式越多,您从该试用中获得的客户就越多。我们提供执行计划所需的工具。

让我们向大家展示为什么他们需要您提供的产品!

AppExchange应用试用管理 – 设计您的客户体验

学习目标

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

  • 解释Trialforce模板的目的。
  • 描述可以在Trialforce模板中自定义的内容。
  • 讨论创建样本数据的策略。

想想你想讲的故事

如果您使用的是可安装的试用版,那么很容易激发人们购买您的产品-他们下载它来尝试对自己的数据进行特定的处理。只要您的用户体验持续存在并且您的应用程序能够正常工作,那么您的状态就很好。

试驾和Trialforce需要更多的投入,因为它们在单独的环境中提供了自己的数据。如果您使用的是其中之一,请提出一个可以吸引您的潜在客户并说明他们为什么需要您的产品的故事。更好的故事可以带来更高的销量。

在这里,我们讨论了为Trialforce创建体验的方法,但是您可以使用相同的方法为Test Drive组织创建数据。请记住,您的潜在客户无法更改您的“测试驱动器”中的任何数据。

用模板讲故事

当您确定希望客户如何体验您的产品时,您将创建一个代表该体验的模板。模板是一组配置数据和示例数据,可在Trialforce组织中实施您的故事。模板用于创建试用组织,以便您的客户和潜在客户无需先购买应用即可看到他们想要的内容。

您如何创建Trialforce模板?实际上,模板只是Trialforce Source Org(TSO)及其内容的快照。要设置模板,请将您的应用安装到TSO中并添加示例数据。您还可以根据需要调整配置。例如,将应用设置为非管理员配置文件的默认设置。

构建模板时,请考虑您的理想客户并为其专门创建体验。您想给他们看什么?他们必须看到特定的功能吗?什么样的数据可以为您的产品讲出最好的故事?通过示例数据创建沉浸式体验,这些示例数据与您的理想客户所使用的数据相似。

示例:项目管理

Emily是她的公司MultiProjects(一家工程公司)的管理员。她需要创建,跟踪和管理公司的各个正在进行的项目,并在AppExchange上搜索解决方案。她的搜索结果显示了Milestones Project Management应用程序。她没有Salesforce组织,因此她从应用列表中请求一个试用组织。几秒钟后,Emily收到了一个全新的组织,其中安装了Milestones的试用版。

创建密码并登录到组织后,Emily发现该组织具有一些入门数据,并带有示例项目(1),任务和里程碑。她看到了每个项目的详细信息,相关的任务以及项目进度的直观表示(2)。

Milestones项目管理应用程序的概述屏幕

当Emily单击该应用程序时,她会注意到该应用程序中每个自定义对象和字段的记录。生成此模板的Milestones开发人员为每个标准和自定义对象创建了示例数据,因此Emily了解如何使用它。

使用样本数据,她可以轻松地检查项目信息,例如未完成的任务,时间预算和费用预算。

里程碑应用程序中“概览”屏幕上的状态

她还发现了甘特图功能,该功能说明了项目的里程碑,这是她正在特别寻找的东西之一!

里程碑甘特图

Milestones Project Management应用程序还提供了一个名为Milestone的“打开任务”的示例报告,其中显示了正在进行的工作。

Milestones应用程序中的“打开任务”屏幕

艾米丽印象深刻。没有示例数据,她将无法查看正在运行的应用程序。但是由于该Salesforce合作伙伴使用Trialforce提供了良好的数据,因此Emily拥有丰富的经验,因此决定购买该应用程序。

万事俱备

前面示例中的模板说明了Milestones Project Management应用程序如何吸引像Emily这样的管理员。该示例中的示例数据是通用的,但是具有更具体的模板,该应用可以吸引具有特定角色或行业的潜在客户。

零售客户的样本数据将包括分配给收银员的任务和季节性商店装修的里程碑。与教育相关的模板可能具有用于组织教室,创建教学大纲和计划实地考察的项目和任务。使用客户熟悉的概念可以帮助您与他们建立联系。不要低估使用与潜在客户产生共鸣的术语与潜在客户交流的力量。

这是学校实地考察的示例计划。

Milestones应用程序中的示例实地考察数据

这是课堂教学大纲的计划。

Milestones应用程序中的示例课程提纲

您甚至可以为想要导入自己数据的客户创建没有数据的模板。可以想象您的产品有几个模板。对于每种您想提供的试用版本,创建一个单独的TSO,配置并填充唯一数据。

创建您的模板

要创建Trialforce模板,您需要一个带有示例数据的Trialforce Source Org,并为您的客户配置适当的设置。

创建一个模板

  1. 登录到您的TSO。
  2. 从“设置”中,在“快速查找”框中输入Trialforce,然后选择Trialforce
  3. 单击“新Trialforce模板”
  4. 描述模板并决定是否包括数据。在大多数情况下,默认选项“所有数据和设置”是可以的。
  5. 在“可选功能”下,如果日期是应用程序的重要组成部分,请选择第一个框以调整所有日期,以使它们相对于组织创建日期移动。这样可以防止样本数据过时。新的Trialforce模板屏幕
  6. 点击保存

生成新模板后,您会收到一封包含组织ID的电子邮件。

更新试用源组织时,请确保为其生成一个新模板。这样,您的试用与您最近的更改保持一致。

检查模板的状态

您的每个Trialforce模板的状态均为以下值之一。

  • 进行中-首次创建模板时,它始终具有此状态。这意味着您尚未完成创建。
  • 成功-模板已准备就绪,可用于创建试用组织。
  • 错误-模板出了点问题,您必须先解决一个或多个问题,然后才能使用它。
  • 已删除-您已经删除了模板,无法再使用。删除的模板的状态记录一直存在,直到下一次系统更新为止。

创建或删除模板后,请检查其状态。为此,请在设置菜单中单击Trialforce。您会看到一个包含所有模板的表。它们的状态显示在其创建日期旁边的右栏中。

Trialforce模板创建日期和状态

批准并批准您的模板

要使用Trialforce在AppExchange上提供试用,您的模板必须 通过安全审查。这与针对您的应用的安全审查不同。它可以确保您的模板遵循以下基本规则:

  • 该模板只能包含已通过安全审查的托管软件包。
  • 该模板不能包含非托管代码(Apex或Visualforce页面)。

您可以在模板中包括声明性定制,例如“流程”或“批准流程”。任何不使用Apex,Visualforce或Javascript的东西都可以。

要请求安全审查:

  1. 登录到Salesforce合作伙伴社区并导航到发布控制台。
  2. 将您的TSO连接到您的列表。在“组织”选项卡上,从列表中选择您的TSO,然后单击“连接组织”在清单页面上连接TSO
  3. 导航到“试用模板”选项卡,然后单击“开始审阅”以使用您想要的模板。从试用版模板列表开始审核

启动审阅后,您会收到一封电子邮件确认,审阅完成后,您会收到另一封电子邮件。合作伙伴可以免费进行审核,审核通常需要2至3天。

保持模板最新

创建Trialforce模板后,无法对其进行更新。由于模板只是创建模板时TSO的快照,因此无法对其进行修改。幸运的是,很容易从旧模板创建新模板:只需使用新版本的软件包,数据或配置更新TSO,然后从中创建新模板。

每次创建新版本的应用程序时,将其安装到TSO中并创建一个新模板。否则,从现有模板创建的试用版将不会具有您闪亮的新功能。

使用Trialforce打包其他技术

Trialforce可与其他Salesforce产品(例如社区和Einstein Analytics)配合使用。如果您的应用程序使用它们,则可以设置功能齐全的试用版来展示它们。我们不在此描述这些产品,而是提及它们,以便您在建立客户体验时可以考虑它们。

可能性是无止境。您可以将任何适合Salesforce组织的内容纳入Trialforce提供的体验中。在下一个单元中,我们将向您展示如何与潜在客户分享这种经验。

AppExchange应用试用管理 – 设计您的客户体验

学习目标

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

  • 解释Trialforce模板的目的。
  • 描述可以在Trialforce模板中自定义的内容。
  • 讨论创建样本数据的策略。

想想你想讲的故事

如果您使用的是可安装的试用版,那么很容易激发人们购买您的产品-他们下载它来尝试对自己的数据进行特定的处理。只要您的用户体验持续存在并且您的应用程序能够正常工作,那么您的状态就很好。

试驾和Trialforce需要更多的投入,因为它们在单独的环境中提供了自己的数据。如果您使用的是其中之一,请提出一个可以吸引您的潜在客户并说明他们为什么需要您的产品的故事。更好的故事可以带来更高的销量。

在这里,我们讨论了为Trialforce创建体验的方法,但是您可以使用相同的方法为Test Drive组织创建数据。请记住,您的潜在客户无法更改您的“测试驱动器”中的任何数据。

用模板讲故事

当您确定希望客户如何体验您的产品时,您将创建一个代表该体验的模板。模板是一组配置数据和示例数据,可在Trialforce组织中实施您的故事。模板用于创建试用组织,以便您的客户和潜在客户无需先购买应用即可看到他们想要的内容。

您如何创建Trialforce模板?实际上,模板只是Trialforce Source Org(TSO)及其内容的快照。要设置模板,请将您的应用安装到TSO中并添加示例数据。您还可以根据需要调整配置。例如,将应用设置为非管理员配置文件的默认设置。

构建模板时,请考虑您的理想客户并为其专门创建体验。您想给他们看什么?他们必须看到特定的功能吗?什么样的数据可以为您的产品讲出最好的故事?通过示例数据创建沉浸式体验,这些示例数据与您的理想客户所使用的数据相似。

示例:项目管理

Emily是她的公司MultiProjects(一家工程公司)的管理员。她需要创建,跟踪和管理公司的各个正在进行的项目,并在AppExchange上搜索解决方案。她的搜索结果显示了Milestones Project Management应用程序。她没有Salesforce组织,因此她从应用列表中请求一个试用组织。几秒钟后,Emily收到了一个全新的组织,其中安装了Milestones的试用版。

创建密码并登录到组织后,Emily发现该组织具有一些入门数据,并带有示例项目(1),任务和里程碑。她看到了每个项目的详细信息,相关的任务以及项目进度的直观表示(2)。

Milestones项目管理应用程序的概述屏幕

当Emily单击该应用程序时,她会注意到该应用程序中每个自定义对象和字段的记录。生成此模板的Milestones开发人员为每个标准和自定义对象创建了示例数据,因此Emily了解如何使用它。

使用样本数据,她可以轻松地检查项目信息,例如未完成的任务,时间预算和费用预算。

里程碑应用程序中“概览”屏幕上的状态

她还发现了甘特图功能,该功能说明了项目的里程碑,这是她正在特别寻找的东西之一!

里程碑甘特图

Milestones Project Management应用程序还提供了一个名为Milestone的“打开任务”的示例报告,其中显示了正在进行的工作。

Milestones应用程序中的“打开任务”屏幕

艾米丽印象深刻。没有示例数据,她将无法查看正在运行的应用程序。但是由于该Salesforce合作伙伴使用Trialforce提供了良好的数据,因此Emily拥有丰富的经验,因此决定购买该应用程序。

万事俱备

前面示例中的模板说明了Milestones Project Management应用程序如何吸引像Emily这样的管理员。该示例中的示例数据是通用的,但是具有更具体的模板,该应用可以吸引具有特定角色或行业的潜在客户。

零售客户的样本数据将包括分配给收银员的任务和季节性商店装修的里程碑。与教育相关的模板可能具有用于组织教室,创建教学大纲和计划实地考察的项目和任务。使用客户熟悉的概念可以帮助您与他们建立联系。不要低估使用与潜在客户产生共鸣的术语与潜在客户交流的力量。

这是学校实地考察的示例计划。

Milestones应用程序中的示例实地考察数据

这是课堂教学大纲的计划。

Milestones应用程序中的示例课程提纲

您甚至可以为想要导入自己数据的客户创建没有数据的模板。可以想象您的产品有几个模板。对于每种您想提供的试用版本,创建一个单独的TSO,配置并填充唯一数据。

创建您的模板

要创建Trialforce模板,您需要一个带有示例数据的Trialforce Source Org,并为您的客户配置适当的设置。

创建一个模板

  1. 登录到您的TSO。
  2. 从“设置”中,在“快速查找”框中输入Trialforce,然后选择Trialforce
  3. 单击“新Trialforce模板”
  4. 描述模板并决定是否包括数据。在大多数情况下,默认选项“所有数据和设置”是可以的。
  5. 在“可选功能”下,如果日期是应用程序的重要组成部分,请选择第一个框以调整所有日期,以使它们相对于组织创建日期移动。这样可以防止样本数据过时。新的Trialforce模板屏幕
  6. 点击保存

生成新模板后,您会收到一封包含组织ID的电子邮件。

更新试用源组织时,请确保为其生成一个新模板。这样,您的试用与您最近的更改保持一致。

检查模板的状态

您的每个Trialforce模板的状态均为以下值之一。

  • 进行中-首次创建模板时,它始终具有此状态。这意味着您尚未完成创建。
  • 成功-模板已准备就绪,可用于创建试用组织。
  • 错误-模板出了点问题,您必须先解决一个或多个问题,然后才能使用它。
  • 已删除-您已经删除了模板,无法再使用。删除的模板的状态记录一直存在,直到下一次系统更新为止。

创建或删除模板后,请检查其状态。为此,请在设置菜单中单击Trialforce。您会看到一个包含所有模板的表。它们的状态显示在其创建日期旁边的右栏中。

Trialforce模板创建日期和状态

批准并批准您的模板

要使用Trialforce在AppExchange上提供试用,您的模板必须 通过安全审查。这与针对您的应用的安全审查不同。它可以确保您的模板遵循以下基本规则:

  • 该模板只能包含已通过安全审查的托管软件包。
  • 该模板不能包含非托管代码(Apex或Visualforce页面)。

您可以在模板中包括声明性定制,例如“流程”或“批准流程”。任何不使用Apex,Visualforce或Javascript的东西都可以。

要请求安全审查:

  1. 登录到Salesforce合作伙伴社区并导航到发布控制台。
  2. 将您的TSO连接到您的列表。在“组织”选项卡上,从列表中选择您的TSO,然后单击“连接组织”在清单页面上连接TSO
  3. 导航到“试用模板”选项卡,然后单击“开始审阅”以使用您想要的模板。从试用版模板列表开始审核

启动审阅后,您会收到一封电子邮件确认,审阅完成后,您会收到另一封电子邮件。合作伙伴可以免费进行审核,审核通常需要2至3天。

保持模板最新

创建Trialforce模板后,无法对其进行更新。由于模板只是创建模板时TSO的快照,因此无法对其进行修改。幸运的是,很容易从旧模板创建新模板:只需使用新版本的软件包,数据或配置更新TSO,然后从中创建新模板。

每次创建新版本的应用程序时,将其安装到TSO中并创建一个新模板。否则,从现有模板创建的试用版将不会具有您闪亮的新功能。

使用Trialforce打包其他技术

Trialforce可与其他Salesforce产品(例如社区和Einstein Analytics)配合使用。如果您的应用程序使用它们,则可以设置功能齐全的试用版来展示它们。我们不在此描述这些产品,而是提及它们,以便您在建立客户体验时可以考虑它们。

可能性是无止境。您可以将任何适合Salesforce组织的内容纳入Trialforce提供的体验中。在下一个单元中,我们将向您展示如何与潜在客户分享这种经验。

AppExchange应用试用管理 – 准备好您的组织

学习目标

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

  • 说明如何设置测试驱动器。
  • 列出Trialforce设置中涉及的组织类型。
  • 描述为Trialforce设置配置组织的过程。

使用“志愿者追踪器”应用探索免费试用版

让我们研究Salesforce提供的不同类型的免费试用。假设我们有一个名为Volunteer Tracker的出色产品,它的名称恰如其名:它可以跟踪组织的志愿者。让我们看看我们可以为潜在客户创造什么样的体验。我们将为我们的应用程序部署各种类型的试用版:可安装的试用版,试用版和Trialforce试用版。

首先要做的事:设置许可

前面我们提到,许可证使试用版和完整版应用程序完全不同。设置试用版之前,必须将其与许可证关联。通过将应用程序的托管程序包与许可证管理组织(LMO)链接来执行此操作。LMO是您安装许可证管理应用程序(LMA)的组织。您既需要LMO又需要LMA才能从潜在客户中获取潜在客户。

  1. 在Salesforce合作伙伴社区的“发布”选项卡中,单击“包”
  2. 查找该应用程序的软件包。在我们的情况下,这是志愿者追踪器应用程序。单击管理许可证
  3. 点击注册
  4. 输入您的LMO的登录凭据,然后单击Submit
  5. 为您的默认许可证选择一个免费试用版。
  6. 输入试用许可证的期限(天)。如果需要,您甚至可以选择许可证不过期
  7. 输入许可证的席位数,或选择“站点范围内的许可证”以将许可证提供给潜在客户组织的所有用户。
  8. 点击保存

现在转到您应用的列表页面,以设置潜在客户跟踪:

  1. 在发布标签中,点击列表
  2. 点击您应用的列表,然后点击潜在客户
  3. 客户与该列表互动时,选择收集潜在客户。   用于设置线索收集的屏幕

现在,我们的审判将使我们受益匪浅!让我们进行试验。

将Volunteer Tracker安装到现有组织中

将我们的应用程序安装到客户的组织中很简单。从Salesforce合作伙伴社区中的发布控制台开始。

  1. 在发布控制台中,单击“列表”选项卡。
  2. 点击您的产品列表。
  3. 点击应用
  4. 在“客户应如何安装您的应用程序?”下 选择最适合您的业务案例的选项。对于可安装的试用版,通常最好是直接从AppExchange安装。我们稍后将讨论其他选项。    您的清单以及安装选项
  5. 点击试用
  6. 在“提供试用安装”下,许可证管理应用程序(LMA)许可证反映了在将托管软件包与许可证管理组织链接时选择的设置。    您商家信息的试用设置
  7. 点击保存

而已。如果选择了“直接从AppExchange直接安装”安装选项,则客户会在AppExchange列表中看到绿色的“立即获取”按钮。单击立即获取,将引导客户通过向导来选择是将应用程序安装到生产组织还是沙箱组织中。

立即获取按钮和应用程序向导

该应用程序已安装到组织中,客户可以使用自己的数据进行试用。十分简单。

参加志愿者追踪器进行试驾

试用Test Drive是向不使用Salesforce的客户显示Volunteer Tracker的最简单方法。他们从其AppExchange列表中启动该应用程序的测试驱动器。

Test Drive位于自己的组织中,使用它的每个客户都以评估用户身份登录。客户无法更改组织中的任何数据,并且不需要密码。多个客户可以同时使用一个测试驱动器-因为没有人可以更改数据,所以没有干扰的风险。

在创建测试驱动器之前,请确保已将应用程序的托管程序包链接到列表。我们将在《ISVforce指南》中说明如何执行此 操作。

创建一个试驾组织

从Salesforce合作伙伴社区中的发布控制台开始。

  1. 在发布控制台中,单击“列表”选项卡。
  2. 单击您的产品列表。
  3. 点击试用
  4. 单击创建测试驱动器。    为您的列表创建一个测试驱动器
  5. 向导弹出。为Test Drive提供一个简单的描述性名称,并将其与应用程序托管软件包的正确版本相关联。然后点击提交。   测试驱动器组织创建弹出窗口

Salesforce为试驾创建一个Developer Edition组织。该组织有两个用户:管理员和评估用户。Salesforce向每个用户发送一封电子邮件。收到电子邮件后,就可以配置组织了。

配置测试驱动器单位

从您的电子邮件开始。

  1. 打开管理员用户的“欢迎使用Salesforce:验证您的帐户”电子邮件,然后点击验证帐户。    试用版帐户验证向导
  2. 向导将指导您完成更改密码的步骤。
  3. 添加示例数据并配置组织,以便您的应用程序准备就绪。大量的示例数据可帮助您销售产品,我们将在下一个单元中进行讨论。
  4. 打开评估用户的“欢迎使用Salesforce:验证您的帐户”电子邮件,然后单击“验证帐户(1)”。然后按照说明验证您的帐户并更改密码。
  5. 以评估用户身份(2)登录到Test Drive组织,并确保您可以访问您的应用程序。如果不能,则必须 将此用户分配给托管软件包的许可证。 评估用户的帐户验证向导

Test Drive组织已准备就绪。现在是时候将其链接到您的列表了。

将组织连接到您的清单

从Salesforce合作伙伴社区中的发布控制台开始该过程。

  1. 在发布控制台中,单击“列表”选项卡。
  2. 单击您的产品列表。
  3. 点击试用
  4. 单击“连接组织”
  5. 向导弹出。提供只读用户的用户名和密码,然后单击Submit。用户名中必须包含“ eval”。    连接组织弹出窗口
  6. 点击保存。   清单页面上已配置的测试驱动器

您的客户现在可以试用您的产品。转到您的AppExchange列表,然后单击列表上的“测试驱动器” 进行尝试。

试驾按钮

Trialforce上的志愿者追踪器

Trialforce非常酷。作为我们最灵活的免费试用版,它使您可以为不同类型的潜在客户和客户创建多种不同的体验,并在各自的试用组织中运行每种体验。转换很容易,因为购买您产品的客户才开始将试用组织用作生产组织。

不过,Trialforce并不是魔术。您必须了解一些知识并配置一些组织才能使其正常工作。但是不用担心。我们在这里向您展示如何。

对于您在Trialforce中提供的每种体验,您将创建一个模板,其中包含配置数据和示例数据。当潜在客户开始进行Trialforce试用时,此模板中的数据将部署到试用组织。

这些模板存放在哪里,以及如何将它们部署到试用组织?Trialforce使用几种组织类型管理模板:

  • Trialforce Source Org(TSO)保存模板的配置和示例数据。这是您安装应用程序的地方。您可以根据自己创建的每种体验选择其中一个组织,并完全按照希望潜在客户看到的方式进行配置。您在TSO中创建一个模板,其中包含您的配置和示例数据。
  • 您的环境中心可以为您的试用创建TSO。这是制作TSO的最简单方法。
  • 如果您要为试用版定制商标,则可以使用Trialforce Management Org(TMO)创建和管理TSO 。环境中心无法创建品牌的TSO。

一旦创建了TSO,请打开一个支持案例,以使其批准与Signup Request API一起使用。我们将在后续单元中详细了解Signup Request API的内容。

无论以哪种方式创建TSO,请注意,自2018年10月起,新的TSO将默认为组织启用Lightning Experience。结果,在这些组织中创建的新用户也将默认为Lightning。所有启用了Lightning的用户都可以选择切换为经典。底线:确保您的应用程序可在Lightning中运行。您的应用已 准备就绪,对吗?

我们将向您展示如何在下一个单元中为TSO创建模板。现在,让我们建立这些组织。

直接从环境中心创建Trialforce Source Org

  1. 登录到您的业务组织中已安装的Environment Hub。
  2. 点击创建单位
  3. 对于目的,选择Trialforce
  4. 输入所需信息,然后单击创建

使用Trialforce管理组织创建品牌Trialforce源组织

为了创建品牌的TSO,您需要一个TMO。为此,您需要一个现有的Developer或Partner Developer Edition组织。除用于托管软件包的组织外,它可以是任何组织。如果需要新的组织,则可以从环境中心创建一个。

一旦拥有开发人员组织,就创建一个支持案例以访问TMO。

  1. 在发布控制台中,单击支持(1)。
  2. 单击新建案例(2)。    “支持”选项卡上的“新案例”按钮
  3. 单击Trialforce
  4. 单击创建案例。    在“新案例”页面上选择Trialforce
  5. 从子主题中,选择Trialforce Management Org
  6. 选择严重性级别,输入简短描述,然后单击Submit Case

启用TMO后,创建源组织。您必须是Classic才能做到这一点。

  1. 在“经典”中,转到“设置”菜单。
  2. 在快速查找框中输入
  3. 点击新建,然后输入并保存所需信息。 “源组织”页面的视图

无论您如何创建它,对于您创建的每种不同Trialforce体验,都需要一个TSO。

希望所有有关TSO和TMO的话题不是TMI!(太多的信息。)在下一个单元中,我们着重于创建有效的Trialforce体验。

AppExchange应用试用管理 – 决定如何进行审判

学习目标

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

  • 描述合作伙伴可以使用的免费试用类型。
  • 比较这些试验类型的缺点和好处。
  • 评估给定产品的最合适的试验类型。

决定提供哪种审判

在Salesforce,我们希望帮助您创造最佳的客户体验,并且为了帮助您,我们提供了不同的方式来共享您的产品。您的第一步是确定客户的需求。

您的某些潜在客户已经在使用Salesforce,并且可以访问一个或多个组织。如果您想让他们使用他们现有的数据来玩您的产品,他们可以在您的沙盒或生产组织之一中试用安装您的软件包。我们将此称为可安装的试用版

但是,使用现有的客户数据并不总是很有意义。有些潜在客户无法安装应用,甚至根本没有组织。或者,也许您对特定的体验有特定的想法,如果您使用特定的数据,则更容易证明。也许您想使用Wave Analytics或配置的社区,它们需要在自己的组织中运行。我们为您提供了两种使用潜在客户自己的数据进行试验的选项:

  • Test Drive,使潜在客户可以登录到预先配置的组织并使用评估帐户进行环顾。它很容易部署,但是它是只读的:用户不能更改任何数据。
  • Trialforce,它将创建一个包含应用程序的全新试用组织,并使用自定义示例数据填充该应用程序。Trialforce需要更多准备,但是您可以自定义它。

这三种方法(可安装的试用版,Test Drive和Trialforce)让您决定如何将产品投放到潜在客户手中。您可以选择一种方法,也可以根据需要混合和匹配。

让我们仔细看看每种类型的试验。

让您的客户使用自己的数据

对于某些产品而言,可安装的试用版非常容易。如果您是ISVforce合作伙伴,则您的产品将扩展现有的Salesforce功能。他们满足了销售,服务,健康和金融服务云客户的需求。为什么不让这些客户试用显示您的解决方案如何处理其数据的试用版?

让我们看看它是如何工作的。使用Sales Cloud的Alice一直在寻找重复的潜在顾客记录。她前往AppExchange查看是否有人制作了删除这些重复项的应用程序。

您的公司Leed-Dee-Dupe已发布了一个应用程序Leed-Dee-Duper。它可以查找重复项并消除重复项,从而快速,直观地合并潜在客户信息。显然,爱丽丝想要利德迪珀。她只是还不知道。

爱丽丝在笔记本电脑上工作

在AppExchange上搜索“潜在客户重复数据删除”后,爱丽丝发现了几种产品。里德·迪·杜珀(Leed-Dee-Duper)在那儿,但是你怎么让她选择呢?她甚至可能不会考虑无法免费试用的产品。如果您有可安装的试用版,Alice可以立即使用她的数据进行试用。

一点努力就能给人留下深刻的印象

可安装的试用版需要使用实际的客户数据,因此您需要进行的最小化设置。没有要生成或配置的示例数据-该应用程序使用与客户购买完整版本时安装的元数据包相同的软件包。这就好比卖出一栋装有买方家具的房子。

具有潜在客户数据的可安装应用程序屏幕

无论您指定多长时间,试用都会持续-短至24小时或您想要的时间。这些条款取决于您使用的许可证。

如果客户购买您的产品,则试用版将在其组织中转换为完整版本。如果他们决定不购买,则可以卸载您的应用程序或让许可证过期。无论哪种方式,它们的数据都保持不变-当然要减去重复项。

可安装的试用版以最佳状态显示您的产品。如果您的应用以易于通过现有客户数据演示的方式增强了现有组织,请使用可安装的试用版。

您无需成为ISVforce合作伙伴即可使用可安装的试用版。考虑我们的原始设备制造商(OEM)合作伙伴。他们通常向Salesforce以外的客户销售产品,但是当他们与已经是Salesforce客户的潜在客户合作时,他们可以使用可安装的试用版。

使用试驾进行统包试用

Test Drive是向潜在客户演示产品演示的最简单方法,而无需在其组织中安装任何产品。测试驱动器是一个预配置的Developer Edition组织,其中填充了只读示例数据。它是完全独立的,在客户端仅需要Web浏览器。

您为什么要演示无法更改数据的应用程序?通常,只读试用版使您可以避免很多工作。如果您的产品使用复杂的外部服务,则Test Drive消除了在任何地方进行配置的工作—它在自己的组织中运行该服务。

测试驱动器的样本数据

假设您在产品中使用外部记帐系统,并且许可证席位数量有限。该系统与其他外部服务进行交互以跟踪发票,帐户余额等。弄清楚如何将该系统部署到每个潜在客户中,将是一个巨大的难题。部署所有设置的部署Test Drive组织要容易得多。

您为每个AppExchange列表设置了一个Test Drive组织。Test Drive组织有两个用户:管理员和评估用户,他们不能更改任何数据。潜在客户以评估用户身份登录。由于他们无法更改任何内容,因此无法更改其他潜在客户的体验。

如果您可以在不改变潜在客户的情况下展示产品的东西,那么Test Drive是部署独立测试的最简单方法。

与Trialforce交往

有时,可安装的试用版或Test Drive都无法解决问题。对于某些产品,您想为不同的客户提供不同的体验。要使具有定制体验的潜在客户真正眼花azz乱,您需要一个完全交互式的环境。如果您愿意花更多的精力来创建最好的试用版,那么Trialforce是您的最佳选择。

Trialforce中的前景数据

Trialforce让您的每一个潜在客户都可以创建一个现成的组织来托管免费试用版。您可以对其进行设置,以便所有试用组织都相同,也可以为不同的体验定义不同的配置。如果您在零售和医疗保健领域有前景,则Trialforce允许您为他们每个人创造一种体验。您的零售前景可与销售点交易(如库存,销售和促销)的示例数据一起使用。您的医疗保健前景将查看样本患者,程序和保险记录。

想象一下,如果您将销售团队的Trialforce经验提供给演示人员使用,他们将如何做!

两名男子在显示图表的视频屏幕前

您可以通过创建Trialforce模板进行自定义试用。该模板是组织的快照,其中包含您要在此版本的试用版中使用的所有内容。它包含您的样本数据,任何品牌的登录屏幕和电子邮件模板。您可以根据需要创建任意数量的模板,每种模板用于潜在客户:一种模板用于医疗保健客户,另一种模板用于零售,依此类推。

Trialforce与其他试用类型之间的最大区别是您花费在创建示例数据和配置上的精力。Trialforce确实非常灵活-您可以创建一个或多个预配置的体验-而Test Drive只能创建一个版本。但是,如果您没有良好的样本数据,那么这种灵活性不会给您带来任何好处。在本模块的后面,我们将向您展示如何创建引人注目的模板。

轻松转换客户

当客户决定试用您的产品时,Trialforce会创建一个新的组织,并在其中安装试用版及其数据。该组织具有客户用来登录的预先存在的用户ID和密码,他们可以从那里访问和修改该组织的所有数据。

如果潜在客户决定购买,那么Trialforce组织将成为其生产组织,并且可以继续使用它。如果您的客户将自己的数据输入到试用版中,他们将希望保留其试用组织。在这种情况下,请务必提前计划如何删除示例数据。如果潜在客户不想使用他们的试用组织,则您或新转换的潜在客户可以简单地启动另一个试用版并重新开始。

Trialforce可以为您服务

对于向新客户销售的OEM合作伙伴而言,Trialforce非常有意义。这些客户可以使用试用版中的样本数据快速上手。但是在某些情况下,ISVforce合作伙伴也可以从Trialforce中受益:

  • 如果业务用户希望评估您的产品,但无法安装软件包,则Trialforce允许这些用户在自己的组织中在没有管理特权的情况下试用该应用程序。
  • 您可以向现有客户展示与他们使用的工具互补的新产品。
  • 如果您的应用程序需要丰富的数据来展示其出色的功能(也许这是一个项目管理应用程序),则可以使用Trialforce精心制作的甘特图吸引客户。
  • 也许您的产品难以设置。但是,一旦启动并运行,那就太神奇了。让Trialforce进行肮脏的工作。

现在,您对可用的试验种类有了更多的了解,请考虑想给您的潜在客户带来什么样的经验。您可以使用所有这些试验中的任何一个或所有试验,最适合您的策略。如果愿意,您可以根据需要进行任意自定义。

聊够了!让我们进入下一个单元,看看如何设置每种审判。

AppExchange应用试用管理-了解免费试用的优势

学习目标

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

  • 列出提供产品免费试用的优势。
  • 提出一些可以帮助您的产品成功的方法。
  • 确定一些使您的审判更加有效的特定策略。

暂时无所事事

您可能已经听说过“购买前请尝试”的表达。上口?绝对是 陈词滥调?也许。但是没有比不用担心浪费金钱来使用它更好的方法来弄清您是否真正需要东西。

这不是销售中的新主意。在线搜索“免费试用”,您可以在几乎每个市场中找到免费试用的内容。软件的免费试用已经有几十年了。实际上,很难想到没有某种免费试用版的主要软件产品。

您的客户正在寻找解决方案,他们可能有很多选择。如果您认为您的解决方案是最好的解决方案,那么为什么不让人们将其用于试驾呢?

免费试用已内置到我们的平台中

通常,您需要做很多工作才能在软件中构建免费试用机制。在花时间敲定许可条款,试用环境和功能之类的细节时,您可以在实际产品上完成很多工作。

但是您是Salesforce的合作伙伴,这绝非普通人!Salesforce从一开始就为客户提供免费试用。实际上,我们是最早提供完全功能性免费试用的企业软件公司之一。对我们来说效果很好。

因此,AppExchange的构建考虑了免费试用也就不足为奇了。而且由于我们的合作伙伴是使AppExchange成功的人,所以我们会尽力处理所有管理细节,以便您可以在免费试用和实际产品中专注于客户的体验。

向产品添加免费试用版并不像切换开关那样容易(涉及一些计划),但是比自己重新布线要容易得多。如果您使用我们提供的工具进行试用,我们将帮助您将潜在客户转变为付费客户。

全部在许可证中

试用版和完整版应用之间的最大区别是什么?试用版和完整版忽略技术细节,是具有不同许可证的同一软件。试用版将在一段时间后到期,而完整版本仍将保留。

许可证管理应用

您如何控制试用使用的许可证?有一个应用程序: 许可证管理应用程序(LMA)。使用它,您可以将许可证附加到每个应用程序。试用版拥有自己的许可证,因为它们的条款与完整版应用程序不同。LMA管理许可证的详细信息,并记录有关购买产品的潜在客户的信息。

Salesforce提供的试用技术可与LMA无缝协作,以帮助您转变前景。每当有人要求您进行试用时,我们都会自动在您的LMA中记录潜在客户记录。因此,试验确实可以带来销售。

我们不会在这里向您展示如何设置LMA。不过,AppExchange合作伙伴应了解许可在AppExchange上如何工作。在参考资料部分中找到一些有用的链接。

免费试用不仅仅针对客户

客户喜欢免费试用,因为他们至少可以免费使用酷炫的产品。但是免费试用也可以使其他人(甚至您的同事)的生活变得轻松。

演示为两个商人的应用程序的女商人

也许您的销售团队会向各种客户提供产品演示。将几个不同的试用组织与定制的样本数据交给他们,这样他们就可以为他们的客户量身定制演示了,这不是很好吗?

或者,您的培训或文档团队需要预先配置的环境来演示或解释功能。给他们一个不是很好吗?每个版本一个怎么样?每个团队成员的环境如何?

不难想像各种巧妙的方法来使用预配置的组织。

在本模块中,我们向您展示如何创建自定义的免费试用版,如何对其进行专门配置以及如何使用各种数据集填充它们。您会为自己的工作感到惊讶!

不要忘记出售您的产品

给客户免费试用或演示是吸引他们注意力的一种好方法,但是如果您不交付商品,他们的心就会流连忘返。使用您的免费试用版来构建吸引他们的体验。

利用潜在客户找出目标市场的需求,并轻松地让他们了解您的产品如何帮助他们获得产品。如果您与来自特定行业的客户合作,请创建使用示例数据的模型,这些示例数据说明特定于每个行业的任务和工作流。如果他们可能立即开始在工作中使用该产品,请确保购买完整版的产品后可以继续工作。

最重要的是,可以利用试用机会向他们展示使您与竞争对手区分开的地方。展示比讲要好得多。您甚至可以从潜在客户那里获得一些有用的反馈。为他们免费试用可以为您提供免费建议!

现在,让我们了解一下您可以为客户提供哪些类型的试用。

应用许可证(4)为客户而存在

学习目标

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

  • 描述用户登录及其好处。
  • 列出适用于Subscriber Login的限制。
  • 解释交互式调试和你可以使用它的地方。

进入并帮助

客户支持是软件业务的一部分。无论您是否构建了全球所见过的最好的应用程序都无所谓 – 您的客户不时需要帮助。

有时修复很容易。客户通过电子邮件,电话或服务云与您联系,并为您提供足够的信息来解决问题或帮助他们完成任务。

其他时候,这个问题更加微妙,它有助于确切了解客户组织中发生了什么。但是如何?

您可以向您的客户询问截图或视频。如果您拥有合适的软件并且可以协调您的日程安排,您甚至可以设置屏幕共享会话。但是这些方法需要来自客户的时间和精力,而且他们不会让您直接导航客户组织来探索问题。

下一个最好的事情在那里

如果您可以登录到客户的组织,找出问题并直接解决问题,那将更容易。你可以!要求您的客户授予您登录访问权限。它允许您在一段时间内以特定用户的身份登录到组织,客户可以控制该时间段。无需向客户询问用户名和密码,这是一个很大的安全禁忌。

因为您以特定用户身份登录,所以授予登录访问权有时称为LoginAs。

请求登录访问

要请求登录访问:

  1. 请求您的客户导航到他们的个人设置。
  2. 告诉他们点击 Grant Login Access.
  3. 让客户指定访问持续时间,这应该足以让您排除故障并解决问题。
  4. 点击 Save.
    The Grant Account Login Access Page, where your customer grants you access to their org
  5. 如果您的客户没有看到您的公司名称,请确保:
    • 他们的系统管理员为非管理员授予登录访问权限。
    • 客户拥有应用程序包的许可证。
    • 如果软件包已授权给整个组织,具有“管理用户”权限的管理员授予您访问权限。
    • 在组织的设置中,管理员可以以任何用户身份登录被禁用。
  6. 检查您的帐户是否具有登录订户组织权限。您的客户可以直接向您的帐户授予您此权限,也可以通过权限设置授予您此权限。

当您的客户成功授予您登录权限时,您就可以登录其组织:

  1. 导航到许可证管理应用程序(LMA)中的 Subscribers LMA将客户称为订户。
  2. 按名称或组织ID搜索客户的组织。
    The Subscribers Tab in the LMA, which lists orgs for subscribers
  3. 在搜索结果中点击所需的组织记录。订户组织记录页面显示组织的公司信息页面,组织标识及其实例的名称和联系信息。该页面还包含有关组织的限制,登录访问以及软件包和许可的信息。联系信息可能与您对应的LMA销售线索,客户或联系记录中的信息有点不同。
  4. 单击 Log Into Subscriber Console 以连接到组织。
    The org record in the LMA, where you click Log Into Subscriber Console

如果您没有看到 Log Into Subscriber Console 按钮,请将该按钮添加到页面布局。如果您需要对此进行更新,请阅读如何在我们的Lightning Experience Customization模块中自定义记录详细信息和页面布局。

通过限制访问来维持信任

如您所知,信任是Salesforce的重中之重。访问客户的组织意味着可以访问他们的数据,这是组织无法轻松授予的特权。只有可信赖的支持和工程人员才能请求登录访问权限,他们可以高效并谨慎地解决客户组织中的问题。使用“登录订阅者组织”权限来组织您的支持团队,并仅将权限授予需要它的人员。

登录访问如何工作

当您通过登录访问连接到订户组织时,您会得到一些非常酷的工具,以供客户使用。您可以:

  • 查看您的托管软件包代码。而此代码对最终用户是隐藏的。
  • 检查您的应用程序的调试日志。通过这些日志和可见的源代码,您可以构建客户组织中正在发生的事情的图片。
  • 使用ISV客户调试器在运行时检查和调试托管软件包代码。
你可以做什么 通过登录访问 作为客户
登录到用户组织 X X
查看托管软件包代码 X
查看托管软件包调试日志 X
查看和编辑自定义设置中的受保护数据 X
启动一个ISV客户调试器会话 X
授予OAuth访问权限 X
使用双因素认证 X X

调试日志包含可帮助您排除客户问题的调试信息。 要查看用户组织中的调试日志,请执行以下操作:

  1. 从安装程序中,在快速查找框中输入调试日志。
  2. 选择 Debug Logs.
  3. 在列表视图中查看调试日志。

日志和源代码非常好,它们可以满足客户的需求并将它们发送出去。但是如果你需要深入挖掘,我们已经涵盖了你。

在您的调用堆栈中查找针

让我们面对它 – 有时您需要观察应用程序中发生的情况以了解问题。这是调试器的用途。如果您使用调试器来查找代码中的错误,那么您知道它们是多么的方便。我们已经为您提供了一个用于调试订户组织的工具。

如果您之前没有使用过调试器,那么您需要一种享受:您可以在程序运行时正确检查数据!

ISV客户调试器是Eclipse集成开发环境的免费Lightning Platform插件。这是Salesforce Apex调试器的一种变体。

The ISV Customer Debugger, where you can follow the execution of your app’s logic in your customer’s org

这个调试器可以完成您希望调试器执行的所有任务。

也就是说,调试器有一些限制:

  • 一次只能打开一个调试会话,这意味着您一次只能调试一个客户。如果您需要同时进行多个调试会话,请联系您的合作伙伴客户经理以获取选项。
  • 调试器只能连接到沙箱组织。换句话说,你不能交互式地调试生产组织。如果客户识别生产组织中的问题,请创建沙盒组织并填写数据以重现错误。完整的沙箱提供您可以进入生产环境的最接近的体验。
  • 一次最多可以调试两个执行线程。
  • 一小时不活动后,调试会话超时。
  • 调试会话可以持续不超过4小时,而不管活动。

开始一个调试会话

要开始调试会话,请按照下列步骤操作:

  1. 按照上述步骤,让客户授予登录访问权限。
  2. 从安装程序中,在快速查找框中输入沙箱。
  3. 点击沙盒旁边的 Login ,以便正确调试问题。
  4. 如果您需要创建新的沙箱,请查看我们的更改管理模块以进行更新。
  5. 进入沙盒设置后,在快速查找框中输入Apex Debugger。
  6. 单击 Start Partner Debugging Session.
  7. 将图标拖到Force.com IDE窗口中以启动会话。
  8. 开始调试!

建立客户满意度的声誉

正确管理您的许可证并满足客户的需求,并且您可以发展业务并确认您在AppExchange上的声誉。花在扑灭火灾和追踪错误上的时间越少,您就越需要添加新功能并在新的方向上工作。