Discussion

Stop Writing Custom Utilities! Use Pega’s RecreateIndexes to Backfill Optimized Properties
I want to share something that really helped me in a recent Pega project — something that might save you hours of effort if you’re dealing with optimized properties and blank report data.
---
The Problem
I had optimized a property .DueDate (inside a page property). Everything worked fine for new cases, but reports showed blank values for older cases, even though I selected “Backfill existing data” during optimization.
Turns out:
> Pega doesn’t automatically backfill optimized property values for existing records.
And like many of you, I almost went the usual route:
Write a utility to Obj-Open + Obj-Save + Commit every record
Set up a Job Scheduler
Or manually resave cases (not fun!)
---
The Better Way: RecreateIndexes
Instead, I found that Pega provides an OOTB activity:
@baseclass.RecreateIndexes
This activity:
Reads the BLOB (pzPVStream)
Extracts optimized property values
Updates exposed columns
No changes to the case or commit required
It saved me a lot of effort — and I think more people need to know about it.
---
One Key Detail:
> Run RecreateIndexes on the class where the optimized property is defined.
Not the parent case class — the exact class that owns the property.
So in my case, .DueDate was inside a page class MyApp-Data-Task. I ran the activity on that class — and boom, all values appeared in reports without touching any case.
Final Thoughts
If you’ve ever struggled with blank values after optimizing properties — give RecreateIndexes a shot.
No custom code, no commits, just clean and quick backfilling.
Let me know if this helped or if you've used it before. Let's save each other time and stop reinventing the wheel!