INC-173436 · Issue 648821
Performance improvement for Application Save: Node Level Data Pages
Resolved in Pega Version 8.7
As part of new functionality introduced in 8.3, data types defined in the application record will be turned into data objects on Application save. As part of this process node level pages are invalidated and reloaded and there is an explicit commit that marks the Application record as dirty and sends any calls for the application record to the database for fresh records. In a multi-node environment, the number of queries to get the application record being saved became exponentially higher and performance impacts were seen. This has been resolved by updating the system to skip eager loading of the data page definition when an access rule or application definition is saved.
INC-192979 · Issue 678361
Performance improvement for Application Save: Node Level Data Pages
Resolved in Pega Version 8.7
As part of new functionality introduced in 8.3, data types defined in the application record will be turned into data objects on Application save. As part of this process node level pages are invalidated and reloaded and there is an explicit commit that marks the Application record as dirty and sends any calls for the application record to the database for fresh records. In a multi-node environment, the number of queries to get the application record being saved became exponentially higher and performance impacts were seen. This has been resolved by updating the system to skip eager loading of the data page definition when an access rule or application definition is saved.
INC-214451 · Issue 734925
Rest connector passes RequestAttachmentPage to child requestor
Resolved in Pega Version 8.8
While invoking the Rest Connect from a data page, the error "InboundMappingException: Exception occurred while mapping incoming response" was generated. Requests with "Content-type:multipart/form-data" require "pyRequestAttachmentPage" or "pyResponseAttachmentPage" to be populated with correct values. When Rest-Connector was executed in parallel, those pages were not copied to the child requestor and the rest call executed from the child requestor did not have correct header and body. To resolve this, MethodConnect.java has been updated to correctly pass pyRequestAttachmentPage to the child requestor.
INC-185266 · Issue 676581
Index table correctly populates after migration
Resolved in Pega Version 8.7
After creating a product file with work instances, only some records were populating in the index-workpartyuri class through index rule. Investigation showed that if the IDs specified for the Work Range started with the same digits as were seen after the case prefix (e.g. W-1, W-1000, or W-22, W-2201) then only the indexes for cases that start with W-1 or W-22 were included in the export. This was traced to a step in AddPartyIndexWhenCondition where the EstimatedWorkPrefix local variable was calculated: the java step extracted anything that was the same from the start of the To and From range without taking into account the possibility that some digit characters after the "-" could be the same. To improve the accuracy of the prefix estimation, "-\d" will be used to make an educated guess.
INC-187857 · Issue 700855
Added debug logging and exception recovery for unexpected data object
Resolved in Pega Version 8.8
When rules were complied in lower environment and deployed into production, they later became corrupted and system behavior changed. The error "Java generation failed: caught exception while expanding property pyGetCasePredictionsByClassName on page CurrentRecord" was generated. Investigation showed the auto-populate property pyGetCasePredictionsByClassName was attempting to get the metadata property "pzDataObjectParams": this was a string value in this scenario instead of the expected java object, and caused the exception. To resolve this, a debugger has been added which will check if the property is a java object or not. If it is not, the system will skip the processing and then display an error message with a stack trace.
INC-223240 · Issue 723230
Added debug logging and exception recovery for unexpected data object
Resolved in Pega Version 8.8
When rules were complied in lower environment and deployed into production, they later became corrupted and system behavior changed. The error "Java generation failed: caught exception while expanding property pyGetCasePredictionsByClassName on page CurrentRecord" was generated. Investigation showed the auto-populate property pyGetCasePredictionsByClassName was attempting to get the metadata property "pzDataObjectParams": this was a string value in this scenario instead of the expected java object, and caused the exception. To resolve this, a debugger has been added which will check if the property is a java object or not. If it is not, the system will skip the processing and then display an error message with a stack trace.
INC-239902 · Issue 628577
Handling added for multi-file upload of duplicated files
Resolved in Pega Version 8.7
Attaching the same file multiple times during a single upload caused some of the duplicated files to not be included. The issue was not seen when attaching the same file multiple times but in different attempts. The exception "Can't continue with file attachment. FileData.xlsx is missing and might have been quarantined by anti-malware software" was logged. This was caused by the files being uploaded without updating filenames to have a unique ID, so multiple files with the same name were overwriting the previous file. This has been resolved by setting the appendUniqueIdToFileName parameter to true in the upload request so each copy of the filename is treated as an individual file.
INC-225687 · Issue 739708
Handling added to avoid incorrect true value for DateTimeisPastOrFuture
Resolved in Pega Version 8.8
When the Function pxDateTimeisPastOrFuture() was called with the arguments "" (the empty String) and "false", it sometimes returned "true" instead of "false". This function internally calls the Function CompareDates() which takes two Strings as arguments. In this case, one is provided by the caller of pxDateTimeisPastOrFuture, the other one is generated at runtime, as the current date/time. As the second argument of pxDateTimeisPastOrFuture, the generated date/time will be the first parameter, while the second one is the date/time argument for pxDateTimeisPastOrFuture. If that argument is the empty String, is will be replaced by the current date/time. This means that the value for the second parameter is determined after the first parameter and that can result in a gap in time by a few milliseconds. This in turn results in "true" as the return value for pxDateTimeisPastOrFuture. This has been resolved by adding handling for a blank string so "false" is returned correctly.