2008-11-20 25 views
2

在SharePoint MOSS 2007中,我創建了一個將應用於文檔庫的自定義內容類型。其中一個必填字段是「傳入日期」,另一個是「到期日期」。SharePoint列默認值 - 添加10個工作日

截止日期從收到日期開始總是10個工作日。傳入日期是郵件室收到該信件的時間,而不一定是當文件發佈到圖書館時。

從這裏:http://msdn.microsoft.com/en-us/library/bb862071.aspx

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

增加了10天,但我怎麼可以添加10個工作日?根據我們共同點推出的治理計劃,我沒有VS.NET的奢侈品。

假設一個人負責數據錄入,但我想讓他們更容易。

+0

所以它大部分是14天,但有處理問題的假期。 – MrChrister 2008-11-20 19:29:34

回答

2

首先,我應該指出,你正在努力的公式,這也會這樣做。

= [傳入的日期] + 10

從你已經想通了,10個工作日內(MF)總是有2個週末,所以你可以使用這個

= [傳入的日期] + 14的評論

但是,這仍然沒有考慮節假日

你不會是能夠做到這一點,而不在工作流程中一些自定義代碼或可能有些javascript 'hack'和假期天爲您所在地區的數據庫。

一種可能是你的截止日期從現在默認爲10個工作日內創建記錄

如果有=今天+ 14

然後依靠你的用戶手動更改此日期那個時期的假期。在這個

更多細節在我剛剛寫了一個博客條目 - Working Days, Weekends and Holidays in SharePoint Calculated Columns

+0

編程不足,我認爲這是正確的答案。我可以保留假期的日曆列表,並可以通過未來的自定義編程參考。 – MrChrister 2008-11-21 16:18:06

+0

我寫了一篇博客文章,向您展示瞭如何使用JavaScript編輯字段值,並且儘管您無法使用它:您的治理限制可能會在將來使用 http://blog.pentalogic.net/2009/09/setting-default-duration-for-new-calender-events/ 您可以使用BloggerMarks之類的方法在腳本中對日期進行硬編碼,或者您可以非常喜歡並使用jQuer RPC調用從列表中檢索節假日 http://blogs.msdn.com/carloshm/archive/2009/01/22/use-jquery-to-make-frontpage-rpc-request.aspx 但是,如果你去這個麻煩,那麼也許工作流是更好地打賭? – Ryan 2009-10-02 12:27:16

0

也許你可以通過使用工作流(可能是自定義的)來管理截止日期來解決這個限制嗎?到期日意味着它是一個可操作的項目,無論如何應該分配給某個人。

請注意,VS.NET不一定是一種奢侈品 - 您可以將它用於free

+0

感謝您的回覆。我的意思是使用VS.NET是我們目前的治理需要100%開箱即用的SharePoint,直到我們足夠舒適地將其用於定製開發。 – MrChrister 2008-11-20 20:03:14

0

我相信我已經找到了一個相當防彈方法計算10個工作日截止日是佔了節假日和週末。 1)計算2週週期是否爲星期一,如果是,則只添加11天(假設開始日計爲10天期的第1天)。否則,您將在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 
+0

幾乎不可能在計算字段中包含所有這些。適用於編程問題,但是這是一個用於計算SharePoint中字段的單個文本框。 – MrChrister 2009-03-07 00:40:59

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條線則針對第二條線的缺陷進行調整。