在 IBM Lotus Approach 中計算淨工作日
如果想使用 IBM Lotus Approach 跟蹤員工的工作日數,現在可以使用全新的淨工作日功能。該解決方案是採用 LotusScript. 編寫的,因此,可以指定日期範圍以及假期和週末來計算工作日數。
為了正確規劃專案,您需要知道員工或團隊成員的確切工作日數嗎?或許需要跟蹤員工的休息時間。IBM Lotus 1-2-3 中的 @Networkdays 功能可以這樣做,但是直到目前為止,在 IBM Lotus Approach 中還無法使用這一相同的功能。為了在 Lotus Approach 中模擬 @Networkdays 功能,我們使用 LotusScript. 建立了淨工作日功能。這個簡單的解決方案可以在任何 Lotus Approach 9.8 資料庫中實現,採用 IBM Lotus SmartSuite 9.8 的任何受支援的語言版本。
本文介紹 Lotus Approach 中的淨工作日功能的工作原理以及如何在任何新的或者現有的 Lotus Approach 資料庫中實現該解決方案。
淨工作日功能計算從給定開始日期到給定結束日期的總工作日數。它排除了這兩個日期之間的週末以及所有假期。此功能要求使用者輸入開始日期和結束日期。然後通過扣除使用者定義的週末和假期列表來計算實際的工作日數。
可以使用此功能來計算一年之中或者具體開始和結束日期(如 6 月 1 日到 12 月 31 日)之間的總工作日數。為此,需要兩個資料庫。第一個資料庫支援淨工作日功能,第二個資料庫列出一年或者具體時間段之內的假期。
這兩個資料庫被關聯在一起,執行一個迴圈便可將一個資料庫中的日期與另一個資料庫中的日期相比較。這可以防止任何一天被多次計算。淨工作日功能計算假期和週末的總天數, 然後從總數中將其扣除。所得的結果就是給定開始日期和結束日期之間的總工作日數。
注意: 此解決方案專門用於具有最新修復包的 Lotus SmartSuite 9.8。淨工作日功能可以工作在 Lotus SmartSuite 9.8 支援的所有語言版本上。
關於淨工作日功能的最傑出的方面是可以非常輕鬆地將其新增到現有的 Lotus Approach 資料庫中。在本文的後面部分中,我們介紹如何在新的和現有 Lotus Approach 資料庫中實現該解決方案。
要想了解有關淨工作日功能的工作原理的詳細資訊,下面便是從使用者角度介紹的概述。要計算總工作日數,使用者可以在顯示圖 1 時單擊 NetWorkDays 按鈕。Lotus Approach 資料中包含此按鈕。
圖 1. NetWorkDays 按鈕
單擊此按鈕之後,一個輸入框提示使用者輸入開始日期(參見圖 2)。使用者輸入開始日期和並單擊 OK 之後,另一個框提示使用者輸入結束日期。
圖 2. Start date 提示
輸入結束日期並單擊 OK 之後,使用者從圖 3 中所示的列表框中選擇週末。使用者可以不止選擇一天,但是一週之內不能選擇多於兩個週末。
圖 3. Weekend days
使用者完成上面的步驟之後,圖 1 中的 TotalDays 欄位便顯示指定開始日期和結束日期之間的總工作日數,其中扣除了儲存在另一個資料庫中的週末和假期。在本文的後面部分,我們將介紹如何在 Lotus Approach 資料庫中實現此淨工作日功能。目前,下面是其工作原理的幕後預覽。
圖 4 顯示在兩個引用彼此資料的資料庫之間建立的關聯。
圖 4. 關聯
圖 5 顯示包含假期列表的資料庫。
圖 5. Holiday 資料庫
單擊 NetWorkDays 按鈕之後,指令碼執行三個任務:
- 開啟用於輸入開始日期的輸入框。
- 開啟用於輸入結束日期的另一個輸入框。
- 顯示所有工作日的列表。
指令碼將開始日期和結束日期轉換為所需的日期格式,然後與包含假期列表的資料庫建立連線。
輸入所有資料之後,便開始計算。如果開始日期晚於結束日期,則使用者會收到一條錯誤訊息。如果這兩個日期正確,則執行一個 For 迴圈。對於每個特別的日期,指令碼都要使用函式 Weekday (i) 確定它是哪個工作日。這樣便返回此特別工作日的各自的天數。然後指令碼再次確認它不是使用者選擇的週末之一。如果不是,則指令碼通過從包含假期列表的資料庫中扣除此資料來檢查此特別的日期是否是假期。
如果此特別的日期是假期,則指令碼不會增加總工作日數的計數。如果此日期既不是週末也不是假期,則指令碼會將計數加 1。對於開始日期和結束日期之間的所有日期(包括執行為開始和結束日期的日期)執行此迴圈。此後,指令碼計算這兩個日期之間的總工作日數。
Sub Click (Source As Button, X As Long, Y As Long, Flags As Long) Dim tableName As table Dim resultSet As ResultSet Dim count As Integer Dim Counter, j As Integer Dim value As String Dim nRow As Integer CurrentView.Body.TotalDays.Text = " " On Error Resume Next StartDate=(Inputbox$("Start Date (MM/DD/YYYY) ?", , ,300,350)) EndDate=(Inputbox$("End Date (MM/DD/YYYY) ?", , ,300,350)) Dialog1.Show(1) Print Weekend(0),Weekend(1) StartDate = Cdat(StartDate) EndDate = Cdat(EndDate) If Isdate(StartDAte) And Isdate(EndDate) Then Dim wd As Integer, networkdays As Integer Set tableName = CurrentDocument.GetTableByName("Holidays") Set resultSet = tableName.CreateResultSet() nRow = resultSet.NumRows() count=1 j = 1 If StartDate > EndDate Then Messagebox ("The End Date should be greater than Start Date.") Exit Sub End If For i = StartDate To EndDate wd% = Weekday(i) j =1 If wd% <> Weekend(0) And wd% <> Weekend(1) Then Call resultSet.FirstRow() Do While j <= nRow If i <> resultSet.GetValue(count) Then Counter = 0 Call resultSet.NextRow() Else Counter = 1 End If j = j +1 Loop If Counter = 0 Then networkdays = networkdays + 1 End If End If Next If networkdays = 0 Then Messagebox("Please enter the date in mm/dd/yyyy format.") End If CurrentView.Body.TotalDays.Text = Cstr(networkdays) Else Messagebox("Please enter the date in mm/dd/yyyy format.") End If End Sub |
選擇週末之後,使用者在列表框(參見圖 3)中單擊 OK,然後指令碼確定使用者選擇作為週末的天數以及日期。不得多於兩個週末。然後指令碼將此資訊儲存在名為 Weekend (i) 的陣列中,以便以後使用。
Sub Click(Source As Lotuscommandbutton) Dim value As Integer Dim Total,Counter,Index As Integer Weekend(0) = 0 Weekend(1) = 0 Total = Dialog1.Weekends.ListCount For Counter = 0 To Total-1 value = Dialog1.Weekends.IsItemSelected(Counter) If value = -1 Then Weekend(Index) = Counter+1 Index = Index+1 End If Next Dialog1.Close End Sub |
當使用者單擊包含工作日的列表框上的 Cancel 按鈕時,執行以下指令碼。
Sub Click(Source As Lotuscommandbutton)Dialog1.Close
End Sub
要在 Lotus Approach 資料庫中使用淨工作日功能,請遵循這些步驟。
注意: 本文假設您瞭解在 Lotus Approach 中建立資料庫的方法。
- 在 Lotus Approach 資料庫中,新增以下四個欄位:
- StartDate
- EndDate
- TotalWorkingDays(該欄位用於建立與 holiday 資料庫的關聯。)
- TotalDays
- 如果此資料庫是新資料庫,則建立一個空白表格,並將 TotalDays 欄位拖動到該表格上。在現有資料庫中,建立一個欄位輸入框。
- 建立一個名為 NetWorkDays 的按鈕。
- 複製單擊該按鈕時要執行的指令碼,並將此指令碼連結到該按鈕。單擊此按鈕時,將執行該指令碼。
- 儲存 APR 檔案和資料庫。
- 如果需要,建立另一個新的資料庫以儲存整個一年或者特定時間段內的假期資訊。此資料庫必須包含 holidays 欄位。
- 儲存此 APR 和 DBF 檔案。
- 擁有兩個資料庫之後,關聯 TotalWorkingDays 和 holidays 欄位。
如果使用者執行操作時發生以下情況,則淨工作日功能返回錯誤訊息:
- 輸入的開始日期晚於指定的結束日期
- 輸入日期的格式不正確
- 一週之內選擇了多於兩天的週末
目前,所有淨工作日功能顯示的錯誤訊息都採用英語。如果想採用其他語言顯示錯誤訊息,可以翻譯這些訊息。
同樣,列表框中的工作日以及所有輸入框中的文字也都採用英語顯示。如果需要,可以翻譯所有 UI 元素中的文字。還可以更改日期格式以匹配本地設定。
我們在確定解決方案時面臨兩個挑戰。首先,Lotus Approach 是一個成熟而且穩定的產品。實現新功能(如淨工作日功能)所做的任何重要的程式碼更改都會影響某些現有功能。我們從事了這個具有挑戰性的任務,並分析了實現我們的解決方案的方法。經過大量分析之後,我們決定採用 LotusScript. 實現這個功能。
我們面臨的第二個挑戰涉及日期格式和各種語言版本。Lotus SmartSuite 有 11 種語言版本。研究了所有語言版本的日期格式之後,我們能夠修改該程式碼以接受所有日期格式,從而在所有支援的語言版本中正確計算出淨工作日。
我們希望所有 Lotus Approach 使用者都能發現淨工作日功能非常有用,而且易於使用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14751907/viewspace-444264/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在 IBM WebSphere Portal 中整合 IBM Lotus Quickr 協作功能IBMWebUI
- 在 IBM Lotus Quickr 8.5 for WebSphere Portal 中定製主題IBMUIWeb
- IBM Lotus Connections:使用社會計算提高生產力IBM
- 工作日計算apiAPI
- IBM Lotus Quickr:利用社會計算提高團隊生產力IBMUI
- 在 IBM Lotus Connections 2.5 中定製電子郵件通知IBM
- IBM Lotus Quickr services for IBM WebSphere Portal 8.0 中定製元件IBMUIWeb元件
- 在IBM Lotus Sametime V7.5.1中配置Eclipse環境IBMEclipse
- 在 Kerberos 環境中為 IBM Lotus Connections 配置單點登入ROSIBM
- IBM Lotus Forms V3.0 中的新特性IBMORM
- IBM 在全球擴建雲端計算中心IBM
- 在 Lotus Notes 複合應用中整合 Lotus Symphony
- IBM Lotus Notes 8 中全新的 Out of Office 功能IBM
- IBM Lotus iNotes 8.5 中的新特性:full 模式IBM模式
- 在雲端計算時代,IBM的日子不好過IBM
- IBM Lotus看重Web2.0IBMWeb
- 使用 IBM Lotus Mobile Connect 支援對 IBM Lotus iNotes 的安全遠端訪問IBM
- IBM Lotus Domino 8.5 效能評測IBM
- 部署 IBM Lotus Connections: 維護IBM
- IBM Lotus Quickr Web Services 介紹IBMUIWeb
- developerWorks 中國 > Lotus > IBM Lotus Symphony 七種兵器之 Mail MergesDeveloperIBMAI
- IBM計劃在本週五推出下一代Lotus Notes平臺IBM
- 在 IBM Lotus Domino Designer 中使用 Java 構建應用程式IBMJava
- IBM Lotus Notes 8.5 中的高階 Java 檢視特性IBMJava
- 在 IBM Lotus Web Content Management 6.1 中定製客戶化內容錄入頁面IBMWeb
- 計算兩個日期之間所有的工作日
- IBM Lotus Expeditor V6.1.1簡介IBM
- IBM Lotus Notes Traveler 8.5.1 的效能IBM
- 為 Webform Server 開發 IBM Lotus FormsWebORMServerIBM
- IBM Lotus Notes Traveler 8.5 的效能IBM
- IBM Lotus Expeditor V6.1.1 簡介IBM
- IBM Lotus Connections 2.5 評審指南IBM
- 瞭解 Lotus Notes 中 Lotus Symphony 的可程式設計性程式設計
- IBM擴充套件在華雲端計算生態系統IBM套件
- IBM Lotus Expeditor Toolkit V6.1.1 入門IBM
- RADVISION改進與IBM Lotus整合IBM
- 從 PDF 表單遷移到 IBM Lotus FormsIBMORM
- 藉助 Project Zero 建立 RESTful IBM Lotus DominoProjectRESTIBM