希望您能帮助我查看以下逻辑以查找错误。我希望创建一个工作流程,以便以更低的频率向最终用户发送调查。基本上,它将检查案例的帐户对象的“减少调查频率”字段,其中包含#并且在自“联系人”字段“上次调查”上设置的最后一个日期起经过的#天数之后才会发送调查日期'。请查看代码并告诉我任何建议的更改!
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。
答案 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())
虽然没有承诺;)
您可以通过启用调试日志轻松测试它们。您将看到工作流程公式以及用于评估它的值。
另一种选择是制作一个具有相同逻辑的临时公式字段并观察(在报告中?),其中它为真/假进行质量检查。