B2B201

9 | Using Core Capabilities

课程介绍

同学们,今天我们来聊聊Salesforce的课程路线图,特别是关于在Classic Store上开发和定制B2B商务的部分。这个课程路线图就像是一张地图,它会指引你如何一步步掌握Salesforce的相关技能。 首先,我们要明确的是,这个课程是专门为那些想要在Salesforce的Classic环境中进行B2B商务开发和定制的同学设计的。B2B商务,简单来说,就是企业对企业之间的交易,比如一个公司向另一个公司销售产品或服务。 在这个课程中,你会学习到如何在Salesforce Classic Store中设置和管理B2B商务的基本功能。这包括如何创建和管理产品目录、设置价格和折扣、处理订单和发票等。这些都是B2B商务中非常基础但又非常重要的部分。 接下来,课程会深入到更高级的定制和开发。你会学习如何使用Salesforce的工具和语言,比如Apex和Visualforce,来定制你的B2B商务平台。这些技能可以帮助你根据特定的业务需求,创建更复杂、更个性化的功能。 在整个学习过程中,讲师会特别强调学习路径中的位置。这意味着你需要清楚地知道你现在处于哪个阶段,接下来要学习什么内容。这样可以帮助你更好地规划学习时间,确保你能够系统地掌握所有必要的技能。 最后,记住,学习Salesforce是一个循序渐进的过程。不要急于求成,每一步都要稳扎稳打。只有这样,你才能真正掌握在Classic Store上开发和定制B2B商务的技能。 好了,这就是今天的课程路线图介绍。希望你们能够按照这个路线图,一步步地学习和进步。加油!

课程章节

