salesforce 零基础开发入门学习(十五)salesforce中formula的使用(不含Date/Time)

本文参考官方的formula介绍PDF:https://resources.docs.salesforce.com/200/latest/en-us/sfdc/pdf/salesforce_useful_formula_fields.pdf

formula函数A-H:https://help.salesforce.com/apex/HTViewHelpDoc?id=customize_functions_a_h.htm&language=en_US

formula函数I-Z:https://help.salesforce.com/apex/HTViewHelpDoc?id=customize_functions_i_z.htm&language=en_US

formula在object创建字段时很常见,比如商品表中有成本价以及售卖价,通过formula计算式可以直接自动计算出利润。

一.Formula创建

formula创建方式如下:

1.找到需要创建Formula字段的Object,选择Custom Fields & Relationships后单击new;

2.引导页选择类型时选择Formula;

3.输入字段Label以及字段名称,并且选择Formula计算式的返回类型,有以下类型可以返回,后期会给出相关的sample,这里先选择Number;

4.输入计算式,这里包含了以下模块:

  • 通过两个链接可以学习一下Formula的用法,涵盖全部的学习文档;
  • 两种输入的模式,开发时经常选择Advanced Formula;
  • 点击后可以选择sObject的field;
  • 基本逻辑操作,例如 + - * / 等;
  • 封装的方法,包括逻辑方法和操作方法;
  • 校验语法是否正确,只有正确才能下一步,写完formula后必须先校验。

 5.勾选相关的权限后next保存。

二.Formula相关操作

Formula表达式可以使用以下的操作或方法(仅写出一部分,详细内容参看上方的链接):

  • 数学操作:包括 + - * / ^(幂)以及(),这些内容为最基本内容;
  • 逻辑操作:包括以下的逻辑操作:

  1)==:判断两者是否相等;

  2)!=(<>):判断两者是否不等;

  3)<,<=,>,>=:小于、小于等于、大于、大于等于;

  4)&&:逻辑与,两者均为true则为true;

  5)||:逻辑或,两者有一个为true则为true.

  • 字符串操作 &:用来连接两个字符串   eg:GoodsName & GoodsPrice 则结果输出的为两个字符串合并后的内容;

三.Formula常用函数

Formula内置了很多的函数,方便快速开发

注意:使用函数最好通过上图中标记5的Functions选择函数insert,而不是手动输入,减小因人为输入错误导致的问题。

1)逻辑函数:

AND:和&&操作相同,逻辑与,两者均为true则为true。

  写法:AND(logical1,logical2,...)

  sample: IF(AND(Price<1,Quantity<1),"Small", null):如果Price<1并且Quantity<1则返回结果为Small,否则为null

OR:和||操作相同,逻辑或,两者有一个为true则为true。

  写法:OR(logical1,logical2,...)

  sample:IF(OR(Price<1,Quantity<1),"Small", null):如果Price<1或者Quantity<1则返回结果为Small,两者均为false返回null

CASE:作用类似于java中的switch,case功能。当满足哪个值,则执行哪个相应结果。

  写法: CASE(expression, value1, result1, value2, result2,...,else_result) 

  sample:sample用于通过创建的月份获取相应月的英文全称。

CASE( MONTH( DATEVALUE(createdDate) ), 1, "January", 2, "February", 3, "March", 4, "April", 5, "May", 6, "June", 7, "July", 8, "August", 9, "September", 10, "October", 11, "November", 12, "December", "None")

IF:用于判断逻辑表达式是否正确,正确走正确的执行value,错误走错误的执行value。可以在value_if_true或者false位置嵌套第二层,第三层.....if语句。

  写法:IF(logical_test, value_if_true, value_if_false)

  sample:内容会在后面给出

ISNUMBER:校验一个字段的value是否为一个number类型,如果是返回true,否则返回false

  写法: ISNUMBER(Text) 

  sample:ISNUMBER(GoodsPrice__c):返回类型为布尔类型,用于判断当前记录GoodsPrice__c的内容是否为number类型。

NOT:用于将逻辑中的true改为false,false改为true,相当于取反操作。

  写法: NOT(logical) 

  sample:IF(NOT(ISPICKVAL(GoodsBrand__c, "华为")),1, 0):如果当前产品的名称不是华为则返回1,否则返回0.

2)操作Text函数

