Backwards compatibility and API changes in Content Manager introduced in Tridion Sites 9.5

The API has changed somewhat in this release, which may affect your customizations.

General changes

Server time versus UTC time converted to client time
Before this release, all timestamps returned by the Content Manager APIs were server times. That is, if your server was physically located in, say Hong Kong, the time would be returned as local time in Hong Kong Standard Time, that is, UTC + 8 hours.
As of Tridion Sites 9.5, all timestamps returned by Content Manager APIs are in UTC. In the user interfaces, these timestamps are converted to local client time. That is, a user in Helsinki will see the timestamp displayed as Eastern European Standard Time, regardless of the location of the server.
If you have made any customizations or extensions that rely on timestamps being returned as server time, adjust them to assume a UTC timestamp.
User names for impersonated users must now be fully qualified
Certain Content Manager APIs allow you to impersonate other users for various purposes, such as to give a user a higher level of access than the user would have ordinarily. In some instances, you can configure a specific Windows user who will be impersonated, such as the one External Content Library (ECL) allows you to configure with the PrivilegedUserName property. In previous releases, you could define the user with a simple, unqualified username, such as of "administrator" and Content Manager would recognize this as the local Windows administrator. As of release 9.5, you must use a fully qualified username, such as "global\administrator". The fully qualified username can specify a domain, such as "global\administrator", or can be a local server account. In this case, you need to include the machine name rather than a domain, for example, "MYCMSSERVER\Administrator".
In general, we recommend discontinuing usage of such named users and instead allow privilege elevation to give the user the needed level of access. With privilege elevation, any actions that require a higher level of access (like creating ECL Stub items) will be performed in name of the original user but with the privileges of a System Administrator (even if the original user doesn't have those).
To use privilege elevation, you can do the following:
  • For ECL, simply do not configure a PrivilegedUserName, or leave it blank. The default behavior is to rely on privilege elevation. (This behavior is new in Tridion Sites 9.5.)
  • For Core Service, you can use the methods ElevatePrivileges, RestorePrivileges and ElevatedPrivilegesScope.
  • For TOM.NET, you can use the ElevatedPrivilegesScope class in your event handler code. For example:
    using (new ElevatedPrivilegesScope(Privileges.SysAdmin)) { // do stuff with elevated privileges }

New methods and properties

The following new methods and properties were introduced in SDL Tridion Sites 9.5:
ConvertSchemaFieldsToXsdForSchemaPurpose
Interface: ICoreService201701
Namespace: Tridion.ContentManager.CoreService
Description: Gets an XSD representation of the schema field definitions restricted by schema purpose.
IncludeCurrentPublication
Namespace: Tridion.ContentManager.Publishing.ResolveInstruction
Description: Gets value indicating if items will be published inside the current Publication.
PublishInChildPublications
Namespace: Tridion.ContentManager.Publishing.ResolveInstruction
Description: Gets a collection of child Publications where items will be published.
IsIndexable
Namespace: Tridion.ContentManager.CoreService.Client.SchemaData
Description: Gets or sets whether components based on this schema will be indexed during data publishing.
IsPublishable
Namespace: Tridion.ContentManager.CoreService.Client.SchemaData
Description: Gets or sets whether components based on this schema can be resolved for data publishing.
Locale
Namespace: Tridion.ContentManager.CoreService.Client.PublicationData
Description: Gets or sets the locale of a publication.
Locale
Namespace: Tridion.ContentManager.CoreService.Client.RepositoryLocalObjectData
Description: Gets the locale for this item from owning publication.
ClaimType
Namespace: Tridion.ContentManager.CoreService.Client.IdentityProviderGroupMappingData
Description: Gets or sets the external claim type to match on.
Value
Namespace: Tridion.ContentManager.CoreService.Client.IdentityProviderGroupMappingData
Description: Gets or sets the external claim value to match on.
IsDataPipelineBased
Namespace: Tridion.ContentManager.CoreService.Client.ResolvedItemData
Description: Gets a value indicating whether the Resolved Item represents a Dynamic Component Presentation.
IsIndexable
Namespace: Tridion.ContentManager.CoreService.Client.ItemFieldDefinitionData
Description: Gets or sets whether this field is indexed for search.
IsPublishable
Namespace: Tridion.ContentManager.CoreService.Client.ItemFieldDefinitionData
Description: Gets or sets whether this field is included into the Data Model.
IsDataPipelineBased
Namespace: Tridion.ContentManager.Publishing.Resolving.ResolvedItem
Description: Gets a value indicating if the item was resolved due to Data Pipeline
Locale
Namespace: Tridion.ContentManager.ContentManagement.RepositoryLocalObject
Description: Gets the Locale for his item from the Repository in which the item physically resides.
IsPublishable
Namespace: Tridion.ContentManager.ContentManagement.Schema
Description: Gets or sets whether components based on this schema can be resolved for data publishing.
IsIndexable
Namespace: Tridion.ContentManager.ContentManagement.Schema
Description: Gets or sets whether components based on this schema will be indexed during data publishing.
IsPublishable
Namespace: Tridion.ContentManager.ContentManagement.Fields.ItemFieldDefinition
Description: Gets or sets whether this field is included into Data Model.
IsIndexable
Namespace: Tridion.ContentManager.ContentManagement.Fields.ItemFieldDefinition
Description: Gets or sets whether this field is indexed for search.
Locale
Namespace: Tridion.ContentManager.CommunicationManagement.Publication
Description: Gets or sets the locale of a publication.

Deprecated method

The following method was deprecated in SDL Tridion Sites 9.5:
ConvertSchemaFieldsToXsd
Interface: ICoreService201701
Namespace: Tridion.ContentManager.CoreService
Description: Gets an XSD representation of the schema field definitions. Deprecated in favor of ConvertSchemaFieldsToXsdForSchemaPurpose.

Handling of dates and times

As of SDL Tridion Sites 9.5, the WCF Core Service and the TOM.NET API return date/time system values in UTC only, as opposed to earlier versions of the product where most of date/time values were returned in the timezone of the Content Manager server. That includes all system date/time values that data items may contain, such as for example FullVersionInfo.CheckOutDate, ActivityData.StartDate and PublishTransactionData.StateChangeDateTime. Accordingly, any value provided by the API user as input, such as PublishInstruction.DeployAt, are also expected to be in UTC.

Note that the SDL Tridion Sites 9.5 APIs do not convert or adjust the values of date/time fields in data or metadata; they continue to be returned "as is."