CMS

Content Management System

The content management system (from now on CMS) in Axon.ivy is a hierarchically organized container for content like labels, short texts, images, source snippets or documents. You can store elements in the CMS and refer them later in processes or User Dialogs. And you can store content in multiple languages thus enabling you to internationalize your processes or applications.

Note

CMS content can be overridden in Axon.ivy. You can use this feature to customize the products you develop with Axon.ivy. See the chapter Overrides for more details.

CMS Structure

A Content object is identified by its path which is expressed as an URI of the form /Labels/Common/CustomerName. The first / represents the root of the CMS whereas the rest forms a recursive tree of so called Content Objects. Each Content Object can contain other Content Objects thus forming the recursive structure of the CMS. Each Content Object has one or multiple Content Object value(s). A Content Object Value is always bound to a specific locale. A locale is a combination of a language identifier and a region identifier. For example the locale en_US represents the language English for the US region. So, you can define values for different languages but as well for different regions which use the same language (see how this is used for the resolution of CMS content at run-time).

In Axon.ivy, each project has its own CMS. Content Objects are looked up by means of the Content Object URI mentioned above. If the lookup for a Content Object fails in the current project, then Axon.ivy will recursively lookup the URI in the CMS's of the required projects (breadth-first).

Tip

Put common content that you use in multiple projects into a base project and make your other projects dependent on the base project. Then you can share and re-use all Content Objects from the base project.

Content Object Types

There are various types of content that can be stored in a CMS. Every Content Object does have a specific content type. Content Object Values inherit that type from their Content Object. The types are used to access the content in the correct way (e.g. to set the MIME type in HTTP requests) but as well to provide specific editors for the manipulation of the values.

SymbolType NamePurposeEdited with ...
FolderFor structural purposes only, folders are container for other Content Objects. 
StringShort texts (single line), e.g. labels, names, descriptions, tool tips.String Editor
TextLonger and/or formatted texts with multiple lines or even multiple paragraphs.Text Editor
ImageAn image of arbitrary size. GIF Image, PNG Image, JPG Image types are supported.Image Editor
SourceScripts of any form, e.g. javascript or jsp snippets.Source Editor
PageContainer object for HTML Page content. This is used in Web Page process elements.HTML Page Editor
CSSCascaded Style Sheet definitions CSS Editor
LayoutJSP HTML layout with included Content Objects. Typically created and used as part of a Page object.Layout Editor
PanelPanels are the content parts for Page objects and are defined with Layout objects.HTML Panel Editor
JSPAlternative to the Page object. Uses pure JSP for layouting. JSP Editor
TableAllows to place content and Content Objects into a HTML table.HTML Table Editor.
LinkGenerates a HTML link or form.HTML Link Editor
Result TableGenerates dynamic tabular HTML content from process data.Result Table Editor
Smart TableGenerates dynamic tabular HTML content from process data gathered from a data base, Supports paging.Smart Table Editor
DocumentAny document (the most common document formats are supported such as PDF, DOC, XLS, MP3 ...)Document Editor

Table 5.1. Content Object Types


CMS Access

In Axon.ivy

CMS content can be used in the most locations where Axon.ivy displays text for example in User Dialogs, Web Pages or in processes. Use Content Objects to set the text of your labels, the images for your icons or the content of your HTML pages. There are two ways how to use content from the CMS:

  • In most Axon.ivy Editors you have a Smart Button (see here too) for the CMS. The smart button will create the correct code to access the CMS in the current editor.

  • In IvyScript you can use the ivy.cms environment variable and hereby the Public API class IContentManagmentSystem. The class offers the method co that returns content itself and the method cr which returns a link to the content. In Java the same environment variable is available with ch.ivyteam.ivy.environment.Ivy.cms().

Depending on the context Axon.ivy will return the content (link) in the correct form. For example, if you use an image Content Object in the Icon-Uri field of the widget configuration of a RLabel then Axon.ivy will display the image in the Rich Dialog. On the other hand if you use a document Content Object in the HTML panel editor, then it will be rendered as a link to the document in the HTML page.

Access with a Browser

