公式(7)错误

学习目标

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

  • 了解常见配方错误的原因。
  • 排查高级公式字段。

语法错误

即使是高级配方大师偶尔也会遇到他们的配方的问题。最常见的公式错误是语法错误。要随时检查公式的语法,请单击 Check Syntax.

缺少或额外的括号

在你的公式中不小心输入一个额外的括号或者留下一个。嵌套逻辑语句(如IF(),AND()和OR()时,此错误尤为常见。

如,这个公式在最后缺少一个左括号。

A syntax error for a missing parenthesis

如果在函数内有太多括号或逗号,则也会出现此错误。这是相同的公式,但带有一个额外的括号。

A syntax error for an extra parenthesis

字段不存在

当涉及语法错误时,高级公式编辑器是您的朋友。在使用插入操作符或插入字段按钮时,几乎不可能拼错字段或函数的名称。

A syntax error for an incorrectly spelled field name

这里我们打算引用Principal__c而不是Principle__c。如果忘记在文本字符串周围加上引号,也会出现此错误。

参数数量不正确

如果某个函数使用的参数数量不正确,则会遇到语法错误。对使用可变数量参数的函数(如CASE())要格外小心。

A syntax error for the incorrect number of parameters in a function

这个公式在CASE()语句中遗漏了最后一个参数,即贯穿案例。公式编辑器假设我们只想检查四个案例,而不是五个。所以总共找了10个论点,我们真的要给它12个。

未知功能

当您拼错函数名称或者尝试使用不存在的函数时,您也会遇到错误。

A syntax error for an unknown function

此公式尝试引用不存在的函数MINIMUM()。我们打算使用MIN(),它取一个数字列表并返回最小值。

使用不同的数据类型

在创建公式时,请在编写公式之前考虑希望它返回的数据类型。如果您的公式返回的数据类型不是您选择的数据类型,则无法保存。

在类型之间转换数值或使用类似数据类型(如日期和日期/时间或数字和货币)时很容易混淆数据类型。例如,此公式被写为在所选公式返回类型为Date / Time时返回Date值。

This formula's return type differs from the data type of the value it is written to return.

若要更正此错误,您可以将公式字段的返回类型更改为日期。或者,您可以用NOW()替换TODAY()来生成日期/时间值而不是日期。

编译大小和公式长度错误

公式字段功能强大,但规模受限。公式限制为3,900个字符或4,000个字节,包括空格,返回字符和注释,编译时不能超过5,000个字节。了解这些大小限制之间的区别以及如何解决或限制这些限制很重要。

长度限制

公式限于3,900个字符。你可以用几种方法缩短长公式。用&&​​替换AND(),例如,每次使用都会保存几个字符,就像使用CASE()语句替换嵌套的IF()语句一样。较短的字段名称和注释也会在公式的长度上产生一个小而显着的差异。

如果您的公式字段明显长于3,900个字符,请使用助手公式字段。

编译大小限制

小于3,900个字符的公式仍可能超过5,000字节的编译大小限制。当公式超过编译大小限制时,创建助手字段并缩短字段名称或注释并没有什么区别。引用辅助字段时,其编译大小将被添加到引用它的公式的编译大小。减少公式编译大小的一种方法是最小化对其他公式字段的引用。

一些用于减少公式长度的方法,例如用CASE()语句替换嵌套的IF()语句,也减少了公式的编译大小。

考虑两个领域:

  • Date1__c 是日期字段。
  • Date2__c 是从Date1__c创建日期的公式字段。
    DATE( YEAR( Date1__c ), MONTH( Date1__c ), DAY( Date1__c ) )
    下面的公式返回给定日期的月份的最后一天的日期(假设2月总是有28天):
DATE(
 YEAR( SomeDate__c ),
 MONTH( SomeDate__c ),
 IF(
   OR(
     MONTH( SomeDate__c ) = 4,
     MONTH( SomeDate__c ) = 6,
     MONTH( SomeDate__c ) = 9,
     MONTH( SomeDate__c ) = 11
   ),
   30,
   IF(
     MONTH( SomeDate__c ) = 2,
     28,
     31
   )
 )
)
该公式首先检查30天的月份,然后是2月份,剩下的月份是31天。它需要一个嵌套的IF()函数,这是不太可读的,编译为Date1__c的1069个字符和Date2__c的7,271个字符!为什么?因为公式引用日期七次。比较这个公式的修改版本:
DATE(
 YEAR( SomeDate__c ),
 MONTH( SomeDate__c ),
 CASE(
   MONTH( SomeDate__c ),
   2, 28,
   4, 30,
   6, 30,
   9, 30,
   11, 30,
   31
 )
)

这不仅更容易阅读,公式编译为Date1__c只有645个字符,Date2__c只有3,309个字符,现在它引用日期三次而不是七次。

此示例来自Salesforce Answers社区。领料单存储负责机会的代理人的名字。该公式根据基本佣金价值和乘数计算佣金。但是因为在CASE()语句的每个条件中引用了Base_Commission__c,所以公式超出了编译大小。

CASE( Agent__c,
  "John", Base_Commission__c * 2,
  "Jane", Base_Commission__c * 6,
  /* 重复许多其他代理 */
  Base_Commission__c
)
要解决此问题,请将CASE()函数外部的Base_Commission__c移动。该公式可以被重写为:
Base_Commission__c * CASE( Agent__c,
  "John", 2,
  "Jane", 6,
  /* 许多其他代理重复 */
  1
)
即使基本佣金只是一个货币字段,而不是一个公式本身,引用一次而不是多次,大大减少了公式编译的大小。

公式(6)高级

学习目标

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

  • 实现高级公式以匹配复杂的用例。
  • 写干净,易于理解的公式。

先进的公式

我们已经在这个模块中看到了很多复杂的公式。然而,将业务问题转化为基于公式的解决方案并不总是容易的。这个单位有几个提示从概念到现实的公式。

把它写出来

当你有一个公式的想法,在你拉起高级公式编辑器之前,用日常语言思考。首先问自己你的目标是什么,然后对话描述。

此示例来自Salesforce Trailblazer社区:假设您的目标是确保如果系统管理员以外的任何人将机会标记为“已关闭丢失”,则必须提供解释。

对于这个例子,我们假设你已经有了自定义的选项列表字段Loss Reason,并填充了失去机会的有效理由。由于没有人能够在不提供理由的情况下保存记录,因此我们使用验证规则公式来实现我们的目标。

用简单的语言,你的公式是:

当机会阶段由非系统管理员的人员更改为“已关闭丢失”时显示错误,并且丢失原因为空。

在写出公式之后,查找与本模块中使用的函数相对应的关键字“and”,“or”,“if”。这些功能是更大,更复杂的公式的基石。在用例中识别它们可以帮助你实现这样的公式。

要检查用户不是系统管理员,请插入$ Profile.Name,这是一个合并字段,表示对记录进行编辑的配置文件。要检查StageName是否已更新,请使用ISCHANGED()。如果字段的当前值不同于以前的值,则ISCHANGED()返回true。

您可以使用ISPICKVAL()检查其余的需求。有关ISPICKVAL()的更多信息,请参阅在公式中使用选取列表。

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Opportunity | Validation Rules.
  3. 点击 New.
  4. Rule Name,输入 Loss Reason Required.
  5. Error Condition Formula, 输入以下公式:
    AND(
      $Profile.Name <> "System Administrator",
      ISCHANGED(StageName),
      ISPICKVAL(StageName, "Closed Lost"),
      ISPICKVAL(Loss_Reason__c, "")
    )
  6. Error Message, 输入 Opportunities can’t be marked Closed Lost without providing a Loss Reason.
  7. 对于错误位置,请选择 Field 和 Loss Reason.
  8. 点击 Save.

现在,只要不是系统管理员的用户将机会标记为“关闭丢失”,就会显示错误消息。

使用清除间距和格式

使用适当的间距和格式时,公式更易于阅读和理解。当我们使用文本公式时,我们写了一个公式,根据国家,收入和来源动态地给一个潜在客户分配评分。

IF(AND(AnnualRevenue > 1000000, CONTAINS(CASE(Country,
"United States", "US", "America", "US", "USA", "US", "US", "US",
"NA"), "US")), IF(ISPICKVAL(LeadSource, "Partner Referral"),
"Hot", IF(OR(ISPICKVAL (LeadSource, "Purchased List"),
ISPICKVAL(LeadSource, "Web")), "Warm”, "Cold")), "Cold")
虽然这个公式在语法上是正确的,但几乎不可能说出它的作用或逻辑的工作方式。由于空格和返回在公式中无关紧要,因此使公式更易于使公式更具可读性。这是相同的公式,但用缩进和返回清理。
IF(
  AND(AnnualRevenue > 1000000,
  CONTAINS(CASE(Country, "United States", "US", "America",
    "US", "USA", "US", "US", "US", "NA"), "US")),
  IF(
    ISPICKVAL(LeadSource, "Partner Referral"), "Hot",
    IF(
      OR(
        ISPICKVAL(LeadSource, "Purchased List"),
        ISPICKVAL(LeadSource, "Web")
      ), "Warm”, "Cold"
    )
  ), "Cold"
)

虽然格式化公式没有硬性和快速的规则,但是我们建议您在每次嵌套逻辑语句时使用两个空格缩进。当你正确和一致的缩进,很容易看到你正在使用哪个函数,并避免不匹配的括号。

另一种使逻辑语句易于阅读的方法是使用逻辑运算符而不是函数。当您使用&&而不是AND()或||时而不是OR(),读取公式的人更容易遵循逻辑流程。这里再一次用&&和||表示相同的公式而不是AND()和OR()。

IF(
  AnnualRevenue > 1000000 &&
  CONTAINS(CASE(Country, "United States", "US", "America", "US", 
    "USA", "US", "US", "US", "NA"), "US"),
  IF(
    ISPICKVAL(LeadSource, "Partner Referral"), "Hot",
    IF(
      ISPICKVAL(LeadSource, "PurchasedList") ||
      ISPICKVAL(LeadSource, "Web"),
      "Warm", "Cold"
    )
  ), "Cold"
)

把事情简单化

在编写复杂的公式时,很容易陷入嵌套的逻辑语句和对其他字段的引用。通常,最简单的公式是最好的公式。

如果机会的关闭日期不在当前月份,此验证规则公式返回true

OR (
CloseDate < DATE( YEAR(TODAY()), MONTH(TODAY()), 1), 
IF (
AND (
MONTH (TODAY() ) =1, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true, 
IF (
AND (
MONTH (TODAY() ) =2, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 28)), 
true,
IF (
AND (
MONTH (TODAY() ) =3, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)), 
true,
IF (
AND (
MONTH (TODAY() ) =4, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 30)),
true,
IF (
AND (
MONTH (TODAY() ) =5, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true, 
IF (
AND (
MONTH (TODAY() ) =6, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 30)),
true,
IF (
AND (
MONTH (TODAY() ) =7, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true,
IF (
AND (
MONTH (TODAY() ) =8, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true,
IF (
AND (
MONTH (TODAY() ) =9, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 30)),
true,
IF (
AND (
MONTH (TODAY() ) =10, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true,
IF (
AND (
MONTH (TODAY() ) =11, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 30)),
true,
IF (
AND (
MONTH (TODAY() ) =12, 
CloseDate > DATE( YEAR(TODAY() ), MONTH(TODAY() ), 31)),
true, false
)))))))))))))
这个复杂的检查确定关闭日期是早于当前月的第一天,还是晚于本月的最后一天。但实际上,这一天根本不重要:如果关闭日期的月份和年份与当月份的月份和年份相同,则是同一月份。所以我们可以将公式改写为:
NOT( 
  AND( 
    MONTH( CloseDate ) = MONTH( TODAY() ), 
    YEAR( CloseDate ) = YEAR( TODAY() ) 
  ) 
)
这个新版本更具可读性,只能编译为200个字符,而原始公式则超过3,000个。如果你的公式看起来比它应该更复杂,那很可能是 – 从不同的角度来解决问题来简化事情。

公式(5)文本

学习目标

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

  • 描述什么是文本类型。
  • 将文本值转换为其他数据类型或从其他数据类
  • 描述使用文本类型的公式的用例。
  • 使用文本类型创建一个公式。

公式中的文本介绍

有时,让您的组织中的信息一目了然,最简单的方法就是将其显示为文本。使用文本返回类型的公式可以连接文本值,将数字和日期转换为文本,或者有条件地显示文本。

你可以做的最简单的事情是将两个文本字符串与运算符&连接起来。例如,您可以通过组合名字和姓氏来显示联系人的全名。

FirstName & " " & LastName
将文本值放在一起时,请考虑必要的空格,以便字符串不会显示为废话 – “Jane Doe”比“JaneDoe”更具可读性。
 

常见的文本函数和操作符

Salesforce带有许多功能和操作员,可以使用公式中的文本进行工作。使用公式,可以将其他数据类型转换为文本并将文本值连接在一起,或在文本字段中搜索特定的字符串。

转换为文本值和从文本值转换

TEXT()将百分比,数字,日期,日期/时间,选取列表或货币字段转换为文本。 TEXT()返回没有任何格式,逗号或货币符号的输出。例如,TEXT(percent_value),如果percent_value设置为30%,则返回0.3。

当TEXT()收到日期或日期/时间值时,它返回一个带有标准日期或日期/时间格式的字符串。例如,如果date_value对应于2015年3月17日,则TEXT(date_value)返回2015-03-17。对于datetime_value 2015年3月17日下午5点,TEXT(datetime_value)返回2015-03-17 17:00:00Z。 Z表示GMT-TEXT()返回的时间总是返回格林尼治标准时间的日期/时间值,而不是当前用户或组织的时区。

您也可以使用VALUE()以另一种方式转换值,该值使用Text值并返回一个Number。如果VALUE()接收到的值不是一个数字,包括小数点或减号(负号)以外的任何特殊字符,则会显示#Error!例如,如果text_value是$ 500,则VALUE(text_value)将返回一个错误。如果text_value为空,则VALUE()也会返回错误。

其他文字功能

如果文本以compare_text开头,则BEGINS(text,compare_text)返回true。如果compare_text是文本中的任何位置,则CONTAINS(text,compare_text)将返回true。这些功能对于根据文本字段有条件地显示信息很有用。

函数SUBSTITUTE(text,old_text,new_text)用new_text替换old_text的任何实例,就像文本编辑器中的find和replace函数一样。

Salesforce包含其他用于处理公式中文本和格式化的函数。有关更多信息,请参阅Salesforce联机帮助中的公式运算符和函数。

在公式中使用文本类型

分配客户评级

通常,使用文本返回类型的公式显示很难量化的信息。例如,您可以使用文本公式来确定铅是热,暖还是冷。我们将编写一个既使用条件逻辑又使用ISPICKVAL()函数来返回主角评分的公式。

在这个例子中,我们根据其收入,国家和来源对潜在客户进行评估。

  • Hot—AnnualRevenue大于100万美元,Country是美国,LeadSource是合作伙伴推荐。
  • Warm—AnnualRevenue 大于100万美元,Country是美国,LeadSource是购买清单或Web。
  • Cold—帐户不符合任何这些条件。

此公式使用一系列IF(),AND()和OR()语句来检查这些条件,并使用ISPICKVAL()评估Lead Source字段。该公式还使用CASE()语句来检查国家/地区。如果该国是美国,美国,美国或美国,则CASE()声明将返回美国。否则,它返回NA(不适用)。

选择树帮助我们更容易地遵循公式的逻辑流程。

This choice tree helps us visualize the lead rating formula.
  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Lead | Fields & Relationships 然后单 New.
  3. 选择Formula 并单击 Next.
  4. Field Label, 输入 Rating. 字段名称自动填充。
  5. 选择 Text 并单击 Next.
  6. 输入以下公式:
    IF(
      AnnualRevenue > 1000000 &&
      CONTAINS(CASE(Country, "United States", "US", "America", "US", 
        "USA", "US", "US", "US", "NA"), "US"),
      IF(
        ISPICKVAL(LeadSource, "Partner Referral"), "Hot",
        IF(
          ISPICKVAL(LeadSource, "PurchasedList") ||
          ISPICKVAL(LeadSource, "Web"),
          "Warm", "Cold"
        )
      ), "Cold"
    )

根据潜在客户的特征,新配方字段评分显示“热”,“热”或“冷”。

用CASE()显示图像

带有文本返回类型的公式对于不仅仅是文本而言是有用的 – 您也可以使用它们来显示图像。图像使信息一目了然,抓住用户的眼睛不仅仅是文本。让我们编写一个公式,使用您刚刚创建的评级字段以图形方式显示潜在客户评分为零星,一星,三星或五颗恒星。

IMAGE()函数最多需要四个参数。 IMAGE(image_url,alternate_text,height,width)以可选的height和width参数指定的尺寸显示由image_url指定的图像。如果图像无法显示,则该功能显示alternate_text。

如果主角评级是

  • Hot, 公式显示五颗星
  • Warm,公式显示三颗星
  • Cold, 公式显示一颗星

如果主角等级为空白,则公式不会显示星号。

使用文本返回类型和名称星级创建公式字段。在高级公式编辑器中,输入:

IMAGE(
  CASE(Rating__C,
    "Hot", "/img/samples/stars_500.gif",
    "Warm", "/img/samples/stars_300.gif",
    "Cold", "/img/samples/stars_100.gif",
    "/img/samples/stars_000.gif"),
"Unknown")
此公式使用内置于Salesforce中的图像,但是您可以使用自己的图像,方法是首先从“文档”选项卡上载图像。

文本示例

  1. 此公式使用美国帐户的帐单州/省字段将其分类为北,南,东,西或中央。
    IF(ISBLANK(BillingState), "None",
    IF(CONTAINS("AK:AZ:CA:HA:NV:NM:OR:UT:WA", BillingState), "West",
    IF(CONTAINS("CO:ID:MT:KS:OK:TX:WY", BillingState), "Central",
    IF(CONTAINS("CT:ME:MA:NH:NY:PA:RI:VT", BillingState), "East",
    IF(CONTAINS("AL:AR:DC:DE:FL:GA:KY:LA:MD:MS:NC:NJ:SC:TN:VA:WV", BillingState), "South",
    IF(CONTAINS("IL:IN:IA:MI:MN:MO:NE:ND:OH:SD:WI", BillingState), "North", "Other"))))))
  2. 该公式嵌入HYPERLINK()函数的链接。一般来说,HYPERLINK(url,display_text,target)显示一个到display_text的链接。可选的目标参数决定了单击链接时网页的显示方式。如果您将目标保留为空白,则默认情况下链接会在新的浏览器窗口中打开。
    HYPERLINK("https://www.salesforce.com", "Salesforce")
  3. 此公式接受Email字段并使用它来创建一个URL。该公式使用FIND()和SUBSTITUTE()在电子邮件地址中查找@符号,并用www替换它的左侧所有内容。
    SUBSTITUTE(Email, LEFT(Email, FIND("@", Email)), "www.")
    文本公式的常见错误

将值转换为文本。请确保在公式中使用它之前检查一个字段的类型。例如,以前的Salesforce管理员可能已经创建了一个将日期保存为文本值的自定义字段。如果是这种情况,可以使用TEXT()或DATEVALUE()来同时处理文本和日期值。

公式字段帮手

使用助手公式字段是使公式简洁易懂的好方法。辅助字段只做更大计算的一部分,并由结束公式字段引用。您可以使用任何公式类型的帮手公式字段,但现在我们来看一个示例。

假设您要编写名为Case_Category__c的文本公式,该公式根据案件已打开的时间长短显示案件的类别(绿色,黄色或红色)。通常情况下,你可能会写这样的东西。

IF(((NOT(IsClosed)) && (TODAY() - DATEVALUE(CreatedDate) > 20)), "RED",
 IF((NOT(IsClosed)) && (TODAY() - DATEVALUE(CreatedDate) > 10), "YELLOW",
 "GREEN"))
您可以通过将计算个案年龄的逻辑放入另一个公式字段来简化此公式。我们称这个字段为Case_Age_In_Days__c。
TODAY() - DATEVALUE(CreatedDate)
然后,我们可以像这样重写Case_Category__c。
IF(((NOT(IsClosed)) && (Case_Age_In_Days__c > 20)), "RED",
 IF((NOT(IsClosed)) && (Case_Age_In_Days__c > 10), "YELLOW",
 "GREEN"))
个公式不仅更短,更易于理解,而且还可以在需要计算案例年龄的任何地方重复使用助手公式。真棒!

公式(4)选项

学习目标

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

  • 描述引用选取列表字段的公式的用例。
  • 在公式字段中使用选择列表功能。
  • 创建一个引用选项列表字段的公式。

在公式中使用选取列表的简介

选项列表字段允许您从预先填充的列表中选择一个值。虽然您无法撰写返回结果列表的公式,但您可能必须在公式字段中引用选取列表。

假设您需要验证规则,要求用户填写说明,如果他们选择“其他”作为帐户的类型。此验证规则公式要求用户填写文本字段“其他类型”(如果他们将帐户的“类型”设置为“其他”)。

ISPICKVAL(Type, "Other") &&
ISBLANK(Other_Type__c)
如果当“类型”设置为“其他”时,用户将Other_Type__c留为空白,则会触发验证规则,并且用户无法保存表单。

常见的选项列表函数和操作符

三个函数将picklist值作为所有公式字段中的参数:ISPICKVAL(),CASE()和TEXT()。

如果picklist_field的值与text_value匹配,则ISPICKVAL(picklist_field,text_value)返回true,否则返回false。您可以将ISPICKVAL()与PRIORVALUE()结合使用。您可以在分配规则,验证规则,字段更新和工作流程规则中使用此函数来查找字段的先前值。

例如,此验证规则可防止用户将案例的类型从先前选定的值更改为空白。

NOT(ISPICKVAL(PRIORVALUE(Type), "")) &&
ISPICKVAL(Type, "")

如果Type的先前值不为空且当前值为,则触发验证规则。

CASE()对于根据选取列表的值编写具有不同结果的公式很有用。带有Number返回类型的此公式根据其类型为案例分配优先级。

CASE(Type,
  "Electrical", 1,
  "Electronic", 2,
  "Mechanical", 3,
  "Structural", 4,
  "Other", 5,
5)

该公式将Type与每种情况进行比较,并在发现匹配时指定优先级。电子案例优先级为1,电子案例2,等等。

TEXT()将选取列表值转换为组织主语言的文本值,而不是当前用户的语言。在将选取列表值转换为文本值之后,可以在其上使用文本函数,例如BEGINS()和CONTAINS()。

例如,这个公式将一个案件的状态显示为一个句子。

"This case is " & TEXT(Status)
注意

您不能在多选选项列表上使用TEXT()。公式字段中不推荐多选择选项列表。

在公式中使用选项列表字段

基于选择列表创建验证规则

选项列表值通常决定了记录中的哪些其他字段是必需的。 ISPICKVAL()和CASE()可用于创建验证规则,以检查是否选择了某个选项列表值。例如,假设您希望用户在将案例的“状态”选项列表值更改为“已升级”时输入原因。

首先,在Case对象上创建自定义文本字段升级原因。

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Case | Fields & Relationships 然后单击 New.
  3. 选择 Text Area 并单击 Next.
  4. Field Label, 输入 Reason for Escalating.字段名称自动填充。
  5. 点击 Next.
  6. 再次单击 Next 然后单击 Save.

现在使用状态选项列表字段来设置升级原因的验证规则。

  1. 单击新创建的升级原因字段。
  2. 在验证规则下,单击 New.
  3. Rule Name, 输入 Reason_Required.
  4. Error Condition Formula, 输入以下验证规则:
    AND(
      ISPICKVAL(Status, "Escalated"),
      ISBLANK(Reason_for_Escalating__c)
    )
  5. Error Message, 输入Please enter a reason for changing the case status to Escalated.
  6. 点击 Save.

验证规则确保如果状态设置为“升级”,升级原因不为空白。通过将案例状态更新为升级并保存记录来测试公式,而不输入升级原因。该窗体显示在升级原因字段下的错误消息。

Users who do not set a Reason for Escalating will see this error message.

指定联系人的优先级

如果您希望根据关联的帐户评分为联系人分配优先级,那么选项列表字段会怎样?对于此公式,我们使用联系人的帐户评级的交叉对象参考以及我们在复选框公式中使用基本逻辑中创建的行政复选框公式字段。 Executive是否检查联系人的标题是否包含“Executive”,“President”或“Chief”等字样。

因为有三种可能的账户评级 – 热,温或冷 – 以及执行检查或未检查的两种选择 – 总共有六种情况。我们将使用CASE()根据以下条件为每种可能性分配优先级。

Account.Rating Is_Executive_c 优先级
Hot Yes 1
Hot No 1
Warm Yes 1
Warm No 2
Cold Yes 2
Cold No 3

在名称为Priority并且类型为Number的联系人对象上创建一个公式字段。

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Contact | Fields & Relationships 然后单击 New.
  3. 选择 Formula 并单击 Next.
  4. Field Label, 输入 Priority. 字段名称自动填充。
  5. 选择 Number, 并将小数位数更改为0
  6. 点击 Next.
  7. 输入以下公式:
    CASE(Account.Rating,
      "Hot", 1,
      "Warm", IF(Is_Executive__c, 1, 2),
      "Cold", IF(Is_Executive__c, 2, 3),
    3)
    在这个公式中,我们在更大的CASE()语句中使用IF()语句来更有效地检查所有六种情况。

选项列表示例

  1. 此公式根据自定义选项列表字段合同状态和自定义日期字段合同激活日期返回帐户被激活后的天数。如果合同状态未激活,则该字段为空。
    IF(ISPICKVAL(Contract_Status__c, "Activated"),
      TODAY() - Contract_Activated_Date__c, null)
  2. 此公式在合同对象上使用自定义日期字段Payment Due Date和自定义选项列表字段Payment Status以及Paid和Unpaid选项。如果“付款状态”为“未付”且已超过付款到期日,公式字段将显示逾期付款!否则,该字段为空。
    IF(AND(Payment_Due_Date__c < TODAY(), 
      ISPICKVAL(Payment_Status__c,
      "UNPAID")),
      "Payment overdue!", null)
  3. 如果有人试图将潜在客户的状态从“已关闭 – 已转换”或“关闭 – 未转换”更改为“打开 – 未联系”,此验证规则使用ISPICKVAL()和PRIORVALUE()显示错误。
    ISPICKVAL(Status, "Open - Not Contacted") &&
    BEGINS(TEXT(PRIORVALUE(Status)), "Closed")
    如果用户将关闭状态从关闭状态更改为打开状态,则在尝试保存记录时会看到错误。
    The error message a user sees when they violate the validation rule.

挑选清单的常见错误

  • 唯一可以将选取列表字段作为所有公式字段中的参数的函数是ISPICKVAL(),CASE()和TEXT()。在其他函数中使用选项列表值会导致错误。例如,此复选框公式字段旨在显示一个复选框,用于指示潜在顾客源是否是“合作伙伴推荐”。等号运算符(=),但是,不支持选项列表字段,并且此公式导致一个错误。

    LeadSource = "Partner Referral"
    相反,使用ISPICKVAL()检查选择列表字段的值,或者在使用equals运算符之前使用TEXT()将选取列表值转换为文本。
    ISPICKVAL(LeadSource, "Partner Referral")
    TEXT(LeadSource) = "Partner Referral"

公式(3)日期

学习目标

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

  • 描述日期和日期/时间类型。
  • 解释日期和日期/时间类型之间的区别。
  • 描述具有Date和Date / Time返回类型的公式的用例。
  • 使用Date和Date / Time类型创建一个公式。

日期和日期/时间公式简介

在管理您的组织时,日期和日期/时间字段非常适合显示联系人的出生日期,个案年龄或创建帐户的日期和时间。您可以使用公式来显示当前日期或查找两个日期之间的差异。

例如,此交叉对象公式将在其相关大小写的页面上将日期和时间创建为日期/时间值。

Account.CreatedDate

交叉对象公式显示来自不同对象上的一个对象的数据。在这种情况下,我们显示了case对象上的账户对象的CreatedDate。即使您的组织的成员无权访问字段所在的对象,也可以看到显示或引用跨对象字段的公式。有关交叉对象公式的更多信息,请参阅构建交叉对象公式的技巧

日期表示为日期或日期/时间值。日期值存储年,月和日。日期/时间值存储年,月,日和时间。时间存储为GMT,但显示在查看它的用户的时区中。在公式中处理日期/时间值时,将时区冲突保留在头脑中非常重要。时区混淆很容易导致公式字段中的逻辑错误和组织中的错误信息。

如果您减去两个日期值,则结果是整数。如果您减去两个日期/时间值,则结果为代表天数,小时数和分钟数的十进制值。例如,如果两个日期/时间值之间的差值是3.52,则两个日期之间有3天,12小时(一天的0.5天)和29分钟(一天的0.02天)。

通用日期和日期/时间函数和操作符

Salesforce提供了多种功能,可让您更轻松地处理日期和日期/时间值。您可以使用DATEVALUE()函数将日期/时间转换为日期,该函数采用日期/时间或文本值并返回日期。同样,DATETIMEVALUE()接受日期或文本值,并返回日期/时间值,并将时间设置为午夜格林尼治标准时间。

假设您想自定义公式字段显示日期2015年3月17日。您可以使用DATE()函数将日,月和年转换为所需的日期值。

DATE(2015, 03, 17)
DATETIMEVALUE()是将文本转换为与2015年3月17日格林尼治标准时间下午5点对应的日期/时间值的另一种方法。
DATETIMEVALUE("2015-03-17 17:00:00")
你也可以使用DATEVALUE(),它接受一个字符串并返回一个日期值。
DATEVALUE("2015-03-17")
注意

DATETIMEVALUE()采用日期或文本值,格式为YYYY-MM-DD,格林尼治时间为GMT。如果输入的值超出有效范围(例如2月29日的非闰年或大于12的月份),则公式字段会显示#Error!

要查找当前日期作为日期值,请使用TODAY()。要查找当前时刻为日期/时间值,请使用NOW()。这些功能对于查找将来或过去的日期或距今天另一日期有多少天有用。

要将日期值中的日,月或年作为数字,分别使用DAY(),MONTH()或YEAR()。

在公式中使用日期和日期/时间类型

日期值的最简单用法之一是查找两个日期之间的天数。当您从另一个日期值中减去一个日期值时,您将以天数为单位的差异作为数字。

例如,如果您想查找今天的日期和帐户的CreatedDate之间有多少天,请使用:

TODAY() - DATEVALUE(CreatedDate)
注意

请小心减去将来日期的过去日期。如果您逆转公式-DATEVALUE(CreatedDate) – TODAY() – 它将返回负值。

请注意,我们使用DATEVALUE()将CreatedDate(日期/时间值)转换为日期值,从而允许我们从TODAY()中减去CreatedDate。日期和日期/时间值不兼容。您不能从一个日期/时间减去一个日期,或者从一个日期减去一个日期/时间,而无需先转换其中一个值。

您还可以将日期添加到日期。要创建一个公式,它返回今天后三天的日期:

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Account | Fields & Relationships 然后单击 New.
  3. 选择公式并单击 Next.
  4. Field Label, 输入 Future Date. 字段名称自动填充。
  5. 选择 Date 并点击 Next.
  6. 输入以下公式:
    TODAY() + 3

    注意

    将日期添加到日期时,Salesforce会在小数点后忽略数字。所以TODAY()+ 3相当于TODAY + 3.4,而TODAY()+ 2相当于TODAY()+ 2.9。

很简单,对吧?当您想要将工作日添加到日期时,情况会变得更加复杂。对于此公式,我们使用CASE()函数向TODAY()添加3个工作日。 CASE()在某些方面与IF()类似。关键的区别在于IF()只检查一个逻辑语句,而CASE()检查一系列称为个案的语句。

CASE(expression,case1,result1,case2,result2,…,else_result)将表达式与case1进行比较。如果它们相等,则返回result1。如果它们不是,则将表达式与case2进行比较,依此类推。如果expression与任何情况都不匹配,则该语句返回else_result。

CASE()对于有很多可能结果的条件语句是有用的。尽管嵌套的IF()语句通常可以做同样的事情,但CASE()使复杂的公式更易于阅读和理解。

我们将使用CASE()来写一个公式,为TODAY()增加3个工作日。与CASE()一起工作的第一步是考虑案例。我们的配方可能会遇到几种不同的情况:

  • 如果 TODAY()是星期日,星期一或星期二,则增加3个工作日与 TODAY() + 3 相同。
  • 如果TODAY()是星期三,星期四或星期五,则增加3个工作日与TODAY()+ 5(3个工作日和2个周末)相同。
  • 如果TODAY()是星期六,则增加3个工作日与TODAY()+ 4(3个工作日和1个周末日)相同。

对于我们的公式工作,我们必须知道TODAY()是星期几。有没有快速的方法来找到星期几与一个内置函数,所以我们使用更先进的技巧。首先我们找到TODAY()和过去已知的星期天之间的天数。接下来我们使用MOD()来查找该数字的余数除以7,给我们一个对应于当前星期几的数字。对于我们的参考星期天,我们使用1900年1月7日,代表DATE(1900,1,7)。

我们的CASE()语句然后根据TODAY()的星期几决定结果。我们的最终公式如下所示:

CASE(
  MOD(TODAY() - DATE(1900, 1, 7), 7),
  3, TODAY() + 2 + 3,
  4, TODAY() + 2 + 3,
  5, TODAY() + 2 + 3,
  6, TODAY() + 1 + 3,
  TODAY() + 3
)
您可以使用此公式的变体将任意数量的工作日添加到日期。无论您添加多少个工作日,最多有七个案例,一个星期中的每一天。

日期和日期/时间示例

  1. 这个公式通过从下一个月的第一天减去一天来找出一个月的最后一天。
    IF(
      MONTH(Date__c) = 12,
      DATE(YEAR(Date__c), 12, 31),
      DATE(YEAR(Date__c), MONTH(Date__c) + 1, 1) - 1
    )
  2. 这个公式找出TODAY()和date_1之间的工作天数,使用类似于我们之前用来查找TODAY()星期几的技巧。首先,公式找出TODAY()与过去已知的星期一(本例中为1900年1月8日)之间的工作日数。我们将该数除以7,然后使用FLOOR()将其从几天转换为几周。然后,我们将它乘以5,将其从几周转换为工作日。该公式找出该金额与date_1与同一参考星期一之间的营业日数之间的差异。结果是TODAY()和Date_c之间的营业日数。
    (5 * (FLOOR((TODAY() - DATE(1900, 1, 8)) / 7)) + MIN(5, MOD(TODAY() - DATE (1900, 1, 8), 7)))
    -
    (5 * (FLOOR((Date__c - DATE(1900, 1, 8)) / 7)) + MIN(5, MOD(Date__c - DATE(1900, 1, 8), 7 )))
  3. 此公式使用IF(),AND(),OR()和NOT()将Num_Years__c添加到Date__c中,以确保它不会在闰年中返回2月29日。如果日期是闰年的2月29日,并且未来年不是闰年,则公式将返回到未来一年的3月1日。该公式使用MOD()来检查当前年份是否为闰年。如果一个年份可以被400整除,或者被4整除而不是100,那么它就是一个闰年。否则,这个公式会返回相同的日期。
    IF(
      AND(
        MONTH(Date__c) = 2,
        DAY(Date__c) = 29,
        NOT(
          OR(
            MOD(YEAR(Date__c), 400) = 0,
            AND(
              MOD(YEAR(Date__c), 4) = 0,
              MOD(YEAR(Date__c), 100) != 0
            )
          )
        )
      ),
      DATE(YEAR(Date__c) + Num_Years__c, 3, 1),
      DATE(YEAR(Date__c) + Num_Years__c,
      MONTH(Date__c), DAY(Date__c)
      )
    )

包含日期和日期/时间公式的常见错误

  • 在日期和日期/时间之间转换。日期和日期/时间数据类型不可互换。如果它被写入以返回日期/时间值,则具有日期返回类型的公式不起作用。要在日期和日期/时间之间转换,请使用内置函数DATEVALUE()和DATETIMEVALUE()。请记住,TODAY()将当前日期作为Date值返回,而NOW()将当前日期和时间作为Date / Time值返回。
  • 使用时区。日期和日期/时间值始终显示在正在查看它们的用户的时区中。日期/时间值被转换为格林尼治标准时保存的记录,然后在格林尼治时间以外的用户查看时再次转换。将日期转换为日期/时间时,时间始终是午夜格林尼治标准时间。使用TEXT()转换日期/时间值时,请务必考虑时区。将日期/时间转换为文本时,它将以格林尼治标准时间(以GMT结尾处的Z表示)返回时间。 TEXT()总是以GMT时间生成文本值,而不是组织的时区。
  • 闰年和无效的日期。当将文本转换为日期或日期/时间值或增加年,月,日的日期或日期/时间,确保您的结果仍然是一个有效的日期。例如,如果公式的结果是2015年6月31日,则公式字段将显示#Error!同样,如果您的公式返回2013年2月29日(非闰年),该字段将显示错误。确保您的配方包含闰年和不同的月份长度。

公式(2)数字

学习目标

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

  • 描述什么数字,货币和公式返回类型是。
  • 解释数字,货币和百分比类型之间的差异。
  • 描述具有数字,货币和百分比类型的公式的用例。
  • 使用数字,货币和百分比类型创建公式。

数字,货币和公式中的百分比简介

当大多数人听到这个词的公式时,他们会想象一些涉及数字的东西。虽然Salesforce中的公式并非总是如此,但少数数据类型是基于数字的。这些数据类型中最简单的是数字类型。当您创建返回数字的公式字段时,您可以指定您的数字有多少个小数位,从0到18。
数字可以是正数也可以是负数,整数或小数。数字可以很好地用于测量,例如温度,长度和种群。然而,货币有它自己的数据类型。返回货币数据的公式与数字公式相似,只是货币值带有内置的货币符号。

 

注意

使用货币的自定义公式字段不与任何特定货币关联。如果您的组织启用了多币种,则货币公式的结果将以相关记录的货币显示。
百分数也是他们自己的数据类型 – 附有百分号的数字。百分比被存储为除以100的数字,意味着100%被表示为1,90%等于0.9,依此类推。
您可以在公式中混合和匹配这三种数值数据类型,但要记住它们之间的差异。请记住,无论您使用的是哪种类型,公式返回的值不能超过18位,包括小数点前后的数字。
公式返回类型 特点
Number 正数或负数,无论是整数还是小数。
Currency 带有货币符号的数字。
Percent 带百分号的数字,以数字除以100存储。

 

通用数字,货币和百分比函数和操作符

当你使用数字时,你经常使用某些函数和操作符。

数学运算符

返回数字,货币或百分比的公式中最常用的运算符是从最早的算术类开始就已经看到的数学符号。
您可以添加(+),减( – ),乘(*)或除(/)数值。您也可以在公式中使用指数(^)。这些操作员就像在计算器上一样工作。公式遵循操作顺序,您可以将操作分组在括号中。
您也可以使用大于(>),小于(<),小于或等于(<=)或大于或等于(> =)来比较两个数值。要检查两个数字是否相等,请使用=。要检查两个数字是否相等,请使用不等于,它可以写成!=或<>。

数学函数

公式编辑器还提供了其他一些数学函数。函数ROUND()将您给出的数值进行舍入。它使用半轮规则,意味着中途值总是四舍五入。例如,1.45到1.5,1.43到1.4。
此货币公式使用ROUND()计算折扣并将其舍入到两位小数,以便它是一个适当的货币数量。
ROUND(Price__c - Price__c * Discount__c, 2)
您还可以使用内置的运算符来执行其他几个数学函数,如绝对值,天花板或地板。要了解有关数学函数的更多信息,请参阅Salesforce联机帮助中的公式运算符和函数。

 

在公式中使用数字,货币和百分比

您可以在许多不同情况下使用公式中的数字,货币和百分比类型,从计算销售佣金百分比到总收入或利润。

为主体创建一个自定义字段

  1. 在安装程序中,使用快速查找框来查找 Object Manager.
  2. 点击 Account | Fields & Relationships 然后单击 New.
  3. 选择 Currency 并点击 Next.
  4. In Field Label, enter Principal. Field Name populates automatically.
  5. Decimal Places,中输入2.由于这是货币数量,我们需要小数点后两位数字。
  6. 将长度更改为16.将其余选项保留为默认值,然后单击下一步。
  7. 再次单击下一步,然后单击保存。

我们将使用委托人有条件地计算利率,然后我们可以使用它来计算复合利息的金额。

计算百分比利息

对于这个帐户,假设如果本金余额低于$ 10,000,则利率为每年2%,即0.02。如果余额在$ 10,000和$ 100,000之间,则利率为3%,即0.03。如果余额超过$ 100,000,则利率为4%,即0.04。
给定委托人,我们使用IF()来决定适当的利率。
  1. Object Manager, 单击 Account | Fields & Relationships 然后单击 New.
  2. 选择 Formula 并单击 Next.
  3. Field Label, 输入 Interest Rate. 字段名称自动填充。
  4. 选择 Percent 并将小数位保留为默认值2。
  5. 点击 Next.
  6. 输入以下公式:
    IF(Principal__c < 10000, 0.02, 
      IF(Principal__c >= 10000 &&
        Principal__c < 100000, 0.03, 0.04))

     

    注意

    我们的if语句有一个缺口:尽管货币数量可能是负数,但我们假设Principal__c是正数。如果不是,这个账户有麻烦!
    现在我们有一个本金和一个利率 – 计算一个账户的累计利息所需的一切。

计算帐户的累计利息

我们将创建一个公式,该公式用于计算使用“委托人”的帐户的利息以及帐户已开立的年数。幸运的是,已经有一个计算账户利息的数学公式:A = Pe ^(rt),它使用下列变量。

变量
P 账户中的金额本金
e 数学常数 2.71828182845904
r 账户的年利率
t 帐户已开启的年数

现在我们只需要调整公式来适应我们的领域。

首先,在公式编辑器中插入字段Principal。我们要乘以e乘以利率的乘方,再乘以账户开立的年数。我们可以用EXP()函数来做到这一点。 EXP(数字)返回e增加到数字的幂。
对于利率,插入我们之前做出的领域Interest_Rate__c。要查找帐户已打开的年数,请从TODAY()中减去打开帐户的年份YearStarted,该TODAY()是一个返回当前日期的内置函数。因为YearStarted是一个Text值,所以首先必须使用VALUE()将其转换为Number,该值使用Text字符串并返回一个Number。我们还使用函数YEAR(),它从Date中抽取一年,在这种情况下是TODAY()返回的当前日期。

这给了我们最终的功能。

Principal__c * EXP(Interest_Rate__c * (YEAR(TODAY()) - VALUE(YearStarted)))
在公式编辑器中输入函数后,可以继续并单击下一步。在“字段安全性”页面上,单击“下一步”,然后单击“保存”以完成公式。
恭喜,您已经成功编写了一个计算公式,计算累积的,不断复利的帐户利息!您可以在任何帐户页面上看到它的行动。

 

数字公式示例

  1. 考虑到保证金的百分比,销售的商品数量和每件商品的价格,这个公式计算了毛利润。
    Margin_percent__c * Items_Sold__c * Price_Item__c
  2. 这个货币公式计算佣金,假设最高佣金为$ 500。鉴于存在定制百分比字段佣金和自定义货币字段销售额,此公式返回500美元和佣金百分比乘以销售额的较小金额。
    MIN(500, Sale__c * Commission__c)
  3. 数字公式对于完成基本的单位转换很有帮助。这个公式将摄氏温度转换成华氏温度。
    1.8 * Degrees_Celsius__c + 32
    这一个转换英里到公里。
    Miles__c / 0.6213711921

 

数字公式的常见错误

  • 除以零. 在编写基于数字的公式时,您习惯使用相同的数学规则。如果你的公式除以0,你会得到一个错误。当你分两个数时,确保分母不为零。当您将价值可能改变的另一个领域划分时,考虑除以零是特别重要的。如果您仍然想要用可能为零的数字进行除法,请使用IF()语句来保证您不会遇到错误。例如,此公式通过将年收入除以员工人数来计算帐户上每名员工的收入。如果员工为零,则公式将返回0,而不是运行到错误。
    IF(NumberOfEmployees <> 0, AnnualRevenue / NumberOfEmployees, 0)
  • 检查空字段. 通过使用=(equal)或者!=(not equal)运算符来检查一个字段是否为空可能是诱人的。但最好的做法是使用内置函数ISBLANK()。 ISBLANK()将任何字段作为参数,如果字段为空则返回true,否则返回false。在创建公式时,您可以选择将空白字段视为零或空白。默认情况下,选择空白字段为零。如果选择将空白字段视为空白,则只能使用ISBLANK()来检查字段是否为空。

公式(1)复选框

学习目标

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

  • 描述复选框公式的返回类型是什么。
  • 使用IF(),AND(),NOT()和OR()函数十分方便。
  • 用复选框类型描述公式的用例。
  • 使用复选框类型创建一个公式。

公式字段介绍

公式是一个强大的工具,可以让您对组织数据执行计算和其他操作。使用公式,您可以嵌入超链接,使用现有字段执行算术运算,或使用条件逻辑显示金额。如果您以前从未使用过公式,那么在开始使用公式字段之前,请先阅读此公式。

公式中的复选框类型简介

说到复选框,您只有两个选择:选择或不选择。这对你的公式意味着什么?那么,复选框公式只是一个逻辑语句,可以是真或假。例如,如果您想知道账户至少有500名员工,则可以使用简单的复选框公式。

NumberOfEmployees >= 500
如果某个账户的员工数量超过或等于500人,则在该账户的页面上选中复选框大账户。否则,大型账户不被检查。
大多数情况下,公式中的逻辑陈述比这个复杂得多。要充分利用复选框公式数据类型,您需要一些基本的逻辑工具。

基本的逻辑运算符

逻辑函数是对几乎每个对话中已经使用的单词进行更加严格的适应性调整:和,或不,如果。例如,你知道,一个苹果是一个红色的水果,而一个香蕉是一个黄色的水果。如果你在杂货店里看到红色和水果的东西,你就要抢苹果。如果你正在寻找一些红色或水果的东西,你可以用苹果或香蕉。
您可以使用与NOT(),AND(),OR()和IF()函数相同类型的逻辑。

AND()

内建的AND()函数至少需要两个参数。当且仅当两个参数都为真时它才返回true。如果我们在桌子上看这个逻辑,可以很容易地看到这个逻辑。

第一个参数 = True 第一个参数 = False
第二个参数 = True True False
第二个参数= False False False
例如,假设您希望用户查看联系人并立即知道是否可以通过电子邮件或电话联系他们。如果有问题的联系人标记为“不呼叫”和“退出电子邮件”,我们想要选择另一个复选框,不要联系。因为我们希望只有当选择了“不呼叫”和“电子邮件退出”的联系人时,才能检查此复选框,我们使用AND()函数。
以与在Salesforce中创建任何其他公式字段相同的方式创建复选框公式。
  1. 从设置中,在快速查找框中输入联系人,然后选择联系 Contacts | Fields.
  2. 滚动到联系人自定义字段和关系部分,然后单击 New.
  3. 选择Formula 并单击Next
  4. Field Label, 中,输入 Do Not Contact. 字段名称自动填充。
  5. 选择 Checkbox 然后单击 Next.
  6. 复制下面的代码片段并将其粘贴到公式编辑器中。

    AND(DoNotCall, HasOptedOutOfEmail)
    一旦你完成,这是它在公式编辑器中的样子:
    The Do Not Contact checkbox formula
快速记录。我们在整个模块中给出的公式样本范围从相对简单到非常复杂。为了使您更容易,我们将给你所有的公式样本作为片段,而不是公式编辑器中的外观的截图。这将允许您将代码片段复制并粘贴到公式编辑器中。要复制代码段,只需将鼠标悬停在代码段上,直到右上角出现三个图标。然后使用“复制到剪贴板”图标复制代码段。
一如往常,确保您使用高级公式编辑器输入您的公式。您可以通过从公式编辑器中选择“高级公式”选项卡来访问“高级公式编辑器”。高级公式编辑器使您可以轻松访问您在整个模块中需要的各种功能和操作员。

注意

请记住,您可以将公式字段创建为自定义字段,但也可以将公式字段创建为验证规则。通过验证规则,您可以防止用户根据公式保存包含无效数据的记录。验证规则可以是强制执行数据质量的一种有效方法,但拥有巨大的权力则是一项重大的责任。你想要的最后一件事是不能保存记录的不幸的用户。所以明智地使用你的力量。在这里了解更多关于验证规则。
使用此公式,如果有人选择了“不呼叫”和“电子邮件退出”,则联系人卡片将显示另一个选中的复选框“不接触”。如果人员只选择其中一个,则不选中“不联系”框。

 

注意

有不止一种方法来编写AND()函数。你可以用AND()把它写成函数,或者把两个语句和&&联系起来,作为一个操作符。在这种情况下,AND(DoNotCall,HasOptedOutOfEmail)等同于DoNotCall && HasOptedOutOfEmail。请确保不要混淆&,它用&连接两个文本字符串来替换AND()。
如果你想检查两个以上的条件,不要担心,AND()运算符不限于两个。如果AND()运算符选择了“不要呼叫”,“电子邮件退出”和“传真退出”,则在“不联系”框中显示与联系人联系的条件。
AND(DoNotCall, HasOptedOutOfEmail, HasOptedOutOfFax)
使用此公式,只有在选中了“不呼叫”,“不要电子邮件”和“不传真”三个复选框时,才会选中“不接触”复选框。如果没有选中任何一个(或两个或全部三个),则不会在联系人页面上显示未选中。

OR()

OR()函数与AND()函数类似。它也至少需要两个参数。但是,与AND()不同,如果至少有一个条件为真,则OR()返回true,如果所有参数都为假,则返回false。

第一个参数 = True 第一个参数= False
第二个参数 = True True True
第二个参数 = False True False
我们来看看接触对象的另一个例子。假设你想要显示一个复选框,如果一个联系人是在一个组织的执行层。我们知道某人在执行层面上的头衔是以“首席”(如首席执行官,首席运营官等)开头,还是包含“总统”一词(如总裁,副总裁等)。注意我们是如何使用这个词或者描述这个问题的。这是一个很好的线索,你需要在这个公式中的OR()运算符。
为了使这个公式有效,我们将使用几个文本函数,你可以在使用文本公式中学到更多的知识:
  • BEGINS(text, compare_text)告诉你一个字符串(文本)是否以另一个字符串(compare_text)开始。
  • CONTAINS(text, compare_text) 告诉你一个字符串(text)是否包含另一个字符串(compare_text)。
使用复选框类型和名称是执行创建一个公式字段。输入下面的公式

OR(Begins(Title, "Chief"), CONTAINS(Title, "President"))
就像使用AND()函数一样,可以用多种方法编写OR()。你可以写BEGINS(Title , “Chief”) || CONTAINS(Title , “President”).

OR(), 像AND(), 可以有两个以上的参数。要检查联系人的标题是否包含“执行”一词,请尝试:

BEGINS(Title, "Chief") ||
CONTAINS(Title, "President") ||
CONTAINS(Title, "Executive")
NOT()
NOT()函数完全符合你所期望的:它改变了任何真的假,任何真的假。假设您想要在联系人的页面上显示一个复选框,指出联系人卡片是否缺少重要信息。对于这个例子,如果包含名字,姓氏,电话号码,电子邮件地址和邮寄地址,我们认为联系人完成。只有当这些字段都不为空时,公式才会计算为真。
要检查联系人是否有我们正在寻找的信息,请使用ISBLANK()函数。 ISBLANK()将一个字段作为参数,如果为空则返回true,如果填充则返回false。
NOT(
  ISBLANK(FirstName) || 
  ISBLANK(LastName) ||
  ISBLANK(Phone) ||
  ISBLANK(Email) ||
  ISBLANK(MailingAddress)
)

注意

由于函数和运算符之间的空格和返回值在公式中无关紧要,因此此处显示的换行符和空格不是必需的。但是,在公式中使用换行符和空格可以更容易阅读。它也可以帮助其他任何需要了解或更新公式的人。
在那里,你有它!您可以通过查看组织中的联系人来测试此公式。如果所有相关的联系信息都已完成,则联系人将被标记为已完成,并选中您创建的联系人完成复选框。如果我们选中的一个或多个字段为空,则复选框未被选中。
请注意,NOT()也可以写成简单的感叹号。使用这个符号,我们的公式看起来有点不同,但是具有相同的效果。
!(ISBLANK(FirstName) || 
ISBLANK(LastName) ||
ISBLANK(Phone) ||
ISBLANK(Email) ||
ISBLANK(MailingAddress))

IF()

可以使用IF()语句,而不是像AND()和OR()这样的逻辑运算符串联在一起。 IF()接受三个参数,格式为IF(test,result,alternate)。通俗地说:如果测试是真的,评估结果。否则,评估备用。

所以你回到杂货店,再一次找一个红色的水果。你知道如何用AND()和OR()写出这个场景,但是你也可以用IF()语句来思考它。首先,你拿起一块产品,检查是否是水果。如果是,请检查它是否是红色的。如果您使用IF()语句编写产品选择公式,则您的决策过程如下所示:

IF(Mystery_Produce = "Fruit", Mystery_Produce_Color = "Red", false)
您可以在公式中应用相同的基于if的逻辑。例如,您想知道联系人是否是主要联系人。我们将主要联系人定义为执行人员(使用之前创建的公式字段“执行”),并且位于市场营销部门中。你已经知道如何和ands和ors做到这一点。
Is_Executive__c && Department = "Marketing"
使用IF()语句,公式如下所示:
IF(Is_Executive__c, Department = "Marketing", false)
你可以嵌套IF()语句。 IF()语句中的任何参数都可以是另一个逻辑语句,包括另一个IF()语句。在这个例子中,我们将主要联系人定义为执行人员,除此之外,还有旧金山市场部或纽约销售部。我们将创建一个只有在满足这些条件时才被选中的复选框。
我们通过查看电话号码的区号来确定联系人所在的城市,415对应于旧金山,212对应纽约。使用ands和ors,公式如下所示:
Department = "Marketing" && 
Is_Executive__c &&
BEGINS(Phone, "(415)") ||
Department = "Sales" &&
Is_Executive__c &&
BEGINS(Phone, "(212)")

注意

逻辑运算符就像数学运算符一样,具有操作的顺序。 AND()总是在OR()之前被计算。您还可以将逻辑运算符分组在括号中,以便按特定顺序进行评估。
如果一个联系人满足作为主要联系人的所有要求,我们需要一个正确的公式。首先,我们要检查联系人是否使用我们之前创建的Is Executive复选框。如果联系人是主管人员,我们会检查该部门是否为销售人员。如果这是真的,那么我们要检查的最后一件事是电话号码的区号。另一方面,如果联系人是执行人员,但部门不是销售人员,则检查是否为营销。如果是这种情况,我们检查电话号码是否有旧金山地区代码。使用选择树来显示一系列IF()语句通常更容易。当你写一个使用IF()的公式的时候,先抽出一个是很好的第一步。
A choice tree representing our logical process
树的每个分支对应于我们公式的IF()语句中的条件。

IF(Is_Executive__c,
  IF(Department = "Sales", BEGINS(Phone, "(212)"), False),
  IF(Department = "Marketing", BEGINS(Phone, "(415)"), False))
在像这样的公式中,包含明确的换行符和空格是非常重要的。那么,后来谁读你的公式知道你的IF()语句是如何嵌套的。

复选框公式示例

  1. 如果概率小于50%(0.5),并且预期收入小于10,000,则此复选框公式将机会指定为小的机会。
    AND(Probability < 0.5, ExpectedRevenue < 10000)
  2. 如果优先级标记为高,情况未关闭,并且在一周内升级或未更新,则此公式将优先级标记为优先级。该公式根据放置括号的位置而有所不同。

    ISPICKVAL(Priority, "High") &&
    NOT(IsClosed) &&
    (IsEscalated || Days_Since_Last_Update__c > 7)
    例如,此公式使用略有不同的圆括号来检查案件是否高优先级,已关闭并升级,或者自案件上次更新以来已超过7天。
    (ISPICKVAL(Priority, "High") &&
    NOT(IsClosed) && IsEscalated)|| 
    Days_Since_Last_Update__c > 7
  3. 这个公式显示一个复选框,好的呼叫,检查是否可以拨打联系人。该公式检查联系人是否选择了“不要呼叫”。如果联系人没有,公式确保电话号码字段不是空白。
    IF(NOT(DoNotcall), NOT(ISBLANK(Phone)), false)