Salesforce 具有选取列表值的日期公式

Salesforce 具有选取列表值的日期公式,salesforce,Salesforce,我需要为日期字段创建一个公式。 新日期字段id的公式 新日期字段=旧日期字段+月数 月数来自选择列表。这个简单的要求暴露了salesforce公式语言的一些限制。也就是说,下面的公式(基于)会起作用,但它非常不雅观,只适合允许的脚本大小。希望其他人有更好的解决方案 DATE( year(BaseDate) + floor((month(BaseDate) + Add_Months__c)/12) + if(and(month(BaseDate)=12,Add_Month

我需要为日期字段创建一个公式。 新日期字段id的公式

新日期字段=旧日期字段+月数


月数来自选择列表。

这个简单的要求暴露了salesforce公式语言的一些限制。也就是说,下面的公式(基于)会起作用,但它非常不雅观,只适合允许的脚本大小。希望其他人有更好的解决方案

DATE(
    year(BaseDate) + floor((month(BaseDate) + Add_Months__c)/12) 
        + if(and(month(BaseDate)=12,Add_Months__c>=12),-1,0),

    if( mod( month(BaseDate) + Add_Months__c , 12 ) = 0, 12 , mod( month(BaseDate) + Add_Months__c , 12 )),

    min(
        day(BaseDate),
        case(
            max( 
                mod( 
                    month(BaseDate) + Add_Months__c , 12 
                ) , 
                1
            ),
            9,30,
            4,30,
            6,30,
            11,30,
            2,28,
            31
        )
    )
)

直接从选择列表中提取值将非常困难(如果不是不可能的话)。显然,将选取列表值转换为数字会导致显著的大小增加。下面的公式可以满足您的要求

DATE(
    FLOOR((MONTH(CalcDate__c) + VALUE(TEXT(AddMonths__c))) / 12) + YEAR(CalcDate__c),
    MOD((MONTH(CalcDate__c) + VALUE(TEXT(AddMonths__c))), 12),
    1) + (DAY(CalcDate__c) - 1)
其中,
CalcDate\uuu c
是原始日期,
AddMonths\uu c
是您的选择列表

该公式确实附带了一个警告,即有时会滚动到下个月(例如,将1个月添加到2011年3月31日将产生2011年5月1日,而不是2011年4月30日)。如果你需要回避这个问题,你可以像杰里米的回答那样使用
CASE
语句

该公式的另一个问题是,不幸的是,它是5.7k个字符,超过了5k的最大值

但是,您可以先创建一个工作流规则,将选取列表值复制到一个隐藏的数字字段中,然后使用以下编译大小为1.9k的公式来避免这种情况:

DATE(
    FLOOR((MONTH(CalcDate__c) + AddMonths2__c) / 12) + YEAR(CalcDate__c),
    MOD((MONTH(CalcDate__c) + AddMonths2__c), 12),
    1) + (DAY(CalcDate__c) - 1)
在本例中,
AddMonths2\uu c
是您的
AddMonths\uu c
的数字副本


此公式将节省Salesforce的费用,并应能实现您的目标(尽管它与第一个公式具有相同的月末滚动)

谢谢Zack,我认为您的想法对我有用。@Jeremy我将在其他地方继续使用您的想法。