Some content objects can be accessed directly from the browser with the URL pattern http://<servername>:<port>/ivy/cm/<application name>/<process model>/<path in CMS>. Assumed you have created a page in a CMS with the path /StaticContent/MyPage in a project named Test. Type the URL http://localhost:8081/ivy/cm/designer/Test/StaticContent/MyPage in your browser and the page will be rendered in there.

Note

The engine of the Axon.ivy Designer must be started to render the Content Objects.

Note

Technically it is possible to display any page with this mechanism. But most pages display information from a process and therefore access the data of that process. With this mechanism you access the content outside of the process scope. Therefore you do not have a data class in access so that it might lead to an error.

Content resolution

If content from the CMS is requested, it is addressed using the URI of the Content Object. But the real content (the text, the string, ...) is stored in a Content Object Value. How does Axon.ivy resolve the Content Object Value whose content is returned?

First, Axon.ivy tries to find the requested Content Object. It looks up in the current project first. If not found Axon.ivy will recursively look up in the CMS's of the required projects in a breadth-first manner (i.e. first it searches in all of the directly required projects, then in all of the required projects of the directly required projects and so on).

Second, as soon as Axon.ivy has found the Content Object, it evaluates which is the correct value to return. First, the lookup locale is defined. The algorithm to resolve the lookup locale is like this:

  1. If the content locale was set on the session, then take this locale. See the Public API method ISession.setContentLocale(java.util.Locale).

  2. If the request comes from the Designer and the user defined a specific content locale, then use this locale.

  3. If the (root) request was initiated from a browser, then use the browser locale. Please look up the help of your browser to see how you can edit this setting.

  4. If the (root) request was initiated from a Rich Client, the locale of the client operating system is used.

  5. Otherwise use the default locale of the operating system.

When Axon.ivy knows the lookup locale, then it tries to resolve the correct value. The algorithm for that is like this:

  1. If there is a value with the same locale like the lookup locale, then return this value

  2. If there is a value with the same language in the locale like the language of the lookup locale, then return this value.

  3. If there is a default value, then return this value.

  4. Otherwise return the first value.

CMS Manipulation

CMS View

This view is the central UI element for the interaction with the CMS. It shows the CMS of all open projects in the workspace including all Content Objects and their values and offers multiple ways to perform actions on the CMS and the Content Objects.

Accessibility

Window -> Show View -> CMS

Features

Display Content Object values

The central element in the view is a table tree that shows the structure of the CMS in the first column (the tree column). Furthermore the table can display one column for every language that is available for at least one project in the workspace. In those columns the value of the corresponding Content Object in the corresponding language is shown.

If you want to focus on the CMS structure then you can hide all the language columns so that only the first column is displayed. Just click on in the toolbar of the view to toggle between hiding and displaying the columns for the languages.

If you want to see the column for the values then you can configure for which languages the table shows a column. By default the view shows a column for the default language(s) of the project(s) in the workspace. Click on the menu () in the view to configure which columns are visible.

Note

The * in the title of a language column indicates that the language is the default CMS language for a project. Because you can have multiple projects in your workspace, it may be that you have multiple default languages and therefore multiple columns with a *. You can define the default languages for every project in its CMS preferences.

Inline Editing

For some types you can edit the Content Object values directly. For (some) text based types you can edit the text directly in the view, just click in the cell of the value and type.

For file based types you can import a file for each value directly in the cell. Just move your mouse over the cell of the value for which you want to import a file and click on the icon on the right. Values for which already content is available show a ... in their cell.

By using the CMS search you can filter the contents in the view according to your search string. Enter a filter expression and the CMS table tree will be reduced to only show the Content Object matching that expression. If there is no match, all Content Objects are shown.

Use an asterisk (*) as wildcard to search for any sequence of characters: E.g. the filter expression ivy*data would match ivyMyFancyData, ivydata, ivy something else data, etc.

Use a question mark (?) as wildcard to search for any single character: E.g. the filter expression image?data would match imageZdata, image0data, etc.

Tip

An asterisk (*) is always added implicitly at the end of your filter expression. So if you enter the string ivy, the filter expression that is really used is ivy*.

Add new Content Objects

You have basically two options to create new Content Objects, either you do it kind of generic or you can create them from file(s). As a convenience method you can create folders in a more direct and simpler way than other Content Objects as a folder does not have value(s). You can execute all three actions only in the popup menu of the view.

