本文參考官方的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有機會下篇介紹,如果篇中內容有寫錯的地方歡迎指正,如果有問題,歡迎留言,共同探討。