DEX450

Module 4: Programming with Apex

课程介绍

同学们,今天我们来聊聊Salesforce中的Apex编程。Apex是Salesforce平台上的一种强大的编程语言,它类似于Java,专门用于处理业务逻辑和数据操作。 首先,Apex是一种面向对象的语言,这意味着你可以创建类、对象和方法来处理复杂的业务需求。你可以通过Apex来创建触发器、批处理作业、自定义控制器等等。 举个例子,假设你需要在每次创建新客户记录时自动发送一封欢迎邮件。你可以编写一个Apex触发器,当客户记录被插入时,触发器会自动执行,调用发送邮件的方法。 Apex还支持SOQL(Salesforce Object Query Language)和SOSL(Salesforce Object Search Language),这使得你可以轻松地查询和操作Salesforce中的数据。 总的来说,Apex是一个非常强大的工具,可以帮助你自动化业务流程,提高工作效率。希望这个简单的介绍能帮助你理解Apex编程的基础概念。如果有任何问题,随时问我!

课程章节

本课程共有 47 个章节

  • 1

    Module 4: Programming with Apex

    第 87 页

    同学们,今天我们来聊聊Salesforce中的Apex编程。Apex是Salesforce平台上的一种强大的编程语言,它类似于Java,专门用于处理业务逻辑和数据操作。 首先,Apex是一种面向对象的语言,这意味着你可以创建类、对象和方法来处理复杂的业务需求。你可以通过Apex来创建触发器、批处理作业、自定义控制器等等。 举个例子,假设你需要在每次创建新客户记录时自动发送一封欢迎邮件。你可以编写一个Apex触发器,当客户记录被插入时,触发器会自动执行,调用发送邮件的方法。 Apex还支持SOQL(Salesforce Object Query Language)和SOSL(Salesforce Object Search Language),这使得你可以轻松地查询和操作Salesforce中的数据。 总的来说,Apex是一个非常强大的工具,可以帮助你自动化业务流程,提高工作效率。希望这个简单的介绍能帮助你理解Apex编程的基础概念。如果有任何问题,随时问我!

    查看详情
  • 2

    Understanding Apex

    第 88 页

    让我们开始今天的Apex学习之旅吧!首先,Apex是Salesforce平台上的一种编程语言,它有点像Java和C#,但也有一些独特的地方。Apex是专门为处理Salesforce的数据和业务逻辑设计的,这意味着它可以直接与Salesforce数据库交互,执行查询和更新操作。 现在,让我们谈谈Apex与其他语言的不同之处。Apex是一种强类型的语言,这意味着所有的变量都必须声明类型。此外,Apex运行在Salesforce的多租户环境中,这就要求我们在编写代码时必须考虑到Apex的交易和监管者限制。这些限制是为了确保所有用户都能公平地使用系统资源,防止某个用户或进程占用过多资源。 接下来,我们会学习如何执行简单的Apex代码。Apex支持多种数据类型,包括sObject类型,这是Salesforce中表示数据库记录的对象。我们还会学习基元数据类型,比如整数、字符串和布尔值,以及如何使用基本的控制语句,如if语句和循环。 最后,我们会通过一些例子来加深理解。记住,学习Apex的过程中,你可以随时查阅Salesforce的官方文档来获取更多信息和帮助。这样,你就可以在实践中不断进步,更好地掌握Apex编程。让我们一起开始这段学习旅程吧!

    查看详情
  • 3

    Module Agenda - 89

    第 89 页

    同学们,今天我们来聊聊Salesforce中的Apex编程。首先,我们会从“开始使用Apex”这一部分讲起。Apex是Salesforce的一种强大的编程语言,它允许开发者创建复杂的业务逻辑和自定义功能。 接下来,我们会探讨“Apex为何与众不同”。Apex是一种面向对象的语言,它直接在Salesforce平台上运行,这意味着它可以无缝地与Salesforce的数据和用户界面集成。此外,Apex还提供了强大的数据库操作能力,使得处理大量数据变得简单高效。 然后,我们会进入“使用s对象”这一部分。在Salesforce中,s对象是数据表的基础,它们代表了数据库中的表。通过Apex,我们可以创建、读取、更新和删除这些s对象中的数据,这是构建自定义应用的关键步骤。 最后,我们会深入“模块4:使用Apex编程”。在这里,我们将学习如何编写Apex代码,包括类、触发器、测试类等。我们还会探讨如何优化代码性能,确保我们的应用既快速又可靠。 通过这些模块的学习,你们将能够掌握Apex编程的基础,并能够在Salesforce平台上构建强大的自定义应用。让我们一起开始这段学习之旅吧!

    查看详情
  • 4

    4-1: Logging In to a Sandbox

    第 90 页

    同学们,今天我们来学习如何在Salesforce的沙盒环境中登录,并且使用开发人员控制台来执行一些简单的Apex代码。 首先,我们需要登录到Salesforce的沙盒环境。沙盒环境是一个安全的空间,我们可以在里面进行各种测试和开发,而不会影响到实际的生产环境。登录后,我们会看到一个叫做“开发人员控制台”的工具,这是我们今天要重点使用的。 开发人员控制台是一个非常强大的工具,它允许我们编写、测试和调试Apex代码。Apex是Salesforce的一种编程语言,类似于Java,专门用于在Salesforce平台上进行定制开发。 接下来,我会展示一段简单的Apex代码。这段代码的作用是创建一个新的联系人记录,并将其插入到Salesforce的数据库中。代码是这样的: ```apex 联系人 contactToAdd = new 联系人(); contactToAdd.firstName = "六月"; contactToAdd.lastName = "摩根"; 插入 contactToAdd; System.debug('contactToAdd 的 recordID 是:' + contactToAdd.id); ``` 让我们一步步来看这段代码: 1. 首先,我们创建了一个新的联系人对象,命名为`contactToAdd`。 2. 然后,我们给这个联系人的`firstName`属性赋值为“六月”,`lastName`属性赋值为“摩根”。 3. 接着,我们使用`插入`语句将这个联系人记录插入到Salesforce的数据库中。 4. 最后,我们使用`System.debug`语句来输出这个新创建的联系人记录的ID。这个ID是Salesforce自动生成的唯一标识符,用于标识这条记录。 在下一张幻灯片中,我们会更详细地讨论这段代码的作用和每个部分的具体功能。现在,你们可以先尝试在开发人员控制台中执行这段代码,看看会发生什么。 记住,沙盒环境是安全的,所以不用担心会影响到实际的数据。大胆尝试,遇到问题随时提问!

    查看详情
  • 5

    4-2: See Apex in Action

    第 91 页

    同学们,今天我们来学习如何在Salesforce中使用开发人员控制台执行一些简单的Apex代码。首先,我们会打开开发人员控制台,这是一个非常强大的工具,可以帮助我们编写和测试代码。 接下来,我会展示一段简单的Apex代码。这段代码的作用是创建一个新的联系人记录。我们首先定义了一个名为`contactToAdd`的联系人对象,然后给它设置了名字和姓氏,分别是“六月”和“摩根”。之后,我们使用`insert`语句将这个联系人记录保存到数据库中。最后,我们使用`System.debug`语句来输出这个新创建的联系人记录的ID,这样我们就可以在日志中看到它。 在下一张幻灯片中,我们会详细讨论这段代码的每一部分,以及它们是如何协同工作的。这样,你们就能更好地理解Apex代码的基本结构和功能了。 现在,让我们打开开发人员控制台,一起动手试试这段代码吧!

    查看详情
  • 6

    Examining the Code

    第 92 页

    让我们来聊聊这段Apex代码的几个关键点。首先,这段代码的目的是让你开始熟悉Apex,特别是如果你有Java或C#的背景,你会发现Apex的语法和结构非常相似。 1. ,代码执行的结果,:当你运行这段代码时,它会在Salesforce的数据库中插入一条新的联系人记录。具体来说,代码做了以下几件事: - 创建了一个新的联系人对象。 - 设置了联系人的名字和姓氏。 - 使用DML(数据操作语言)语句将这个对象插入到数据库中。 - 在日志中插入了一条调试信息,这条信息包含了新插入记录的ID。 2. ,代码中熟悉的部分,:如果你之前用过Java或C#,你会发现很多语法都很相似: - 类的构造(第1行)。 - 对象字段的设置(第2、3行)。 - 使用系统方法输出调试信息(第5行)。 - 字符串的连接操作(第5行)。 - 使用分号结束语句(所有行)。 - 使用点符号访问对象的字段(第2、3、5行)。 3. ,Apex与数据库的交互,:代码中与数据库交互的部分是`insert`语句。这个语句直接将联系人对象插入到数据库中,并且会自动为这个对象分配一个唯一的ID。你不需要手动创建Contact类,因为Salesforce已经为你提供了这个类,并且你可以直接使用在UI中定义的字段。 通过这些简单的步骤,你已经开始了Apex的学习之旅。随着我们深入探讨,你会发现Apex的更多强大功能。希望这个解释能帮助你更好地理解这段代码!

    查看详情
  • 7

    What is Apex?

    第 93 页

    让我们来聊聊Apex吧。想象一下,Apex就像是Salesforce世界里的一个超级英雄,它拥有强大的力量,可以帮助我们在这个平台上做很多酷炫的事情。 首先,Apex是一种面向对象的编程语言。这意味着它像是一个聪明的建筑师,能够设计和构建复杂的结构。在Salesforce中,这些结构就是我们的应用程序和功能。 Apex是Force.com平台的一部分,这个平台就像是Salesforce的家。Apex和Salesforce的组织以及数据是紧紧绑在一起的。你可以通过Apex发出各种命令,使用各种库和对象来操作数据。 最棒的是,Apex是基于云的,这意味着你不需要在电脑上安装任何东西。只要你有网络连接,你就可以随时随地使用Apex来编写代码。 Apex从2007年就开始存在了,它一直在帮助我们更好地使用Salesforce。它是Lightning平台的专有语言,也就是说,它是专门为Salesforce设计的,不能在其他系统上运行。 Apex之所以这么特别,是因为它和Salesforce平台紧密结合。当你在Salesforce中创建一个对象时,Apex可以自动访问和操作这些对象中的数据。你还可以配置Salesforce的工具来调用Apex代码,这样你就可以创建更强大的工作流和自动化流程。 最后,Apex还支持多租户环境。这意味着即使有很多人同时在Salesforce上使用Apex,每个人的代码都不会互相干扰,系统依然可以稳定运行。当然,这需要我们遵循推荐的设计模式来开发代码。 所以,Apex就像是Salesforce中的一把瑞士军刀,功能强大,用途广泛。掌握了Apex,你就可以在Salesforce的世界里大展拳脚了!

    查看详情
  • 8

    Apex Classes and Triggers

    第 94 页

    今天我们来聊聊Apex课程和触发器的一些基础概念。首先,我们要明白,Apex是一种编程语言,专门用于在Salesforce平台上编写业务逻辑。你可以把它想象成一种工具,帮助我们自动化处理Salesforce中的数据。 首先,我们来说说“类”。在Apex中,类就像是一个容器,用来存放代码。你可以把它想象成一个盒子,里面装满了各种工具和方法。这些工具和方法可以帮助我们完成特定的任务。类在Apex中非常类似于Java或C#中的类,如果你之前学过这些语言,理解起来会更容易。 接下来,我们谈谈“触发器”。触发器是一种特殊的Apex代码,它会在某些特定的事件发生时自动执行。比如说,当你在Salesforce中创建、更新或删除一条记录时,触发器就会被触发。触发器总是与某个特定的对象关联,比如“客户”对象或“订单”对象。当这个对象的数据发生变化时,触发器就会自动运行,执行你预先写好的代码。 总结一下,类是一个存放代码的容器,而触发器则是在特定事件发生时自动执行的代码。通过这两者,我们可以在Salesforce中实现复杂的业务逻辑和自动化流程。 希望这个解释能帮助你更好地理解Apex中的类和触发器。如果你有任何问题,随时问我!

    查看详情
  • 9

    4-3: Create and Use an Apex Class

    第 95 页

    让我们来聊聊如何在Salesforce中创建和使用Apex类。今天我们要学习的是如何将代码移动到类中,创建类,以及如何调用类中的方法。我们还会提到一个叫做“静态上升点”的概念。 首先,想象一下,Apex类就像是一个工具箱,里面装满了各种工具(也就是方法)。我们可以创建这个工具箱,然后在需要的时候,从里面拿出工具来使用。 现在,我们来看一个例子。假设我们想要创建一个类,这个类可以帮助我们添加联系人到Salesforce中。我们可以创建一个叫做`ContactManager`的类。在这个类里面,我们会定义一个方法,叫做`addContact`。这个方法需要两个参数:联系人的姓和名。它会创建一个新的联系人记录,并将其插入到数据库中,最后返回这个新联系人的ID。 下面是这个类的代码: ```apex public class ContactManager { public static Id addContact(String lastNameToInsert, String firstNameToInsert) { Contact contactToAdd = new Contact( FirstName = firstNameToInsert, LastName = lastNameToInsert ); insert contactToAdd; return contactToAdd.Id; } } ``` 在这个代码中,`addContact`方法被定义为`static`,这意味着我们可以直接通过类名来调用这个方法,而不需要先创建类的实例。 接下来,我们来看看如何调用这个类中的方法。假设我们想要添加一个姓为“Guardman”,名为“Areil”的联系人,我们可以这样做: ```apex Id contactId = ContactManager.addContact('Guardman', 'Areil'); System.debug('contactToAdd record ID is: ' + contactId); ``` 在这段代码中,我们调用了`ContactManager`类中的`addContact`方法,并传入了两个参数:'Guardman'和'Areil'。这个方法会返回新创建的联系人的ID,我们将其存储在`contactId`变量中,并使用`System.debug`来打印这个ID。 这就是今天的内容。我们学习了如何创建Apex类,如何在类中定义方法,以及如何调用这些方法。希望你们能够理解并尝试自己动手编写代码。如果有任何问题,随时问我!

    查看详情
  • 10

    Reviewing the Code

    第 96 页

    让我们来回顾一下这些要点,我会尽量用简单易懂的方式来解释。 首先,我们提到了,具有命名参数的构造函数,。这是什么意思呢?想象一下,你在建房子,你可以选择先建墙,再装窗户,或者反过来。在Apex中,构造函数就像建房子的步骤,而命名参数就是你可以指定先做哪一步。这样,你可以更灵活地创建对象。 接下来是,DML,,也就是数据操作语言。在Salesforce中,DML是用来操作数据的,比如插入、更新或删除记录。你可以把它想象成你在数据库中进行的一系列操作,就像你在Excel表格中添加或删除行一样。 然后我们提到了,不区分大小写,。这意味着在Apex中,变量名、方法名等是不区分大小写的。比如,`myVariable`和`myvariable`在Apex中是一样的。这就像你在写名字时,不管你是用大写还是小写,名字的意思不会变。 现在,让我们来看看教学要点。 1. ,API版本的用途,:每次Salesforce发布新版本时,都会引入一个新的API版本。当你保存代码时,你会选择一个API版本。这样做的目的是为了保证你的代码在新版本发布后仍然能够正常运行,不会因为新版本的变化而出错。你可以把它想象成你在写一本书,每次出新版时,你都会保留旧版的内容,这样读者可以继续阅读旧版,而不会因为新版的变化而感到困惑。 2. ,代码结构,:在这段代码中,我们看到了类声明、方法声明、对象构造和返回语句。这些都是代码的基本组成部分。在Apex中,每条语句后面都需要用分号结束,就像你在写句子时需要用句号结束一样。另外,我们使用大括号`{}`来创建语句块,即使只有一条语句,我们也建议使用大括号,这样代码会更清晰。 3. ,与Java或C#的不同,:在Apex中,构造对象时可以指定命名参数,这让你可以更灵活地创建对象。另外,Apex中的DML语句是独立的,你可以直接插入、更新或删除记录。最后,Apex中的变量名是不区分大小写的,这和Java或C#不同,在那些语言中,变量名是区分大小写的。 希望这些解释能帮助你更好地理解这些概念!如果有任何问题,随时问我哦。

    查看详情
  • 11

    Versioning

    第 97 页

    今天我们来聊聊Salesforce中的版本控制,特别是关于Apex类、触发器、Visualforce页面和组件的版本控制。听起来有点技术性,但别担心,我会用简单的方式来解释。 首先,想象一下,Salesforce平台就像是一个不断进化的生态系统。每年,Salesforce都会发布三次主要的更新,每次更新都会带来一些新的功能和改进。这就意味着,Salesforce的API(应用程序编程接口)也会随之更新。API是让我们的代码和Salesforce平台沟通的桥梁。 现在,这里有个问题:如果Salesforce更新了API,我们的代码会不会出问题呢?这就是版本控制的用武之地了。 在Salesforce中,每当我们创建一个Apex类、触发器、Visualforce页面或组件时,我们都会为它们指定一个API版本号。这个版本号就像是给我们的代码打上一个标签,告诉Salesforce:“嘿,我的代码是基于这个版本的API写的。” 这样做的好处是,无论Salesforce如何更新,只要我们的代码是基于某个特定的API版本写的,Salesforce就会在那个版本的上下文中运行我们的代码。这意味着,即使Salesforce发布了新的API版本,我们的旧代码仍然可以正常运行,不会因为平台的更新而出现问题。 所以,版本控制在这里的作用是确保我们的代码在不同的Salesforce版本中都能稳定运行。它不是指我们通常理解的文件的版本控制,比如在Git中管理文件的不同版本。而是指我们的代码与Salesforce API版本之间的兼容性。 总结一下,通过为我们的Apex类、触发器、Visualforce页面和组件指定API版本号,Salesforce能够确保我们的代码在每个Salesforce版本中都能正常工作,即使平台在不断更新和进化。这样,我们就可以放心地开发和部署我们的应用,而不必担心平台的更新会影响到我们的代码。 希望这个解释能帮助你理解Salesforce中的版本控制。如果有任何问题,随时问我哦!

    查看详情
  • 12

    4-4: Observe the Effects of Versioning

    第 98 页

    同学们,今天我们来聊聊Salesforce中的版本控制,特别是关于Apex类的版本如何影响编译。我们将通过一个简单的实验来观察这一点。 首先,我们需要创建一个新的Apex类来测试版本控制。这个类将帮助我们理解不同版本下,哪些对象可以被编译。具体来说,我们将关注两个对象:FeedPost和FeedProject。这两个对象都是用来存储Chatter帖子的,但它们在不同的版本中可能会有不同的表现。 接下来,我们会更改Apex类的版本,看看这些更改如何影响编译过程。我们的目标是理解,随着版本的更新,哪些对象仍然可以被编译,哪些则不行。 在这个过程中,我们会发现一个名为“chatter”的功能,它随着版本的更改,s对象(即标准对象)会有所不同。这意味着,某些对象可能只在特定的版本中被支持,因此只有在这些版本中才能成功编译。 总结一下,今天的教学点主要是解释FeedProject和FeedPost这两个存储Chatter帖子的s对象,以及如何通过更改Apex类的版本来观察这些对象在不同版本中的编译情况。希望这能帮助大家更好地理解Salesforce中的版本控制和对象编译。

    查看详情
  • 13

    Versioning Discussion

    第 99 页

    让我们来聊聊Salesforce的版本化问题,特别是关于FeedPost和FeedItem的变化,以及为什么开发人员可能需要更新他们的Apex类到更高版本。 首先,关于FeedPost和FeedItem的问题。Salesforce在版本22.0中决定不再支持FeedPost,转而引入了FeedItem。这种变化是为了改进数据模型,使其更加强大和灵活。但是,Salesforce并没有立即切断对FeedPost的支持。在版本17.0到21.0之间,FeedPost仍然被支持,这样做的目的是给开发人员足够的时间来适应新的FeedItem模型,而不会立即破坏他们现有的定制和集成。这种逐步过渡的策略确保了系统的稳定性和向后兼容性。 接下来,为什么开发人员可能会选择将现有的Apex类更新到更高版本呢?这主要是因为新版本通常会引入一些新功能或改进,这些新功能可能会让开发工作变得更简单或更高效。例如,在Spring '18(版本42)中,List类新增了CONTAINS(..)方法,这个方法以前只在Set类上可用。如果开发人员想要利用这个新功能,他们就需要将他们的Apex类更新到至少版本42。 最后,这种版本化的做法给开发人员带来了什么好处呢?最大的好处就是向后兼容性和稳定性。Salesforce每年都会发布三个新版本,每个版本都可能添加、删除或更改功能。通过将每个类或触发器与特定的版本关联,Salesforce平台能够优雅地处理这些变化,确保即使在新版本中,旧代码仍然能够运行,不会因为新功能的引入而出现问题。这种策略使得开发人员可以在不担心破坏现有功能的情况下,逐步采用新功能。 总的来说,Salesforce的版本化策略是为了确保平台的稳定性和灵活性,同时也为开发人员提供了逐步适应新变化的机会。通过这种方式,Salesforce能够持续创新,同时保护开发人员的投资。

    查看详情
  • 14

    Where is Your Code?

    第 100 页

    让我们来聊聊Salesforce中的Apex代码存储和执行的过程。想象一下,你正在编写一段Apex代码,这段代码就像是你给Salesforce的一个指令,告诉它该做什么。 当你写完代码并成功编译后,Salesforce会把这个代码保存为一种叫做“元数据”的东西。元数据就像是Salesforce的一个内部数据库,专门用来存储这些编译好的代码。这样,无论何时Salesforce需要执行这段代码,它都可以从这个数据库中快速找到并运行它。 但是,这里有一个特殊情况。如果你使用的是“匿名执行”,也就是你直接在Salesforce的开发者控制台或者通过API临时运行一段代码,那么这段代码不会被保存为元数据。相反,它会被立即发送到Apex执行环境中去执行,执行完后就不会再保存了。 所以,总结一下: - 通常,编译成功的Apex代码会被保存为Salesforce的元数据。 - Apex代码只能在Salesforce平台上运行,不能在其他地方执行。 - 使用匿名执行时,代码不会保存,而是直接执行。 希望这样解释能帮助你更好地理解Apex代码的存储和执行过程!

    查看详情
  • 15

    Data Types: Primitives

    第 101 页

    今天我们来聊聊Salesforce Apex语言中的数据类型,特别是那些被称为“Primitives”的基本类型。首先,Apex语言是基于Java的,所以如果你对Java有些了解,那么理解Apex会容易很多。 在Apex中,我们有一些基本的数据类型,比如字符串(String)、整数(Integer)、布尔值(Boolean)等。这些类型在Apex中被称为“Primitives”,但它们实际上更像是Java中的包装类。这意味着,尽管它们看起来像是基本类型,但在Apex中,它们其实是以对象的形式存在的。 这里有个小细节需要注意:在Apex中,如果你声明了一个变量但没有给它赋值,那么这个变量会被自动初始化为空(null)。这一点和Java中的包装类是一样的。所以,当你使用这些“Primitives”类型时,要记得它们可能包含空值。 我建议,对于这些数据类型,我们不需要深入讨论太多细节。因为在实际开发中,你可以根据需要查阅Salesforce的官方文档来获取更详细的信息。 最后,唐老师提醒我们,所有在Apex中声明的变量,无论它们是“Primitives”还是其他类型,实际上都是对象。这意味着,当你操作这些变量时,你实际上是在操作对象的引用。这一点对于理解Apex中的变量行为非常重要。 好了,这就是今天关于Apex中数据类型的小讲解。希望这些信息对你有所帮助,记得在实际操作中多加练习哦!

    查看详情
  • 16

    Conditional and Loops

    第 102 页

    同学们,今天我们来聊聊Salesforce中的有条件和循环控制语句。这些是编程中非常基础但极其重要的部分,它们帮助我们控制程序的流程,让程序能够根据不同的条件做出不同的反应,或者重复执行某些操作。 首先,我们来看看条件语句。在Salesforce中,条件语句主要是用来判断某个条件是否成立,如果成立,就执行某段代码;如果不成立,就跳过或者执行另一段代码。这就像是我们日常生活中的决策过程,比如“如果今天下雨,我就带伞;如果不下雨,我就不带伞。”在Salesforce中,我们通常使用`if`语句来实现这种逻辑。 接下来是循环语句。循环语句允许我们重复执行某段代码,直到满足某个条件为止。在Salesforce中,我们有几种不同类型的循环,比如`for`循环和`while`循环。`for`循环通常用于我们知道要重复执行多少次的情况,而`while`循环则用于我们不知道具体次数,但知道在某个条件满足时继续执行的情况。 在Salesforce中,循环和条件语句的设计是为了让代码运行得更快、更高效。这是因为Salesforce平台是为处理大量数据和复杂业务逻辑而设计的,所以它的控制语句需要非常快速和灵活。 在接下来的课程中,我们会详细讨论`for`循环的不同类型,以及如何在Salesforce中有效地使用它们。我们会通过实际的例子来演示如何编写和优化这些控制语句,以确保我们的代码既高效又易于维护。 记住,掌握这些基本的控制语句是成为Salesforce开发高手的第一步。所以,让我们开始吧,一步步深入理解这些强大的工具!

    查看详情
  • 17

    Collections

    第 103 页

    今天我们来聊聊Salesforce中的收藏(Collections)。收藏在Salesforce中是非常重要的概念,它们帮助我们更有效地管理和操作数据。 首先,我们来看一下Salesforce中的三种基本收藏类型:列表(List)、集合(Set)和映射(Map)。 1. ,列表(List),:列表是一个有序的集合,可以包含重复的元素。你可以把它想象成一个购物清单,上面列出的每一项都是按顺序排列的,而且你可以有多个相同的项目。列表允许你通过索引来访问元素,也就是说,你可以直接获取列表中的第一个、第二个或第N个元素。 2. ,集合(Set),:集合是一个无序的集合,不允许有重复的元素。你可以把它想象成一个装满了不同颜色球的袋子,每个球都是独一无二的,而且你无法确定它们的顺序。集合主要用于当你需要确保所有元素都是唯一的时候。 3. ,映射(Map),:映射是一个键值对的集合,每个键都对应一个值。你可以把它想象成一个电话簿,每个人的名字(键)对应一个电话号码(值)。映射允许你通过键来快速查找对应的值,这在处理复杂数据时非常有用。 这三种收藏类型各有其特点和用途。列表适合需要保持顺序和允许重复的场景;集合适合需要唯一性的场景;而映射则适合需要通过键来快速查找值的场景。 希望这些解释能帮助你更好地理解Salesforce中的收藏类型。如果你有任何问题,随时问我哦!

    查看详情
  • 18

    4-5: Take a Quick Tour of Apex

    第 104 页

    同学们,今天我们来快速游览一下Apex的几个教学点。首先,我们要审查一个解决方案的要求。这个解决方案需要处理两个输入:一个是旧课程列表,另一个是新课程列表。我们的目标是生成一个只包含净新课程的数据结构作为输出。 接下来,我们来复习一下测试课程。Apex有一个内置的测试框架,这个框架在将代码从沙箱环境迁移到生产环境时非常有用。我们会在后面的模块中详细讨论这个测试框架和开发环境。 现在,让我们打开开发人员控制台,找到CourseManager_Test这个测试类。你会看到这个类被标记为测试类,这意味着它包含了用于测试的代码。 然后,我们回顾一下班级执行的任务。我们有两个主要的代码文件:CourseManager.cls和TestClassCourseManager.cls。在CourseManager.cls中,有一个findDuplicates方法,这个方法用于查找重复的课程。而在TestClassCourseManager.cls中,我们有一个测试类,用于测试CourseManager中的方法。 最后,注意一下,在下一个练习中,你们将在这个班级中编写自己的测试方法和方法。这将帮助你们更好地理解Apex的测试框架和代码结构。希望这些信息对你们有帮助,我们继续加油!

    查看详情
  • 19

    Module Agenda - 105

    第 105 页

    今天我们来聊聊Salesforce的Apex编程。首先,我们来看看这个模块的议程。 ,模块议程:, 1. 开始使用Apex 2. Apex为何与众不同? 3. 使用s对象 4. 使用Apex编程 ,1. 开始使用Apex, Apex是Salesforce平台上的一种强大的编程语言,它允许你创建复杂的业务逻辑和自定义功能。你可以把它想象成Salesforce的“大脑”,它能够处理数据、执行操作,并且与其他系统进行交互。 ,2. Apex为何与众不同?, Apex与其他编程语言不同,它是专门为Salesforce设计的。这意味着它可以直接访问Salesforce的数据和功能,而不需要通过API或其他中间件。Apex是强类型的,这意味着在编译时就会检查类型错误,这有助于减少运行时错误。 ,3. 使用s对象, 在Apex中,s对象(sObject)是Salesforce中标准对象和自定义对象的通用表示。你可以把s对象想象成数据库中的表,每个s对象都有字段(列)和记录(行)。通过Apex,你可以轻松地查询、插入、更新和删除这些s对象。 ,4. 使用Apex编程, 最后,我们将深入探讨如何使用Apex进行编程。你将学习如何编写Apex类、触发器、测试类等。我们还会讨论一些最佳实践,比如如何优化代码性能,如何确保代码的安全性等。 通过这个模块,你将掌握Apex的基础知识,并能够开始编写自己的Apex代码来扩展Salesforce的功能。希望你能享受这个学习过程,并从中获得宝贵的技能!

    查看详情
  • 20

    Apex Transactions

    第 106 页

    今天我们来聊聊Apex中的交易要点。首先,Apex交易是什么呢?简单来说,Apex交易是指在Salesforce中执行的一系列操作,这些操作要么全部成功,要么全部失败。这就像你去超市买东西,要么你把所有东西都买回家,要么你什么都不买,不会出现只买了一半的情况。 接下来,我们说说非数据库事务。在Apex中,有些操作并不直接涉及到数据库的更改,比如发送邮件或者调用外部API。这些操作虽然不改变数据库,但它们也是交易的一部分,如果这些操作失败了,整个交易也会失败。 单个工作单元是什么意思呢?这指的是在Apex中,所有的操作都被视为一个整体。比如,如果你在一个方法中更新了10条记录,那么这10条记录的更新要么全部成功,要么全部失败,不会出现部分成功的情况。 最后,我们来说说“击中服务器”。在Apex中,当你执行一个操作时,比如更新记录,这个操作会被发送到Salesforce的服务器进行处理。服务器处理完这个操作后,会返回结果给你。这个过程就叫做“击中服务器”。 现在,我们来看看教学要点。假设你有两个方法,方法1和方法2。在方法1完成之前,执行匿名窗口中的代码是不会完成的。而在方法2完成之前,方法1也不会完成。这是因为方法调用会被放置在堆栈上,只有当方法2完成后,方法1才会从堆栈中移除,然后匿名窗口中的代码才会继续执行。 简单来说,这就像你在排队买票,只有前面的人买完票走了,你才能继续前进。这就是Apex交易的基本概念,希望你们能理解。如果有任何问题,随时问我哦!

    查看详情
  • 21

    Apex Transactions that Operate on the Database

    第 107 页

    让我们来聊聊在Salesforce中,当我们在Apex中执行DML(数据操作语言)操作时,会发生什么有趣的事情。想象一下,你正在编写一段代码,比如插入一个新的联系人记录。这看起来很简单,对吧?但实际上,背后发生的事情比你想象的要复杂得多。 首先,当你执行DML操作时,比如插入、更新或删除记录,Salesforce会启动一个Apex事务。这个事务就像是一个包裹,里面包含了所有相关的操作。这些操作都是紧密相连的,它们要么全部成功,要么全部失败。这就是我们常说的“原子性”。 现在,让我们来看看这个事务中可能发生的事情。当你插入一个联系人时,这个操作可能会触发一个触发器。触发器是Salesforce中的一种自动化工具,它可以在特定事件发生时自动执行一些代码。比如,当联系人被插入时,触发器可能会自动更新相关的账户记录。 但是,事情并没有结束。这个触发器的执行可能会进一步触发工作流规则。工作流规则是另一种自动化工具,它可以在记录满足特定条件时自动执行一些操作,比如发送电子邮件或更新字段。 更复杂的是,这些操作可能会再次触发触发器,形成一个循环。这就是我们所说的“递归”。递归可能会导致系统性能问题,甚至可能导致无限循环。因此,作为一名Apex程序员,你需要非常小心地处理这种情况,确保你的代码不会陷入递归的陷阱。 总结一下,当你在Apex中执行DML操作时,你不仅仅是在操作数据库中的记录。你实际上是在启动一个复杂的事务,这个事务可能会触发一系列的自动化和业务流程。因此,编写健壮的代码,考虑到这些潜在的影响,是非常重要的。 希望这个解释能帮助你更好地理解Apex事务和DML操作的复杂性。记住,成为一名出色的Apex程序员,不仅仅是编写代码,更是理解代码背后的整个生态系统。

    查看详情
  • 22

    4-6: Examine Implicit Operations

    第 108 页

    同学们,今天我们来学习如何检查Salesforce中的隐式操作任务。这个任务主要是关于在用户界面(UI)中创建课程参与者记录时,系统自动执行的一些后台操作。我们的目标是理解这些操作是如何被隐式调用的,并通过查看日志来验证这些操作。 首先,我们需要在Salesforce的UI中创建一个课程参与者记录。这个步骤很简单,就像你平时添加任何记录一样。创建记录后,Salesforce会自动触发一些后台操作,这些操作可能是由触发器或工作流规则引起的。 接下来,我们要查看系统日志。日志会详细记录所有因触发器或工作流规则而隐式调用的操作。在我们的例子中,代码段包含了触发器和工作流规则。触发器是“课程参与者触发器”,而工作流规则是“向与会者发送通知”。 在日志中,你应该能够看到触发器被触发时执行的操作,以及工作流规则被触发时发送通知的操作。通过检查这些日志,我们可以确认这些操作是否按预期执行。 这个过程大约需要10分钟。请确保你仔细查看日志中的每一项记录,这样你就能全面理解在创建课程参与者记录时,Salesforce后台发生了什么。 这就是今天的内容,希望你们都能掌握如何检查和理解Salesforce中的隐式操作。如果有任何疑问,随时提问。谢谢大家!

    查看详情
  • 23

    What are Apex Governor Limits?

    第 109 页

    今天我们来聊聊Salesforce中的Apex州长限制。想象一下,我们正在烤饼干,这就是我们的Apex交易。每个饼干都需要一定的材料和步骤,就像每个Apex交易都需要一定的资源和操作。 首先,为什么Apex交易这么重要呢?因为Salesforce对每个交易都有一些限制,我们称之为州长限制。这些限制确保了系统的稳定性和公平性,防止任何一个交易占用过多的资源,影响到其他用户。 在烤饼干的过程中,我们需要考虑几个关键点: 1. ,查询的数量,:就像你不能无限制地使用面粉一样,Apex交易中你也不能无限制地进行数据库查询。 2. ,CPU时间,:烤饼干需要一定的时间,Apex交易也需要在一定的CPU时间内完成。 3. ,数据库操作次数,:每次你打开烤箱门,都会影响饼干的烤制,同样,Apex交易中的数据库操作次数也是有限制的。 4. ,堆空间,:就像你的烤盘大小有限一样,Apex交易中使用的内存(堆空间)也是有限的。 这些限制的具体数值可能会随着Salesforce的每次更新而变化,所以我们需要时刻关注最新的限制信息。 最后,记住,由于你无法预知哪些其他的Apex代码会作为你交易的一部分运行,所以在编写代码时,一定要考虑到优化,确保你的代码在这些限制内高效运行。 这就是Apex州长限制的基本概念,希望这能帮助你在Salesforce的世界里更好地“烤制”你的Apex代码!

    查看详情
  • 24

    4-7: Profile Limits Using the Developer Console

    第 110 页

    同学们,今天我们来聊聊Salesforce中的开发人员控制台,特别是如何用它来查看和分析我们的任务执行限额。 首先,开发人员控制台是Salesforce提供的一个非常强大的工具,它可以帮助我们开发者调试代码、查看日志、分析性能等。在我们日常的开发工作中,了解如何有效地使用这个工具是非常重要的。 现在,假设我们有一个任务,我们需要查看这个任务在执行过程中使用了多少系统资源,比如CPU时间、数据库查询次数等。这些信息对于优化我们的代码和避免超出Salesforce的系统限制非常关键。 在开发人员控制台中,我们可以通过查看日志来获取这些信息。日志中会详细记录每次执行的详细信息,包括执行的Apex代码、触发的触发器、执行的SOQL查询等。通过分析这些日志,我们可以清楚地看到我们的任务在执行过程中消耗了多少资源。 具体来说,我们可以通过以下步骤来查看日志中的限额分析信息: 1. 打开开发人员控制台。 2. 在“日志”标签页中,找到并打开我们感兴趣的日志。 3. 在日志详情页面,我们可以看到“限额”部分,这里会列出所有相关的系统限额信息,比如CPU时间、SOQL查询次数、DML操作次数等。 4. 通过分析这些数据,我们可以判断我们的任务是否接近或已经超出了Salesforce的系统限制。 通过这种方式,我们不仅可以监控我们的任务执行情况,还可以及时发现潜在的性能问题,从而进行优化。 好了,这就是今天的内容。希望你们能够通过开发人员控制台更好地监控和优化你们的Salesforce任务。如果有任何问题,随时提问哦!

    查看详情
  • 25

    Module Agenda - 111

    第 111 页

    今天我们来聊聊Salesforce的Apex编程。首先,我们会从“开始使用Apex”这个模块开始。Apex是Salesforce平台上的一种强大的编程语言,它允许开发者创建复杂的业务逻辑和自定义功能。 接下来,我们会探讨“Apex为何与众不同”。Apex是专门为Salesforce设计的,它可以直接与Salesforce的数据模型和用户界面集成,这使得它在处理Salesforce数据时非常高效和直接。 然后,我们会进入“使用s对象”这一部分。在Salesforce中,s对象是数据表的基础,每个s对象都代表了一个数据表,比如客户、联系人等。在Apex中,你可以直接操作这些s对象,进行数据的增删改查。 最后,我们会来到“模块4:使用Apex编程”。在这个模块中,我们会深入Apex的编程细节,包括如何编写触发器、批处理类、测试类等。我们会通过实际的例子来学习如何有效地使用Apex来解决实际的业务问题。 这就是我们今天要讨论的模块议程。希望你们能通过这些模块,对Apex有一个全面的了解,并能够在Salesforce平台上有效地使用它。

    查看详情
  • 26

    Working with Data in Apex: A Common Pattern

    第 112 页

    让我们来聊聊在Apex中如何处理数据。想象一下,你有一个装满信息的宝箱,我们的目标就是打开它,看看里面有什么,然后根据需要调整这些信息,最后再把它们安全地放回去。这就是我们在Apex中处理数据的三个主要步骤:获取数据、修改数据、保存数据。 首先,,获取数据,。这就像是你打开宝箱的第一步。在Apex中,我们可以从数据库或者用户那里获取数据。比如,你可能需要从Salesforce的数据库中提取客户的联系信息,或者让用户通过表单输入他们的需求。这一步非常关键,因为你需要确保你获取的数据是准确和有用的。 接下来是,修改数据,。这一步就像是你检查宝箱里的物品,看看哪些需要修理或者更新。在Apex中,这意味着你可能需要更新记录、删除不再需要的数据,或者添加新的信息。例如,如果客户的地址变了,你就需要更新他们的记录。 最后,,保存数据,。这一步确保所有的更改都被安全地保存回数据库。就像你把宝箱重新锁好,确保里面的物品安全无虞。在Apex中,这意味着你需要将修改后的数据写回Salesforce数据库,确保所有的更新都被记录下来。 在接下来的模块中,我们会更详细地探讨每一个步骤,确保你能够熟练地在Apex中处理数据。记住,掌握这些基本的数据处理模式,将帮助你在Salesforce的世界里更加自信和高效。

    查看详情
  • 27

    What is an sObject?

    第 113 页

    让我们来聊聊Salesforce中的s对象。想象一下,s对象就像是Salesforce世界里的各种“东西”。这些“东西”可以是Salesforce自己提供的,比如账户、联系人、案例这些标准对象,也可以是你自己通过用户界面创建的,比如你可能需要一个“课程”或者“课程交付”这样的自定义对象。 在Apex编程中,当你想要操作这些“东西”时,你就是在操作s对象。每一个s对象都有一个共同的“爸爸”,叫做sBody。这个sBody是所有s对象的超类,也就是说,无论是标准对象还是自定义对象,它们都继承了sBody的一些基本特性。 所以,当你听到s对象这个词时,你可以想象它代表的是Salesforce数据库中的一条记录,这条记录有它自己的类型,比如“账户”或者“课程”,同时它也是这个类型的一个具体实例,比如“张三的账户”或者“2023年春季的课程”。 记住,sBody是用来描述这些对象类型和它们的实例的术语。简单来说,s对象就是你在Salesforce中操作的各种数据和记录。

    查看详情
  • 28

    Common Terminology

    第 114 页

    同学们,今天我们来聊聊Salesforce中的一些常用术语,我会尽量用简单的话来解释,让大家都能听懂。 首先,我们来说说“对象”。在Salesforce中,对象就像是你在页面上看到的东西,比如一个客户信息表或者一个产品列表。你可以通过页面布局或者Visualforce页面来操作这些对象。 接下来是“记录”。记录就像是对象中的一行数据。比如,如果你有一个客户对象,那么每个客户的具体信息就是一条记录。 然后是“sObjects”。这个词听起来有点技术性,但其实很简单。在Apex代码中,sObjects就是用来装数据的容器。你可以把它想象成一个盒子,里面放着各种数据,比如客户的名字、电话等。 最后是“元数据”。元数据就像是数据的描述信息。当你定义一个sObject时,这个定义就会被存储为元数据。这样,无论是数据库还是Apex代码,都知道这个sObject长什么样子,里面有什么数据。 总结一下,UI、数据库和Apex中的数据容器虽然有不同的名字,但它们其实都是在处理数据。定义sObject时,这个定义会变成元数据,帮助数据库和Apex理解和使用这些数据。 希望这些解释能帮助大家更好地理解Salesforce中的这些术语。如果有任何问题,随时问我哦!

    查看详情
  • 29

    What's Familiar in this Code Segment?

    第 115 页

    让我们一起来看一下这段代码,看看它有什么特别之处,以及它和Java或C#有什么不同。 首先,这段代码声明了一个方法。这个方法没有返回值,也就是说,它是一个“void”方法。它接受一个参数,这个参数是一个列表,列表中的元素是Course_Delivery_c类型的sObject。sObject是Salesforce中的一种特殊对象,类似于数据库中的记录。 接下来,我们来看看代码的每一行都做了什么: 1. 第一行是方法的声明,它告诉我们这个方法的名字和它接受的参数类型。 2. 第二行声明了一个列表变量,并用列表的构造函数来初始化它。 3. 第三行是一个for循环,它会遍历列表中的每一个元素。 4. 第四行是一个if语句,它检查某个条件是否为真。 5. 第五行是一个赋值语句,它将一个值赋给某个变量。 6. 第六行是一个方法调用,它将一个元素添加到列表中。 现在,我们来看看这段代码和Java或C#有什么不同: - 在第四行,我们使用了“==”符号来比较字符串和字段值。在Java中,我们通常会使用equals方法来比较字符串。 - 在第五行,字符串是用单引号括起来的,而在Java和C#中,我们通常使用双引号。 - 在第六行,变量名是不区分大小写的,这意味着“myVariable”和“myvariable”在Salesforce中是一样的。 - 在第九行,我们看到了一个DML UPDATE语句,这是Salesforce特有的,用于更新数据库中的记录。 通过这些比较,我们可以看到Salesforce的Apex语言和Java或C#有一些相似之处,但也有一些独特的特点。希望这些解释能帮助你更好地理解这段代码!

    查看详情
  • 30

    sObjects and the Declarative Configuration

    第 116 页

    让我们来聊聊Salesforce中的s对象和声明性描述的一些关键点。首先,声明性字段,也就是那些我们在Salesforce界面上通过点击和配置来创建的字段,它们其实也可以在Apex代码中使用。这是一个很酷的功能,因为它意味着你可以在代码中直接操作这些字段,进行数据读取或更新等操作。 但是,这里有一个重要的注意事项:一旦你在Apex代码中使用了某个声明性字段,你就不能随意删除这个字段了。为什么呢?因为如果删除了这个字段,那么依赖于它的Apex代码就会出错,导致功能无法正常运行。所以,在删除字段之前,一定要确保没有任何Apex代码还在使用它。 接下来,我们来看看声明性和程序性是如何在Salesforce平台上相互关联的。简单来说,声明性指的是通过Salesforce的界面进行配置和设置,而程序性则是指通过编写代码(如Apex)来实现功能。这两者并不是孤立的,而是可以相互配合使用的。 举个例子,假设你在Apex代码中引用了一个s对象的字段。那么,你就不能随意删除或修改这个字段,因为这会影响声明性接口中的代码。也就是说,你的Apex代码和Salesforce的声明性配置是紧密相连的,一方的变动可能会影响到另一方。 最后,当你将Apex代码从一个环境迁移到另一个环境时,比如从开发环境迁移到生产环境,你需要确保Apex代码所引用的所有声明性元素(如字段、对象等)都已经存在于目标环境中,或者是你正在迁移的“包”的一部分。否则,代码在目标环境中可能无法正常运行。 好了,这就是关于s对象和声明性描述的一些要点。希望这些内容能帮助你更好地理解Salesforce中的声明性和程序性是如何相互关联的。如果你有任何问题,随时问我哦!

    查看详情
  • 31

    How is an sObject Named in Apex?

    第 117 页

    今天我们来聊聊在Salesforce的Apex中如何命名s对象。首先,我们需要理解s对象和字段的命名规则。在Salesforce中,对象的命名分为标准对象和自定义对象两种。 对于标准对象,它们的API名称通常遵循一个通用的模式。比如,我们常见的Account、Contact等,这些都是标准对象,它们的API名称就是它们的名字本身。 而对于自定义对象,情况就稍微复杂一点。自定义对象的API名称是在你创建对象时设定的名称后面加上“__c”。这个“__c”是Salesforce用来区分标准对象和自定义对象的一个标识。比如,如果你创建了一个自定义对象叫做“Project”,那么它的API名称就是“Project__c”。 现在,你可能会问,这些API名称在哪里可以找到呢?其实,有几种方式可以查看这些名称。首先,你可以使用Salesforce的架构生成器,这是一个图形化的工具,可以帮助你查看和管理你的数据模型。其次,你也可以在设置菜单中找到与对象关联的UI页面,那里也会显示API名称。最后,如果你是一个开发者,你还可以在开发者控制台中查看这些API名称。 需要注意的是,虽然大多数API名称都可以按照上述规则预测,但在某些特殊情况下,它们可能会有所不同。例如,Price Book的API名称就是“PriceBook2”,而不是我们可能预期的“PriceBook”。 好了,这就是今天关于如何在Apex中命名s对象的内容。希望这些信息对你有所帮助,让你在Salesforce的开发之旅上更加顺利。如果你有任何问题,随时欢迎提问!

    查看详情
  • 32

    Using the sObject API Name

    第 118 页

    让我们来一步步解析这段代码,并回答你的问题。 首先,我们来看这段代码: ```apex 联系人 contactToAdd = new 联系人(lastName='Jensen', firstName='Sam'); contactToAdd.firstName = "John"; contactToAdd.lastName = 'Test2'; insert contactToAdd; System.debug('contactToAdd record ID 是:' + contactToAdd.Id); ``` ### 1. 使用s对象API名称 在这段代码中,`联系人`是标准对象的API名称。在Salesforce中,标准对象的API名称通常是单数形式,比如`Account`、`Contact`等。在这里,`联系人`就是`Contact`对象的API名称。 ### 2. 示例-标准对象 `Contact`是Salesforce中的一个标准对象,用于存储联系人的信息。在这段代码中,我们创建了一个新的`Contact`对象实例,并设置了`lastName`和`firstName`字段。 ### 3. 示例-自定义对象 如果我们要使用自定义对象,比如`Certification_Held__c`,我们可以这样写: ```apex Certification_Held__c cert = new Certification_Held__c(Name='Salesforce Admin'); insert cert; ``` ### 4. 在哪一行 - ,联系人是否用作变量的数据类型?, 是的,在第一行 `联系人 contactToAdd = new 联系人(lastName='Jensen', firstName='Sam');` 中,`联系人`被用作变量`contactToAdd`的数据类型。 - ,联系方式是构造函数的名称吗?, 是的,`联系人`在这里也是构造函数的名称。构造函数用于创建对象实例。 - ,联系是否用作方法的返回数据类型?, 在这个例子中,没有直接使用`联系人`作为方法的返回数据类型。但如果你有一个方法返回`Contact`对象,那么`联系人`就会用作返回数据类型。 - ,Certification_Held__c是否用作参数的数据类型?, 在这个例子中,没有使用`Certification_Held__c`作为参数的数据类型。但如果有一个方法接受`Certification_Held__c`类型的参数,那么它就会用作参数的数据类型。 ### 5. 构造s对象时,您可以选择在构造函数中指定字段值 在Apex中,当你创建一个sObject实例时,你可以在构造函数中直接指定字段的值。例如: ```apex Contact contactToAdd = new Contact(lastName='Jensen', firstName='Sam'); ``` 这里,我们在创建`Contact`对象时,直接设置了`lastName`和`firstName`字段的值。 ### 6. 要点总结 - ,s对象API名称与任何其他数据类型一样使用。, 你可以像使用其他数据类型一样使用sObject的API名称,比如`Contact`、`Account`等。 - ,将字段值列表与构造函数一起使用-仅适用于sObjects,不适用于从Apex自定义类实例化的对象。, 这种在构造函数中直接设置字段值的方式只适用于sObjects,不适用于自定义的Apex类。 ### 答案 - ,线1A,:`联系人`被用作变量的数据类型。 - ,线1A,:`联系人`也是构造函数的名称。 - ,线1B,:在这个例子中,`联系人`没有用作方法的返回数据类型。 - ,线1B,:在这个例子中,`Certification_Held__c`没有用作参数的数据类型。 希望这个解释能帮助你更好地理解这段代码!如果有任何问题,随时问我哦!

    查看详情
  • 33

    Referencing Fields within an sObject

    第 119 页

    今天我们来聊聊Salesforce中的自定义字段,特别是那些以“__c”结尾的字段。这些字段是你在Salesforce中自己创建的,用来存储特定的数据。比如,你可能需要一个字段来记录客户的生日,或者一个字段来跟踪产品的特殊属性。这些字段就是自定义字段。 首先,记住一点,所有的自定义字段在Salesforce中都会以“__c”结尾。这个“__c”是Salesforce用来区分标准字段和自定义字段的一个标志。标准字段是Salesforce自带的,比如“Name”或“CreatedDate”,而自定义字段是你自己添加的,所以它们会有这个特殊的后缀。 接下来,我们来说说如何在sObjects中找到这些自定义字段的关系字段名称。sObjects是Salesforce中的对象,比如“Account”或“Contact”。有时候,你可能需要找到这些对象之间的关系字段,比如一个客户(Account)和它的联系人(Contact)之间的关系。 在Salesforce中,找到这些关系字段的名称可能会有点棘手,但你可以使用一些工具来帮助你。比如,你可以使用Salesforce的工作台(Workbench)或者Eclipse IDE。在这些工具中,你可以执行一些查询,来查看对象的结构,包括所有的字段和它们之间的关系。 总的来说,自定义字段是Salesforce中非常强大的一部分,它们让你可以根据自己的需求来定制数据存储。记住它们的命名规则,以及如何找到它们的关系字段,这样你就能更好地管理和使用这些字段了。希望这些信息对你有帮助!

    查看详情
  • 34

    Using Apex to Get Data from the Database

    第 120 页

    同学们,今天我们来聊聊如何使用Apex从Salesforce数据库中获取数据。这里有几个关键点需要记住。 首先,我们使用SOQL(Salesforce Object Query Language)来查询数据。SOQL是专门为Salesforce设计的查询语言,类似于SQL,但更简单一些。 假设我们要从数据库中获取联系人的信息。联系人(Contact)是Salesforce中的一个标准对象,用来存储联系人的详细信息。 在Apex中,当我们使用SOQL查询时,返回的结果通常是一个列表(List)。这个列表中的每个元素都是一个sObject,也就是Salesforce中的对象。在这个例子中,我们查询的是联系人,所以返回的列表类型是List。 举个例子,如果我们想获取所有联系人的名字和邮箱,我们可以这样写: ```apex List contacts = [SELECT Name, Email FROM Contact]; ``` 这段代码的意思是,我们从Contact对象中查询Name和Email字段,并将结果存储在contacts列表中。这个列表中的每个元素都是一个Contact对象,包含了我们查询的字段信息。 简单来说,SOQL查询返回的是一个列表,列表中的每个元素都是我们查询的对象。在这个例子中,我们查询的是联系人,所以返回的是List。 希望这个解释对你们有帮助!如果有任何问题,随时问我哦。

    查看详情
  • 35

    4-8: Work with a Custom Object

    第 121 页

    同学们,今天我们要学习的是如何在Salesforce中使用自定义对象。这个练习特别有趣,因为它会让我们看到用户界面(UI)上的信息是如何转换成变量类型的。这就像是把我们在屏幕上看到的东西,变成计算机能理解的语言。 首先,我们要知道,在这个练习中,我们不会涉及到任何关系字段。也就是说,我们只关注单个对象内部的数据,不涉及它与其他对象的联系。 接下来,我们会用到几个特定的字段,它们的UI名称分别是: 1. 课程交付编号:这就像是每门课程的唯一身份证号码,帮助我们快速识别和查找特定的课程。 2. 区域:这个字段告诉我们课程是在哪个地区进行的,比如北京、上海等。 3. 位置:这指的是课程具体在哪里举行,可能是某个具体的地址或会议室。 4. 开始日期:这个字段告诉我们课程什么时候开始,帮助我们安排时间。 5. 状态:这个字段显示课程的当前状态,比如是“已开始”、“未开始”还是“已结束”。 通过这些字段,我们可以更好地管理和跟踪我们的课程信息。现在,让我们开始动手操作,看看这些UI信息是如何转换成变量类型的吧!

    查看详情
  • 36

    Referencing a Relationship Field on a Child sObject

    第 122 页

    让我们来聊聊Salesforce中的关系字段,特别是关于“孩子”和“父母”的关系。想象一下,你有一个家庭,孩子和父母之间的关系。在Salesforce中,这种关系是通过关系字段来建立的。 首先,问题来了:一个孩子有多少父母?在Salesforce中,通常一个孩子对象只能有一个父母对象。这就像在现实生活中,一个孩子通常有两个父母,但在Salesforce的数据模型中,我们简化了这个关系,通常一个孩子只关联到一个父母。 现在,让我们深入一点。每个关系字段在Salesforce中都有两个含义。对于标准对象,比如Account(账户),我们有一个约定俗成的字段名,比如`AccountId`。这个字段有两个作用: 1. ,ID字段,:当你设置这个字段为父对象的ID时,比如`AccountId = '001XXXXXXXXXXXX'`,你实际上是在告诉Salesforce:“这个孩子对象是属于这个特定的父对象的。”这就像给孩子一个家庭地址,让他知道自己的家在哪里。 2. ,参考字段,:当你通过父对象的单一形式来初始化这个字段时,比如`Account.Name`,你实际上是在说:“给我这个父对象的某个字段的值。”这就像孩子问父母:“爸爸,你的名字是什么?”然后父母回答:“我叫张三。” 在Apex代码中,这种关系字段会被转化为两个字段:一个是ID字段,用来存储父对象的ID;另一个是参考字段,用来访问父对象的字段。 举个例子,如果你想在Apex中设置一个孩子对象的父对象,你可以这样做: ```apex childObject.AccountId = '001XXXXXXXXXXXX'; // 设置父对象的ID ``` 然后,如果你想从孩子对象访问父对象的某个字段,比如父对象的名字,你可以这样做: ```apex String parentName = childObject.Account.Name; // 访问父对象的名字 ``` 这样,你就可以通过孩子对象轻松地获取到父对象的信息了。 总结一下,关系字段在Salesforce中非常重要,它们帮助我们建立对象之间的联系,就像家庭中的父母和孩子一样。通过理解这些关系字段的用法,你可以更好地管理和操作你的Salesforce数据。希望这个解释对你有帮助!

    查看详情
  • 37

    Referencing a Relationship Field on a Child sObject (cont.)

    第 123 页

    让我们来聊聊Salesforce中的关系字段,特别是引用子对象上的关系字段。这部分内容听起来可能有点复杂,但我会尽量用简单的方式来解释。 首先,想象一下,你有两个对象,比如“认证”和“用户”。你想在“用户”对象上创建一个字段,用来引用“认证”对象。这就是我们所说的自定义关系字段。 在Salesforce中,当你创建一个自定义关系字段时,默认情况下,这个字段的名称会基于父对象的名称。比如,如果父对象是“认证”,那么默认的关系字段名称可能就是“认证__c”。这里的“__c”表示这是一个自定义字段。 但是,作为管理员,你可以改变这个默认的名称,给它一个更符合你业务逻辑的名字。 现在,如果你想在“用户”对象上引用“认证”对象,你会使用“认证__c”这个字段。这个字段实际上存储的是“认证”对象的ID,也就是外键(FK)。这意味着,通过这个字段,你可以找到对应的“认证”记录。 但是,如果你想在“用户”对象上直接访问“认证”对象的某个字段,比如“名称”,你就需要使用“认证__r.Name”。这里的“__r”表示这是一个关系字段,它允许你通过关系字段访问父对象的字段。 最后,回答你的问题:是的,你可以在两个标准对象之间建立自定义关系。Salesforce允许你在任何两个对象之间建立关系,无论是标准对象还是自定义对象。 总结一下,理解关系字段的关键在于记住“__c”用于存储外键,而“__r”用于访问父对象的字段。希望这个解释能帮助你更好地理解Salesforce中的关系字段。如果有任何疑问,随时提问!

    查看详情
  • 38

    What Fieldnames Should You Use?

    第 124 页

    同学们,今天我们来讨论一下在Salesforce中如何选择和使用字段名称。这是一个非常重要的技能,因为正确的字段命名不仅能帮助我们更好地理解数据,还能让我们的系统更加高效。 首先,我们来看一下这些字段名称: 1. ,名字 (Name),:这是最基本的字段,通常用于标识记录的名称。 2. ,认证_元素__c (Certification_Element__c),:这是一个自定义字段,用于存储与认证相关的元素。 3. ,认证_元素__r.名称 (Certification_Element__r.Name),:这是一个关系字段,表示与“认证_元素__c”相关联的记录的名称。 4. ,认证_候选人__r.姓名 (Certification_Candidate__r.Name),:这是另一个关系字段,表示与“认证_候选人__c”相关联的记录的姓名。 5. ,认证_candidate__r.Account.name (Certification_Candidate__r.Account.Name),:这是一个更深层次的关系字段,表示与“认证_候选人__c”相关联的账户的名称。 6. ,状态__c (Status__c),:这是一个自定义字段,用于存储记录的状态。 接下来,我们来看一个SOQL查询的例子,这个查询会从“认证_尝试__c”对象中选择一些字段: ```sql SELECT Id, Name, Certification_Element__c, Certification_Element__r.Name, Certification_Candidate__r.Name, Certification_Candidate__r.Account.Name FROM Certification_Attempt__c WHERE Status__c = '已安排' ``` 在这个查询中,我们选择了以下几个字段: - ,Id,:记录的唯一标识符。 - ,Name,:记录的名称。 - ,Certification_Element__c,:与认证相关的元素。 - ,Certification_Element__r.Name,:与“认证_元素__c”相关联的记录的名称。 - ,Certification_Candidate__r.Name,:与“认证_候选人__c”相关联的记录的姓名。 - ,Certification_Candidate__r.Account.Name,:与“认证_候选人__c”相关联的账户的名称。 最后,我们还有一个条件,即,Status__c = '已安排',,这意味着我们只选择那些状态为“已安排”的记录。 同学们,记住,字段命名和关系字段的使用是非常重要的。它们帮助我们更好地组织和管理数据。希望今天的讲解对你们有所帮助!如果有任何问题,随时问我。

    查看详情
  • 39

    What Data Type Should You Use When Going from Child to Parent?

    第 125 页

    同学们,今天我们来讨论一个非常有趣的话题:在Salesforce中,当我们需要从“孩子”对象关联到“父母”对象时,应该使用什么数据类型。这个问题在实际开发中非常常见,所以大家一定要认真听哦! 首先,我们来看一下代码示例。在这个代码中,我们有一个名为`Certification_Attempt__c`的对象,它有一个字段叫做`certification_Element__c`,这个字段是用来存储“孩子”对象与“父母”对象之间的关联的。 ### 数据类型的选择 1. ,ID,:当我们想要存储“孩子”对象与“父母”对象之间的关联时,通常会使用`ID`数据类型。`ID`是Salesforce中用来唯一标识一个记录的字段类型。在这个例子中,`certification_Element__c`字段就是一个`ID`类型的字段,它存储了“孩子”对象与“父母”对象之间的关联。 2. ,联系(Contact),:如果“父母”对象是一个联系人(Contact),那么我们可以使用`Contact`数据类型来存储这个关联。在这个例子中,`certification_candidate__r`字段就是一个`Contact`类型的字段,它存储了与“孩子”对象关联的联系人记录。 3. ,账户(Account),:如果“父母”对象是一个账户(Account),那么我们可以使用`Account`数据类型来存储这个关联。在这个例子中,`certification_candidate__r.Account`字段就是一个`Account`类型的字段,它存储了与“孩子”对象关联的账户记录。 ### 代码解析 让我们来看一下代码的具体实现: ```java if (oldCertAttempts.size() > 0) { Certification_Attempt__c certificationAttempt = oldCertAttempts[0]; Id var1 = certificationAttempt.certification_Element__c; // 使用ID数据类型 Contact var2 = certificationAttempt.certification_candidate__r; // 使用Contact数据类型 Account var3 = certificationAttempt.certification_candidate__r.Account; // 使用Account数据类型 } ``` 在这个代码中: - `var1`是一个`ID`类型的变量,它存储了`certification_Element__c`字段的值。 - `var2`是一个`Contact`类型的变量,它存储了`certification_candidate__r`字段的值。 - `var3`是一个`Account`类型的变量,它存储了`certification_candidate__r.Account`字段的值。 ### 总结 所以,当我们需要从“孩子”对象关联到“父母”对象时,通常会使用`ID`、`Contact`或`Account`数据类型。具体使用哪种数据类型,取决于“父母”对象的类型。 好了,今天的课程就到这里。希望大家能够理解并掌握这些知识点。如果有任何问题,欢迎随时提问! --- ,板书内容:, - ,数据类型选择:, - `ID`:用于存储“孩子”与“父母”之间的关联。 - `Contact`:如果“父母”是联系人。 - `Account`:如果“父母”是账户。 - ,代码示例:, ```java if (oldCertAttempts.size() > 0) { Certification_Attempt__c certificationAttempt = oldCertAttempts[0]; Id var1 = certificationAttempt.certification_Element__c; Contact var2 = certificationAttempt.certification_candidate__r; Account var3 = certificationAttempt.certification_candidate__r.Account; } ```

    查看详情
  • 40

    Referencing a Relationship Field on a Parent sObject

    第 126 页

    让我们来聊聊在Salesforce中如何引用父对象和子对象之间的关系字段。这个话题对于理解数据模型和编写Apex代码非常重要。 首先,想象一下,你有一个家庭,家庭中有父母和孩子。在Salesforce中,父对象就像是父母,而子对象就像是孩子。一个父母可以有多个孩子,这就是所谓的“一对多”关系。 在Apex代码中,当你想要访问父对象的子对象时,你会使用一个列表来引用这些子对象。这个列表的名字通常是子对象的复数形式。比如,如果你有一个叫做“联系人”的子对象,那么在Apex中,你会使用“联系人s”来引用这些子对象的列表。 这里有一个小技巧:对于标准的对象关系,比如联系人,你只需要在对象名字后面加个“s”就可以了。但是,如果你使用的是自定义对象关系,比如你有一个自定义对象叫做“课程”,那么在Apex中,你会把“课程__c”变成“课程__r”来引用这些子对象的列表。 最后,记住,子对象上会有一个字段,默认情况下,这个字段会引用到父对象。这样,你就可以轻松地在子对象和父对象之间建立联系了。 希望这个解释能帮助你更好地理解Salesforce中的对象关系。如果你有任何问题,随时问我!

    查看详情
  • 41

    What Data Type Should You Use When Going from Parent to Child?

    第 127 页

    同学们,今天我们来聊聊在Salesforce中,当数据从父母对象传递到孩子对象时,应该使用什么数据类型。这个问题其实很常见,尤其是在处理对象之间的关系时。 首先,我们要明确的是,当我们在处理一对多的关系时,也就是说,一个父母对象可能对应多个孩子对象,这时候我们就需要使用复数形式来表示这些孩子对象。在Salesforce中,这通常通过使用“__r”后缀来实现。 举个例子,假设我们有一个名为“Certification_Element__c”的父母对象,它有一个孩子对象叫做“Certification_Attempt__c”。那么,当我们想要从父母对象访问孩子对象时,我们应该使用“Certification_Attempt__r”来表示这些孩子对象。 接下来,我们来看一段代码示例: ```apex List oldCertElements = [SELECT Id, Name, (SELECT Id, Name, Certification_Candidate__r.Name FROM Certification_Attempts__r) FROM Certification_Element__c WHERE Type__c = 'Lab']; if (oldCertElements.size() > 0) { Certification_Element__c certificationElement = oldCertElements[0]; List certAttempts = certificationElement.Certification_Attempts__r; } ``` 在这段代码中,我们首先查询了所有类型为“Lab”的“Certification_Element__c”对象,并且通过子查询获取了每个“Certification_Element__c”对象对应的“Certification_Attempt__c”对象。这里的关键点在于,我们使用了“Certification_Attempts__r”来访问这些孩子对象。 最后,我们检查了查询结果是否为空,如果不为空,我们就获取了第一个“Certification_Element__c”对象,并且通过“Certification_Attempts__r”获取了所有相关的“Certification_Attempt__c”对象。 总结一下,当我们在Salesforce中处理从父母到孩子的数据传递时,应该使用复数形式的数据类型,并且通过“__r”后缀来访问这些孩子对象。希望这个解释对你们有所帮助!

    查看详情
  • 42

    Data Type: Id

    第 128 页

    今天我们来聊聊Salesforce中的ID数据类型,特别是15字符和18字符的ID。这个知识点对于理解Salesforce的数据处理非常重要。 首先,Salesforce中的ID是用来唯一标识一个记录的。你可能会注意到,有时候ID是15个字符,有时候是18个字符。这两种ID都是区分大小写的,这意味着如果你在Salesforce中使用它们时,大小写必须完全匹配,否则系统无法识别。 15字符的ID通常可以在经典用户界面的对象详细信息页面的URL中看到。而18字符的ID则出现在日志和Lightning用户界面中,这是Salesforce推荐的表示方式。 那么,为什么会有两个版本呢?15字符的ID是存储在数据库中的原始形式。后来,为了支持不区分大小写的应用程序,Salesforce在API 2.0及更高版本中引入了18字符的ID。这是因为如果外部系统将15字符的ID视为不区分大小写,可能会导致唯一性问题,即两个不同的ID可能被错误地认为是相同的。而18字符的ID则确保了即使在不区分大小写的情况下,每个ID也是唯一的。 因此,当你在使用API时,应该始终使用18字符的ID。这样可以避免在数据比较时出现错误。 如果你需要将15字符的ID转换为18字符的ID,可以参考一些在线资源,比如Salesforce的官方文档或者社区论坛,那里有详细的转换方法和工具。 最后,记住一点:永远不要硬编码ID。因为ID在不同的Salesforce环境中是不同的,硬编码会导致代码在不同的环境中无法正常工作。 希望这个解释能帮助你更好地理解Salesforce中的ID数据类型。如果你有任何问题,随时提问!

    查看详情
  • 43

    4-9: Use Record Ids to Access an Account in the UI

    第 129 页

    同学们,今天我们来学习如何使用记录ID在Salesforce中访问语音信箱中的帐户。这个过程其实很简单,我们只需要几个步骤就可以完成。 首先,我们需要查询数据库中的联系人记录。我们只需要查询两个字段:ID和姓名。这个ID是每个记录在Salesforce中的唯一标识符,就像每个人的身份证号码一样,是独一无二的。 查询完成后,我们会得到一个记录列表。在这个列表中,我们需要找到我们感兴趣的那个联系人记录,然后复制它的ID。这个ID就是我们接下来要使用的关键。 接下来,我们使用这个ID在Salesforce的用户界面(UI)中显示关联的联系人页面。你只需要在浏览器的地址栏中输入这个ID,然后按下回车键,Salesforce就会自动跳转到这个联系人的详细页面。 通过这个过程,我们不仅学会了如何使用记录ID来访问特定的联系人记录,还探索了记录ID在Salesforce中的重要性。记录ID是我们在Salesforce中快速定位和访问特定记录的关键。 好了,这就是我们今天的内容。希望你们都能掌握这个技能,并在实际工作中灵活运用。如果有任何问题,随时提问。我们下次再见!

    查看详情
  • 44

    Key Takeaways - 130

    第 130 页

    今天我们来聊聊Salesforce中的Apex语言。Apex是一种非常强大的面向对象的编程语言,它让你能够在Salesforce的Lightning平台上自定义和创建应用程序。你可以把它想象成一种工具,帮助你更灵活地使用Salesforce。 Apex是Salesforce平台的一部分,这意味着它能够与平台的其他功能无缝交互。比如,你可以用Apex来操作数据、自动化业务流程,甚至创建复杂的逻辑。不过,Apex并不是孤立的,它依赖于Salesforce的其他功能,比如数据库、用户界面等。 在使用Apex时,有一个非常重要的概念叫做“州长限制”(Governor Limits)。这些限制是为了确保系统的稳定性和公平性。简单来说,Salesforce会监控你的Apex代码,确保它不会占用过多的系统资源。比如,你不能在一个事务中查询过多的数据,或者执行过多的操作。这些限制是为了防止某个用户或应用程序占用太多资源,影响其他用户的使用。 接下来,我们来说说s对象。s对象是Apex中用来表示Salesforce中标准或自定义对象的类。你不需要自己定义这些类,Salesforce已经为你准备好了。比如,如果你想操作一个客户记录,你可以直接使用Account这个s对象,而不需要从头开始定义一个类。 最后,有几个关键点需要记住: 1. Apex是Salesforce的一部分,它与其他平台功能紧密集成。 2. 你不需要自己定义s对象类,Salesforce已经为你准备好了。 3. Salesforce了解Apex,所以你可以直接使用平台提供的功能。 4. 如果你在Apex代码中使用了某个字段,你就不能删除这个字段,否则代码会出错。 5. 州长限制是为了确保系统的稳定性和公平性,所以编写代码时要注意这些限制。 希望这些内容能帮助你更好地理解Apex和Salesforce的关系。如果你有任何问题,随时问我!

    查看详情
  • 45

    Knowledge Check - 131

    第 131 页

    让我们来一步步解答这些问题。 首先,关于“什么可以正确完成最终陈述?”这个问题,其实是在问我们如何确保一个陈述或结论是正确的。在编程中,这通常意味着我们需要确保我们的代码逻辑是正确的,数据是准确的,并且我们使用的条件或表达式能够准确地反映出我们想要的结果。 接下来,我们来看第二个问题:“使用什么条件表达来确定两个s对象的内容是否相等?”这里给出了四个选项: 1. `sObj1 == sObj2` 2. `sObj1.equals(sObj2)` 3. `sObj1 = sObj2` 4. `sObj1.eq(sObj2)` 在Java或Apex(Salesforce的编程语言)中,`==` 是用来比较两个对象的引用是否相同,也就是说,它们是否指向内存中的同一个对象。而 `.equals()` 方法则是用来比较两个对象的内容是否相等。所以,正确的答案是 `sObj1.equals(sObj2)`,也就是选项B。 最后,我们来看第三个问题,关于知识检查的代码片段。这里有一些变量需要填充: ```java Certification_Attention__c certAttention = ...; // 假设这是从数据库填充的。 String 证书元素名称 = ...; Certification_Element__c certElement = ...; // 假设这是从数据库填充的。 List 认证尝试 = ...; ``` 根据给出的答案: 1. `certAttement.Certification_Element__r.Name;` 这里应该是 `certAttention.Certification_Element__r.Name;`,用来获取与 `certAttention` 相关联的 `Certification_Element__c` 记录的 `Name` 字段值。 2. `certElement.Certification_Attempts__r.size();` 这里应该是 `certElement.Certification_Attempts__r.size();`,用来获取与 `certElement` 相关联的 `Certification_Attempt__c` 记录的数量。 所以,正确的代码应该是: ```java String 证书元素名称 = certAttention.Certification_Element__r.Name; List 认证尝试 = certElement.Certification_Attempts__r; ``` 希望这些解释能帮助你更好地理解这些问题!如果有任何疑问,随时问我哦。

    查看详情
  • 46

    Knowledge Check (cont.)

    第 132 页

    让我们来聊聊这个问题。当你在Salesforce中编写代码时,有时候可能会不小心超出系统设定的管理器限制。那么,如果发生了这种情况,系统会怎么处理呢? 首先,系统不会让你继续执行那些超出限制的代码。它会立即停止这些代码的运行,以防止对系统造成更大的影响。然后,系统会抛出一个异常。这个异常是不可恢复的,也就是说,一旦抛出,代码就无法继续执行下去了。 所以,正确的答案是第4个选项:系统会抛出不可恢复的异常。这意味着你需要回去检查你的代码,找出哪里超出了限制,并进行修复,然后才能再次尝试运行。 希望这个解释能帮助你理解当代码超出管理器限制时会发生什么。如果你还有其他问题,随时问我哦!

    查看详情
  • 47

    Trailhead Homework - 133

    第 133 页

    今天我们来聊聊关于Salesforce Trailhead的家庭作业教学要点。首先,Trailhead是一个非常棒的学习平台,特别是对于那些想要复习和提升PD1(Platform Developer 1)技能的同学来说。它提供了很多实用的模块,可以帮助大家更深入地理解我们在课堂上讨论的各种概念和技术。 这次的家庭作业,我给大家推荐了一个特定的Trailhead模块,链接我已经放在这里了:https://trailhead.salesforce.com/projects/quickstart-apex。这个模块主要是关于Apex的基础知识,Apex是Salesforce的一种编程语言,非常强大,可以用来创建复杂的业务逻辑和自定义功能。 这个作业的目的是让你们在课后自己动手实践,通过完成这个模块,你们可以更好地掌握Apex的基础知识,比如如何编写和调试Apex代码,如何理解Apex的语法结构等。记住,这个作业是让你们在课后完成的,课堂上我们会有其他的活动和讨论。 所以,请大家在课后抽时间完成这个Trailhead模块,通过实践来巩固和加深对Apex的理解。如果在学习过程中遇到任何问题,随时可以来问我。希望你们都能从这个作业中学到很多,加油!

    查看详情