Releases: joniles/mpxj
Releases · joniles/mpxj
Version 16.4.0
- Ensure that Expected Finish is rolled up from activities to WBS entries when reading P6 schedules.
- Improve accuracy of reading relationships between tasks for certain MPP files.
- Improve handling of different duration formats used in BK3 files.
- Correct the logic used to set the critical flag on tasks when reading BK3 files.
- Infer start and finish slack when reading BK3 files.
- Ignore predecessor/succesor relations involving the project summary task when reading MPP files.
Version 16.3.0
- Improve handling of role hierarchy when reading and writing P6 projects.
- Add support for the Update Units When Costs Change On Resource Assignment project property when reading and writing P6 projects.
- Add support for the Activity Default Price Per Unit project property when reading and writing P6 projects.
- Improve handling of different duration formats used in BK3 files.
PrimaveraSchedulernow has experimental support for populating the Driving flag onRelationand the Longest Path flag onTaskwhen used to schedule a project.- Improve alignment of results from
PrimaveraSchedulerwith projects scheduled in P6.
Version 16.2.0
- Ensure numeric values are correctly formatted using decimal separator and digit grouping symbols when writing XER files.
- Marked the
GanttChartView#getProgressLinesBeginAtDatemethod as deprecated. Use thegetProgressLinesBeginAtmethod instead. - Marked the
GanttChartView#getProgressLinesDisplaySelectedDatesmethod as deprecated. Use thegetProgressLineDatesmethod instead. - Improve handling of values which are rolled up from the project's tasks to the
ProjectPropertiesclass. - Improve handling of irregular timephased data.
Version 16.1.0
- Provided additional attributes as part of the
MsPlannerProjectclass, populated when retrieving a list of projects from Microsoft Planner (Contributed by Gevork Aslanov). - Added the
MsPlannerReader#getPortfoliosmethod to retrieve a list of portfolios defined in Microsoft Planner (Contributed by Gevork Aslanov). - Updated to ensure that decimal values for hours per day, week, month and year are not truncated when writing calendars to XER files.
- Added support for reading timephased budget cost and work from MPP files.
- Improve identification of Budget resources when reading certain MPP files.
- Added the following methods to the
ResourceAssignmentclass to retrieve raw timephased budget cost and work:getRawTimephasedBudgetCost,getRawTimephasedBudgetWork,getRawTimephasedBaselineBudgetWork, andgetRawTimephasedBaselineBudgetCost. - Added the following methods to the
ResourceAssignmentclass to retrieve timephased budget cost and work:getTimephasedBudgetCost,getTimephasedBudgetWork,getTimephasedBaselineBudgetCost, andgetTimephasedBaselineBudgetWork. - Added the following methods to the
Taskclass to retrieve timephased budget cost and work:getTimephasedBudgetCost,getTimephasedBudgetWork,getTimephasedBaselineBudgetCost, andgetTimephasedBaselineBudgetWork. - Added support for accessing labor, non-labor and material costs from the task hierarchy for Primavera schedules.
- Added
ResourceType.NON_LABORto represent Non-Labor resources in Primavera P6 schedules. - When reading Primavera P6 schedules Planned, Actual and Remaining Labor, Non-Labor, Material and Expense costs are now rolled up from resource assignments to the task hierarchy.
- The following Planned Cost attributes have been added to the
Taskclass: Planned Cost Labor, Planned Cost Non Labor, Planned Cost Material, Planned Cost Expense. - The following Actual Cost attributes have been added to the
Taskclass: Actual Cost Labor, Actual Cost Non Labor, Actual Cost Material, Actual Cost Expense. - The following Remaining Cost attributes have been added to the
Taskclass: Remaining Cost Labor, Remaining Cost Non Labor, Remaining Cost Material, Remaining Cost Expense. - For consistency, the
Task#setActualWorkNonlabormethod has been marked as deprecated, useTask#setActualWorkNonLaborinstead. - For consistency, the
Task#getActualWorkNonlabormethod has been marked as deprecated, useTask#getActualWorkNonLaborinstead. - For consistency, the
Task#setPlannedWorkNonlabormethod has been marked as deprecated, useTask#setPlannedWorkNonLaborinstead. - For consistency, the
Task#getPlannedWorkNonlabormethod has been marked as deprecated, useTask#getPlannedWorkNonLaborinstead. - For consistency, the
Task#setRemainingWorkNonlabormethod has been marked as deprecated, useTask#setRemainingWorkNonLaborinstead. - For consistency, the
Task#getRemainingWorkNonlabormethod has been marked as deprecated, useTask#getRemainingWorkNonLaborinstead.
Version 16.0.0
- NEW FEATURES
JsonWriternow providesgetWriteTimephasedDataandsetWriteTimephasedDatamethods. Setting this property to true will include timephased data in the JSON output. This property is set to false by default.- Classes implementing the
FieldContainerinterface (Task,Resource,ResourceAssignment) now provide thegetTimephasedDurationValuesandgetTimephasedNumericValuesto allow access to timephased data using aFieldType` instance to determine the type of data required. - The
Resourceclass now supports the following work methods:getPlannedWork,getActualRegularWork,getRemainingRegularWork. - The
Resourceclass now supports the following cost methods:getPlannedCost,getActualRegularCost,getRemainingRegularCost. - The
Resourceclass now supports the following material methods:getPlannedMaterial,getActualMaterial,getRemainingMaterial,getMaterial,getBaselineMaterial. - The
Resourceclass now supports the following timephased work methods:getTimephasedPlannedWork,getTimephasedActualRegularWork,getTimephasedActualOvertimeWork,getTimephasedActualWork,getTimephasedRemainingRegularWork,getTimephasedRemainingOvertimeWork,getTimephasedRemainingWork,getTimephasedWork,getTimephasedBaselineWork. - The
Resourceclass now supports the following timephased cost methods:getTimephasedPlannedCost,getTimephasedActualRegularCost,getTimephasedActualOvertimeCost,getTimephasedActualCost,getTimephasedRemainingRegularCost,getTimephasedRemainingOvertimeCost,getTimephasedRemainingCost,getTimephasedCost,getTimephasedBaselineCost. - The
Resourceclass now supports the following timephased material methods:getTimephasedActualMaterial,getTimephasedRemainingMaterial,getTimephasedMaterialandgetTimephasedBaselineMaterial. - The
ResourceAssignmentclass now supports the following work methods:getActualRegularWork,getRemainingRegularWork. - The
ResourceAssignmentclass now supports the following cost methods:getActualRegularCost,getRemainingRegularCost. - The
ResourceAssignmentclass now supports the following material methods:getPlannedMaterial,getActualMaterial,getRemainingMaterial,getMaterial,getBaselineMaterial. - The
ResourceAssignmentclass now supports the following methods to retrieve the raw representation of timephased work:getRawTimephasedPlannedWork,getRawTimephasedActualRegularWork,getRawTimephasedRemainingRegularWork,getRawTimephasedRemainingOvertimeWork,getRawTimephasedActualOvertimeWork - The
ResourceAssignmentclass now supports the following timephased work methods:getTimephasedPlannedWork,getTimephasedActualRegularWork,getTimephasedActualOvertimeWork,getTimephasedActualWork,getTimephasedRemainingRegularWork,getTimephasedRemainingOvertimeWork,getTimephasedRemainingWork,getTimephasedWork,getTimephasedBaselineWork - The
ResourceAssignmentclass now supports the following timephased cost methods:getTimephasedPlannedCost,getTimephasedRemainingRegularCost,getTimephasedRemainingOvertimeCost,getTimephasedRemainingCost,getTimephasedActualRegularCost,getTimephasedActualOvertimeCost,getTimephasedActualCost,getTimephasedCost,getTimephasedBaselineCost - The
ResourceAssignmentclass now supports the following timephased material methods:getTimephasedActualMaterial,getTimephasedRemainingMaterial,getTimephasedMaterialandgetTimephasedBaselineMaterial. - The
ResourceAssignmentclass now supports thegetWorkSplitsmethod, which summarises timephased work into contiguous working periods. - The
Taskclass now supports the following work methods:getPlannedWork,getActualRegularWork,getRemainingRegularWork. - The
Taskclass now supports the following cost methods:getActualRegularCost,getRemainingRegularCost. - The
Taskclass now supports thegetWorkSplitsmethod, which summarises timephased work into contiguous working periods. - The
Taskclass now supports the following timephased work methods:getTimephasedPlannedWork,getTimephasedActualRegularWork,getTimephasedActualOvertimeWork,getTimephasedActualWork,getTimephasedRemainingRegularWork,getTimephasedRemainingOvertimeWork,getTimephasedRemainingWork,getTimephasedWork,getTimephased BaselineWork. - The
Taskclass now supports the following timephased cost methods:getTimephasedPlannedCost,getTimephasedActualRegularCost,getTimephasedActualOvertimeCost,getTimephasedActualCost,getTimephasedRemainingRegularCost,getTimephasedRemainingOvertimeCost,getTimephasedRemainingCost,getTimephasedCost,getTimephasedBaselineCost,getTimephasedActualFixedCost,getTimephasedRemainingFixedCost,getTimephasedFixedCost. - The
TimephasedItem,TimephasedWork, andTimephasedCostclasses have a newgetAmountPerHourmethod, which replaces the originalgetAmountPerDaymethod. - A new version of the
TimescaleHelper#createTimescale(previouslyTimescaleUtility#createTimescale) method has been provided which takes and end date rather than a number of ranges. - BREAKING CHANGES
MSPDIWriterno longer provides thesetSplitTimephasedAsDaysandgetSplitTimephasedAsDaysmethods. Timephased data is always written to the file exactly as MPXJ originally read it.- The
TimescaleUtilityclass has been renamedTimescaleHelperand has been moved to theorg.mpxj.commonpackage. - The
TimescaleHelper#createTimescalemethod now returns aList<LocalDateTimeRange>rather than anArrayList<LocalDateTimeRange> - The
TimescaleHelper#createTimescalemethod now returns half open ranges, for example a range representing 1st January 2026 would be expressed as2026-01-01 00:00 to 2026-01-02 00:00rather than2026-01-01 00:00 to 2026-01-01 23:59. - The following
ResourceAssignmenttimephased work methods have been removed and replaced by thegetRawmethods noted above:getTimephasedPlannedWork,getTimephasedActualWork,getTimephasedWork,getTimephasedOvertimeWork,getTimephasedActualOvertimeWork,getTimephasedBaselineWork,getTimephasedBaselineCost - The following
ResourceAssignmenttimephased work methods have been removed without replacement:setTimephasedPlannedWork,setTimephasedActualWork,setTimephasedWork,setTimephasedActualOvertimeWork,setTimephasedBaselineWork,setTimephasedBaselineCost. - The following
ResourceAssignmenttimephased cost methods have been removed and replaced by the cost methods noted above:getTimephasedCost,getTimephasedActualCost. - The
Task#getSplitsmethod has been removed, used theTask#getWorkSplitsmethod instead. Note thatTask#getWorkSplitsonly returns ranges representing working time. - The
getAmountPerDaymethod on theTimephasedItem,TimephasedWork, andTimephasedCostclasses has been removed. Use the newgetAmountPerHourmethod instead. - The
getModifiedmethod on theTimephasedItem,TimephasedWork, andTimephasedCostclasses has been removed. There is currently no replacement. - The
TaskField.SPLITSenumeration value has been removed, useTaskField.WORK_SPLITSinstead. - The
AssignmentField.TIMEPHASED_WORKenumeration value has been removed, useTaskField.TIMEPHASED_REMAINING_REGULAR_WORKinstead. - The
AssignmentField.TIMEPHASED_ACTUAL_WORKenumeration value has been removed, useTaskField.TIMEPHASED_ACTUAL_REGULAR_WORKinstead. - The order of the arguments supplied to the
TimescaleUtility#createTimescalemethod has been changed. - The order of the arguments supplied to the
TimescaleHelper#createTimescalemethod has been changed. - The alignment of the ranges returned by
TimescaleHelper#createTimescalehas changed whenMINUTESorHOURSis specified as the required timescale units.. - CHANGES
- Updated to sqlite-jdbc 3.51.2.0
- Updated to jsoup 1.22.1.
- Updated to Jackson 2.21.1.
- Updated to JUnit 5.14.3
Version 15.3.1
- Fix a
NullPointerExceptionraised when a PMXML file does not have a default calendar defined.
Version 15.3.0
- Updated PMXML schema to version 25.12.
- Improve handling of timephased actual work, baseline work, and baseline cost when reading MPP files.
- When reading XER files and P6 databases, ensure that calendar days are set as non-working if no working hours are present.
- Updated MPXJ.Net to avoid an
InvalidCastExceptionwhen attempting to wrap an empty list attribute withProxyList. - Fixed an issue writing JSON using
JsonWriterwhen the Write Attribute Types option was set to true.
Version 15.2.0
- Implemented support for reading projects from Microsoft Planner.
- Improve handling of elapsed durations in
ProjectCalendarcalculations. - Improve Free Slack and Total Slack calculations.
- Updated the
TaskContainer#synchronizeTaskIDToHierarchymethod to ensure that the task Outline Level attribute is also updated appropriately. (Based on a contribution by Šimon Macharáček) - Ensure that when reading MPP files and an attribute value from a lookup table is not recognised, null is returned rather than the GUID representing the value.
Version 15.1.0
- Improve selection of the default calendar when reading Asta Powerproject PP files.
- Added support for the calculated task attribute Schedule Percent Complete. Note that at present this is not calculated for WBS/Summary Tasks.
- Added support for the
Taskattributes Estimated Weight, Auto Compute Actuals, and Original Budget. (Based on a contribution by danielfromCL) - Ensure that the Estimated Weight attribute is read from and written to WBS entries and Activities for P6 schedules. (Based on a contribution by danielfromCL)
- Ensure that the Original Budget attribute is read from and written to WBS entries for P6 schedules. (Based on a contribution by danielfromCL)
- Ensure that the Auto Compute Actuals flag is read from and written to Activities in P6 scheudles. (Based on a contribution by danielfromCL)
- Fix an issue where the Activity attribute Longest Path was not being written to XER files. (Based on a contribution by danielfromCL)
- Updated to POI 5.5.1.
- Updated to Jackson 2.20.1.
- Updated to jsoup 1.21.2.
- Updated to sqlite-jdbc 3.51.1.0
Version 15.0.0
- NEW FEATURES
- Updated
PrimaveraXERFileWriterto allow a list of projects to be written to an XER file. - Updated
PrimaveraPMFileWriterto allow a list of projects to be written to a PMXML file. - CHANGES
- Include all available baselines when reading Asta Powerproject PP files (Contributed by gitgood88).
- MPXJ will now store an arbitrary number of baselines rather than the hard limit of 11 previously in place. Only baselines numbered 0-10 will be interpreted by MPXJ, other baselines can just be stored and retrieved.
- Added the Last Scheduled Date and Activity Percent Complete Based On Activity Steps attributes to
ProjectPropertiesand ensured these are read from and written to P6 schedules (Based on a contribution by danielfromCL). - Header rows for empty tables are no longer written to XER files.
- Add support for the Project attribute Activity Default Calendar Unique ID.
- Added the
ProjectCalendar#getDefaultmethod. This returns true if the current calendar is the default calendar for the project file (e.g. MPP files) or project database (e.g. P6 database). - Added the
ProjectCalendar#setDefaultmethod. Calling this method sets the calendar as the default for the project file or project database. - Added the
ProjectCalendar#isParentmethod. - Added the
ProjectCalendar#getDerivedCalendarsForProjectmethod. - Added the
ProjectCalendar#getProjectUniqueIDandProjectCalendar#setProjectUniqueIDmethods. This attribute is used to indicate that a calendar belongs to a specific project. - When writing PMXML files, ensure that
OriginalProjectObjectIdis populated for baseline projects. - Added the
ProjectContextclass to represent common context data which can (depending on the source application) be shared across multiple projects. - Added the
ProjectFile#getProjectContextmethod to retrieve theProjectContextinstance to which a project belongs. - Added the
Resource#getProjectContextmethod to retrieve theProjectContextinstance to which a resource belongs. - Added the
ProjectCalendar#getProjectContextmethod to retrieve theProjectContextinstance to which a calendar belongs. - Added the
ProjectFile#getCalendarsForProjectmethod. This retrieves global calendars, and any project-specific calendars relevant for this project. - Added the
Rate#valueOfmethod. - Added the
TimeUnitDefaultsclass to allow time unit related default values to be held as part of theProjectContextclass. - Updated to POI 5.5.0
- Updated to Jackcess 4.0.10. Removed explicit Commons Lang 3 dependency.
- Updated to JUnit 5.14.1
- BREAKING CHANGES
- The
ProjectFile#getBaselinesmethod now returns aMapinstance keyed by baseline index. - When using the
readAllmethod to read PMXML files, only projects will now be returned. Any baselineProjectFileinstances will now only be linked to their parent projects, and will not be present in the list returned byreadAll. - For P6 projects the
ProjectFile#getCalendarsmethod will include all calendars from the file or database being read. To retrieve only calendars relevant to the project use theProjectFile#getCalendarsForProjectmethod. - For P6 projects the
ProjectCalendar#getDerivedCalendarsmethod will include all derived calendars from the file or database being read. To retrieve derived calendars relevant to a specific project use theProjectCalendar#getDerivedCalendarsForProjectmethod. - Removed the
ProjectEntityclass. TheProjectProperties,Resource,ResourceAssignmentandTaskclasses no longer inherit from this class. TheProjectProperties,ResourceAssignmentandTaskclasses provide a replacement for theProjectEntity#getParentFilemethod. TheResourceclass no longer has agetParentFilemethod. - Removed the
ProjectCalendar#getParentFilemethod. Calendars no longer belong directly to projects, but instead belong to aProjectContextinstance. - Removed the
Resource#addResourceAssignmentmethod. This method was originally only intended for internal use within MPXJ. - The
ResourceAssignmentclass no longer provides a public constructor. TheTask#addResourceAssignmentmethod should be used instead. - Removed the
Task#addResourceAssignment(ResourceAssignment)method. Use theTask#addResourceAssignment(Resource)method instead. - Removed the
Task#setSplitsmethod. This method was originally only intended for internal use.