65.9K
CodeProject 正在变化。 阅读更多。
Home

Force.com 基础知识 - 了解云如何使开发应用程序的速度提高 5 倍

2009 年 9 月 22 日

CPOL

30分钟阅读

viewsIcon

27029

这是一个绝佳的机会,让您成为构建云应用程序的专家,并为您的简历增光添彩。云应用程序市场正在快速增长,拥有合适技能的开发人员的职业机会也在成倍增加。提升您的技能,保持在领先地位

在上一个章节中,我们通过定义 Position 自定义对象、选项卡和几个简单的字段,快速启动了我们的 Recruiting 应用程序。这个应用程序的简单版本与 Force.com 中的任何其他页面都具有相同的外观和感觉,而且我们在几分钟内就能将其构建起来。

在本章中,我们将增强 Positions 选项卡:首先通过定义一些更高级的字段,然后通过定义验证规则来确保我们的数据保持干净,最后通过重新排列页面布局中的字段。这些补充将有助于将我们 Positions 选项卡的详细信息页面从一种有些平淡且笨拙的用户界面,转变为用户认为强大且直观的界面。让我们开始吧!

了解云如何加快开发速度。获取免费的 Force.com 基础知识书籍。(价值 39.99 美元)。

添加高级字段

在本节中,让我们重新审视自定义字段向导,帮助我们创建具有更复杂功能的字段:选择列表、依赖选择列表以及利用自定义公式的字段。我们将看到平台的用户界面如何帮助我们完成这些更复杂字段的设置。

介绍选择列表

在查看我们期望 Positions 页面最终外观的预览时,有几个字段指定了下拉列表。在 Force.com 术语中,这些字段称为选择列表,它们包含用户可以从中选择的几个预定义选项。

选择列表有两种类型:标准选择列表,用户只能选择一个选项;多选选择列表,用户可以一次选择多个选项。对于我们的 Position 对象,我们需要为职位的地点、状态、工作类型、职能领域和职位级别定义标准选择列表。

地点选择列表字段

尝试操作:添加选择列表

让我们一步步地创建 Location 选择列表字段。然后,与上一章一样,我们将提供您创建其他字段所需的信息。

  1. 点击 设置 | 创建 | 对象
  2. 点击 Position
  3. 在“自定义字段和关系”相关列表中,点击 新建
  4. 选择“选择列表”数据类型,然后点击 下一步
  5. 在“字段标签”文本框中,输入 Location。
  6. 在下面的大文本区域框中,在每一行输入以下选择列表值:
    • San Francisco, CA
    • Austin, TX
    • Boulder, CO
    • London, England
    • New York, NY
    • Mumbai, India
    • Sydney, Australia
    • Tokyo, Japan
  7. 选中“使用第一个值作为默认值”复选框。

此选项允许我们用默认值填充字段。如果取消选中它,则所有新职位记录的字段将默认为“无”。否则,字段将默认为您在可能选择列表值列表中指定的第一个值。由于 Universal Containers 的大多数职位都基于其总部所在地 San Francisco, CA,因此这应该是默认值。

  1. 接受字段级安全性和页面布局的所有其他默认设置。
  2. 点击 保存并新建

很容易!现在,根据下表指定其余的选择列表:

数据类型 字段标签 选择列表值 按字母顺序排序? 使用第一个值作为默认值?
选择列表 状态
  • New Position
  • Pending Approval
  • Open - Approved
  • Closed - Filled
  • Closed - Not Approved
  • Closed - Canceled
选择列表 类型
  • Full Time
  • Part Time
  • Internship
  • Contractor
选择列表 Functional Area
  • Finance
  • Human Resources
  • Information Technology
  • Retail Operations
  • Warehousing
  • 杂项
选择列表 Job Level
  • FN-100
  • FN-200
  • FN-300
  • FN-400
  • HR-100
  • HR-200
  • HR-300
  • HR-400
  • IT-100
  • IT-200
  • IT-300
  • IT-400
  • RO-100
  • RO-200
  • RO-300
  • RO-400
  • WH-100
  • WH-200
  • WH-300
  • WH-400
  • MC-100
  • MC-200
  • MC-300
  • MC-400

介绍字段依赖关系

现在我们已经创建了所有这些选择列表,请回答一个问题:您点击了多少次下拉列表,发现选项太多了?例如,您可能从国家列表中选择乌拉圭,但列表中有世界上所有的国家。这意味着您不得不一直滚动到以字母 U 开头的国家。太麻烦了!