Use Add... in the popup menu to create new Content Objects and enter the type, the name, the value and whether you want to create values for all languages in the CMS.

The default for the type is String. The Document types are not available for manual choosing, use Add from file(s)... if you want to create such Content Objects.

In the name column you can use either a simple name or as well an absolute or relative path. If you do so, then Axon.ivy will check the corresponding path and create folder Content Objects where necessary.

For text based types you can edit the text directly in the value column. For file based types you can import a file, just move your mouse over the cell and click on the icon.

In the last column you can decide whether you want to create automatically one value for every CMS language or not. The default comes from the corresponding project property and overwrites that if changed.

If you choose to create the Content Objects from file (the Add from file(s)... command in the popup menu, then first a file chooser dialog is opened. In there select the files that you want to have in the CMS and click OK. Then Axon.ivy will create a Content Object for each file. The type is detected automatically (if it cannot be detected then that file will be omitted), the name is set to the file name and the default value is the file content. After the file chooser, Axon.ivy opens the normal Add Content Object dialog so that you can revise the decisions before the Content Objects gets actually created.

You can add Content Objects too from the web. Just copy the URL and click on the Add from URL... command in the popup menu. In the next dialog, just enter the URl and continue to import the Content Object from the web.

Other actions

In the view you can invoke several actions from the popup menu:

Rename

Opens a dialog where you can enter a new name for the currently selected Content Object.

Warning

When you rename a Content Object, the URI of all it's children will change (e.g. from /Labels/Common/Ok to /Labels/Buttons/Ok). Any references to those objects (including the renamed object) will not be updated automatically and might be broken!

Copy

Copies the currently selected Content Object (including all of it's children) to the clipboard. The copied Content Objects can be inserted somewhere else in the content tree with Paste.

Paste

Inserts any Content Object(s) that was copied before to the clipboard with Copy. The copied Content Objects are inserted as children of the selected Content Object .

Note

Not all Content Object types are allowed as children of other Content Object types. In such a case the Paste menu entry might be disabled.

Delete

Deletes the currently selected Content Object (including all of its children) from the CMS after requesting a confirmation from the user.

Warning

Deleting a Content Object will break all references to the object or its children!

Copy URI

Copies the URI of the currently selected Content Object to the system clipboard. Use CTRL + v to insert the URI into any text fields or editors.

Copy URI as IvyScript macro

Copies the URI of the currently selected Content Object as an IvyScript macro tag to the system clipboard. Use CTRL + v to insert the macro into a IvyScript Macro text editor.

Refresh Content

Refreshes (i.e. reloads) the content below the currently selected Content Object.

Drag and Drop

Content Objects (e.g. strings and images) from the CMS view can be dragged and dropped into

to be used for label texts or for images.

Content Object Editor

The Content Editor is used to manipulate Content Objects in the Content Management System (CMS) of a project.

Accessibility

Double click on a Content Object in the CMS view or select one and press the ENTER key.

Content Object header

The editor has a header with a title and buttons for the most important actions.

In addition to the Content Object type and the path in the title you can find more information about the Content Object in the tool tip of the title. There you see the date, time and the author of the last change. And the following actions are available on the right end of the header:

Open page preview

Opens a preview of the Content Object in a web browser. This action is only available within a Page Content Object. If the Web Browser View is active it is used otherwise an external browser is opened to show the preview.

Add new Content Object value

Adds a new value to this Content Object. A dialog is opened for the user to select the language of the new value.

Rename Content Object

Opens a dialog where a new name for the this Content Object can be entered.

Warning

When you rename a Content Object, the URI of all it's children will change (e.g. from /Labels/Common/Ok to /Labels/Buttons/Ok). Any references to those objects (including the renamed object) will not be updated automatically and might be broken!

Copy Content Object

Copies this Content Object (including all of it's children) to the clipboard. The copied objects can be inserted somewhere else in the content tree with Paste.

Delete Content Object

Deletes this Content Object from the CMS. A Content Object is deleted with all of its values and child Content Objects.

Warning

Deleting a Content Object will break all existing references to it or to any of its children!

Content Object Values area

Each of the values of a Content Object is shown with its corresponding value editor inside a collapsible section that is labelled with the language of the value. The default value is marked with a * (star) after the language name. The date, time and author of the last change is also shown for each value in the tool tip of the title of the value. Like in the header for the Content Object you find some actions on the right side:

Import value content

Opens a file dialog that allows to select a file with content to be imported.

Note

Not all content types allow to import content (e.g. strings do not). If the import is not supported, then the toolbar action will be disabled.

The file selection dialog will only show files that are suitable for import, depending on the standard extension for the required content type. i.e. you cannot select a .css file for import into a png Image Content Object.

Export value content

Some content types allow to export the content of the value into a file. If the export is not supported, then the toolbar action will be disabled.

Copy Content Object value

Copies this Content Object value to the clipboard. The copied objects can be inserted somewhere else in the content tree with Paste.

Delete Content Object value

Deletes this Content Object value from the CMS.

Content Object Value Editors

The Content Object Values area of the CMS editor contains specific editors for values of the different Content Object Types. This section briefly introduces them.

String Editor

The string editor is simply a single-line text field; it does not accept line breaks. Content cannot be imported.

Text Editor

The text editor has two views: an Edit and a Source view. The Edit view is a WYSIWYG HTML text editor in which you can edit and format your text and the text appears like it will be at run-time. The Source view is a text only editor where you can edit the text directly in HTML. Both views are synchronized, if you edit text in the Edit view then the text in the Source View gets updated and vice versa. Content cannot be imported.

Image Editor

The image editor shows images of the types GIF, PNG and JPG. Content import is supported. For images that are larger than the available space just the top left corner is displayed.

Tip

Change the file browser's view to show thumbnails of your images. This helps you to select the correct image. Depending on your operating system (version), the way to turn this on varies.

Document Editor

Preview

The document editor is used for almost all document content objects (basically for binary data). The editor can show a preview of textual content and will also show information about the size and encoding of the displayed content. For binary document types (e.g. PDF, audio or video) a preview is not available.

Import from File

Importing of content is supported. The import will try to infer the encoding of the imported document. If this is not possible, the user is asked to set the encoding.

Source Editor

The source editor is used to edit any kind of source text like JSP, HTML or JavaScript.

By clicking on the button, the attribute browser opens where the user can insert process data. An optional condition may be specified as well as a suitable format for the type of the selected attribute (if available).

CSS Editor

The CSS editor is a simple text editor. You can import the content from a file.

HTML Table Editor

The HTML Table Editor is explained in the HTML chapter.

The HTML Link Editor is explained in the HTML chapter.

Result Table Editor

The Result Table Editor is explained in the HTML chapter.

HTML Page Editor

The HTML Page Editor is explained in the HTML chapter

HTML Panel Editor

The HTML Panel Editor is explained in the HTML chapter.

Smart Table Content Editor

The Smart Table Content Editor is explained in the HTML chapter.

JSP Editor

The JSP Editor is explained in the HTML chapter.

Layout Editor

The Layout Editor is explained in the HTML chapter.

CMS Translation

The CMS is usually used for internationalization or regionalization of content. Often the necessary translations are not done by the Ivy developers but by dedicated persons within the organization or even by external persons e.g. professional translators. To simplify the exchange of the CSM content you can export the CMS into a Excel file and import it again after the translation. As long as you can import Excel files you can use your favorite translation tool for the actual translations.

Export from CMS

Click Export... from the Axon.ivy project tree view or from the File menu. Then choose CMS from the category Axon.ivy.

Choose which CMS you want to export and where in the file system it should be stored. After you started the export, you can open the exported file directly from the confirmation dialog.

The exported file contains one column for the name, one for the URI and one for each language of the CMS. Only String and Text types are exported.

Import into CMS

Click Import... from the Axon.ivy project tree view or from the File menu. Then choose CMS from the category Axon.ivy.

Choose in which project you want to import and where in the file system the import file comes from. After the import you will see a dialog that shows you the stats of the import like how many Content Objects were updated.

In the import file, the URI column is used as ID. If a Content Object with the same URI is found, then the content in the language columns in the Excel file is put in the corresponding value of the Content Object.

Note

The import can only update already existing objects or values but not create anything new. So, if you add a column for a new language or you add a new row in the Excel file with a new URI, then the CMS import will omit this data.