A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

Mattias Lövström
Jul 8, 2010
  10492
(2 votes)

Version state graph of a PageData object.

I got several questions about versioning of the PageData object in EPiServer (mostly by people writing their own page providers). So I decided to create a simple script to find out exactly what is changed when saving a page using the Save method in DataFactory with different SaveActions..

State graph

PageDataVersions_10

Comments to state graph

Vocabulary:

Instance - means that properties in the saved instance are changed

Loaded – means the properties changed when loading a saved PageDataObject from the database.

FCV – ForceCurrentversion

FNV - ForceNewVersion

 

Id From state Save
Action
Changed built-in properties New
ver
.
      Instance Loaded  
1 Created None
Reject
PageURLSegment
PagePeerOrder
   
2 Created Save
Save|FNV
PageLink
PageGUID
PageURLSegment
PagePeerOrder
PageLinkURL
PageLink
PageGUID
PageURLSegment
PagePeerOrder
PageLinkURL
PageCreated
PageSaved
PageChanged
X
3 Created CheckIn
CheckIn|FNV
PageLink
PageGUID
PageWorkStatus
PageURLSegment
PagePeerOrder
PageLinkURL
PageLink
PageGUID
PageWorkStatus
PageURLSegment
PagePeerOrder
PageLinkURL PageCreated
PageSaved
PageChanged
X
4 Created Publish
Publish|FNV
PageLink
PageWorkStatus
PageURLSegment
PagePeerOrder PageLinkURL
PageLink
PageWorkStatus
PageURLSegment
PagePeerOrder PageLinkURL
PageGUID
PageSaved
PageChanged
PageStartPublish
PagePendingPublish
X
5 CheckedOut
CheckedIn
Published
None
None|FNV
None|FCV
Reject
Reject|FReject|FCV
     
6 CheckedOut Save   PageSaved  
7 CheckedOut Save|FNV PageLink PageLink
PageSaved
X
8 CheckedOut CheckIn PageWorkStatus PageWorkStatus
PageSaved
 
9 CheckedOut CheckIn|FNV PageLink
PageWorkStatus
PageLink
PageWorkStatus
PageSaved
X
10 CheckedOut Publish|FNV PageLink
PageWorkStatus
PageLink
PageWorkStatus
PageSaved
PageChanged
PagePendingPublish
PageStartPublish
X
11 CheckedOut Publish
Publish|FCV
PageWorkStatus "PageWorkStatus
PageSaved
PageChanged
PagePendingPublish
PageStartPublish
 
12 CheckedOut Save
Save|FNV
  PageSaved  
13 CheckedIn Save|FCV
CheckIn|FCV
  PageSaved  
14 CheckedIn CheckIn
CheckIn|FNV
PageLink PageLink
PageSaved
X
15 CheckedIn Publish
Publish|FNV
PageLink
PageWorkStatus
PageLink
PageWorkStatus
PagePendingPublish
PageSaved
PageChanged
PageStartPublish
X
16 CheckedIn Publish|FCV PageWorkStatus PageWorkStatus
PagePendingPublish
PageSaved
PageChanged
PageStartPublish
 
17 CheckedIn Save
Save|FNV
PageLink
PageWorkStatus
PageLink
PageWorkStatus
PageSaved
 
18 Published CheckIn
CheckIn|FNV
PageLink
PageWorkStatus
PageLink
PageWorkStatus
PageSaved
X
19 Published CheckIn|FCV PageWorkStatus PageSaved  
20 Published Save
Save|FNV
PageLink
PageWorkStatus
PageLink
PageWorkStatus
PageSaved
X
21 CheckedOut
CheckedIn
Published
Delete   PageDeleted
PageParentLink
 

* = when checking in a published version with SaveAction.ForceCurrentVersion the status of the version is not saved to the database it only changes on the instance.

*1 = when checking in a new created version with the status of the version is not saved to the database it only changes on the instance.

Default PageData objects values after creation with DataFactory.

ACL FullAccess Administrators
Read Everyone
Value created by
Properties PageTypeID From DataFactory->CreateDefaultPageData
  PageParentLink From DataFactory->CreateDefaultPageData
  PagePendingPublish True
  PageWorkStatus CheckedOut
  PageFolderID DataBase
  PageTypeName From DataFactory->CreateDefaultPageData
  PageMasterLanguageBranch Parent
  PageLanguageBranch Parent
  PageVisibleInMenu True
  PageChildOrderRule 1
  PageStartPublish Now
  PageCreated Now
  PageLinkURL From DataFactory->CreateDefaultPageData
  PagePeerOrder Database
  PageShortcutType PageShortcutType.Normal
Jul 08, 2010

Comments

Sep 21, 2010 10:33 AM

Wow, massive!

Ted
Ted Sep 21, 2010 10:33 AM

+1! Great stuff!

Thomas Krantz
Thomas Krantz Sep 21, 2010 10:33 AM

Nice!

Mattias Lövström
Mattias Lövström Sep 21, 2010 10:33 AM

I have to update this graph after I wrote unit test from it (that tests are going to available as open source after my vacation).

Jared Wooden
Jared Wooden Oct 12, 2016 09:22 PM

@mattias, or anyone else here... Does anyone have an updated copy of this for CMS9? Have the version status IDs changed since this was last posted? Thanks!

Please login to comment.
Latest blogs
Looking back at Optimizely in 2025

Explore Optimizely's architectural shift in 2025, which removed coordination cost through a unified execution loop. Learn how agentic Opal AI and...

Andy Blyth | Dec 17, 2025 |

Cleaning Up Content Graph Webhooks in PaaS CMS: Scheduled Job

The Problem Bit of a niche issue, but we are building a headless solution where the presentation layer is hosted on Netlify, when in a regular...

Minesh Shah (Netcel) | Dec 17, 2025

A day in the life of an Optimizely OMVP - OptiGraphExtensions v2.0: Enhanced Search Control with Language Support and Synonym Slots

Supercharge your Optimizely Graph search experience with powerful new features for multilingual sites and fine-grained search tuning. As search...

Graham Carr | Dec 16, 2025

A day in the life of an Optimizely OMVP - Optimizely Opal: Specialized Agents, Workflows, and Tools Explained

The AI landscape in digital experience platforms has shifted dramatically. At Opticon 2025, Optimizely unveiled the next evolution of Optimizely Op...

Graham Carr | Dec 16, 2025

Optimizely CMS - Learning by Doing: EP09 - Create Hero, Breadcrumb's and Integrate SEO : Demo

  Episode 9  is Live!! The latest installment of my  Learning by Doing: Build Series  on  Optimizely Episode 9 CMS 12  is now available on YouTube!...

Ratish | Dec 15, 2025 |

Building simple Opal tools for product search and content creation

Optimizely Opal tools make it easy for AI agents to call your APIs – in this post we’ll build a small ASP.NET host that exposes two of them: one fo...

Pär Wissmark | Dec 13, 2025 |