Troubleshooting: Report output shows no values for a newly exposed column
Summary
A developer asks:
"I worked with my database administrator to get a property exposed as a database column for reporting purposes. The column is present in the database table, but my reports all show no data for that property. Why not?"
Suggested Approach
Note: the approach described here is for V 4.2 systems. For Versions 5.1 - 5.5, newly-exposed database columns can be populated using the Database Column Populator, part of the PRDBUTIL servlet. Consult your system's help documentation for further information.
For V 6.1, newly-exposed database columns can be populated using the Column Populator utility. See How to use the Column Populator utility.
Exposing a property as a database column does not cause that column to be populated, until the next time a row is updated.
For example, if you expose a property LoanAmount in a work object, this column has non-null values only for newly created work objects. (The correct value for LoanAmount is stored in the Blob column for all work objects.)
However, you may need to cause these columns to be populated with data for all rows of one or more classes (such as work types). You can achieve this by running the Resaver servlet.
To start the Resaver, enter ".../ResaverServlet" in place of ".../PRServlet" in your normal Process Commander URL. The form that appears allows you to specify which classes to resave. After you submit the ReSaver servlet form, for each row in the database containing an instance of one of these classes, the ReSaverServlet reads the row and then writes the row back out, thereby populating any newly exposed columns.
You can run this servlet while the system is active and in use by others, but it may affect overall system performance and may skip rows that are locked by other requestors.
Note:
- Enter only one class name per line.
- Entering a class in the Include Classes field causes only that class to be resaved.
- Use Include Classes with descendents to resave instances in that class plus all child classes.
- You can exclude classes by listing them in the Exclude Classes and Exclude Classes with descendents fields.
- Click Resave to start resaver processing, which may take minutes or hours depending on the number of rows to be processed and overall system capability.
- The default (all fields blank) is to resave nothing.
As the Resaver runs, it reports on the selections that you made and the instances resaved in each class.
CAUTIONS:
- Plan out what you will do before running the servlet. Your goal is to resave the minimum set of classes that achieve the desired results.
- Use the full capabilities of the form to specify which classes to include and exclude.
- Be careful as you complete the form, especially in the Include classes with descendants area. Don't enter a class that would cause the entire database or a large portion of it to be resaved. This would result in excessive and unnecessary processing.
Here is the ResaverServlet form.