调查频率降低 - Salesforce工作流程

时间:2014-01-29 16:05:50

标签: salesforce

希望您能帮助我查看以下逻辑以查找错误。我希望创建一个工作流程,以便以更低的频率向最终用户发送调查。基本上,它将检查案例的帐户对象的“减少调查频率”字段,其中包含#并且在自“联系人”字段“上次调查”上设置的最后一个日期起经过的#天数之后才会发送调查日期'。请查看代码并告诉我任何建议的更改!

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。

1 个答案:

答案 0 :(得分:0)

我个人更喜欢使用&&||代替AND(), OR()函数的语法。它只是给我读得更好,不需要跟踪那么多逗号,在更复杂的逻辑中跟踪缩进......但如果你更习惯这种类似Excel的流程 - 去吧。最后,它必须是你可读的。

此外,我会考虑重新排序这一点 - 简单的检查,最有可能首先失败。

第一部分 - 与您的问题无关

不要使用RecordType.Name,因为这些名称可以翻译成法语,并且会为那些选择非英语作为首选语言的用户搞砸你的逻辑。使用RecordType.DeveloperName,它更安全。

CONTAINS - 您真的有这么多记录类型以他们的名义共享这部分吗?正常=比较有什么问题?您可以使用CASE()语句检查公式是否更具可读性。或者如果有6个rec类型并且你已经明确列出了4(当你添加新的rec。类型时可能需要进行审查),也可以翻转逻辑。如果你发现自己经常复制粘贴这4个检查块 - 考虑用它做一个辅助公式字段......

第二部分

如果您在公式编辑器的底部正确使用“将空值视为空白/为零”设置,则可以跳过

ISBLANK个检查。因为你正在进行检查

OR(..., 
    Account.Reduced_Survey_Frequency__c==0,
    ISBLANK(Account.Reduced_Survey_Frequency__c),
    ...
)

这基本上就是这个东西的设计目的。我将其翻转为“将空值视为零”(但这意味着ISBLANK检查将永远不会“触发”)。如果您对此不满意 - 您还可以使用

“安全地比较或减少”
BLANKVALUE(Account.Reduced_Survey_Frequency__c,0)

这将具有类似的“将零视为零”效果,但仅限于此一个地方。


所以...我最终会得到这样的东西:

(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())

虽然没有承诺;)


您可以通过启用调试日志轻松测试它们。您将看到工作流程公式以及用于评估它的值。

另一种选择是制作一个具有相同逻辑的临时公式字段并观察(在报告中?),其中它为真/假进行质量检查。