Skip to main content


persistent class %Studio.SourceControl.Change extends %Library.Persistent

SQL Table Name: %Studio_SourceControl.Change

Class for storing changes to environment

Property Inventory

Method Inventory


parameter MANAGEDEXTENT = 0;
The MANAGEDEXTENT parameter can be set to 0 (zero) to cause the Extent Manager to ignore this class. If set to 1 then the Extent Manager will register globals used by the class and detect collisions. Unmanaged extents (MANAGEDEXTENT = 0) are not checked. Currently, only classes using default storage (%Storage.Persistent) can be managed. This is required since each Namespace will have it's own Change extent
parameter SrcVer = $Id: //iris/2024.1.0/databases/sys/cls/Studio/SourceControl/Change.xml#1 $;
This Parameter should be updated when synced from Perforce
parameter Version = 29;
Revision number of this class when compiled as part of the //custom_ccrs/_common/config/... branch. This version will not be updated (by design) when the class is integrated to other branches. This allows the user to tell what version of the Studio client tools are in use.


property Action as %String (VALUELIST = ",add,edit,predelete,delete,revert") [ Required ];
Action for this change
Property methods: ActionDisplayToLogical(), ActionGet(), ActionGetStored(), ActionIsValid(), ActionLogicalToDisplay(), ActionLogicalToOdbc(), ActionNormalize(), ActionSet()
property ActivelyCommitted as %Boolean [ InitialExpression = 0 ];
Flag indicating whether or not this change was committed to Perforce via Source/Change control tools. If ActivelyCommitted = 0 for a committed change, then it might have been either reverted or committed directly by a Perforce client and the Perforce history should be checked to see whether or not it was committed
Property methods: ActivelyCommittedDisplayToLogical(), ActivelyCommittedGet(), ActivelyCommittedGetStored(), ActivelyCommittedIsValid(), ActivelyCommittedLogicalToDisplay(), ActivelyCommittedNormalize(), ActivelyCommittedSet()
property BackupName as %String [ Calculated ];
Returns the name of the backup file for this Item in the file system
Property methods: BackupNameCompute(), BackupNameDisplayToLogical(), BackupNameGet(), BackupNameIsValid(), BackupNameLogicalToDisplay(), BackupNameLogicalToOdbc(), BackupNameNormalize(), BackupNameSQLCompute()
property CCR as %String;
When this change was first created, this CCR was associated with it for tracking purposes (optional field)
Property methods: CCRDisplayToLogical(), CCRGet(), CCRGetStored(), CCRIsValid(), CCRLogicalToDisplay(), CCRLogicalToOdbc(), CCRNormalize(), CCRSet()
property ChangedBy as %String;
User who made this change, and for uncommitted changes this is the person who has it "checked out"
Property methods: ChangedByDisplayToLogical(), ChangedByGet(), ChangedByGetStored(), ChangedByIsValid(), ChangedByLogicalToDisplay(), ChangedByLogicalToOdbc(), ChangedByNormalize(), ChangedBySet()
property Committed as %Boolean [ InitialExpression = 0 , Required ];
Flag indicating whether or not this change has been committed to Perforce
Property methods: CommittedDisplayToLogical(), CommittedGet(), CommittedGetStored(), CommittedIsValid(), CommittedLogicalToDisplay(), CommittedNormalize(), CommittedSet()
property CommittedTime as %TimeStamp [ InitialExpression = $zdt("0,0",3) ];
Time when this change was committed to Perforce (either via an ItemSet, the Studio CheckIn page or through a P4V)

this value should be set in the form $zdt($H,3) (i.e. "0000-00-00 00:00:00" format)