幸运的是,Force.com 的开发者们自己也遇到过这种情况几次,因此他们为我们提供了一个工具来帮助我们避免在自己的选择列表字段中出现这个问题:字段依赖关系。

字段依赖关系是过滤器,允许我们根据另一个字段的值来更改选择列表的内容。例如,与其在单个选择列表中显示国家的所有值,不如根据“大陆”等另一个字段的值来限制显示的值。这样,用户就可以更快、更轻松地找到合适的国家。

选择列表字段可以是控制字段或依赖字段。控制字段控制一个或多个相应依赖字段的可用值。依赖字段显示基于其相应控制字段中选择的值的值。在前面的示例中,“大陆”选择列表是控制字段,“国家”选择列表是依赖字段。

尝试操作:创建依赖选择列表

看看我们创建的选择列表,很明显,我们的用户可能会对 Job Level 选择列表的长度感到沮丧。让我们通过将 Job Level 设为 Functional Area 选择列表的依赖字段来让用户满意。这样做将允许用户在 Functional Area 选择列表中选择一个部门时,只看到四个相关的职位级别值。

  1. 点击 设置 | 创建 | 对象
  2. 点击 Position
  3. 在“自定义字段和关系”相关列表中,点击 字段依赖关系
  4. 点击 新建
  5. 在“控制字段”下拉列表中,选择 Functional Area。
  6. 在“依赖字段”下拉列表中,选择 Job Level。
  7. 点击 继续

将显示一个字段依赖关系矩阵,其中控制字段的所有值都在顶部标题行中,依赖字段的值列在下面的列中。对于控制字段的每个可能值,我们需要包含当选择该控制值时应在依赖选择列表中显示的值。在字段依赖关系矩阵中,黄色高亮显示了特定控制字段值包含在选择列表中的依赖字段值。

字段依赖关系矩阵

要包含依赖字段值,只需双击它即可。要从列表中排除依赖值,请再次双击它。

例如,让我们尝试一下,包括在 Functional Area 选择列表中选择 Finance 时应在 Job Level 选择列表中显示的值。

  1. 在标记为 Finance 的列中,双击 FN-100、FN-200、FN-300 和 FN-400。

这四个字段现在应在 Finance 列中显示为黄色。

与其双击所有 Job Level 值,我们还可以使用 SHIFT+单击来选择一系列值,或使用 CTRL+单击一次选择多个值。一旦这些值以蓝色高亮显示,我们就可以单击 包含值 来包含它们,或单击 排除值 来删除它们。让我们试试。

  1. 在标记为 Human Resources 的列中,单击 HR-100,然后按住 SHIFT 键同时单击 HR-400。
  2. 点击 包含值

现在我们为 Finance 和 Human Resources 列都选择了值!

  1. 继续突出显示所有其余列的相应值,如以下表格所示。

提示

要访问为此步骤需要修改的所有值,您需要单击 上一步下一步 来查看其他列。
表 2. 职能领域和职位级别字段依赖关系矩阵

Functional Area
(控制选择列表字段)

Job Level
(依赖选择列表字段)

Finance
  • FN-100
  • FN-200
  • FN-300
  • FN-400
Human Resources
  • HR-100
  • HR-200
  • HR-300
  • HR-400
Information Technology
  • IT-100
  • IT-200
  • IT-300
  • IT-400
Retail Operations
  • RO-100
  • RO-200
  • RO-300
  • RO-400
Warehousing
  • WH-100
  • WH-200
  • WH-300
  • WH-400
杂项
  • MC-100
  • MC-200
  • MC-300
  • MC-400
  1. 点击 预览 在一个小弹出窗口中测试结果。
  2. 点击 **保存**。

看看我们做了什么

现在我们已经创建了所有选择列表,让我们重新访问 Positions 选项卡,看看我们到目前为止所做的。

  1. 转到 Positions 选项卡。
  2. 点击 新建
  3. 在 Functional Area 选择列表中,选择 Finance。
  4. 打开 Job Level 选择列表。

依赖选择列表字段

我们的 Recruiting 应用程序用户会很高兴他们不再需要处理冗长、繁琐的选择列表。现在让我们添加一个比依赖选择列表更强大、更复杂的字段:自定义公式字段。

介绍自定义公式字段