BEGINS:判断是不是以某个指定文本开头,如果是返回true,不是返回false

  写法:BEGINS(文本, 比较文本)

  sample:IF(BEGINS( GoodsName__c ,'g'),'以g开头','不以g开头'):如果GoodsName__c字段以g开头,则返回'以g开头'

CASESAFEID:将15位ID转换成18位,18位字符更好和excel兼容。

  写法:CASESAFEID (Id)

  sample:IF( LEN(Id) != 18, CASESAFEID(Id), id)

CONTAINS:用于比较文本是否包含比较的文本,如果包含,返回true,不包含返回false。通常用于和IF一起使用。

  写法: CONTAINS(text, compare_text) 

  sample: IF(CONTAINS(GoodsName__c,'goods'),'Y','N'):如果此条记录GoodsName__c包含goods字符,则返回Y,否则返回N

FIND:返回某个字符串在文本字符串内的位置(以数字形式表示)。相当于Apex中String类的indexOf函数,不过位置从1开始计算。

  写法:FIND(search_text, text [, start_num]) 

  sample:FIND('goods', GoodsName__c ):记录GoodsName__c字段中goods字符串在字符串中的位置,如果不存在则返回0.0返回类型为number

INCLUDES:判断多选列表中是否含某个字符串,仅限于多选列表使用,包含返回true,不包含返回false。

  写法:INCLUDES(multiselect_picklist_field, text_literal)

  sample:INCLUDES(Hobbies__c, "Golf"):如果爱好中包含Golf,则返回true,否则返回false。

ISPICKVAL:判断PickList当条数据是否与某个字符串相同,仅限于PickList中使用,相同返回true,不同返回false

  写法: ISPICKVAL(picklist_field, text_literal) 

  sample: ISPICKVAL( GoodsBrand__c , '华为') :判断当条数据GoodsBrand__c字段是否为'华为'

LEFT:获取从文本开头算起指定长度的字符。

  写法: LEFT(text, num_chars) 

RIGHT:返回从文本字符串右边算起的指定数量的字符。

  写法: RIGHT(text, num_chars) 

  sample:LEFT(GoodsName__c, 2) &  RIGHT( GoodsName__c,3):获取GoodsName__c左数两个字符和右数三个字符的内容。&用于两个字符串连接

LEN:返回指定的文本字符串中所含的字符数。

  写法: LEN(text) 

  sample:LEN(GoodsName__c):返回当前行GoodsName__c字段长度。

LOWER:将指定字符串中的所有字母转化成小写字母。

  写法: LOWER(text) 

  sample:LOWER(GoodsName__c):返回当前行GoodsName__c字段内容,内容中字母转换成小写

TEXT:将字段转换成字符串,比如Date/Time,Number类型无法使用LEFT,LEN等函数,可以先将字段通过TEXT函数转换成字符串,然后再进行相关处理。

  写法: TEXT(value) 

  sample:LEFT(TEXT(CreatedDate),3):获取CreatedDate字段左面三个字符串,因为CreatedDate为Date/Time类型,不能直接使用LEFT函数

TRIM:删除文本字符串中开头和结尾的空格和制表符。

  写法:TRIM(text) 

  sample:TRIM(TEXT(GoodsBrand__c))

UPPER:将指定字符串中的所有字母转化成大写字母

  写法:UPPER(text)

  sample:LOWER(GoodsName__c):返回当前行GoodsName__c字段内容,内容中字母转换成大写

VALUE:将文本字符串转换为数字,需要确保字符串中不包含除符号以及小数点以外的特殊符号,否则结果会返回#Error!

  写法:VALUE(text) 

  sample:VALUE(GoodsPrice__c):以Number类型返回GoodsPrice__c

3)数学函数:自行查看

4)Informational 函数

 IsBlank:判断表达式是否具有值,如果没有值则返回 TRUE(真)。如果它包含一个值,则该函数返回 FALSE(假)。IsBlank判断包含了是否为null的校验,所以在使用Formula或者Validation Rule时,使用IsBlank方法代替ISNULL。

  写法: ISBLANK(expression) 

  sample:IF(ISBLANK(GoodsName__c),1,0):判断如果GoodsName__c不为null并且不为空,则返回1,否则返回0

 BLANKVALUE:判断表达式是否具有值,如果没有值则返回一个置换表达式。如果表达式具有值,则返回表达式的值。简单理解类似三目运算。

  写法:BLANKVALUE(expression, substitute_expression) 

  sample:BLANKVALUE( CreateDate__c ,  CreatedDate ) :如果CreateDate__c为空,则返回CreatedDate,否则返回CreateDate__c.