Property methods: CommittedTimeDisplayToLogical(), CommittedTimeGet(), CommittedTimeGetStored(), CommittedTimeIsValid(), CommittedTimeLogicalToDisplay(), CommittedTimeNormalize(), CommittedTimeOdbcToLogical(), CommittedTimeSet()
property CommittedTimeDisplay as %String [ Calculated ];
Display the CommittedTime field, showing "Uncommitted" for changes that have not yet been committed
Property methods: CommittedTimeDisplayCompute(), CommittedTimeDisplayDisplayToLogical(), CommittedTimeDisplayGet(), CommittedTimeDisplayIsValid(), CommittedTimeDisplayLogicalToDisplay(), CommittedTimeDisplayLogicalToOdbc(), CommittedTimeDisplayNormalize(), CommittedTimeDisplaySQLCompute()
property ExternalName as %String [ Calculated ];
Returns the name of this Item in the file system
Property methods: ExternalNameCompute(), ExternalNameDisplayToLogical(), ExternalNameGet(), ExternalNameIsValid(), ExternalNameLogicalToDisplay(), ExternalNameLogicalToOdbc(), ExternalNameNormalize(), ExternalNameSQLCompute()
property InternalName as %String (MAXLEN = 200);
Name used within instance to refer to this changed item
Property methods: InternalNameDisplayToLogical(), InternalNameGet(), InternalNameGetStored(), InternalNameIsValid(), InternalNameLogicalToDisplay(), InternalNameLogicalToOdbc(), InternalNameNormalize(), InternalNameSet()
property ItemFile as %String (MAXLEN = 500) [ Required ];
Location where this item is stored on disk
Property methods: ItemFileDisplayToLogical(), ItemFileGet(), ItemFileGetStored(), ItemFileIsValid(), ItemFileLogicalToDisplay(), ItemFileLogicalToOdbc(), ItemFileNormalize(), ItemFileSet()
property Name as %String (MAXLEN = 200);
Human readable Name referring to this changed item. This will default to the value if InternalName unless it is explicitly set
Property methods: NameDisplayToLogical(), NameGet(), NameGetStored(), NameIsValid(), NameLogicalToDisplay(), NameLogicalToOdbc(), NameNormalize(), NameSet()
property P4Issued as %TimeStamp;
Time of when the P4 command was issued to Perforce
NOTE - a change can have a non-null P4Issued and still have Committed=0 because a 'p4 edit' will check it out but it is not committed until 'p4 submit'
Property methods: P4IssuedDisplayToLogical(), P4IssuedGet(), P4IssuedGetStored(), P4IssuedIsValid(), P4IssuedLogicalToDisplay(), P4IssuedNormalize(), P4IssuedOdbcToLogical(), P4IssuedSet()
property Source as %String (VALUELIST = ",studio,terminal,trakcare,healthshare,tier2") [ InitialExpression = "studio" ];
Utility by which this change was made
Property methods: SourceDisplayToLogical(), SourceGet(), SourceGetStored(), SourceIsValid(), SourceLogicalToDisplay(), SourceLogicalToOdbc(), SourceNormalize(), SourceSet()
property Tier2 as %Boolean [ Calculated ];
Determine if current change is sourced from a tier 2 change control environment
Property methods: Tier2Compute(), Tier2DisplayToLogical(), Tier2Get(), Tier2IsValid(), Tier2LogicalToDisplay(), Tier2Normalize(), Tier2SQLCompute()
property UpdatedTime as %TimeStamp [ InitialExpression = $zdt($H,3) ];
Last time this change was saved locally
Property methods: UpdatedTimeDisplayToLogical(), UpdatedTimeGet(), UpdatedTimeGetStored(), UpdatedTimeIsValid(), UpdatedTimeLogicalToDisplay(), UpdatedTimeNormalize(), UpdatedTimeOdbcToLogical(), UpdatedTimeSet()


classmethod DisplayUncommitted(ByRef UncommittedList, IncludeRevert=0) as %Status
Displays a list of Uncommitted items from the Uncommitted queue to the output device

Only lists items with action of type 'revert' if the IncludeRevert flag is passed as true