到目前为止,我们定义的字段都有一个共同点——每个字段都需要用户为其提供一个值。像这样的字段对于存储和检索数据非常有用,但如果我们能够以某种方式定义一个“智能”字段,那不是很棒吗?也就是说,如果我们能够定义一个字段,它查看系统中已输入的信息,然后告诉我们一些新的东西呢?

幸运的是,自定义公式字段使我们能够做到这一点。就像您可以使用 Microsoft Excel 等电子表格程序为您的业务定义特定的计算和指标一样,我们可以使用自定义公式字段来定义适合我们的 Recruiting 应用程序的特定计算和指标。

例如,在我们的 Position 对象上,我们已经创建了最低薪资和最高薪资字段。如果 Universal Containers 根据薪资发放年度奖金,我们可以创建一个自定义公式字段,自动计算该职位可能获得的平均奖金。

如果我们使用电子表格,将如何执行此计算?电子表格中的列将代表我们在 Position 对象上定义的字段,电子表格的每一行将代表一个不同的职位记录。要创建计算,我们将在新列中输入一个公式,该公式计算单行中 Min Pay 和 Max Pay 值的平均值,然后将其乘以标准的奖金百分比。然后,我们可以确定电子表格中每个职位记录行的平均奖金。

自定义公式的工作方式非常相似。将自定义公式视为电子表格公式,它可以引用同一数据记录中的其他值,对其进行计算,然后返回结果。但是,您使用的是合并字段引用,而不是单元格引用。而且,您使用向导来帮助您选择字段、运算符和函数,而不是在框中键入字符。

最终结果是任何人都可以快速轻松地学习创建公式字段。而且,与所有平台工具一样,云计算交付模式使实验变得容易。您可以创建一个公式,查看结果,并一次又一次地更改公式,随心所欲!您的基础数据永远不会受到影响。

提示

在定义自己的自定义公式字段时,请利用他人的工作成果。您可以在 Salesforce.com 社区网站上找到一百多个示例公式,网址为 http://blogs.salesforce.com/features/2006/03/custom_formula_.html

计算职位已开放多长时间

现在让我们考虑一下我们可以为我们的 Position 对象创建的另一个自定义公式字段——一个计算职位已开放天数的自定义公式字段。为此,让我们首先考虑用于定义该字段的逻辑,然后我们将逐步在我们的 Recruiting 应用程序中创建它。

让我们考虑我们需要进行此计算的数据:我们需要知道当前日期以及职位创建的日期。如果我们能以某种方式减去这两个日期,我们就能知道职位已开放的天数。幸运的是,获取这两个值很容易。

  • 对于当前日期,我们可以简单地使用平台内置的 TODAY() 函数。TODAY() 返回今天的日期。
  • 对于职位开放的日期,我们可以使用我们在上一章中定义的 Open Date 字段。由于我们在自定义字段中使用它,我们将使用其内部名称 Open_Date__c 来引用它。

现在我们有了两个日期,我们想将它们相减:TODAY() - Open_Date__c。即使两个日期跨越不同的月份或年份,平台也足够智能,可以在后台处理此类计算的所有复杂性。我们只需要提供日期,平台就可以完成所有剩余的工作。

到目前为止一切顺利,但仍然存在一个问题——如果职位已经关闭怎么办?我们的公式仅在我们假设职位仍然开放时才有效。但是,一旦关闭,我们当前公式的值将每天递增,因为 TODAY() 离原始 Open Date 越来越远。如果可能,我们希望在职位关闭后在公式中使用 Close Date 字段而不是 TODAY()。我们该怎么做?

再次,我们只需要利用丰富的平台函数库。IF() 函数允许我们执行测试,然后根据测试结果是真还是假返回不同的值。IF() 函数的语法如下:

 IF(logical_test,
           value_if_true,
           value_if_false)

对于 logical_test 部分,我们将测试 Close Date 字段是否有值——如果有,该职位显然必须已关闭。我们将使用第三个内置函数来测试此:ISNULL()ISNULL() 接受单个字段并返回 true(如果它不包含值)和 false(如果它包含值)。因此,我们的公式现在如下所示:

IF( ISNULL( Close_Date__c ) ,
           value_if_true,
           value_if_false)

通过替换 value_if_truevalue_if_false 为我们之前讨论过的其他公式,我们现在已经完成了我们的整个公式。

IF( ISNULL( Close_Date__c ) ,
             TODAY()  -  Open_Date__c ,
             Close_Date__c  -  Open_Date__c )