本课程共有 11 个章节

  • 1

    Case Handling via Process

    第 168 页

    今天我们来聊聊如何在Salesforce中通过Process Builder来处理案件。Process Builder是一个非常强大的工具,它可以帮助我们自动化很多业务流程,节省时间,减少错误。 首先,我们需要明确一下,Process Builder是用来创建自动化流程的。比如,当一个案件的状态发生变化时,我们可以自动发送一封邮件给相关的负责人,或者自动更新案件的其他字段。 假设我们有一个案件管理系统,每当一个案件的状态被更新为“已解决”时,我们希望自动发送一封邮件给案件的创建者,告诉他们案件已经解决了。我们可以通过Process Builder来实现这个功能。 首先,我们需要进入Process Builder的界面。在Salesforce中,点击“设置”,然后在快速查找框中输入“Process Builder”,点击进入。 接下来,我们点击“新建”按钮,给这个流程起一个名字,比如“案件状态更新流程”。然后,我们选择这个流程的触发条件。在这个例子中,我们选择“当记录被创建或编辑时”。 然后,我们需要定义具体的触发条件。我们选择“案件”对象,然后设置触发条件为“状态”字段等于“已解决”。这样,只有当案件的状态被更新为“已解决”时,这个流程才会被触发。 接下来,我们需要定义流程的具体操作。在这个例子中,我们希望发送一封邮件给案件的创建者。所以,我们选择“操作”类型为“发送电子邮件”,然后选择邮件的模板,并指定收件人为案件的创建者。 最后,我们激活这个流程,这样它就会在满足条件时自动执行了。 通过这样的设置,我们就可以自动化处理案件的状态更新,节省了手动操作的时间,也减少了出错的可能性。希望这个例子能帮助你理解如何使用Process Builder来处理案件。如果你有任何问题,随时问我哦!

    查看详情
  • 2

    Code Review: Create a Data Service Provider for Carts

    第 169 页

    让我们一步一步地来理解这段代码。 首先,我们有一个名为 `ccTrainingServicCart` 的类,它继承了 `ccrz.ccServicCart` 类。这意味着 `ccTrainingServicCart` 类可以使用 `ccrz.ccServicCart` 类中的所有方法和属性。 在这个类中,我们重写了一个名为 `getFielddsMap` 的方法。这个方法的作用是获取一个字段映射表,这个映射表包含了我们需要的数据字段。 在 `getFielddsMap` 方法中,我们首先调用了父类的 `getFielddsMap` 方法,这样我们就可以获取到父类中已经定义好的字段映射表。然后,我们从这个映射表中获取了一个名为 `ccrz.ccService.ðTFIENDS` 的字段,这个字段是一个字符串,包含了默认的基字段。 接下来,我们将一个新的字段 `CreditDeliver__c` 添加到了这个字符串中。这样,这个字符串就包含了所有的默认基字段以及我们新添加的字段。 最后,我们创建了一个新的映射表,并将这个新的字符串作为值,`ccrz.ccService.CLARTFIENDS` 作为键,放入了这个映射表中。然后,我们将这个新的映射表返回。 简单来说,这段代码的作用就是在原有的字段映射表中添加一个新的字段 `CreditDeliver__c`,然后返回这个更新后的映射表。这样,当我们调用 `getFielddsMap` 方法时,就可以获取到包含所有默认字段和新字段的映射表了。

    查看详情
  • 3

    Code Review: Update the Cart Extension Point

    第 170 页

    同学们,今天我们来聊聊Salesforce中的代码审查。我们有一个类叫做`ccTrainingLogicCartDocs`,它扩展了`ccrz.ccLogicCartDocs`。这个类主要是用来处理购物车的一些逻辑。 首先,我们有一个私有的变量`creditHandler`,它的类型是`Decimal`,用来存储信用覆盖金额。这个变量有一个getter和setter方法,这意味着我们可以从外部获取和设置它的值。 接下来,我们有一个私有方法`checkAccountCreditMin`,它接收一个`Map`类型的参数`inputData`。这个方法的主要目的是检查购物车的总金额是否小于或等于账户的信用额度或者我们刚才提到的`creditHandler`。 在这个方法中,我们首先从`ccrz.cc_CallContext.currAccount`中获取了账户的信用额度`CreditMin__c`。然后,我们从`inputData`中获取了购物车的对象列表,并从中取出了第一个购物车记录`cartRecord`。 接着,我们从`cartRecord`中获取了`creditspel__c`的值,并将其赋值给`creditspel`变量。然后,我们检查购物车的总金额`ccrz__SubTotalAmount__c`是否小于或等于账户的信用额度`accountCreditLimit`,或者是否小于或等于`creditHandler`。如果满足任一条件,我们就返回`true`,表示购物车的总金额在信用额度范围内。 最后,我们提到了在`checkAccountCreditScale`方法中,我们需要添加一个新的`Decimal`类型的变量`creditHandler`,并将购物车记录中的信用覆盖金额的值设置到这个新变量中。 这就是我们今天要讲的内容,希望对大家有所帮助。如果有任何问题,欢迎随时提问。

    查看详情
  • 4

    Code Review: Update the Cart Extension Point, Continued

    第 171 页

    让我们来一起看看这段代码,并且理解它的逻辑。 首先,这段代码的主要目的是在购物车结算前做一些检查和设置。它涉及到两个主要的部分:一个是消息的处理,另一个是购物车结算的允许状态。 ### 1. 消息处理部分 在这段代码中,我们看到有一个`if-else`语句。如果某个条件满足,就会创建一个新的消息对象`ccrz.cc_bean_Message`,并且设置一些属性,比如`labelId`、`type`、`severity`和`classToAppend`。然后,这个消息会被添加到`retMessages`列表中。 - `labelId`:这是消息的标识符,用来区分不同的消息。 - `type`:这是消息的类型,比如这里用的是`CATTOM`,可能是一种特定的消息类型。 - `severity`:这是消息的严重程度,比如`Info`表示这是一个信息类的消息。 - `classToAppend`:这是消息的样式类,用来控制消息在前端的显示样式。 最后,这个消息会被添加到`retMessages`列表中,以便后续处理。 ### 2. 购物车结算允许状态 接下来,代码中有一个`inputData.put`的操作,它把`ALLOW_CLARKUT`和`MESSAGES`这两个键值对放入了`inputData`中。 - `ALLOW_CLARKUT`:这个键控制着是否允许购物车结算。如果`shouldEqualCheckout`为`true`,那么结算就会被允许。 - `MESSAGES`:这个键包含了之前处理的消息列表`retMessages`。 ### 3. 额外的检查 在代码的最后,有一个注释提到了两个额外的检查: 1. ,如果购物车的`SubTotalAmount`小于或等于`creditHandler`值,:这种情况下,代码会将`ALLOW_CLARKUT`设置为`true`,允许结算。 2. ,如果购物车的`CreditDeliverator`不为空且大于或等于购物车的`totalAmount`,:这种情况下,代码会将`isEqualCheckout`设置为`true`,表示购物车的金额和信用额度相等,允许结算。 ### 总结 这段代码的主要逻辑是: - 根据条件生成消息并添加到消息列表中。 - 根据购物车的金额和信用额度,决定是否允许结算。 - 最后,把这些信息放入`inputData`中,供后续流程使用。 希望这个解释能帮助你更好地理解这段代码的逻辑!如果有任何问题,随时问我哦!

    查看详情
  • 5

    Payment Configuration

    第 174 页

    同学们,今天我们来聊聊Salesforce中的付款通知Pay、编辑和新这三个配置设置。这些设置其实都是用来处理采购订单付款信息的,但它们各自有不同的用途和场景。 首先,我们来看“付款通知Pay”(pdt_po.pay)。这个配置是用来指定一个Visualforce页面的,这个页面会在结账流程中处理采购订单的付款类型。简单来说,就是当用户需要支付订单时,系统会调用这个页面来完成支付操作。 接下来是“编辑”(pdt_po.编辑)。这个配置也是指定一个Visualforce页面,但它是在“我的帐户”页面中使用的。当用户想要修改已经存在的采购订单的付款信息时,系统就会调用这个页面。比如,用户可能想要更改支付方式或者更新信用卡信息,这时候就会用到这个页面。 最后是“新”(pdt_po.new)。这个配置同样是指定一个Visualforce页面,但它用于在“我的帐户”页面中保存新的采购订单付款信息。当用户需要添加一个新的付款方式时,系统就会调用这个页面来完成信息的保存。 在我们的练习中,为了简化操作,我们会使用同一个模板来处理这三个配置。但是,如果你们在实际项目中需要分别使用这三个配置,那就需要为每个配置单独设置相应的Visualforce页面。 总结一下,付款通知Pay、编辑和新这三个配置虽然都涉及到采购订单的付款信息,但它们分别用于不同的场景:付款通知Pay用于结账流程,编辑用于修改已有信息,新用于添加新的付款信息。理解它们的区别和用途,对于我们在Salesforce中处理采购订单的付款流程非常重要。

    查看详情
  • 6

    Payment Creation Flow

    第 175 页

    同学们,今天我们来聊聊Salesforce中的支付创建流程,特别是在B2B Commerce中的应用。这个过程涉及到几个关键步骤,我会尽量用简单的语言来解释。 首先,当我们在B2B Commerce中处理支付时,系统会监听用户的支付操作。这个监听过程是为了确保当用户进行支付时,系统能够及时响应并处理这些操作。 接下来,系统会创建一个付款交易。这个交易记录包含了所有与支付相关的信息,比如支付金额、支付方式等。同时,系统还会创建一个订单,这个订单与付款交易是相关联的,它记录了用户购买的商品或服务的详细信息。 在这个过程中,我们还会用到订阅者视觉力量页面和用户控制器。订阅者视觉力量页面是Salesforce中的一个组件,它允许我们创建动态的、响应式的用户界面。而用户控制器则是处理用户输入和交互的后端逻辑。 最后,我们来看一下这段代码:`CCRZ.pubSub.trigger('action:changePayment', paymentDataJackson);`。这行代码的作用是触发一个名为`action:changePayment`的事件,并将`paymentDataJackson`作为参数传递。这个事件通常用于通知系统支付信息已经发生变化,需要更新相关的数据或界面。 总结一下,支付创建流程在B2B Commerce中是一个复杂但非常重要的过程。它涉及到监听支付操作、创建付款交易和订单,以及使用订阅者视觉力量页面和用户控制器来处理用户交互。希望这个解释能帮助大家更好地理解这个过程。如果有任何问题,欢迎随时提问!

    查看详情
  • 7

    Code Review: Visualforce Page

    第 176 页

    我们来一起看看这段Visualforce Page的代码。这段代码主要是用来创建一个页面,让用户可以在货到时进行支付。我们一步一步来分析。 首先,``标签定义了一个Visualforce页面。这里有几个属性需要注意: - `applyHtmlTag="False"` 表示这个页面不会自动添加HTML标签。 - `docType="html-5.0"` 指定了文档类型为HTML5。 - `sidebar="False"` 表示页面上不会显示侧边栏。 - `showHeader="False"` 表示页面上不会显示标准的Salesforce头部。 - `standardStylesheets="False"` 表示不会加载标准的Salesforce样式表。 - `cache="False"` 表示页面不会被缓存。 接下来,我们看到了一个`

    查看详情
  • 8

    Code Review: Visualforce Page, Continued

    第 177 页

    让我们来一起看看这段Visualforce页面的代码。这段代码主要是用JavaScript编写的,它使用了jQuery和Backbone.js框架来构建一个支付页面的视图和模型。 首先,我们来看一下代码的开头部分: ```javascript jQuery(function($) { CCRZ.Models.PaymentsPODModel = CCRZ.CloudCrazeModel.EXTEND(); ``` 这里,我们使用了jQuery的`$(document).ready()`函数,确保在DOM完全加载后再执行代码。然后,我们定义了一个名为`PaymentsPODModel`的模型,它继承自`CCRZ.CloudCrazeModel`。这个模型将用于处理支付相关的数据。 接下来,我们定义了一个视图: ```javascript CCRZ.views.PaymentsPODView = CCRZ.CloudCrazeView.EXTEND({ ViewName: "PaymentsPODView", ManagedSubView: true, TemplateDesktop: CCRZ.util.template("PaymentPOD-Both"), TemplatePhone: CCRZ.util.template("PaymentPOD-Both"), ``` 这个视图叫做`PaymentsPODView`,它也继承自`CCRZ.CloudCrazeView`。我们为这个视图指定了一些属性: - `ViewName`:视图的名称。 - `ManagedSubView`:设置为`true`,表示这个视图是一个受管理的子视图。 - `TemplateDesktop` 和 `TemplatePhone`:分别指定了在桌面和手机上使用的模板。这里使用了同一个模板`PaymentPOD-Both`。 然后,我们定义了视图的初始化函数: ```javascript initialize: function(options) { this.selector = options.selector; this.render(); CCRZ.pubSub.trigger('action:paymentViewInit', this); }, ``` 在初始化函数中,我们做了以下几件事: 1. 将传入的`options.selector`赋值给`this.selector`,这个选择器将用于定位页面上的元素。 2. 调用`this.render()`方法来渲染视图。 3. 触发一个名为`action:paymentViewInit`的事件,并传递当前视图实例作为参数。 接下来,我们定义了视图的事件处理: ```javascript events: { "click .MakePODPayment": "makePODPayment" } ``` 这里,我们为视图绑定了一个事件:当用户点击带有`MakePODPayment`类的元素时,将调用`makePODPayment`函数。这个函数应该会启动支付流程。 最后,代码的注释部分提到: - 这个页面上使用了Backbone的模型和视图。 - 引用了步骤1中描述的模板ID。 - 将按钮的点击事件绑定到启动支付流程的JavaScript函数。 总结一下,这段代码的主要功能是创建一个支付页面的视图,并处理用户的点击事件来启动支付流程。通过使用Backbone.js,我们可以更好地组织和管理前端代码,使其更具可维护性和扩展性。 希望这个解释能帮助你更好地理解这段代码!如果有任何问题,随时问我哦!

    查看详情
  • 9

    Code Review: Visualforce Page, Continued - 178

    第 178 页

    让我们一起来看一下这段代码。这段代码是一个Visualforce页面中的JavaScript函数,名为`PODPayment`,它处理支付按钮的点击事件。 首先,我们来看第1行到第4行: ```javascript function PODPayment(event) { var formName = $(event.target).data("id"); var formData = form2js(formName, '.', false, function(node){}, false); ``` 这里,`PODPayment`函数接收一个`event`参数,这个参数包含了触发事件的相关信息。`formName`变量通过`event.target`获取了触发事件的元素的`data-id`属性值,这个值通常是表单的名称。接着,`formData`变量通过`form2js`函数将表单数据转换为JavaScript对象。 接下来是第5行到第8行: ```javascript if (this.validateInfo(formName, formData)) { var paymentData = formData; paymentData.Account编号 = document.getElementById('accountNumber').value; ``` 这里,代码调用了`validateInfo`函数来验证表单数据。如果验证通过,`paymentData`变量就被赋值为`formData`,然后`paymentData`对象中的`Account编号`属性被设置为页面中`accountNumber`输入框的值。 最后是第9行到第12行: ```javascript CCRZ.pubSub.trigger('action:processPayment', paymentData); } } ``` 这里,代码通过`CCRZ.pubSub.trigger`函数触发了一个名为`action:processPayment`的事件,并将`paymentData`作为参数传递。这个事件通常会启动订单创建流程,并创建关于用户如何支付订单的审计跟踪(支付交易)。 总结一下,这段代码的主要功能是: 1. 获取表单数据并验证。 2. 如果验证通过,将表单数据和用户输入的账户编号合并。 3. 触发一个事件来处理支付,并启动订单创建流程。 希望这个解释对你有帮助!如果有任何问题,随时问我。

    查看详情
  • 10

    Code Review: Visualforce Page, Continued - 179

    第 179 页

    让我们来聊聊这段代码。这段代码是Salesforce中Visualforce页面的一部分,主要功能是处理支付视图的初始化和关联。我们可以把它想象成一个舞台剧的导演,负责把演员(视图)和剧本(模型)安排在一起,确保演出顺利进行。 首先,我们来看这段代码的核心部分: ```javascript CCRZ.pubSub.trigger('action:paymentViewReady', function(options) { CCRZ.payment = CCRZ.payment || { views: {} }; CCRZ.payment.views.pod = new CCRZ.views.PaymentsPODView({ model: new CCRZ.models.PaymentsPODModel(), selector: options.selector }); }); ``` ### 1. ,触发事件, `CCRZ.pubSub.trigger('action:paymentViewReady', function(options) { ... });` 这里我们使用了一个叫做`pubSub`的机制,你可以把它想象成一个广播系统。当某个事件发生时,它会通知所有订阅了这个事件的代码块。这里触发的事件是`action:paymentViewReady`,意思是“支付视图准备好了”。 ### 2. ,初始化支付对象, `CCRZ.payment = CCRZ.payment || { views: {} };` 这行代码的作用是确保`CCRZ.payment`对象存在。如果它还不存在,就创建一个新的对象,并给它一个`views`属性,用来存放不同的视图。 ### 3. ,创建视图并关联模型, ```javascript CCRZ.payment.views.pod = new CCRZ.views.PaymentsPODView({ model: new CCRZ.models.PaymentsPODModel(), selector: options.selector }); ``` 这里我们创建了一个新的视图`PaymentsPODView`,并把它赋值给`CCRZ.payment.views.pod`。这个视图需要一个模型来提供数据,所以我们同时创建了一个新的模型`PaymentsPODModel`,并把它传递给视图。 - ,模型(Model),:你可以把它想象成数据的提供者,它负责从数据库或其他地方获取数据,并把这些数据提供给视图。 - ,视图(View),:视图是用户看到的部分,它负责展示数据,并处理用户的交互。 ### 4. ,选择器(Selector), `selector: options.selector` 选择器是用来告诉视图在页面的哪个位置显示。你可以把它想象成一个舞台上的聚光灯,告诉演员(视图)在哪个位置表演。 ### 总结 这段代码的核心逻辑是:当支付视图准备好时,创建一个新的视图,并把它与一个模型关联起来。这样,视图就可以从模型中获取数据,并在页面的指定位置显示出来。 希望这个解释能帮助你更好地理解这段代码的作用!如果有任何问题,随时问我哦!

    查看详情
  • 11

    Knowledge Check - 181

    第 181 页

    同学们,今天我们来做一个简单的知识检查。别紧张,这只是一个轻松的小测试,帮助我们回顾一下之前学过的内容。 首先,Salesforce是什么?对,它是一个强大的客户关系管理(CRM)平台,帮助企业更好地管理客户信息、销售流程和服务支持。 接下来,Salesforce的主要模块有哪些?没错,主要有销售云、服务云、营销云和社区云。每个模块都有其独特的功能,帮助我们更高效地工作。 然后,什么是对象(Object)?在Salesforce中,对象就像是数据库中的表,用来存储数据。标准对象是Salesforce自带的,比如客户(Account)和联系人(Contact),而自定义对象则是我们根据业务需求自己创建的。 最后,什么是记录(Record)?记录就是对象中的一行数据,比如一个具体的客户或联系人信息。 好了,今天的知识检查就到这里。大家表现得都很棒!如果有任何问题,随时问我。我们下次再见!

    查看详情