вашей отправной точкой являются следующие методы объекта назначения:
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 теперь содержит одну запись для каждой записи в списке данных, показывающую объем работы за этот период.
Надеждаэто имеет смысл!
Джон