太棒了!我们的公式可以计算职位已开放的天数,无论它当前是开放还是已关闭。现在,让我们在我们的 Position 对象上为此定义一个字段。

尝试操作:定义“已开放天数”自定义公式字段

我们将以与创建其他自定义字段相同的方式开始构建公式字段。

  1. 点击 设置 | 创建 | 对象
  2. 点击 Position
  3. 在“自定义字段和关系”相关列表中,点击 新建
  4. 选择“公式”数据类型,然后点击 下一步

“新建自定义字段”向导的第 2 步出现。

自定义公式字段向导第 2 步

  1. 在“字段标签”字段中,输入 Days Open。
  2. 选择“数字”公式返回类型。

在这种情况下,即使我们正在减去日期字段,我们也希望最终得到一个常规的数字值。

  1. 将“小数位数”值更改为 0,然后点击 下一步

现在是时候输入我们公式的详细信息了。

  1. 点击“高级公式”选项卡,如下图所示。

自定义公式字段编辑器

我们想使用“高级公式”选项卡,以便能够通过右侧的“函数”列表访问平台内置函数。

  1. 从“函数”列表中,双击 IF

我们的公式现在看起来像这样:

 IF(logical_test, value_if_true, value_if_false)

让我们继续定义逻辑测试。

  1. 从公式中删除 logical_test,但将光标保留在那里。
  2. 从“函数”列表中,双击 ISNULL
  3. 从您刚刚插入的 ISNULL 函数中删除 expression,但将光标保留在那里。
  4. 点击 插入字段 按钮。覆盖层中出现两列。
  5. 在左列中,选择 Position。
  6. 在右列中,选择 Close Date。
  7. 点击 插入

您是否注意到,您不必记住使用 Close Date 字段的内部名称?平台在插入值时为您记住了。我们的公式现在看起来像这样:

IF( ISNULL( Close_Date__c ) , value_if_true, value_if_false)

现在,让我们指定逻辑测试评估为 true 时的值。

  1. 从公式中删除 value_if_true,但将光标保留在那里。
  2. 按 Enter 键,然后向右移动 10 个空格。

添加回车符和空格使我们的公式对其他人来说更易读。

  1. 从“函数”列表中,双击 TODAY
  2. 点击 插入运算符 按钮并选择 Subtract。
  3. 点击 插入字段 按钮。
  4. 在左列中,选择 Position。
  5. 在右列中,选择 Open Date。
  6. 点击 插入

我们越来越接近了——我们的公式现在看起来像这样:

IF( ISNULL( Close_Date__c ) ,
          TODAY()  -  Open_Date__c , value_if_false) 

最后,让我们指定逻辑测试评估为 false 时的值。

  1. 从公式中删除 value_if_false,但将光标保留在那里。
  2. 按 Enter 键,然后向右移动 10 个空格。
  3. 点击 插入字段 按钮。
  4. 在左列中,选择 Position。
  5. 在右列中,选择 Close Date 并点击 插入
  6. 点击 插入运算符 并选择 Subtract。
  7. 点击 插入字段 按钮。
  8. 在左列中,选择 Position。
  9. 在右列中,选择 Open Date 并点击 插入

我们的公式现在与我们最初的公式匹配:

IF( ISNULL( Close_Date__c ) ,
          TODAY()  -  Open_Date__c ,
          Close_Date__c  -  Open_Date__c )

现在我们已经完成了这个过程的这些步骤,请注意,我们可以直接输入我们在上一节中确定的公式。但是,使用公式编辑器要容易得多,因为您不必记住函数语法或字段和对象的内部名称。让我们继续完成此字段。

  1. 点击 检查语法 来检查您的公式是否存在错误。
  2. 在“描述”文本框中,输入职位已开放(或曾经开放)的天数。
  3. 如果需要,添加可选的帮助文本描述。
  4. 选择“将空白字段视为空白”,然后点击 下一步
  5. 接受所有剩余的字段级安全性和页面布局默认设置。
  6. 点击 **保存**。

尝试操作:为字段设置动态默认值

我们还可以使用自定义公式为我们的字段提供动态默认值。虽然 Travel Required 复选框或 Job Location 选择列表等字段在每种情况下都有适用的默认值,但其他字段的默认值并非如此容易定义。例如,在 Universal Containers,招聘人员通常需要在职位开放后的 90 天内填补该职位。虽然我们无法选择一个总是比职位开放日期晚 90 天的日期,但我们可以定义一个自定义公式,该公式取职位创建日期并加 90 天。平台允许我们将此公式指定为 Hire By 字段的默认值。

  1. 点击 设置 | 创建 | 对象
  2. 点击 Position
  3. 在“自定义字段和关系”相关列表中,点击 编辑 旁边的 Hire By 字段。
  4. 在“默认值”文本框旁边,点击 显示公式编辑器

