loading table of contents...

Studio Developer Manual / Version 2107

Table Of Contents

Studio Developer Manual

Copyright CoreMedia GmbH © 2023

CoreMedia GmbH

Altes Klöpperhaus, 5. OG

Rödingsmarkt 9

20459 Hamburg


All rights reserved. No part of this manual or the corresponding program may be reproduced or copied in any form (print, photocopy or other process) without the written permission of CoreMedia GmbH.


Alle Rechte vorbehalten. CoreMedia und weitere im Text erwähnte CoreMedia Produkte sowie die entsprechenden Logos sind Marken oder eingetragene Marken der CoreMedia GmbH in Deutschland. Alle anderen Namen von Produkten sind Marken der jeweiligen Firmen.

Das Handbuch bzw. Teile hiervon sowie die dazugehörigen Programme dürfen in keiner Weise (Druck, Fotokopie oder sonstige Verfahren) ohne schriftliche Genehmigung der CoreMedia GmbH reproduziert oder vervielfältigt werden. Unberührt hiervon bleiben die gesetzlich erlaubten Nutzungsarten nach dem UrhG.

Licenses and Trademarks

All trademarks acknowledged.

December 08, 2023

1. Introduction
1.1. Audience
1.2. Typographic Conventions
1.3. CoreMedia Services
1.3.1. Registration
1.3.2. CoreMedia Releases
1.3.3. Documentation
1.3.4. CoreMedia Training
1.3.5. CoreMedia Support
1.4. Changelog
2. Overview
2.1. Architecture
2.2. Technologies
3. Deployment
3.1. Connecting to the Repository
3.2. Control Room Configuration
3.3. Remote Dynamic Packages Configuration
3.4. Basic Preview Configuration
3.5. Editorial Comments Database Configuration
3.6. Development Setup
4. Quick Start
4.1. Setting Up the Workspace and IDE
4.2. Building Studio
4.3. Creating a Simple Studio Client Extension
5. Concepts and Technology
5.1. Ext JS Primer
5.1.1. Components
5.1.2. Component Plugins
5.1.3. Actions
5.2. Ext JS with ActionScript and MXML
5.3. Client-side Model
5.3.1. Beans
5.3.2. Remote Beans
5.3.3. Issues
5.3.4. Operation Results
5.3.5. Model Beans for Custom Components
5.3.6. Value Expressions
5.4. Remote CoreMedia Objects
5.4.1. Connection and Services
5.4.2. Content
5.4.3. Workflow
5.4.4. Structs
5.4.5. Types and Property Descriptors
5.4.6. Concurrency
5.5. Web Application Structure
5.6. Localization
5.7. Multi-Site and Localization Management
5.8. Jobs Framework
5.8.1. Defining Local Jobs
5.8.2. Defining Remote Jobs
5.8.3. Executing Jobs
5.8.4. Visualizing Jobs
5.9. Further Reading
6. Using the Development Environment
6.1. Configuring Connections
6.2. Build Process
6.3. IDE Support
6.4. Debugging
6.4.1. Browser Developer Tools
6.4.2. Debugging Tips and Tricks
6.4.3. Tracing Memory Leaks
7. Customizing CoreMedia Studio
7.1. Studio Plugins
7.2. Localizing Labels
7.3. Document Type Model
7.3.1. Localizing Types and Fields
7.3.2. Customizing Document Forms
7.3.3. Image Cropping and Image Transformation
7.3.4. Enabling Image Map Editing
7.3.5. Disabling Preview for Specific Document Types
7.3.6. Excluding Document Types from the Library
7.3.7. Client-side initialization of new Documents
7.4. Customizing Property Fields
7.4.1. Conventions for Property Fields
7.4.2. Standard Component StringPropertyField
7.4.3. Compound Field
7.4.4. Complex Setups
7.4.5. Customizing RichText Property Fields
7.5. Hiding Components on Content Forms
7.5.1. Code Customization for the HideService
7.5.2. Studio Logging
7.5.3. Configuration Options
7.6. Coupling Studio and Embedded Preview
7.6.1. Built-in Processing of Content and Property Metadata
7.6.2. Using the Preview Metadata Service
7.7. Storing Preferences
7.8. Customizing Central Toolbars
7.8.1. Adding buttons to the Favorites Toolbar
7.8.2. Providing default Search Folders
7.8.3. Adding a Button with a Custom Action
7.8.4. Adding a Button to the Apps Menu
7.8.5. Adding Disapprove Buttons
7.9. Managed Actions
7.10. Adding Shortcuts
7.11. Inheritance of Property Values
7.12. Customizing the Library Window
7.12.1. Defining List View Columns in Repository Mode
7.12.2. Defining Additional Data Fields for List Views
7.12.3. Defining List View Columns in Search Mode
7.12.4. Configuring the Thumbnail View
7.12.5. Adding Search Filters
7.12.6. Make Columns Sortable in Search and Repository View
7.13. Studio Frontend Development
7.13.1. Blueprint Studio Theme
7.13.2. Studio Styling with Skins
7.13.3. Styling of Custom Studio Components
7.13.4. Icons / CoreMedia IconFont
7.13.5. Usage of BEM and Spacing Plugins
7.13.6. Component States
7.14. Work Area Tabs
7.14.1. Configuring a Work Area Tab
7.14.2. Configure an Action to Open a Work Area Tab
7.14.3. Configure a Singleton Work Area Tab
7.14.4. Storing the State of a Work Area Tab
7.14.5. Customizing the Start-up Behavior
7.14.6. Customizing the Work Area Tab Context Menu
7.15. Re-Using Studio Tabs For Better Performance
7.15.1. Concept
7.15.2. Prerequisites
7.15.3. Usage
7.16. Dashboard
7.16.1. Concepts
7.16.2. Defining the Dashboard
7.16.3. Predefined Widget Types
7.16.4. Adding Custom Widget Types
7.17. Configuring MIME Types
7.18. Server-Side Content Processing
7.18.1. Validators
7.18.2. Intercepting Write Requests
7.18.3. Immediate Validation
7.18.4. Post-processing Write Requests
7.19. Available Locales
7.20. Notifications
7.20.1. Configure Notifications
7.20.2. Adding Custom Notifications
7.20.3. Creating Notifications (Server Side)
7.20.4. Displaying Notifications (Client Side)
7.21. Annotated LinkLists
7.21.1. Studio Configuration
7.21.2. Data Migration
7.22. Image LinkLists
7.22.1. Thumbnail Resolvers
7.22.2. Custom Thumbnail Resolvers
7.23. Customizing Workflow UI
7.23.1. General Customizations
7.23.2. Translation-Specific Customizations
7.23.3. Publication-Specific Customizations
7.23.4. Synchronization-Specific Customizations
7.24. Content Hub
7.24.1. Basic Setup
7.24.2. Adapter Configuration
7.24.3. Content Hub Content Creation
7.24.4. Content Hub Object Preview
7.24.5. Content Hub Error Handling
7.24.6. Studio Customization
7.25. Feedback Hub
7.25.1. Basic Setup
7.25.2. Adapter Configuration
7.25.3. Localization
7.25.4. Error handling
7.25.5. FeedbackItem Rendering
7.25.6. Predefined FeedbackItems
7.25.7. Custom Adapters for Feedback Hub
7.25.8. Editorial Comments for Feedback Hub
7.25.9. Keywords Integration for Feedback Hub
7.26. User Manager
7.27. User Properties
7.28. Adding Entity Controllers
7.28.1. Prerequisites
7.28.2. Implementing the Java Backend
7.28.3. Implementing Studio Remote Beans
7.28.4. Using the EntityController
7.28.5. REST Linking (Java Backend)
7.28.6. REST Linking (Studio RemoteBeans)
7.29. Multiple Previews Configuration
7.29.1. Configuration of a preview
7.29.2. CAE Preview Provider
7.29.3. Headless Preview Provider
7.29.4. Commerce Headless Preview Provider
7.29.5. Studio URI-Template Preview Provider
7.29.6. Common URI-Template Preview Provider
7.29.7. Generic Preview URL Service Provider
7.29.8. Public API of the Preview URL Service
8. Security
8.1. Preview Integration
8.2. Content Security Policy
8.3. Single Sign On Integration
8.4. Auto Logout
8.5. Logging
9. Configuration Reference

