發表文章

目前顯示的是有「formula」標籤的文章

如何用 formula 計算出「下一季度的最後一天」

圖片
問: 請幫我生成一個 Salesforce formula, 需求是:根據 createddate 產生一個新的日期,新的日期為「下一季度的最後一天」 ChatGPT 答: 以下是 Salesforce 公式,可以根據 createddate 產生下一季度的最後一天日期: DATE ( YEAR (CreatedDate) + CASE ( MOD ( MONTH (CreatedDate) - 1 , 3 ), 0 , 0 , 0 , 1 , 1 , 1 ), CASE ( MOD ( MONTH (CreatedDate) - 1 , 3 ), 0 , 4 , 0 , 7 , 0 , 10 ), 1 ) - 1 這個公式中,我們使用了 YEAR 函数、MONTH 函数和 MOD 函数來計算出 createddate 所在的年份和月份,然後使用 CASE 函数來判斷 createddate 所在的季度,進而計算出下一季度的最後一個月份。最後,我們使用 DATE 函数來組合出下一季度的最後一天日期。 請注意,由於 Salesforce 中的日期格式是 ISO 8601 格式(yyyy-MM-dd),所以公式中最後的 -1 表示減去一天,以獲得下一季度的最後一天日期。  

創建了一筆 record 從無到有,其上的 field 到底算不算"Is Changed"呢? 論"Is Changed"的具體定義

創建了一筆 record 從無到有,其上的 field 到底算不算"Is Changed"呢? 直接講結論:不算。 Is Changed 的具體定義 技術上來說, IsChanged 指的是 PRIORVALUE 和 current value 不一樣時,才叫做 IsChanged。 因為新創建的 record 根本沒有 PRIORVALUE,無從比對 PRIORVALUE 和 current value 是否不一致,所以不能算是 IsChanged。 根據官方文件: The Is Changed operator is available for flows that are triggered when a record is updated .  The Is Changed operator isn’t available for flows that are triggered when a record is created or deleted.  參考資料 IsChanged Flow Entry Criteria when record is created Use Is Changed in Condition Logic for Start Elements and Decision Elements

在 Sandbox 新建的 Document,Deploy 到 Production後,Id 會改變嗎?

背景說明 若我在 formula field 引用了一張 document 的圖,是以 Id 方式參照的。 例如: IMAGE("/servlet/servlet.FileDownload?file=01559000000000XXXX", "Yellow", 17 , 58) 那我可以用 change set 直接 deploy 這個 formula field 以及這個 document嗎? 這個 Id 參照能持續保持有效嗎? 結論 會失效、會壞掉。 Id會變。 新的 Id 要在 deployment 完成後才能得知。 如果有 hard code Id 的地方,請手動修改。謝謝。

疑難雜症 - 為什麼workflow不觸發!!

最近在跟Salesforce的Support來來回回討論一個難解問題,就是我們某個workflow有時候沒有成功被觸發。 而問題難就難在這個「有時候」。 他沒有一定失敗,但也不總是成功。我們無法刻意地重現問題。而且我們看來看去也實在看不出來失敗與成功的關鍵差異。 背景說明 我們有一個 Case object 的 workflow,含有兩個 Time-Based Action。 當有 case 符合此 workflow 的條件時,三天後會更新此 case 上某個 field,五天後會把這個 case 給 close 掉。 但我們發現有些 case 雖然成功執行了第一個 action (更新 field),但卻沒執行第二個 action (close case)。 為數眾多 應當 close 的 case 就一直卡在那裡。 解題過程 針對這些卡住的 case,我們做了這些分析: 假說1 :可能是在執行完第一個 action 後、還沒執行第二個 action 的這個期間,case 的值有發生變動,以致於不再符合 workflow 的條件,workflow 自然就停了 。 推翻假說1 :我們檢查了這些應關而未關的 case。幾乎都仍然處於符合 workflow 條件的的狀態。只要去隨便一下 update 該 case ,會發現又可以再次從頭觸發 workflow。所以看來並不是因為 criteria 走樣而造成的。 假說2 :我們發現應關而未關的 case 的 LastModifiedBy 幾乎都是同一個帳號。LastModifiedBy 也就是觸發 workflow 並執行 action的人。那會不會是這個帳號沒有關 case 的權限呢? 推翻假說2 :我 login as 了該帳號去嘗試手動關閉 case,相常順利毫無阻礙。而且我們也檢查了許多應關且有關的 case,其中不乏這個帳號成功透過 workflow 關閉的 case。可見應非權限問題。 後來實在走投無路了,想不出問題可能出在哪邊,我們就開了 case 向 Salesforce Support 求助。Support Agent 協助我們看了半天,也看不出個所以然來。不過 Support 有提出一個有可能改善的方案: …one possible adjustment in the WFR condition th...

如何確認一個field是不是空值

 在Formula方面:   請使用 ISBLANK 而不要用ISNULL ISBLANK可以處理ISNULL適用的所有情況 但ISNULL對於Text和Multi-select picklist不適用(這兩者永遠都不會是null) 在Apex Class/Apex Trigger方面: isBlank(inputString) Returns  true  if the specified String is white space, empty (''), or null; otherwise, returns  false . isEmpty(inputString) Returns  true  if the specified String is empty ('') or null; otherwise, returns  false . isNotBlank(inputString) Returns  true  if the specified String is not whitespace, not empty (''), and not null; otherwise, returns  false . isNotEmpty(inputString) Returns  true  if the specified String is not empty ('') and not null; otherwise, returns  false . 簡單來說,blank有包含空白字元的情況。如果該字串裡只有一堆空格,則isBlank會是TRUE,但對isEmpty來說是FALSE。