看起来很熟悉?这与我们用来定义 Days Open 自定义公式字段的编辑器类似。

  1. 从“函数”列表中,双击 TODAY
  2. 点击 插入运算符 按钮,然后选择 Add。
  3. 键入 90。

您的默认值公式应该是:

TODAY() + 90
  1. 点击 **保存**。

就是这么简单!现在,为了完成我们的 Positions 选项卡上的字段,让我们将 Open Date 字段的默认值设置为记录创建的日期。为此,请再次按照这些步骤操作,但使用 TODAY() 作为默认值。

看看我们做了什么

让我们重新访问 Positions 选项卡,看看我们刚刚做了什么。

  1. 点击 Positions 选项卡。
  2. 点击 新建

我们的 Days Open 公式字段未显示在我们的 Position 编辑页面上——那是因为它是一个公式字段,不需要用户输入即可显示。但是,我们可以看到我们的 Open Date 和 Hire By 字段已经有了默认值:Open Date 应该是今天的日期,Hire By 是 90 天后。我们可以根据需要更改这些值,或者就这样保留它们。

为了查看我们的 Days Open 字段,我们将不得不定义我们的第一个职位记录。让我们现在就做。

  1. 输入任何您想用于定义新职位的的值。至少,您必须为必需的 Position Title 字段输入一个值。
  2. 点击 **保存**。

新的职位现在将显示在其自己的记录详细信息页面中。在该页面的底部,请注意我们的 Days Open 公式字段,就在 Created By 字段的上方。它应该显示 0,因为我们刚刚创建了该职位。如果您想查看值如何变化,请编辑记录并将 Open Date 设置为一周前。是不是很棒?

介绍验证规则

现在我们已经定义了 Position 对象上所需的所有字段,让我们看看是否可以阐述关于应输入到这些字段中的数据的几条规则。即使 Universal Containers 的招聘人员和招聘经理很聪明,每个人有时都会在填写表单时犯错误,而一个好的应用程序应该能够捕获明显的错误。

例如,Min Pay 字段的值大于 Max Pay 字段的值有意义吗?或者,如果 Status 字段设置为 Closed - Filled 或 Closed - Not Approved,Close Date 是否应该不指定?显然不是。我们可以通过平台另一个内置功能来捕获我们应用程序中的此类错误:验证规则。

验证规则会验证用户在您的应用程序中输入的数据是否符合您指定的标准。如果不符合,验证规则将阻止保存记录,用户将在有问题的字段旁边或编辑页面顶部看到您定义的错误消息。现在让我们为我们的 Recruiting 应用程序构建几个验证规则。

注意

您可以在 Salesforce.com 社区网站上找到数十个示例验证规则,网址为 http://blogs.salesforce.com/features/2006/12/data_validation.html

尝试操作:为 Min 和 Max Pay 定义验证规则

对于我们的第一个验证规则,让我们从简单的开始:Min Pay 永远不应大于 Max Pay。

  1. 点击 设置 | 创建 | 对象
  2. 点击 Position
  3. 在“验证规则”相关列表中,点击 新建

验证规则编辑页面

  1. 在“规则名称”文本框中,输入 Min_Pay_Rule。

验证规则的名称不能包含任何空格,但如果您忘记了,平台会很乐意将它们更改为下划线(_)。

  1. 选中“激活”复选框。

此复选框指定验证规则在保存后是否应立即开始工作。因为这个规则相当直接(而且我们想稍后测试它!),所以现在就打开它是有意义的。

  1. 在“描述”文本框中,输入 Min Pay 永远不应超过 Max Pay。

现在是时候定义我们验证规则的核心部分了:错误条件。如果您在查看页面的“错误条件公式”区域时有一种似曾相识的感觉,请不要惊慌!就像公式字段和默认字段值一样,验证规则可以利用许多内置运算符和函数来定义真/假错误条件,以确定数据是否有效。当此条件评估为 true 时,将显示错误消息,并且无法保存记录。

