Skip to content

Releases: joniles/mpxj

Version 12.9.1

17 Apr 11:26
Compare
Choose a tag to compare
  • Fix an issue where UniversalProjectReader would raise an exception when handling an unknown file type.
  • Ensure that resource type is included as part of the resource assignment data when writing PMXML files.

Version 12.9.0

11 Apr 18:40
Compare
Choose a tag to compare
  • Updated UniversalProjectReader to add getProjectReaderProxy methods to allow access to the instance of the reader class which will be used to read a schedule, prior to the schedule being read. This will allow the reader to be configured, or schedule to be ignored without reading its content.
  • Deprecated the ProjectReader.setProperties method. This method was originally implemented to allow settings to be passed to reader classes when using UniversalProjectReader. You can now use UniversalProjectReader.getProjectReaderProxy to achieve this.
  • Add from method to all Builder classes to allow initialisation from existing objects.
  • The CostAccount.Builder class now provides two notes methods to allow formatted or unformatted notes to be added to cost accounts.
  • The CostAccount method getDescription() has been marked as deprecated. Use the getNotes() or getNotesObject() method instead.
  • The CustomFieldValueItem methods getParent and setParent have been marked as deprecated. Use the getParentUniqueID and setParentUniqueID methods instead.
  • JSON output from MPXJ now includes more detail for custom field definitions read from MPP files.
  • When reading a PMXML file, populate the Early/Late Start/Finish date attributes from the Remaining Early/Late Start/Finish date attributes.
  • Fix an issue reading WBS ID for P3 and SureTrak schedules.

Version 12.8.1

11 Mar 13:36
Compare
Choose a tag to compare
  • Improve reading resource assignments from certain FastTrack FTS files.

Version 12.8.0

04 Mar 21:31
Compare
Choose a tag to compare
  • Add experimental support for reading Deltek Open Plan BK3 files.
  • Implemented the Relation.Builder class.
  • Marked the Relation(Task,Task,RelationType,Duration) constructor as deprecated, use the Relation.Builder class instead.
  • Marked the RelationContainer.addPredecessor(Task,Task,RelationType,Duration) method as deprecated, use the RelationContainer.addPredecessor(Relation.Builder) method instead.
  • Marked the Task.addPredecessor(Task,RelationType,Duration) method as deprecated, use the Task.addPredecessor(Relation.Builder) method instead.
  • Add a notes attribute to the Relation class and ensure that it is read from and written to P6 schedules.
  • Read the Relationship Lag Calendar setting from Phoenix 5 files. (Contributed by Rohit Sinha)
  • Don't write a material label to an MSPDI file for a resource which isn't a material.
  • Update representation of Work Variance when writing MSPDI files to more closely match output from Microsoft Project.
  • Updated to ensure that when schedules are read from XER files or P6 databases, labor and nonlabor work amounts are combined for the Actual, Remaining and Planned work attributes. This is now consistent with the existing behavior when reading PMXML files.
  • Added support for new Task attributes Actual Work Labor, Actual Work Nonlabor, Remaining Work Labor, Remaining Work Nonlabor, Planned Work Labor, Planned Work Nonlabor, when reading and writing P6 schedules.
  • Update default readAll method on reader classes to ensure that if the reader is unable to read any schedule data, an empty list is returned rather than a list containing null.
  • Ensure that Task Start and Finish dates are both the same when reading milestones from PMXML files, and that the correct date is used depending on whether we have a Start Milestone or a Finish Milestone.

Version 12.7.0

07 Feb 11:43
Compare
Choose a tag to compare
  • Added support for reading and writing the project property Baseline Calendar Name to and from MPP and MSPDI files.
  • Ensure Start Variance and Finish Variance are read from and written to MSPDI files in the correct format.
  • Improve accuracy of large Work Variance values read from MSPDI files.
  • Add support for the Calendar GUID attribute, which is read from MPP and MSPDI files, and written to MSPDI files.
  • Ensure Activity Codes are available when reading Phoenix PPX files even if they are also being used to construct the task hierarchy.
  • Ensure Activity Codes Values are populated when reading Phoenix PPX files. (Contributed by Rohit Sinha)
  • When writing an MSPDI file, derive the TimephasedData Unit attribute from the duration of the timephased data item.
  • Fixed an issue with the ProjectCalendar.getPreviousWorkFinish method when called with a time which was already at the end of a period of work.
  • Ensure that the proj_node_flag is set for the root WBS node when writing XER files.

Version 12.6.0

22 Jan 20:49
Compare
Choose a tag to compare
  • Updated PMXML schema to version 23.12.
  • Ensure that baselines in PMXML files written by Oracle Primavera Cloud are read.
  • Fix an issue reading certain XER files and P6 databases where activities lost the relationship with their parent WBS entry.
  • Added ResourceAssignment.getEffectiveCalendar method.
  • Deprecated ResourceAssignment.getCalendar method, use getEffectiveCalendar method instead.
  • Improved reading timephased baseline work from MPP files.
  • Added new versions of the TimephasedUtility.segmentBaselineWork and segmentBaselineCost methods which take a ProjectCalendar instance as the first argument rather than a ProjectFile instance.
  • Deprecated the TimephasedUtility.segmentBaselineWork and segmentBaselineCost methods which take a ProjectFile instance as the first argument.
  • Added a new version of the ProjectCalendar.getDate() method which just takes a date and a duration as its arguments. This method handles both positive and negative durations.
  • Marked the original version of the ProjectCalendar.getDate() method as deprecated. Use the new version instead.
  • Improve recognition of task splits when reading MPP and MSPDI files.

