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