我们希望在 Min Pay 大于 Max Pay 时,错误条件为 true,因此让我们使用公式编辑器来立即指定它。

  1. 点击 插入字段 按钮。与公式字段编辑器一样,覆盖层中出现两列。
  2. 在左列中,选择 Position。
  3. 在右列中,选择 Min Pay。
  4. 点击 插入
  5. 点击 插入运算符 按钮,然后选择 Greater Than。
  6. 再次点击 插入字段 按钮。
  7. 在左列中,选择 Position。
  8. 在右列中,选择 Max Pay。
  9. 点击 插入

您现在应该有一个看起来像这样的错误条件公式:

 Min_Pay__c  >  Max_Pay__c

现在唯一剩下的就是指定错误条件评估为 true 时的错误消息。

  1. 在“错误消息”文本框中,输入 Min Pay 不能超过 Max Pay。
  2. 在“错误位置”字段旁边,选择“字段”单选按钮,然后从下拉列表中选择 Min Pay。

提示

由于我们的规则只需要用户更正一个字段,因此我们的错误消息将显示在该字段旁边。如果一条规则要求用户更新多个字段,则将错误消息放在页面顶部更为合适。
  1. 点击 **保存**。

很容易!现在我们已经熟悉了简单的验证规则,让我们定义一个稍微棘手一点的规则。

尝试操作:定义 Close Date 的验证规则

对于我们的下一个验证规则,让我们确保当 Status 字段设置为 Closed - Filled 或 Closed - Not Approved 时,Close Date 具有值。

此验证规则中最难的部分是定义错误条件公式。在定义这样的条件时,有时最容易先从逻辑上考虑它,然后将该逻辑转换为公式编辑器中提供的函数和运算符。在这种情况下,我们的错误条件在以下情况为 true:

Close Date is Not Specified
 
AND
 
(Status is "Closed - Filled" OR
           "Closed - Not Approved")

让我们从第一部分开始:“Close Date 未指定”。要将其转换为公式编辑器可以理解的术语,我们将需要再次使用 ISNULL() 函数。正如您可能从定义 Days Open 自定义公式字段时所记得的那样,ISNULL() 接受单个字段或表达式,并在其不包含值时返回 true。因此,记住我们在公式中必须使用 Close Date 字段的内部字段名称,Close Date is Not Specified 转换为:

ISNULL( CloseDate__c )

接下来,让我们弄清楚如何翻译“Status is 'Closed - Filled'”。要测试选择列表值,我们需要使用另一个函数:ISPICKVAL()ISPICKVAL() 接受选择列表字段名和值,并在选择该值时返回 true。因此,“Status is 'Closed - Filled'”转换为:

ISPICKVAL( Status__c , "Closed - Filled")

现在我们只需将这些翻译与 AND()OR() 函数结合起来。它们都接受无限数量的表达式,并分别将它们“AND”或“OR”起来。例如:

AND ( exp1, exp2, exp3)

exp1exp2exp3 都为 true 时,返回 true。同样,

OR ( exp1, exp2, exp3)

exp1exp2exp3 中的任何一个为 true 时,返回 true。

将这些函数与我们其他的表达式翻译放在一起,我们就得到了完整的错误条件公式:

AND (
    ISNULL(  CloseDate__c ),
    OR (
         ISPICKVAL(  Status__c , "Closed - Filled"),
         ISPICKVAL(  Status__c , "Closed - Not Approved"))
)

嘘!现在我们可以使用此公式快速定义我们的第二个验证规则:

  1. 点击 设置 | 创建 | 对象
  2. 点击 Position
  3. 在“验证规则”相关列表中,点击 新建
  4. 在“规则名称”文本框中,输入 Close_Date_Rule。
  5. 选中“激活”复选框。
  6. 在“描述”文本框中,输入 Status 设置为 'Closed - Filled' 或 'Closed - Not Approved' 时必须指定 Close Date。
  7. 在“错误条件公式”区域中,输入以下公式:
    AND (
        ISNULL(  Close_Date__c ),
        OR (
             ISPICKVAL(  Status__c , "Closed - Filled"),
             ISPICKVAL(  Status__c , "Closed - Not Approved"))
    )
  8. 点击 检查语法 以确保您没有犯错误。
  9. 在“错误消息”文本框中,输入 Close Date 必须在 Status 设置为 'Closed' 时指定。
  10. 在“错误位置”字段旁边,选择“字段”单选按钮,然后从下拉列表中选择 Close Date。
  11. 点击 **保存**。

看看我们做了什么