List of Figures

2.1. Architecture of CoreMedia Studio
2.2. Runtime components
4.1. File structure of a simple Studio plugin
4.2. Added string property with the title of the content
5.1. Ext JSON
5.2. MXML compared to Ext JSON
6.1. Custom App Overlay Workspace
6.2. Studio project within the Project workspace in IntelliJ Idea
6.3. Open Chrome Developer Tools settings
6.4. Enable Source Maps in Chrome Developer Tools settings
6.5. Google Chrome Console
6.6. The Browser Console Log Button
6.7. Example of a content dump
6.8. Inspect an Ext JS component selected in the DOM
6.9. Studio main view component tree
6.10. Record Ext JS component events
6.11. Google Chrome's Developer Tools Support Comparing Heap Snapshots
7.1. Plugin structure
7.2. Document form with a collapsible property field group
7.3. Hide Service Dialog
7.4. Apps Button
7.5. Theming Inheritance in ExtJS and CoreMedia
7.6. Premular Reusability (For A Reusability Limit Of 2 For Articles)
7.7. Dashboard UML overview
7.8. Annotated LinkList with item with changed default value
7.9. Image LinkList
7.10. Default Rendering of FeedbackItems used for the CoreMedia Labs project "Imagga"
7.11. Tabbed Rendering of FeedbackItems used for the CoreMedia Labs project "Searchmetrics"
7.12. Example of a ScoreBarFeedbackItem
7.13. Example of a RatingBarFeedbackItem
7.14. Example of a PercentageBarFeedbackItem
7.15. Example of a GaugeFeedbackItem
7.16. Example of a KeywordFeedbackItem with service "Imagga".
7.17. Example of a ComparingScoreBarFeedbackItem
7.18. Example of a bold LabelFeedbackItem
7.19. Example of a ExternalLinkFeedbackItem used inside a "Siteimprove" integration
7.20. Example of a ErrorFeedbackItem inside an integration of "Siteimprove"
7.21. Settings Document with two configured previews
7.22. Example configuration of the Generic URI-Template Preview Provider
7.23. Studio with multiple Previews

