Blueprint support for creating abstract Data Objects (case-only data, no persistence)

Is there any support in Pega Blueprint to create a Data Object as abstract (non-persistent)?
Use case:
In a mortgage application, I want to capture Property information (as an example) and store it only as part of the Case data.
I do not want this data to be persisted as records in Pega tables.
Current behavior in Blueprint:
When defining a Data Object in Blueprint, the available source options are:

Pega (Local)
External
Undefined

In all three cases, the Data Object is created as a concrete class, and a physical table is created in Pega.

Question:

Is there currently any way in Blueprint to define a non-persistent / abstract Data Object that is intended only for embedded case data (similar to abstract data classes or case-embedded data models)?
If not supported today, is there any roadmap or future plan to support abstract or case-only Data Objects directly from Blueprint?

This capability would be very useful for modeling complex case data without forcing unnecessary persistence.

Thanks in advance for any guidance.

The current way to do this is to create an “Embedded” property.

Embedded properties will create classes on import that are concrete, but not bound to a data source. You won’t see them (presently) on the data and integrations tab, but they will be available to be selected as a field type when you create additional properties in that class or other classes.

My recommendation is to initially use your intended class name for the property name when creating a new embedded property. Once it is created and saved, you can reopen the property and rename it, the original class name will be respected.
image

If you don’t think about the class name when creating the property initially, you do have the ability to rename the class on import, you just can’t “fix” the class name in blueprint right now.

Thanks for the explanation. I understand that creating an Embedded property results in a concrete data class that isn’t mapped to a data source, which works for many embedded data scenarios.

However, my original question was slightly different.

Is there currently any way in Blueprint to define an abstract Data Object purely as a reusable type, similar to an abstract data class in Pega?

For example:

  • Create an abstract Data Object (e.g., Vehicle) that contains common fields such as VIN, Make, Model, etc.
  • Use that abstract type as the base for multiple embedded data structures.
  • Since it’s abstract, it would never require persistence.

The current Embedded property approach creates a concrete class immediately, which isn’t quite the same concept.

Is this capability supported today in Blueprint, or is there any roadmap to support abstract Data Objects for modeling reusable case data?

There is nothing in the roadmap for setting up blueprint to document base classes (abstract) that your concrete classes can inherit from and then provide properties for defining views.

One of the underlying principles of blueprint is to keep the authoring aspects as simple as possible so that it is more approachable for business users. While blueprinting and defining UI for process steps while working with the business, I try to defer most conversations about the underlying structure except with lists or obvious data entities that show up along the way. The goal being to capture the information users need to complete a step as completely as possible and avoid being derailed by spending too much time talking about structure. There is, of course, a balancing act with that.

Once we have catalogued the data needed for a case, I go back and define the supporting structures working with the business to name the entities that attributes belong to. I’ll get that structure set up on my blueprint, update the views to use it and remove the scalars that got added to my case.

To address the question about using abstract classes, you called out vehicle and suggested subclassing for a specific type of vehicle, which could potentially be things like motorcycle, truck, car, boat. In principle, subclassing would allow us to override views in a baseclass on the fly when looking at a list of vehicles that contained all of the subclass instances in it.

Based on recent experience, I have verified that constellation can get upset when you try to overload this way. It seems to be ok if your base class contains all the properties for all the subclasses and then your subclassed view just uses parent class attributes. But when you add new attributes to your subclass and try to overload a view, especially if you are running transactions with it, Pega has a habit of kicking off errors. (I can provide more details on my experience with polymorphism and constellation, if you need.)

So, back to collecting properties from a parent, inheritance is nice but it complicates things more than they want blueprinters to have to deal with. Speaking for myself, I’ll often have people duplicate properties rather than add them to Org-Layer-Data- or Org-Layer-Work- simply because it is easier to understand what is used where. Also, if you can use composition (embedded pages), rather than inheritance you will get the availability of properties - but I also understand there are times where having a parent class and subclasses is better. In that circumstance, I would likely create the UI using the embedded base class and then add in the sub classes post-import and extend them as needed. Of course, if you are trying to leverage polymorphism specializing UI on the child classes but having them all show in a page list in constellation, you will likely encounter trouble. From a blueprinting perspective, even if you could set up the specialized relationship, there is no way to set up UI on a data class and then inherit and override it in a subclass and identifying content for process steps is one of the primary goals for blueprinting.