让我们重新访问 Positions 选项卡来测试我们刚刚创建的验证规则。

  1. 点击 Positions 选项卡。
  2. 点击 新建

首先,让我们尝试定义一个新职位,其中 Min Pay 的值大于 Max Pay。

  1. 为必需的 Position Title 字段指定任何值。
  2. 在 Min Pay 字段中,输入 80,000。
  3. 在 Max Pay 字段中,输入 40,000。
  4. 点击 **保存**。

您看到发生了什么吗?出现了一个错误消息,看起来与其他应用程序中的任何错误消息完全一样!

来自验证规则的错误消息

现在让我们测试我们的另一个验证规则。

  1. 在 Min Pay 字段中,输入 40,000。
  2. 在 Max Pay 字段中,输入 80,000。
  3. 从 Status 下拉列表中,选择 Closed - Not Approved。
  4. 点击 **保存**。

我们的第二个验证规则被触发,这次是因为我们没有为 Close Date 指定值。一旦我们指定了,记录就会正常保存。

Positions 选项卡现在已完全可用,并带有几个验证规则,以确保用户不会犯某些错误。但是,字段的位置是否符合我们的要求?必须具有值的字段是否标记为必需?在下一节中,我们将通过修改页面布局来微调我们的 Position 自定义对象。

介绍页面布局

在定义了所有字段和验证规则之后,我们现在拥有了一个功能齐全的 Position 自定义对象。然而,它的外观并不那么美观——所有长文本区域都出现在顶部,并且难以浏览。让我们移动一些东西,让这个页面对我们的用户来说更容易。我们可以通过自定义 Position 对象的页面布局来实现。

页面布局控制用户在查看记录时可见的字段和相关列表的位置和组织。页面布局还可以帮助我们控制记录上字段的可见性和可编辑性。我们可以将字段设置为只读或隐藏,我们还可以控制哪些字段需要用户输入值,哪些不需要。

页面布局是为用户创建良好体验的强大工具,但重要的是要记住一条重要规则:页面布局永远不应用于限制用户不应查看或编辑的敏感数据的访问权限。尽管我们可以将字段隐藏在页面布局中,但用户仍然可以通过应用程序的其他部分(例如报告或 API)访问该字段。(我们将在保护和共享数据中了解更多关于涵盖应用程序所有部分的安全信息。)

现在让我们看看是否能以一种对用户更友好的方式组织我们 Position 对象上的字段。

熟悉页面布局编辑页面

首先,让我们看看页面布局编辑页面。

  1. 点击 设置 | 创建 | 对象
  2. 点击 Position
  3. 在“页面布局”相关列表中,点击 编辑 旁边的 Position Layout。

欢迎来到页面布局编辑页面!正如您所见,此编辑器与我们在平台其他区域已经使用的编辑器不同。这是因为我们在设计用户界面,并且需要在工作时看到页面外观的表示。在继续之前,让我们快速了解一下这个页面的设置方式。

页面布局编辑页面

在这个页面的左侧,我们可以看到页面当前外观的表示。在初始一组按钮之后,“信息”部分显示了我们创建的所有字段,以及一个额外的“Owner”字段,它有自己的列。下面是另一个“系统信息”部分,然后是“自定义链接”,最后是“相关列表”。

当我们向下滚动查看整个页面时,右侧的框会随着我们一起移动,因此它们始终可见。这些框包括我们左侧看到的所有图标的图例,以及所有 Position 字段、相关列表和其他可放置在我们的布局上的组件的列表。目前,右侧框中的所有字段都已灰色显示——这是因为它们默认都已放置在我们的页面布局中。如果我们想将左侧的字段之一移回右侧的 Position 字段框,该字段将有效地从布局中删除,并且其名称将不再显示为灰色。

现在我们知道我们在看什么了,让我们按照用户可能想要的方式重新排列字段。

尝试操作:将字段分组到新区域

让我们首先定义一个用于薪资信息的区域来开始修改我们的页面布局。在页面布局上,一个区域只是一个我们可以将相似字段分组到一个适当的标题下的区域。这使得用户能够轻松地快速识别和输入记录的信息,特别是如果我们的对象有大量字段。

  1. 点击 创建新区域
  2. 在“名称”文本框中,输入 Compensation。

Name 字段控制作为区域标题显示的文本。

  1. 在“列”下拉列表中,选择 2 (Double)。

