ShareAspace 1.8
Platform
Server 2022
ShareAspace now requires Microsoft Windows Server 2022 as the hosting environment for all ShareAspace out-of-the-box (OOTB) components.
.NET 7
All .NET based ShareAspace components are upgraded to .NET 7 and comes bundled with the framework.
Other
- Solved race condition issue in the event engine that could prevent events from firing when multiple events fired at the same time.
- Solved an issue that would prevent Space update if the full-text indexing extension was registered.
- Changing the owner of a version will now properly propagate the ownership change on everything contained below the version. Before the fix only the version owner was changed but the rule is that the ownership change should always propagate down.
- When copying a SoftType instance or when creating a new version of a versionable object the checksum attribute of
DigitalFile
contained within the instance are now correctly replicated as well. Before the fix, the checksum attribute was missing. - The
authorization.tokenLifeTime
can now be set using the collection bootstrap configuration file. - The HAETOAS response for the load structure API has a new link
navigateRecursive
in addition to the previously existingnavigate
. The new link returns the API route for recursively loading the full structure. - Added configuration support for the
WorkItemNotification
system action in the configuration tool. - Solved an issue that prevented events of type
WorkItemNotification
to be handled by subscription definition / subscription configurations. The event would trigger but never processed. - Added support for having spaces in the output filename of DataExchange jobs.
- Solved an issue in the event evaluation logic that would sometimes give the wrong value for the
previous
value (i.e. an issue when reading what a value was before a change). - It is now possible to index the
lockedBy
metadata attribute of SoftType instances. - It is now possible to update event trigger definitions via a space update.
- Changed the
space/{spaceId}/spaceProfile/person/{email}
route to always return a matchingProfilePerson
SoftType instance. Before the change the return type would be based on the first PLM object of typePerson
. Also added a new route/space/{spaceId}//spaceProfile/person/{definitionId}/{email}
wheredefinitionId
can be used to define the expected SoftType type to get back. - Disabled license check on some administration routes in order to prevent catch-22 situations (for the scenario where a license is not provided in the collection bootstrap configuration):
/collection/externalExtension
/identity/users
/authorization/token
- Solved an issue in the SoftType default presentation builder that could lead to the rendering failed if multiple SoftType reference navigations were required by the presentation configuration.
- Solved an issue that could prevent an administrator from editing a Personal subscription definition.
User Interface
Other
- When a user clicks the ShareAspace web module tab refresh button on an extension module ShareAspace web will now always send the refresh message to the extension module. Before the fix the message was only sent if the object info view was activated for the module.
- Filter settings are now correctly propagating through structure navigations in ShareAspace web, including in the mid-pane-table-view of the structure module.
- If a user has not set a preferred language in their SpaceProfile ShareAspace web will now default to the language configured as default in the space template.
- If a user changes the time zone setting under space settings ShareAspace web will now correctly keep this in the information filter used in all API requests.
- Solved an issue in ShareAspace web that would prevent a user from specifying a custom expiration date when requesting a personal access token.
- Added support for opening a SoftType based on WorkItem in the WorkItem module from an extension module.
- It is now possible to delete Participant-queries from the ShareAspace web application (provided that the user has sufficient access to do so).
- Using the browser refresh while using ShareAspace web will no longer:
- clear the object selection history.
- clear the user name presentation in the top right corner.
- Fixed an issue in the date picker in ShareAspace web. Using a different locale format prevented the date picker from loading.
- Improved the selection change logic in ShareAspace web in order to make sure that the action ribbon always is in sync with what is selected and displayed in the object information view.
- Extension modules opened from a ribbon action in ShareAspace web will now default the tab presentation to the extension module title if no other presentation can be found.
- Solved an issue in ShareAspace web that would prevent a user from closing a message thread.
- Added functionality for copying DataExchange job instances in the DataExchange module. This should help when scheduling multiple jobs in a row where the user want to reuse previous job configuration parameters. Before this addition each job scheduling would require the user to repeat the configuration steps over and over.
- Solved an issue in ShareAspace web that could prevent the table paging controls from loading.
- Solved an issue in the ShareAspace web file module that where clicking the navigation path breadcrumb links sometimes would result in an empty files/folders list.
- Fixed the positioning of the "three-dot-menu" for "additional contexts" in the message thread module. It was not possible to use the menu before this fix.
- Solved an issue that could prevent edit forms from opening when clicking an edit action in an object context menu (three dot menu).
- Enabled collection administrator UI functionality for managing extensions even if there is no license applied.
Extensions
3D Viewer
- The 3D-viewer can now support multiple Spaces.
- The 3D-viewer will now load geometry from the configured port path as initially intended.
- The 3D-viewer can now be loaded with multiple root geometry files.
- The 3D-viewer can now be configured to show the geometry model browser.
Event engine
Access to SoftType schemas
The liquid templating language has been updated with two new methods, nova.readSoftTypeJsonCurrent
and nova.readSoftTypeJsonPrevious
. These methods will print the JSON payload of a SoftType instance into the liquid output.
The methods take two parameters, database id of the SoftType instance (required), and the id of the output schema (optional) to be used when reading the SoftType instance. If the output schema id is not provided the templating engine will default to the output schema that is configured as the default output schema of the SoftType.
The method nova.readSoftTypeJsonCurrent
will load the SoftType instance based on how the instance looks like after the change that triggered the event and the nova.readSoftTypeJsonPrevious
will load the instance based on what the instance looked like before the change that triggered the event.
Example usages:
Prints the JSON payload for the SoftType instance using the specified output schema with id defaultOut
. Note that versionOId
is a configured port id and the defaultOut
is a configured output schema id on the SoftType.
{{ current.versionOId | nova.readSoftTypeJsonCurrent 'defaultOut' }}
Prints an array with two JSON objects, one for the previous representation of the instance and one for the current representation of the instance. Note that the schema id has been omitted in this example.
[
{{ previous.versionOId | nova.readSoftTypeJsonPrevious }},
{{ current.versionOId | nova.readSoftTypeJsonCurrent }}
]
Resilience and backoff strategy
The ShareAspace external extension framework has been updated with a new resilience and backoff strategy approach. Each extension type has a default behavior for handling transient errors. The default behavior can be overridden by a configuration per registered extension.
In ShareAspace a transient error is identified as follows.
- Connection error: it is not possible to connect to the extension.
- Request response with status code:
- Network failures (as HttpRequestException).
- HTTP 5XX status codes (server errors).
- HTTP 408 status code (request timeout).
If any of the above is true, ShareAspace will see the failure as transient and will retry depending based on a policy configuration for the extension. The backoff policy used by ShareAspace is exponential up to 5 minutes. After 5 minutes ShareAspace will retry once every 5 minutes.
Administration API
A new administration API has been added for reading and managing the events in the ShareAspace event store. The events in the event store are processed by the ShareAspace event bus.
Logging
Improved logging and error handling
The internal logging and error handling has been greatly improved. This improvement will provide better and more clear logging information in the ShareAspace system logs as well as better error messaging when using the ShareAspace API. The new internal architecture will also allow for continued improvements over the coming minor releases of ShareAspace 1.8.
Improved log performance
- The compression algorithm for compressing old system logs is changed from ZIP to Brotli.
- Changed from one compressed file containing all archived log files to one unique compressed file per archived log.
- Compressed log archive files will now automatically be removed based on what come first between:
- Archive older than 60 days.
- The number of archived logs reaches
300
(the oldest is removed).
- Note that: If logs must be preserved outside of the defined scopes the files must be copied from the ShareAspace log folder.
Correlation id
The ShareAspace API has added support for the X-Correlation-Id
request header. The X-Correlation-Id
is unique for every request. e.g. ShareAspace web will auto generate a GUID that is put on each HTTP request. If the X-Correlation-Id
is provided ShareAspace will use this id for all log messages related to the initiating request. If further actions are triggered by a request, like an event being triggered leading to a call to an external extension this same correlation id will be passed on to these extensions. The extensions can then use this same id while logging requests internally within the extension. The extensions can also use the correlation id when reporting back log information to ShareAspace. This way the full impact of a request can be traced in the ShareAspace logs.
Example, X-Correlation-Id request header:
X-Correlation-Id: 5bb3fb20-0f7b-11ee-b090-c9ad50416076
Administration tool
The ShareAspace administration tool has been update with three new features.
- The administration tool can now run migration scripts, maintenance scripts, and reporting scripts produced by the ShareAspace development tool.
- Typically the migration and maintenance scripts are produced and provided by Eurostep to be used when upgrading a ShareAspace installation to a later release of ShareAspace or when running a clean up of data in a space, e.g. when low source data quality has led to unwanted data representation in a Space.
- It is now possible to use the administration tool to set the storage path and file vault path.
- The administration tool can now search the ShareAspace system logs. The search operates on both the current active log file as well as on all the archived logs.
- The filtered result can be printed to the console window (default) or to an output file.
- Supported filtering options.
- Filter terms - free text filter on log message.
- Correlation id - correlation id used for finding log information for a chain of events.
- Log level - All, Critical, Debug, Error, Info, Trace, Warning.
- Time span - Start to end date time.
As with all the features in the ShareAspace administration tool they are all documented within the tool itself. Using the --help
option at root level as well as on sub options brings up the documentation.
Migration and maintenance scripts
PS C:\Program Files\Eurostep\ShareAspace\Host> .\sas.exe run -h
Description:
Load and run a data maintenance script against a ShareAspace database.
Usage:
sas run <script.js> [options]
Arguments:
<script.js> Name of the script file.
Options:
--spaceId <spaceId> ID of the target space.
--workingDirectory <workingDirectory> Working directory for the scripts.
--whatIf Run the script without actually committing the changes.
--watch Run the script every time it changes. Whatch will enable whatIf mode.
--systemPath <systemPath> Path to ShareAspace system folder
-?, -h, --help Show help and usage information
--output <JSON|Table> Set output format [default: Table]
PS C:\Program Files\Eurostep\ShareAspace\Host>
Tip
The --watch
option will keep the ShareAspace host loaded within the tool allowing execution of updated scripts to run any time the script changes. This cuts host startup lead time from a development process. e.g. When building reporting scripts using the ShareAspace development tool it can be beneficial to let the ShareAspace maintenance tool run the execution of the report using the -watch
option instead of running the script execution from the ShareAspace development tool (since the ShareAspace development tool require a host startup for each execution).
Setting paths
PS C:\Program Files\Eurostep\ShareAspace\Host> .\sas.exe system -h
Description:
Manage ShareAspace storage paths
Usage:
sas system [command] [options]
Options:
--systemPath <systemPath> Path to ShareAspace system folder
-?, -h, --help Show help and usage information
--output <JSON|Table> Set output format [default: Table]
Commands:
list-paths List current configuration
set-base Set base storage paths
set-collection Set collection storage paths
set-space <spaceId> Set space storage paths
change-path Change storage or file vault path
remove-space <spaceId> Remove space from system
PS C:\Program Files\Eurostep\ShareAspace\Host>
Filter log entries
PS C:\Program Files\Eurostep\ShareAspace\Host> .\sas.exe logs filter --help
Description:
Filter log entries.
Usage:
sas logs filter [<term(s)>...] [options]
Arguments:
<term(s)> Search for log entries that contain certain word or phrases.
Options:
--path <path> Log file(s) source path.
--correlationId <correlationId> Search for log entries that contain specified correlation ID.
--level <All|Critical|Debug|Error|Info|Trace|Warning> Filter by log level. [default: All]
--start <start> Get log entries that occured after a specified date and time.
--end <end> Get log entries that occured before a specified date and time.
--outFile <outFile> Send output to a file.
--systemPath <systemPath> Path to ShareAspace system folder
-?, -h, --help Show help and usage information
--output <JSON|Table> Set output format [default: Table]
Example, filtering out Critical
log entries mentioning /collection
that were logged after 2023-06-22T03:00:00Z
.
PS C:\Program Files\Eurostep\ShareAspace\Host> .\sas.exe logs filter "/collection" --level Critical --start 2023-06-22T03:00:00Z
Model updates
The following changes have been made to the underlying ShareAspace data model:
ProjectReferenceSelect
extended with:ProductConfiguration
ProductConcept
ProductConfigurationReferenceSelect
extended with:DocumentVersion
DocumentDefinition
PartVersion
PartViewDefinition
- Added
Verification
to:ClassificationSelect
ContractReferenceSelect
DateTimeAssignmentSelect
PersonOrganizationReferenceSelect
ProjectReferenceSelect
PropertyReferenceSelect
DocumentReferenceSelect
- Added properties to
ExternalEndpoint
andTrustedExternalEndpoint
: retryForever
:bool?
rateLimitNumberOfExecutions
:int?
- Added properties to
TrustedResource
:requestTimeout
:int?
retryForever
:bool?
rateLimitNumberOfExecutions
:int?
Checkpoint
The ShareAspace checkpoint API has been updated with new API routes. It is now possible to list all available checkpoints, delete a specific checkpoint, and to download a specific checkpoint.
Security
- ShareAspace web no longer use the session storage for storing JSON Web Tokens (JWT). The JWT is only stored in a secure cookie.
- ShareAspace web no longer makes use of the
Authorization
HTTP request header when making calls to the ShareAspace REST API. Instead all REST API calls relies on the secure cookie containing the JWT. Note that the API still support the use of theAuthorization
header. - ShareAspace web no longer passes temporary impersonation JWTs to web based extensions using query string parameters. Instead a message is sent from ShareAspace web to the IFRAME hosting the web extension once the IFRAME has loaded. This is a breaking change (read more in the breaking changes section).
- Service accounts can now be impersonated by registered trusted extensions (and Nova-extensions). Before this update service accounts could for example not run DataExchange jobs that used external tasks.
Migration
- Migration path not yet available.
Breaking changes
- Web extension modules no longer accept query parameters. Initialization data is passed as message to the extension instead. See web extensions.
Deprecation
System preparation tool
The system preparation tool that was used for moving a ShareAspace storage from one environment to another has been deprecated. It has been replaced by the ShareAspace administration tool.
Snapshot
The snapshot API and the snapshot based backup and restore process has been deprecated. Use the file based backup scenario or the checkpoint API based backup scenario instead.
Elastic 6
The full text indexer based on Elastic version 6 is deprecated. Replaced by full text indexer based on Elastic 8.
Developer tooling
A new development SDK is introduced with ShareAspace 1.8.0. It is available as a Nuget package Eurostep.SAS.Logging.ShareAspace.1.8.0.xyz.nupkg
and can be used by .NET 7 based custom extension implementations.
The package adds the ability to include a ShareAspace logger (ShareAspaceLogger
), implemented on the ILogger
interface, to a custom extension. For ShareAspace Nova based extensions the logger will pickup the id of the request sent to an external extension and use that as the X-correlation-id
when reporting back logging information from the extension to ShareAspace. For extensions based on the external endpoint and trusted external endpoint ShareAspace web will provide the X-correlation-id
header. The X-correlation-id
is picked up by the ShareAspace logger.
Documentation
- Platform installation
- Updated software pre-requisites.
- Updated backup documentation.
- Added documentation on new checkpoint API.
- Updated sample scripts for deployment on single machine setup.
- Added documentation on how to use the ShareAspace reverse proxy for token requests in AD FS setups.
- Updated ShareAspace maintenance tool documentation.
- Added documentation on the event administration API.
- Removed documentation about snapshot.
- Removed documentation on the system preparation tool.
- Removed documentation on Elastic 6 full text extensions.
- Developer
- Added documentation on how ShareAspace handles resilience and logging for external extensions.
- Added documentation on Nuget library for ShareAspace logger for external extensions.
- Added documentation on Web extensions.
- Removed open API generated API index.
- Removed deprecated code samples and demos.
- Features
- Updated liquid configuration documentation.
- Added documentation on new configuration parameters for external endpoint and trusted external endpoint.
- Model
- Regenerated ShareAspace model documentation.