2011-08-02 66 views
3

我想從使用MPXJ的MS Project中提取計劃工作。 有誰知道如何通過API獲取這些數字? 我找不到任何適當的方法來做到這一點。MPXJ:通過API獲取計劃工作

(具體場景:我要畫一個圖表上y軸的規劃工作,並在x軸的日期)

回答

2

你的出發點是在分配對象上的以下方法:

List<TimephasedResourceAssignment> complete = assignment.getTimephasedComplete(); 
List<TimephasedResourceAssignment> planned= assignment.getTimephasedComplete(); 

正如他們的名字所表明的那樣,這些將爲您帶來計劃的工作或完成的工作,表現爲在一段時間內進行的工作。

這裏的「陷阱」是這個數據以緊湊的格式表示(反映MS Project在內部是如何存儲的),而這並不能很好地顯示工作的逐期細分。

爲了得到你想要的,有兩個實用工具類將幫助你將這個緊湊的表示轉換爲一個工作值列表。例如,您可以給他們一個期限類型(日,周,月等)和多個期間的開始日期,並要求這些期間的工作細分。

第一步是創建TimescaleUtility類的實例,並讓它爲您生成一系列日期。你給它的開始日期,你需要的時間尺度單位,以及你想要的時間週期。

TimescaleUtility timescale = new TimescaleUtility(); 
ArrayList<DateRange> dateList = timescale.createTimescale(startDate, TimescaleUnits.DAYS, length); 

dateList變量現在包含您將要拆分工作的日期範圍列表。這種分裂進行使用TimephasedUtility類:

ProjectCalendar calendar = assignment.getCalendar(); 
TimephasedUtility timephased = new TimephasedUtility(); 
ArrayList<Duration> durationList = timephased.segmentResourceAssignment(calendar, planned, TimescaleUnits.DAYS, dateList); 

就是這樣,你durationList現在包含在datList每個條目顯示工作,爲這一時期的金額一個條目。

希望有道理!

喬恩

+0

偉大的解決方案說明!非常感謝你! – Philipp

2

喬恩給上面是正確的時候,但作爲MPXJ,該API用於處理時間分段工作(和成本)的4.2版本已經大大改變了答案。下面是你現在會做什麼:

這部分是相同的:

TimescaleUtility timescale = new TimescaleUtility(); 
ArrayList<DateRange> dateList = timescale.createTimescale(startDate, TimescaleUnits.DAYS, length); 

這改變了(注意用於獲取計劃的工作不同的返回類型和方法,並在TimephasedUtility類的新方法):

List<TimephasedWork> plannedWork = assignment.getTimephasedWork(); 

ProjectCalendar calendar = assignment.getCalendar(); 
TimephasedUtility util = new TimephasedUtility(); 
ArrayList<Duration> durationList = util.segmentWork(calendar, plannedWork, TimescaleUnits.DAYS, dateList); 

有一件事你還必須知道的是,計劃中的工作數據僅包含尚未完成尚未(即沒有實際值已被記錄爲時間),工作價值觀。例如,如果您的任務持續4天,並且您已完成50%的工作,那麼在前兩天​​您將具有按時間分段的ACTUAL工作值,以及僅在過去兩天內按時間分段的PLANNED工作值。它們不重疊或重複。

因此,如果您試圖在整個賦值時間段內顯示計劃的工作值(如您在MS Project中的Task Usage視圖中看到的內容),則還需要檢索按時間分段的實際工作價值觀,並將它們用作計劃工作。