此选项允许我们选择希望我们区域中的字段排列成两列还是单列。默认是两列,是最常用的选择。但是,如果我们的区域将包含文本区域字段,单列布局将为它们在页面上提供更多显示空间。

  1. 在“制表符顺序”下拉列表中,选择 Left-Right。

此设置控制用户使用 Tab 键从一个字段导航到另一个字段时,光标的移动方向。

  1. 选择“在详细信息页面显示区域标题”和“在编辑页面显示区域标题”选项。
  2. 点击**确定**。

瞧!我们现在有了 Custom Links 相关列表下的 Compensation 新区域。让我们将其移到 System Information 部分的上方,并添加 Min Pay 和 Max Pay 字段。

  1. 点击 Compensation 区域的标题,并将其拖动到 System Information 部分的上方。
  2. 现在使用拖放将 Min Pay 和 Max Pay 字段从 Information 部分移动到新的 Compensation 部分,如下图所示。

在页面布局中拖放字段

现在我们已经完成了构建一个区域的过程,让我们构建另外两个。

  1. 在 Compensation 部分下方创建一个新的单列 Description 部分,并将 Job Description、Responsibilities、Skills Required 和 Educational Requirements 拖动到其中。
  2. 在 Description 部分下方创建一个新的两列 Required Languages 部分,并将 Apex、C#、Java 和 JavaScript 拖动到其中。

提示

您可以使用 SHIFT+单击或 CTRL+单击一次选择所有这些字段,然后将它们作为一个单元拖动到 Description 部分。

最后,为了完成我们的布局,让我们重新组织 Information 部分的字段,使其更易读。

  1. 在第一列中,按以下方式排列这些字段:
    • Position Title
    • 状态
    • 类型
    • Functional Area
    • Job Level
    • Travel Required
    • 招聘经理
    • Created By
  2. 在第二列中,按以下方式排列这些字段:
    • Owner
    • Location
    • Open Date
    • Hire By
    • Close Date
    • Days Open
    • Last Modified By

这样好多了——我们的字段已组织好,并且可以轻松找到所有需要的信息。现在我们只需将 Min Pay 和 Max Pay 字段设置为在用户定义新职位时必需。完成此操作后,我们就可以完成 Position 对象了!

尝试操作:编辑字段属性

让我们将 Min Pay 和 Max Pay 字段设置为必需。

  1. 在页面布局编辑页面上,双击 Min Pay 字段。

此弹出窗口允许我们编辑 Min Pay 字段的属性。我们可以将字段设置为只读和/或必需。

  • 如果它是只读的,那么查看职位记录编辑页面的用户将无法更改其值。
  • 如果它是必需的,用户将无法在不指定值的情况下创建职位记录。

如果我们不希望用户看到 Min Pay 字段,我们可以简单地将其从布局中拖出并放到右侧的 Position Fields 框中。

警告

不要忘记我们之前的警告!页面布局永远不应用于限制用户不应查看或编辑的敏感数据的访问权限。这是因为页面布局仅控制记录的编辑和详细信息页面;它们不控制平台上任何其他部分的字段访问权限。
  1. 选中“必需”复选框,然后点击 确定
  2. 对 Max Pay 字段重复这些步骤。
  3. 点击 保存 以完成页面布局的自定义。

万岁!我们已经完成了 Position 对象页面布局的所有工作。

看看我们做了什么

恭喜。我们刚刚构建了一个简单的 Recruiting 应用程序,用于跟踪有关组织开放职位的信息。让我们通过重新访问 Positions 选项卡并点击 新建 来查看我们的成果。由于我们在页面布局中所做的更改,我们的 Position 编辑页面现在应该看起来像这样:

Position 编辑页面的最终版本

我们有一个带选项卡的自定义对象,我们添加了自定义字段,并将其排列在页面布局中。我们已经完成了我们的简单应用程序,现在我们正朝着创建我们之前描述的更复杂的 Recruiting 应用程序迈进。

下一章将使事情变得更加有趣。我们将添加更多自定义对象来跟踪候选人、职位申请和审查等内容,然后通过定义对象之间的关系来进一步增强我们的 Recruiting 应用程序。不知不觉中,我们将拥有一个非常强大的工具,所有这些都通过在平台中单击几下即可实现。

了解云如何加快开发速度。获取免费的 Force.com 基础知识书籍。(价值 39.99 美元)。

Force.com 基础知识 - 了解云如何使开发应用程序的速度提高 5 倍 - CodeProject - 代码之家
© . All rights reserved.