Version 12.5.0

18 Dec 14:25
Compare
Choose a tag to compare
  • Add support for the following Resource Assignment attributes: Remaining Early Start, Remaining Early Finish, Remaining Late Start, and Remaining Late Finish.
  • Ensure that the Resource Assignment attributes Remaining Early Start and Remaining Early Finish are read from and written to PMXML files.
  • Ensure that the Resource Assignment attributes Remaining Early Start, Remaining Early Finish, Remaining Late Start, and Remaining Late Finish are read from and written to XER files.
  • Improve accuracy of reading and writing the ProjectProperties Relationship Lag Calendar attribute for PMXML files.
  • All P6 scheduling and leveling options which were previously made available via the ProjectProperties custom properties map are now deprecated. These properties now have individual getter and setter methods available on the ProjectProperties class. Note: this may be a breaking change if you were creating schedules from scratch, populating the custom properties map, then writing PMXML or XER files. In this case you will need to update your code, for all other use cases your code will continue to work unchanged until the next major version of MPXJ.
  • Added support for reading and writing the ProjectProperties attributes Baseline Type Name, Baseline Type Unique ID, and Last Baseline Update Date for baseline projects in PMXML files.
  • When reading projects from PMXML files, if the creation date attribute is not present in the file fall back to populating the ProjectProperties creation date attribute with the PMXML date added attribute.
  • When writing PMXML files, ensure the date added attribute for projects is populated with the creation date.
  • Add the CustomFieldContainer.remove method to allow field configurations to be removed.
  • Updated the UserDefinedFieldContainer.remove method to ensure that any associated field configuration is removed from the CustomFieldContainer.
  • Ensure that Microsoft Project's "unknown" resource (with Unique ID zero) is not exported to XER files.
  • Ensure that resource assignments which are not associated with an Activity or a Resource are not written to XER files.
  • Durations are written to PMXML files in hours. We now round to 2 decimal places to allow minutes to be represented, and avoid unnecessary precision.
  • Currency amounts written to PMXML files are now rounded to 8 decimal places to more closely match the behavior of P6, and avoid unnecessary precision.
  • Decimal amounts other than currency and duration are written to PMXML files with 15 decimal places to more closely match the behavior of P6.
  • Fix an issue reading ConceptDraw calendars.
  • Fixed a misspelled field name in the JSON output (Contributed by Daniel Taylor).
  • Improved handling of the Resource Assignment Planned and Remaining Units and Units per Time attributes read from and written to P6 schedules.
  • Added support for the following project properties: Activity ID Prefix, Activity ID Suffix, Activity ID Increment and Activity ID Based On Selected Activity, and ensure these are read from and written to P6 schedules.

Version 12.4.0

23 Nov 16:49
Compare
Choose a tag to compare
  • Added support for the WBS Code Separator attribute to ProjectProperties.
  • Avoid creating duplicate ActivityCodeValue instances when reading Asta PP files.
  • Added a new version of the ProjectFile.expandSubprojects method which takes a boolean argument indicating if external tasks should be removed. Passing true to this method will recreate predecessor and successor relationships using the original tasks rather than the placeholder external tasks, and will remove the external tasks.
  • Marked the ProjectFile.expandSubprojects() method as deprecated, use the new version which takes a boolean argument instead.
  • Ensure the ProjectProperties name attribute is set correctly when reading XER files and P6 databases.
  • The ProjectEntityContainer method renumberUniqueIDs has been marked as deprecated.
  • The ProjectEntityContainer method getNextUniqueID has been marked as deprecated. Use ProjectFile.getUniqueIdObjectSequence(class).getNext() instead.
  • The ProjectEntityContainer method updateUniqueIdCounter has been marked as deprecated as it is no longer required.
  • The ProjectFile method updateUniqueIdCounters has been marked as deprecated as it is no longer required.
  • The ObjectSequence method reset has been marked as deprecated as it is no longer required.
  • When creating a Location instance using the Builder class, a Unique ID will be generated if one is not supplied.
  • The no-arg Location.Builder constructor has been marked a deprecated. Use the constructor which requires a ProjectFile instance instead.
  • Implemented the ExpenseItem.Builder class.
  • Marked the ExpenseItem(task) constructor as deprecated, use the ExpenseItem.Builder class instead.
  • Marked all ExpenseItem setter methods a deprecated. The ExpenseItem class will be immutable in the next major release.
  • Marked no-arg UnitOfMeasure.Builder() constructor as deprecated, use the UnitOfMeasure.Builder(ProjectFile) constructor instead.
  • Implemented the Step.Builder class.
  • Marked the Step(task) constructor as deprecated, use the Step.Builder class instead.
  • Marked all Step setter methods a deprecated. The Step class will be immutable in the next major release.
  • Marked the NotesTopic constructor as deprecated, use the NotesTopic.Builder(ProjectFile) constructor instead.
  • Implemented the ExpenseCategory.Builder class.
  • Marked the ExpenseCategory constructor as deprecated, use the ExpenseCategory.Builder class instead.
  • Implemented the CostAccount.Builder class.
  • Marked the CostAccount constructor as deprecated, use the CostAccount.Builder class instead.
  • Implemented the ActivityCodeValue.Builder class.
  • Marked the ActivityCodeValue constructor as deprecated, use the ActivityCodeValue.Builder class instead.
  • Marked the ActivityCodeValue.setParent method as deprecated, use the ActivityCodeValue.Builder class instead.
  • Marked the ActivityCode.addValue method as deprecated, use the ActivityCodeValue.Builder class instead to create an ActivityCodeValue instance and add it directly to the list held by the parent ActivityCode.
  • Implemented the ActivityCode.Builder class.
  • Marked the ActivityCode constructor as deprecated, use the ActivityCode.Builder class instead.
  • Only predecessor Relation instances are now stored in RelationContainer, successors are generated dynamically. You will only notice a difference if you are iterating over the RelationContainer collection directly, in which case you will only see predecessors.