PRIORVALUE:获取记录字段前一个值,通常可以用于VALIDATION RULE以及WorkFlow中,比较字段前后的差距。

  写法:PRIORVALUE(field)

  sample:IF(PRIORVALUE(GoodsPrice__c)-GoodsPrice__c>10,true,false):如果GoodsPrice__c字段修改前比修改后大于10,则返回true,否则返回false

四.各种返回类型举例

1)返回类型为Date

DATEVALUE( CreatedDate )

2)返回类型为Number

IF( GoodsPrice__c > GoodsCostPrice__c , GoodsPrice__c - GoodsCostPrice__c, 0)

3)返回类型为CheckBox   

IF( GoodsPrice__c - GoodsCostPrice__c > 50, true, false)

4)返回类型为Date/Time

IF( !ISBLANK( LastModifiedDate ) , LastModifiedDate , CreatedDate )

5)返回类型为Text

IF( 
( GoodsPrice__c - GoodsCostPrice__c ) / GoodsPrice__c > 0.5, 
'高利润', 
IF( 
( GoodsPrice__c - GoodsCostPrice__c ) / GoodsPrice__c > 0.2, 
'中利润', 
IF( 
( GoodsPrice__c - GoodsCostPrice__c ) / GoodsPrice__c > 0, 
'低利润', 
'负利润' 
) 
) 
)

6)返回类型为Percent

( GoodsPrice__c - GoodsCostPrice__c ) / GoodsPrice__c

7)返回类型为Number

FIND('goods', GoodsName__c )

总结:本篇主要对Formula的用法以及函数进行讲解,还有很多类型没有罗列,如果需要用到其他的计算式函数,请自行查看,Date/Time类型的Formula以及Validation Rule有机会下篇介绍,如果篇中内容有写错的地方欢迎指正,如果有问题,欢迎留言,共同探讨。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老马寒门IT

06-移动端开发教程-fullpage框架

CSS3的新特性已经讲完了,接下来我们看一下jQuery的一个全屏jQuery全屏滚动插件fullPage.js。我们经常见到一些全屏的特绚丽页面,手指或者鼠标...

4249
来自专栏北京马哥教育

Python字符编码全解析

字符编码是计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概...

2696
来自专栏企鹅号快讯

编程语言学啥?当然首选Python啦!千字长文教你如何入门Python!

1.1 流程控制之for循环 ? 1.2 开发工具IDE 1.2.1 为何要用IDE ? 很多语言都有比较流行的开发工具,比如JAVA 的Eclipse, C#...

3636
来自专栏ThoughtWorks

Scala中的语言特性是如何实现的?

image.png #思特沃克好声音# (图片:网络) 我们学东西不止要知其然,还要知其所以然。成都办公室的崔鹏飞在学Scala的时候,不止学习如何使用Scal...

2957
来自专栏java沉淀

jQuery常用的功能

1023
来自专栏大史住在大前端

webpack4.0各个击破(5)—— Module篇

使用webpack对脚本进行合并是非常方便的,因为webpack实现了对各种不同模块规范的兼容处理,对前端开发者来说,理解这种实现方式比学习如何配置webpac...

952
来自专栏Ldpe2G的个人博客

Scala typeclass 设计模式

本文的写作的灵感主要是看了这个视频 : Tutorial: Typeclasses in Scala with Dan Rosen

1266
来自专栏企鹅号快讯

PHP弱类型在CTF中的应用

PHP作为世界上最好的语言(然而人生苦短,我用python),在CTF web题中大放异彩,深受出题人的喜爱。P神在对web题出题套路总结的第三条指出,出题人喜...

4855
来自专栏有趣的Python

Python零基础入门看完这一篇就够了: 零基础入门笔记Python开发环境搭建Python的初次体验Python变量和数据类型Python集合类型:list和tuplePython的条件判断和循环

学习python有一年多了,希望通过这篇两万字的学习笔记来复习了,也能让后来者少走一点弯路。在慕课网课程笔记的同时加入了一部分自己的经验补充。 [√] 慕课网P...

5578
来自专栏不二小段

Python为什么文件运行和在命令行运行同样语句但结果却不同?

这篇是之前知乎上的一个提问,感觉非常有趣而且内容丰富,所以把我自己的回答搬运到公众号来。 另外关于昨天的推送,是因为我之前把文章投到了Python中文社区的公众...

36513

扫码关注云+社区