classmethod GetUncommitted(Filename, ByRef Action, ByRef InternalName, ByRef ChangedBy, ByRef Source, ByRef Updated, ByRef P4Issued, ByRef CCR, ByRef Name) as %Status
Retrieves the details from the Uncommitted queue of an Uncommitted item
classmethod InstanceVersion() as %Numeric
Returns value the Major.Minor version for this instance, so it can be used in comparison code which makes sure certain features are used in appropriate versions
classmethod IsUncommitted(Filename, ByRef ID) as %Boolean
Returns Boolean value indicating whether or not an item is Uncommitted
classmethod ListUncommitted(ByRef UncommittedList="", IncludeRevert=0, RefreshUncommitted=1) as %Status
Lists the Uncommitted items from the Uncommitted queue

Only lists items with action of type 'revert' if the IncludeRevert flag is passed as true

classmethod OpenUncommitted(Filename) as %Studio.SourceControl.Change
Returns uncommited change object
classmethod RefreshUncommitted(Display=1, IncludeRevert=0) as %Status
Goes through Uncommitted queue and removes any items of action 'edit' or 'add' which are ReadOnly or non-existent on the filesystem
classmethod RemoveAllUncommitted(Display=1, IncludeRevert=1) as %Status
Removes all Uncommitted items from the Uncommitted queue
classmethod RemoveUncommitted(FileList, Display=1, Revert=0, ActiveCommit=1, CommitCCR) as %Status
Removes one or more Uncommitted items from the Uncommitted queue and changes the exported file to Reaonly (except for reverts of Adds, or new CSP files within the Perforce root)

Default assumed behavior is that the the change was not reverted, and that it was actively committed to Perforce

If the method calling does not know whether it was reverted or committed to Perforce, then it should pass Revert = 0 and ActiveCommit = 0, indicating that the change might have been reverted and the Perforce history should be checked for the definitive answer.

The Revert, ActiveCommit, and CommitCCR arguments only impact the behavior if ^SYS("SourceControl","ChangeConfig","KeepHistory")=1, which means Change objects should have their Committed flag set to 1 and be saved for historical reference, rather than just deleting the Change objects when RemoveUncommitted() is called.

Arguments are as follows:

  • FileList - the name of the file to revert, or an array subscripted by filenames (e.g. FileList("C:\Perforce\custom_ccrs\us\ISCX\TESTSYS\cls\User\Test.xml")="")
  • Display - boolean flag controlling whether to display the results to standard output (defaults to '1')
  • Revert - boolean flag controlling whether to revert a checkout which would delete the change from the change history table (defaults to '0')
  • ActiveCommit - used for historical tracking purposes for the %Studio_SourceControl.Change table
  • CommitCCR - used for historical tracking purposes for the %Studio_SourceControl.Change table
classmethod SetUncommitted(Filename, Action, InternalName, ChangedBy, Source, P4Issued As %Boolean, CCR, Name, EnforceSourcesPath=1) as %Status
Sets the details for a new Uncommitted item into the Uncommitted queue
classmethod UpdateUncommitted(Filename, Action, InternalName, ChangedBy, Source, Updated, P4Issued, CCR, Name) as %Status
Update the details for an Uncommitted item in the Uncommitted queue


index ($Change on ) [Extent, Type = bitmap];
index (ChangeList on ItemFile,CommittedTime) [Data = Action, Unique];
Index methods: ChangeListCheck(), ChangeListCheckUnique(), ChangeListDelete(), ChangeListExists(), ChangeListOpen(), ChangeListSQLCheckUnique(), ChangeListSQLExists(), ChangeListSQLFindPKeyByConstraint(), ChangeListSQLFindRowIDByConstraint()
index (CommittedMap on Committed) [Type = bitmap];
index (IDKEY on ) [IdKey, Type = key];
Index methods: IDKEYCheck(), IDKEYDelete(), IDKEYExists(), IDKEYOpen(), IDKEYSQLCheckUnique(), IDKEYSQLExists(), IDKEYSQLFindPKeyByConstraint(), IDKEYSQLFindRowIDByConstraint()

Inherited Members

Inherited Methods


Storage Model: Storage (%Studio.SourceControl.Change)

FeedbackOpens in a new tab