【问题标题】:select first two characters of values in a concatenated string选择连接字符串中值的前两个字符
【发布时间】:2013-04-03 21:35:36
【问题描述】:

我正在尝试创建一个公式字段来检查一个字符串,该字符串是一系列用逗号分隔的连接值。我想检查字符串中每个逗号分隔值的前两个字符。例如,字符串模式可以是:abcd,efgh,ijkl,mnop,qrst,uvwx

在我的公式中,我想检查前两个字符是否为 'ab','ef'

如果是这样,我会返回 true,否则返回 false。

谢谢。

【问题讨论】:

    标签: salesforce formula


    【解决方案1】:

    要正确执行此操作,您需要使用正则表达式。不幸的是,REGEX 函数在公式字段中不可用。但是,它在验证规则和工作流规则中的公式中可用。因此,您可以在验证或工作流程规则中指定以下公式:

    OR(
    AND(
        NOT(
            BEGINS( KXENDev__Languages__c, "ab" )
        ),
        NOT(
            BEGINS( KXENDev__Languages__c, "ef" )
        )
    ),
    REGEX( KXENDev__Languages__c , ".*,(?!ab|ef).*")
    )
    

    如果它是一个验证规则,你就完成了——如果任何条目不是以“ab”或“ef”开头,这个公式就会产生错误。如果它是一个工作流规则,那么您可以向它添加一个字段更新以在此公式为真时使用 False 更新某些字段(如果此公式为真,则至少有一个项目不以 ab 或 ef 开头,所以这会使您的字段为 False)。

    有些人可能会问“BEGINS 语句是怎么回事?难道你不能用一个 REGEX 完成这一切吗?”是的,我可能可以,但这会导致 REGEX 语句变得越来越复杂,而且这些语句在 Salesforce.com 中很难调试,因此我更喜欢让 Salesforce.com 中的 REGEX 尽可能简单。

    【讨论】:

    • 顺便说一句,您也可以在 Apex 中非常简单地执行此操作,而无需使用任何类型的正则表达式,而是使用 String.split() 方法,以逗号分隔,然后将前两个字符与ab 和 ef。
    • 它实际上是一个公式字段,我需要这个。如果任何条目以指定的两个字符开头,我希望公式返回 true,否则返回 false。以上内容是否适用于公式?
    • 不,上述方法在公式字段中不起作用,但您可以在具有字段更新的工作流规则中执行此操作以达到相同的效果。
    【解决方案2】:

    我建议您使用 CONTAINS 方法搜索 ',ab' 和 ',ef'。但首先你需要重新实现组成这个字符串的方法,所以它把','放在第一个子字符串之前。最后返回的字符串应该看起来像',abcd,efgh,ijkl,mnop,qrst,uvwx'。 如果您无法重新实现构成此字符串的方法,请使用 LEFT([our string going here],2) 方法检查前两个字符。

    【讨论】:

    • 这行不通,因为您想查找任何以ab和ef开头的条目。
    • 不,如果您仔细阅读他的帖子,他似乎正在寻找任何以ab或ef开头的元素。因此,如果您有一个像 abcd,efgh,xyza 这样的字符串,您的方法将不起作用,因为该字符串确实包含 ab(或修改版本中的 ,ab)和 ,ef 但在 ,xyza 中仍然存在无效条目。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 2013-07-10
    • 2017-12-27
    • 2013-08-08
    • 2013-12-31
    相关资源
    最近更新 更多