Releases: joniles/mpxj
Releases · joniles/mpxj
Version 12.9.1
- 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
- Updated
UniversalProjectReader
to addgetProjectReaderProxy
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 usingUniversalProjectReader
. You can now useUniversalProjectReader.getProjectReaderProxy
to achieve this. - Add
from
method to allBuilder
classes to allow initialisation from existing objects. - The
CostAccount.Builder
class now provides twonotes
methods to allow formatted or unformatted notes to be added to cost accounts. - The
CostAccount
methodgetDescription()
has been marked as deprecated. Use thegetNotes()
orgetNotesObject()
method instead. - The
CustomFieldValueItem
methodsgetParent
andsetParent
have been marked as deprecated. Use thegetParentUniqueID
andsetParentUniqueID
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
- Improve reading resource assignments from certain FastTrack FTS files.
Version 12.8.0
- 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 theRelation.Builder
class instead. - Marked the
RelationContainer.addPredecessor(Task,Task,RelationType,Duration)
method as deprecated, use theRelationContainer.addPredecessor(Relation.Builder)
method instead. - Marked the
Task.addPredecessor(Task,RelationType,Duration)
method as deprecated, use theTask.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 containingnull
. - 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
- 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
- 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, usegetEffectiveCalendar
method instead. - Improved reading timephased baseline work from MPP files.
- Added new versions of the
TimephasedUtility.segmentBaselineWork
andsegmentBaselineCost
methods which take aProjectCalendar
instance as the first argument rather than aProjectFile
instance. - Deprecated the
TimephasedUtility.segmentBaselineWork
andsegmentBaselineCost
methods which take aProjectFile
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
- 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 theProjectProperties
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 theCustomFieldContainer
. - 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
- 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 aboolean
argument indicating if external tasks should be removed. Passingtrue
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 aboolean
argument instead. - Ensure the
ProjectProperties
name attribute is set correctly when reading XER files and P6 databases. - The
ProjectEntityContainer
methodrenumberUniqueIDs
has been marked as deprecated. - The
ProjectEntityContainer
methodgetNextUniqueID
has been marked as deprecated. UseProjectFile.getUniqueIdObjectSequence(class).getNext()
instead. - The
ProjectEntityContainer
methodupdateUniqueIdCounter
has been marked as deprecated as it is no longer required. - The
ProjectFile
methodupdateUniqueIdCounters
has been marked as deprecated as it is no longer required. - The
ObjectSequence
methodreset
has been marked as deprecated as it is no longer required. - When creating a
Location
instance using theBuilder
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 aProjectFile
instance instead. - Implemented the
ExpenseItem.Builder
class. - Marked the
ExpenseItem(task)
constructor as deprecated, use theExpenseItem.Builder
class instead. - Marked all
ExpenseItem
setter methods a deprecated. TheExpenseItem
class will be immutable in the next major release. - Marked no-arg
UnitOfMeasure.Builder()
constructor as deprecated, use theUnitOfMeasure.Builder(ProjectFile)
constructor instead. - Implemented the
Step.Builder
class. - Marked the
Step(task)
constructor as deprecated, use theStep.Builder
class instead. - Marked all
Step
setter methods a deprecated. TheStep
class will be immutable in the next major release. - Marked the
NotesTopic
constructor as deprecated, use theNotesTopic.Builder(ProjectFile)
constructor instead. - Implemented the
ExpenseCategory.Builder
class. - Marked the
ExpenseCategory
constructor as deprecated, use theExpenseCategory.Builder
class instead. - Implemented the
CostAccount.Builder
class. - Marked the
CostAccount
constructor as deprecated, use theCostAccount.Builder
class instead. - Implemented the
ActivityCodeValue.Builder
class. - Marked the
ActivityCodeValue
constructor as deprecated, use theActivityCodeValue.Builder
class instead. - Marked the
ActivityCodeValue.setParent
method as deprecated, use theActivityCodeValue.Builder
class instead. - Marked the
ActivityCode.addValue
method as deprecated, use theActivityCodeValue.Builder
class instead to create anActivityCodeValue
instance and add it directly to the list held by the parentActivityCode
. - Implemented the
ActivityCode.Builder
class. - Marked the
ActivityCode
constructor as deprecated, use theActivityCode.Builder
class instead. - Only predecessor
Relation
instances are now stored inRelationContainer
, successors are generated dynamically. You will only notice a difference if you are iterating over theRelationContainer
collection directly, in which case you will only see predecessors.
Version 12.3.0
- 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
- 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. TheResource.getMaterialLabel()
method will now retrieve the label from theUnitOfMeasure
instance associated with the resource. TheResource.setMaterialLabel()
method is now deprecated, theResource.setUnitOfMeasure()
orResource.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. CallingsetIgnoreErrors(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 theProjectFile.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 theAvailabilityTable.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 theAvailabilityTable.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 theAvailabilityTable.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.