我想提取的计划工作从微软项目使用MPXJ的一段时间。有人知道如何通过API获取这些数据吗?我找不到任何合适的方法来做这件事。
(具体场景:我想画一个图表,y轴上的计划工作,x轴上的日期)
发布于 2011-08-02 23:45:52
您的起点是assignment对象上的以下方法:
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中的每个条目都包含了一个条目,显示了这段时间的工作量。
希望这是有意义的!
琼恩
发布于 2012-02-28 14:31:53
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%的工作,那么您将拥有前两天的按时间分段的实际工时值,以及仅在最后两天按时间分段的计划工时值。它们不会重叠或重复。
因此,如果您试图显示工作分配的整个时间段的计划工时值(就像您在MS Project中的Task Usage视图中看到的一样),您还需要检索时间分段的实际工时值,并将其作为计划工时来使用。
https://stackoverflow.com/questions/6912596
复制相似问题