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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM