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有机会下篇介绍,如果篇中内容有写错的地方欢迎指正,如果有问题,欢迎留言,共同探讨。
salesforce 零基础开发入门学习(十五)salesforce中formula的使用(不含Date/Time)的更多相关文章
- 【转载】salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable
salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable 本篇知识参考:https://developer.salesforce.com/trailhead/for ...
- salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable
本篇知识参考:https://developer.salesforce.com/trailhead/force_com_dev_intermediate/asynchronous_apex/async ...
- 【转载】salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载
salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载 目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新 ...
- 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建
salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建 VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL) salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...
- 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...
- salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载
目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新公司,主要做的就是salesforce,不过当时想要看一些相关资料确实比较难.为了避免想要零基础学习的人 ...
- salesforce 零基础开发入门学习(七)PickList的value值获取
之前介绍过PickList类型的声明以及赋值,但是如何取出呢?一个sObject对象可以理解为一条数据.通过sObject直接取恐怕很难做到,因为他只会显示一个值.这时候就要用到Schema命名空间中 ...
随机推荐
- 如何在CentOS 5/6上安装EPEL 源
EPEL 是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentO ...
- JQuery延时操作
JQuery通过setTimeout函数可以实现延时操作以完成在编程达到某些需要的效果. 使用方法如下: function doSomething() { alert("hello worl ...
- SQL Server 分区表
分区表可以提高查询效率 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下由多个cpu进行处理.这样文件的大小随 ...
- poj 1737 Connected Graph
// poj 1737 Connected Graph // // 题目大意: // // 带标号的连通分量计数 // // 解题思路: // // 设f(n)为连通图的数量,g(n)为非连通图的数量 ...
- 【转】linux shell实现随机数多种方法(date,random,uuid)
在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签.呵呵,非常简单就可以实现.那么在做程序设计,真的要通过自己程序设计出随机数那还真的不简单了.现在很多都是操作系统内核会提供相应的api,这 ...
- cordova for ios(android一样)添加插件
1.进入当前工程文件夹 终端:cd ~/Desktop/ cd piao 2.添加插件 :cordova plugin add Basic device information (Device API ...
- Python成长笔记 - 基础篇 (九)
创建一个socketserver 至少分以下几步: First, you must create a request handler class by subclassing the BaseRequ ...
- NSString进行urlencode编码
今天在项目开发过程中,需要给webView传一个url,但是web端需要我将url中的一个变量进行urlencoding编码.这个主要原因是怕这个参数中存在一些转义字符,ok!这个没有问题,一开始我只 ...
- oracle数据文件不小心被删除,导致对应的表空间删不掉的处理方法
问题现象:数据文件被无意删除,导致数据库表空间无法删除,并且重新刷表空间提示表空间已经存在:解决方法:1.oracle用户登录服务器,使用sysdba连接数据库 >sqlplus / as sy ...
- oracle数据库导入导出
简单记录下数据泵导出导入expdp .impdp 和 普通导出导入 exp.imp 一.数据泵导出数据库(按用户)步骤: 1.以oracle用户登录oracle所在服务器,创建数据库备份文件目录 &g ...