List of Examples

3.1. Running Liquibase via cmd tool
3.2. Release lock via docker-container
4.1. pom.xml of the example plugin
4.2. Example Studio plugin
5.1. Ext JSON
5.2. Plugin usage in Ext JSON
5.3. Component instantiation using Ext JSON
5.4. Component instantiation using typed wrapper
5.5. Component instantiation using typed setters
5.6. Updating multiple bean properties
5.7. Model bean factory method
5.8. Model bean access
5.9. Adding a listener and initializing
5.10. Creating a property path expression
5.11. The valueExpression MXML element
5.12. Creating a function value expression
5.13. Creating a value expression from a private function
5.14. Creating a value expression from a static function
5.15. Manual dependency tracking
5.16. The BindPropertyPlugin MXML element
5.17. Comprehensive example of a FunctionValueExpression
5.18. Property paths into struct
5.19. Adding struct properties
6.1. Detecting public API violations
6.2. ckdebug, non-verbose
6.3. ckdebug, verbose
7.1. Adding a plugin rule to customize the actions toolbar
7.2. Adding a separator and a button with a custom action to a toolbar
7.3. Adding a plugin rule to customize all LinkList property field toolbars
7.4. Using <ui:NestedRulesPlugin> to customize a subcomponent using its container's API
7.5. Using <ui:NestedRulesPlugin> to customize a subcomponent
7.6. Registering a plugin
7.7. Loading external resources
7.8. Add Resource Bundle
7.9. Adding a search button
7.10. Example property file
7.11. Overriding properties
7.12. Localizing document types
7.13. Article form
7.14. Collapsible Property Field Group
7.15. Configuring the Image Editor
7.16. Configuring an image variant
7.17. Configuring an Image Map Editor
7.18. Configuring a validator for image maps
7.19. Defining document types without preview
7.20. Defining excluded document types
7.21. Defining excluded document types in MXML
7.22. Defining a content initializer
7.23. Custom property field
7.24. Using a base class method
7.25. Inline images in richtext
7.26. Adding table cell merge and split commands
7.27. Configuring the rich text symbol mapping
7.28. Customizing the rich text editor toolbar
7.29. Adding a custom icon to the rich text editor toolbar
7.30. Adding InternalLinkButton to the toolbar in TeaserOverlayPropertyField
7.31. Adding two more buttons to the toolbar
7.32. Adding resource path to pom.xml
7.33. Customizing the CKEditor
7.34. Customizing the CKEditor configuration
7.35. Adding resource path of skin to pom.xml
7.38. CMArticleForm.mxml
7.39. DetailsDocumentForm.mxml
7.40. Adding a search for documents to be published
7.41. Adding a custom search folder
7.42. Creating a custom action
7.43. Creating a custom action base class
7.44. Using a custom action
7.45. Adding disapprove action using enableDisapprovePlugin
7.46. Configuring Property Inheritance
7.47. Defining list view fields
7.48. Configuring the thumbnail view
7.49. Two additional attributes for sorting.
7.50. Optional sortDirection Attribute to enable only one sort direction.
7.51. defaultSortColumn Attribute to configure one column as the default for sorting.
7.52. Overriding theme variables
7.53. Overriding global CoreMedia variables
7.54. Simple Skin Example
7.55. Switching off skins
7.56. ActionScript Skin Constants
7.57. Applying a Skin to a Component
7.58. Usage of
7.59. Usage of CoreMedia Icons in SCSS
7.60. Get Resources in SCSS Code
7.61. Use Image as IconClass
7.62. BEM Example HTML Code
7.63. BEM Example SCSS Code
7.64. Usage of the BEM Plugin
7.65. BEM Plugin with Untyped Element
7.66. Usage of the BEM Mixin
7.67. VerticalSpacing Plugin Example
7.68. Set Validation State
7.69. Adding a button to open a tab
7.70. Adding a button to open a browser tab
7.71. Base class for browser tab
7.72. Dashboard Configuration
7.73. Fixed Search widget Configuration
7.74. Simple Search Widget Configuration
7.75. Simple Search Widget Type
7.76. Simple Search Widget Component
7.77. Simple Search widget Type with Editor Component
7.78. Simple Search Widget Editor Component
7.79. widget State Class for Simple Search widget
7.80. Override *.exe MIME Type Detection
7.81. Implementing a property validator
7.82. Configuring a property validator
7.83. Implementing a content validator
7.84. Configuring a content validator
7.85. Configuring validator messages
7.86. Defining a Write Interceptor
7.87. Configuring a Write Interceptor
7.88. Configuring Immediate Validation
7.89. Example thumbnail resolver configuration
7.90. Add a new workflow with the name StudioThreeStepPublication to publicationProcessNames
7.91. Enable notifications for new StudioThreeStepPublication workflow
7.92. Workflow definition of a new StudioThreeStepPublication workflow
7.93. Workflow validation configuration for the StudioThreeStepPublication workflow
7.94. Usage of the AddPublicationWorkflowPlugin for the StudioThreeStepPublication workflow
7.95. Usage of AddMergeStrategyPlugin
7.96. Implementing a ContentHubTransformer (1)
7.97. Implementing a ContentHubTransformer (2)
7.98. Defining a Custom ColumnModelProvider
7.99. Note model
7.100. Representation class for note model
7.101. Service for note handling
7.102. Entity Controller class for TEST operations
7.103. Annotation for bean creation
7.104. REST GET method of NoteEntityController
7.105. Deletion of note in NoteEntityController
7.106. Update of note in NoteEntityController
7.107. Declare NoteEntityController as bean
7.108. Interface of Note remote bean
7.109. Implementing class of Note remote bean
7.110. Remote Bean URI path
7.111. Register class as remote bean
7.112. Result of Note
7.113. Invoke class from ActionScript
7.114. Output from remote bean
7.115. Remote bean used inside a component
7.116. Java class for notes list
7.117. Notes list representation
7.118. NotesEntityController for notes list
7.119. Put mapping for notes list
7.120. Adding a Spring bean to Spring configuration
7.121. Interface for remote bean for notes list
7.122. Implementing class for remote bean for notes list
7.123. Register remote bean with Studio
7.124. Test result of remote bean
7.125. Invoke notes in ActionScript
7.126. Display child elements of notes list
7.127. Output of notes list
7.128. Reverse order of notes list
7.129. Request header of PUT request
8.1. Import base context
8.2. Spring Security context
8.3. Logout filter
8.4. User finder
8.5. Enable user finder
8.6. Example Output
8.7. Marker Hierarchy
8.8. Configure Access Log
8.9. Configure Security Log
8.10. Configure Default Log
8.11. Configure Logger
8.12. Suppress Security Logging

Search Results

Table Of Contents

Your Internet Explorer is no longer supported.

Please use Mozilla Firefox, Google Chrome, or Microsoft Edge.