MPXJ:通过API获得计划工作

时间:2011-08-02 13:09:16

标签: ms-project mpxj

我想使用MPXJ从MS Project中提取计划的工作。 有谁知道如何通过API获取这些数字? 我找不到任何适当的方法来做到这一点。

(具体方案:我想绘制一个图表,其中计划的工作在y轴上,日期在x轴上)

2 个答案:

答案 0 :(得分: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中每个条目的一个条目,显示该时期的工作量。

希望有意义!

乔恩

答案 1 :(得分:2)

Jon在上面给出的答案是正确的,但是从MPXJ版本4.2开始,用于处理时间分段工作(和成本)的api已经发生了很大变化。以下是您现在要做的事情:

这部分是相同的:

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的“任务分配状况”视图中看到的那样),则还需要检索时间分段的实际工时值并将它们当作计划工作一样使用。