SharePoint列默认值 - 添加10个工作日

时间:2008-11-20 19:05:43

标签: sharepoint moss

在SharePoint MOSS 2007中,我创建了一个自定义内容类型,我将应用于文档库。其中一个必填字段是“Incoming Date”,另一个是“截止日期”。

截止日期始终为入会日期后10个工作日。收件人日期是邮件收到信件的时间,不一定是文件张贴到图书馆时。

从这里开始:http://msdn.microsoft.com/en-us/library/bb862071.aspx

=DATE(YEAR([Incoming Date]),MONTH([Incoming Date]),DAY([Incoming Date])+10)

增加10天,但如何添加10个工作日?根据我们的sharepoint部署的治理计划,我没有VS.NET的奢侈品。

假设一个人负责数据输入,但我想让他们更容易。

4 个答案:

答案 0 :(得分:4)

对于非常具体的“10天”要求,这是过度的,但这应该从任何开始日期计算任意天数的截止日期。

我写它是为了匹配Excel的WORKDAY函数的结果(假设计算字段中的每个函数都是Excel函数,那几乎应该是一个东西)。对于一周中的每一天,以及多年来,它都经过了1到146天的“完成”测试,没有任何不一致的迹象。除非我从Excel中复制它,否则它应该像宣传的那样工作。唯一的缺点是它没有假期,但如果用户习惯于SharePoint,他们无论如何都不会有期望。完全没有。任何形式的。为了任何东西。或希望。或者曾经负责微笑的脸上的肌肉。或者能够看到一个孩子,看到除了死亡惨淡的确定性之外的任何事情。所以,如果他们的任务在圣诞节到期,那就没什么大不了的了。它也比它可能需要的更加笨拙。

=[Start Date]+[Days to Complete] 
+ ROUNDDOWN([Days to Complete]/5,0)*2 
+ IF(WEEKDAY([Start Date])+MOD([Days to Complete],5)>=7,2,0)
- ROUNDDOWN(WEEKDAY([Start Date])/7,0) 
+ IF(AND(MOD([Days to Complete],5)=0,WEEKDAY([Start Date])=1),-2,0)  
+ IF(AND(MOD([Days to Complete],5)=0,WEEKDAY([Start Date])=7),-2,0)  

第一行是......显而易见的。第二行增加了周末。接下来的4行调整了第二行的不足。

答案 1 :(得分:2)

首先,我应该指出你正在努力完成这个公式,这也会做同样的事情。

= [传入日期] + 10

根据评论,您已经发现10个工作日(M-F)将始终有2个周末,因此您可以使用此

= [传入日期] + 14

但这仍未考虑假期

如果没有工作流程中的某些自定义代码,或者某些javascript 'hack'以及您所在地区的假日天数据库,您将无法执行此操作。

一种可能性是将您的截止日期默认为从创建记录后的10个工作日

=今天+ 14

然后依靠您的用户手动更改此日期,如果在此期间有假期。

我刚刚撰写的博客文章中有关此内容的详细信息 - Working Days, Weekends and Holidays in SharePoint Calculated Columns

答案 2 :(得分:0)

也许您可以通过使用工作流程(可能是自定义工作流程)来管理到期日期来解决此限制?截止日期意味着它是一个可操作的项目,无论如何都应该分配给某人。

请注意,VS.NET不一定非常奢侈 - 您可以将其用于free

答案 3 :(得分:0)

我相信我已经找到了一个相当防弹的方法来计算假期和周末的10个工作日截止日期。 1)计算2周时段是否为星期一,如果是,则仅添加11天(假设开始日计为10天时段的第1天)。否则,您将为10个工作日加上两个周末添加13(请记住,开始日期已计为第1天;如果您未将开始日期计为第1天,则变量将为12和14)。 2)为每个假日创建一个唯一的计算列,如果假日在该范围内,则返回值1。 3)通过在开始日期添加值(周末和假日)来确定您的“总日期”。 4)确定您的毛重日期是在星期六或星期日,如果是,请返回适当的天数推迟到星期一。 5)添加所有周末,假日,并将星期六和星期日值添加到您的开始日期,这将为您提供截止日期。

注意:我在这里看到的唯一挑战是假期将截止日期推迟到周末,然后将截止日期推迟到恰好是另一个假期的星期一。这在我的假期计划中没有发生,但可能在你的假期计划中。此外,您还需要每年不断添加新的假期,因此需要从头开始为长期运行的列表重新创建列数组。或者,您可以每年开始一个新的列表。

C_Wknd  =IF(TEXT(WEEKDAY([Complaint Created On]),"ddd")="Mon",11,13)

C_NYDay =IF(AND([Complaint Created On]<=DATE(2009,1,1),([Complaint Created On])+C_Wknd>=DATE(2009,1,1)),"1","0")

C_MLKDay    =IF(AND([Complaint Created On]<=DATE(2009,1,19),([Complaint Created On])+C_Wknd>=DATE(2009,1,19)),"1","0")

C_MemDay    =IF(AND([Complaint Created On]<=DATE(2009,5,25),([Complaint Created On])+C_Wknd>=DATE(2009,5,25)),"1","0")

C_PresDay   =IF(AND([Complaint Created On]<=DATE(2009,2,16),([Complaint Created On])+C_Wknd>=DATE(2009,2,16)),"1","0")

C_IndDay    =IF(AND([Complaint Created On]<=DATE(2009,7,4),([Complaint Created On])+C_Wknd>=DATE(2009,7,4)),"1","0")

C_LabDay    =IF(AND([Complaint Created On]<=DATE(2009,9,7),([Complaint Created On])+C_Wknd>=DATE(2009,9,7)),"1","0")

C_ColDay    =IF(AND([Complaint Created On]<=DATE(2009,10,12),([Complaint Created On])+C_Wknd>=DATE(2009,10,12)),"1","0")

C_VetDay    =IF(AND([Complaint Created On]<=DATE(2009,11,11),([Complaint Created On])+C_Wknd>=DATE(2009,11,11)),"1","0")

C_ThxDay    =IF(AND([Complaint Created On]<=DATE(2009,11,26),([Complaint Created On])+C_Wknd>=DATE(2009,11,26)),"1","0")

C_XmsDay    =IF(AND([Complaint Created On]<=DATE(2009,12,25),([Complaint Created On])+C_Wknd>=DATE(2009,12,25)),"1","0")

C_GrossDte  =[Complaint Created On]+C_Wknd+C_NYDay+C_MLKDay+C_MemDay+C_PresDay+C_IndDay+C_LabDay+C_ColDay+C_VetDay+C_ThxDay+C_XmsDay

C_EndSat    =IF(TEXT(WEEKDAY(C_GrossDte),"ddd")="Sat",2,0)

C_EndSun    =IF(TEXT(WEEKDAY(C_GrossDte),"ddd")="Sun",1,0)

Resolution Due  =C_GrossDte+C_EndSat+C_EndSun