我想使用 MPXJ 从 MS Project 中提取计划的工作。有谁知道如何通过 API 获取这些数字?我找不到任何合适的方法来做到这一点。
(具体场景:我想画一张图表,y轴为计划工作,x轴为日期)
我想使用 MPXJ 从 MS Project 中提取计划的工作。有谁知道如何通过 API 获取这些数字?我找不到任何合适的方法来做到这一点。
(具体场景:我想画一张图表,y轴为计划工作,x轴为日期)
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 工作值,以及仅最后两天的时间分段计划工作值。它们不重叠或重复。
因此,如果您尝试显示分配的整个时间段的计划工时值(就像您在 MS Project 中的任务使用视图中看到的那样),您还需要检索时间分段的实际工时值并使用它们好像他们也是计划好的工作一样。
您的出发点是分配对象上的以下方法:
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 中的每个条目包含一个条目,显示该期间的工作量。
希望这是有道理的!
乔恩