减少调查频率-Salesforce工作流

减少调查频率-Salesforce工作流,salesforce,Salesforce,希望你能帮我复习下面的逻辑错误。我期待着创建一个工作流程,将发送一个调查出最终用户的频率降低。基本上,它将检查案例的Account对象的字段“减少的调查频率”,该字段包含一个#,并且在自Contact字段“last Survey date”上设置的最后日期起的#天过去之前不会发送调查。请检查代码,并让我知道任何建议的更改 AND( OR(ISPICKVAL(Status,"Closed"), ISPICKVAL(Status,"PM Sent")), OR(CONTAINS(RecordTyp

希望你能帮我复习下面的逻辑错误。我期待着创建一个工作流程,将发送一个调查出最终用户的频率降低。基本上,它将检查案例的Account对象的字段“减少的调查频率”,该字段包含一个#,并且在自Contact字段“last Survey date”上设置的最后日期起的#天过去之前不会发送调查。请检查代码,并让我知道任何建议的更改

AND( OR(ISPICKVAL(Status,"Closed"), ISPICKVAL(Status,"PM Sent")), 
OR(CONTAINS(RecordType.Name,"Portal Case"),CONTAINS(RecordType.Name,"Standard Case"), 
CONTAINS(RecordType.Name,"Portal Closed"), 
CONTAINS(RecordType.Name,"Standard Closed")), 
NOT( Don_t_sent_survey__c ) 
, 
OR(((TODAY()- Contact.Last_Survey_Date__c) >= Account.Reduced_Survey_Frequency__c ),Account.Reduced_Survey_Frequency__c==0, 
ISBLANK(Account.Reduced_Survey_Frequency__c), 
ISBLANK(Contact.Last_Survey_Date__c) 
))
谢谢,
Brian H.

我个人更喜欢使用
&
|
的语法,而不是使用
和(),或()。对我来说,它读起来更好,不需要跟踪这么多逗号,在更复杂的逻辑中跟踪缩进。。。但是如果你更习惯于这种类似Excel的流程,那就去做吧。最后,它必须是可读的

我也会考虑重新排序这一点-简单的检查,很可能首先失败。 第一部分-与您的问题无关

不要使用
RecordType.Name
,因为这些名称可以翻译成法语,这会让选择非英语作为首选语言的用户的逻辑混乱。使用
RecordType.DeveloperName
,这样更安全

包含
-您真的有这么多记录类型以其名称共享此部分吗?正常的
=
比较有什么问题?您可以使用
CASE()
语句检查公式是否更具可读性。或者,如果有6个rec.type,并且您已经明确列出了4个,那么可能会改变逻辑(但在您添加新rec.type时,可能必须对此进行检查)。如果你发现你经常复制粘贴这4个检查块-考虑用它制作一个辅助公式字段…

第二部分

ISBLANK
如果您正确使用公式编辑器底部的“将空值视为空白/零”设置,则可以跳过检查。因为你在开支票

OR(..., 
    Account.Reduced_Survey_Frequency__c==0,
    ISBLANK(Account.Reduced_Survey_Frequency__c),
    ...
)
这就是这个东西的设计初衷。我会将其翻转为“将空值视为零”(但这意味着
为空
检查将永远不会“触发”)。如果你对此不满意,你也可以使用

这将具有类似的“将null视为零”效果,但仅在这一个位置


所以。。。我最终会得到这样的结果:

(ISPICKVAL(Status,'Closed') || ISPICKVAL(Status, 'PM Sent')) &&
(RecordType.DeveloperName = 'Portal_Case' ||
 RecordType.DeveloperName = 'Standard_Case' ||
 RecordType.DeveloperName = 'Portal_Closed' ||
 RecordType.DeveloperName = 'Standard_Closed'
) &&
NOT(Don_t_sent_survey__c) &&
(Contact.Last_Survey_Date__c + Account.Reduced_Survey_Frequency__c < TODAY())
(ISPICKVAL(状态为“关闭”)| | ISPICKVAL(状态为“PM已发送”))&&
(RecordType.DeveloperName='Portal\u Case'||
RecordType.DeveloperName='标准案例'||
RecordType.DeveloperName='Portal\u Closed'||
RecordType.DeveloperName='Standard\u Closed'
) &&
不(不发送调查报告)&&
(Contact.Last_Survey_Date_c+Account.Reduced_Survey_Frequency_c
但是没有承诺;)


您可以通过启用调试日志轻松测试它们。您将在那里看到工作流公式以及用于计算它的值


另一种选择是创建一个具有相同逻辑的临时公式字段,并观察(在报告中?)它在哪里变为真/假,以便进行大规模抽查。

这里的任何帮助都将非常有用!有人有什么想法吗?
(ISPICKVAL(Status,'Closed') || ISPICKVAL(Status, 'PM Sent')) &&
(RecordType.DeveloperName = 'Portal_Case' ||
 RecordType.DeveloperName = 'Standard_Case' ||
 RecordType.DeveloperName = 'Portal_Closed' ||
 RecordType.DeveloperName = 'Standard_Closed'
) &&
NOT(Don_t_sent_survey__c) &&
(Contact.Last_Survey_Date__c + Account.Reduced_Survey_Frequency__c < TODAY())