Version 12.3.0

07 Nov 22:10
Compare
Choose a tag to compare
  • Retrieve role availability data when reading a schedule from a P6 database.
  • Populate the project's Name and Title attributes when exporting an MSPDI file.
  • Ensure the Project ID attribute is populated when writing an XER file.
  • Don't include null tasks (blank tasks) when writing an XER file.
  • Strip control characters from entity names written to MSPDI files and XER files.
  • Ensure resource material labels written to MSPDI files meet Microsoft Project's naming requirements.
  • Ensure the activity code value Name attribute is populated when read from an Asta PP file.
  • Don't allow multiple values for an activity code when writing XER and PMXML files.
  • The MSPDI and MPX writers now dynamically renumber Unique ID values which are too large for Microsoft Project. The original schedule is no longer modified to achieve this.

Version 12.2.0

12 Oct 10:52
Compare
Choose a tag to compare
  • Add the UnitOfMeasure class to represent the unit of measure for a material resource. The unit of measure corresponds to the current "material label" attribute of a resource. The Resource.getMaterialLabel() method will now retrieve the label from the UnitOfMeasure instance associated with the resource. The Resource.setMaterialLabel() method is now deprecated, the Resource.setUnitOfMeasure() or Resource.setUnitOfMeasureUniqueID() methods should be used instead.
  • Unit of measure for material resources are now read from and written to Primavera schedules.
  • Improve task duration and percent completion calculation for Asta PP files.
  • Improve date parsing when reading XER files written by older versions of P6.
  • Added the setIgnoreErrors method to the Primavera database reader class, and MSPDI, Schedule Grid, and SDEF file reader classes. The current default behavior of ignoring data type parse errors is unchanged. Calling setIgnoreErrors(false) on one of these reader classes will ensure that an exception is raised when a data type parse error is encountered.
  • Added the ProjectFile.getIgnoredErrors() method. The default behavior for MPXJ reader classes is to ignore data type parse errors. If any errors have been ignored when reading a schedule, details of these errors can be retrieved by calling the ProjectFile.getIgnoredErrors() method.
  • Handle duplicate relation unique IDs when reading schedules.
  • Include resource availability table in JSON output.
  • Add the Resource field Default Units, and ensure this field is read and written for P6 Schedules.
  • Updated the Resource attribute Max Units to ensure that this is calculated from the resource's availability table. Note that the Resource.getMaxUnits() method will return the resource's Max Units attribute for the current date. To retrieve the Max Units for a different date, use the AvailabilityTable.getEntryByDate() method.
  • Marked the Resource.setMaxUnits() method as deprecated. The Max Units attribute is derived from the resource's availability table. Changes to Max Units should now be made by modifying the availability table.
  • Updated the Resource attribute Available From to ensure that this is calculated from the resource's availability table. Note that the Resource.getAvailableFrom() method will return the resource's Available From attribute for the current date. To retrieve the Available From attribute for a different date, use the AvailabilityTable.availableFrom() method.
  • Marked the Resource.setAvailableFrom() method as deprecated. The Available From attribute is derived from the resource's availability table. Changes to the Available From attribute should now be made by modifying the availability table.
  • Updated the Resource attribute Available To to ensure that this is calculated from the resource's availability table. Note that the Resource.getAvailableTo() method will return the resource's Available To attribute for the current date. To retrieve the Available To attribute for a different date, use the AvailabilityTable.availableTo() method.
  • Marked the Resource.setAvailableTo() method as deprecated. The Available To attribute is derived from the resource's availability table. Changes to the Available To attribute should now be made by modifying the availability table.