<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://download.osbee.org/documentation/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cmollik</id>
		<title>OS.bee documentation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://download.osbee.org/documentation/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cmollik"/>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php/Special:Contributions/Cmollik"/>
		<updated>2026-04-10T23:32:09Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Strategy_DSL&amp;diff=2262</id>
		<title>Strategy DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Strategy_DSL&amp;diff=2262"/>
				<updated>2017-09-04T17:41:27Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: Created page with &amp;quot;==Introduction==  ===ECView===  ECView is an osgi framework that allows you to automatically render form-based user interfaces based on an EMF (Eclipse Modeling Framework)-bas...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
===ECView===&lt;br /&gt;
&lt;br /&gt;
ECView is an osgi framework that allows you to automatically render form-based user interfaces based on an EMF (Eclipse Modeling Framework)-based UI model. Business data in the form of JPA (Java Persistence Appication Programming Interface) Entities or DTOs (Data Transfer Objects) can be automatically linked to the UI elements. ECView has been designed with extremely careful attention to modularity, extensibility and independence from the Concrete UI technology. It consists of an API (Appication Programming Interface) layer, an EMF model layer, a controller layer and a presenter layer. Exclusively the presenter layer has dependencies to the used UI framework, such as Vaadin. The use of other frameworks requires only the integration of other presenters. The integration of ECView into the system gives us the possibility to provide business forms &amp;quot;out of the box&amp;quot; without code generation or without manual writing of UI code and connect to a database. &lt;br /&gt;
&lt;br /&gt;
===1.2	Vaadin Layout Components===&lt;br /&gt;
&lt;br /&gt;
Vaadin dialog provieds a few Layout Components, we will use some of them in our DSL:&lt;br /&gt;
&lt;br /&gt;
* FormLayout lays the components and their captions out in two columns, with optional indicators for required fields and errors that can be shown for each field. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL01.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* GridLayout container lays components out on a grid consisting of rows and columns. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL02.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* VerticalLayout is ordered layouts for laying components out vertically.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL03.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
*  HorizontalLayout is ordered layouts for laying components out horizontally.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL04.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* CSSLayout allows strong control over styling of the components contained inside the layout.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL05.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==StrategyDSL==&lt;br /&gt;
&lt;br /&gt;
The StrategyDSL works for Os.bee models; it defines the display strategies of dialog model. &lt;br /&gt;
&lt;br /&gt;
It defines not only the layout strategy, but also the focusing strategy.&lt;br /&gt;
&lt;br /&gt;
User can select the predefined Strategy for the dialog view:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL06.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the StrategyDSL are:&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
* “strategy” - define the strategy rules for dialog. &lt;br /&gt;
* “targets” - define the strategy details, including layouting strategy, focusing strategy and focusing enhancer.&lt;br /&gt;
* “default” - define the default strategy including layouting and focusing.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt; &lt;br /&gt;
[{  &lt;br /&gt;
strategy { &lt;br /&gt;
targets [{ &lt;br /&gt;
layoutingStrategy . . .&lt;br /&gt;
. . . &lt;br /&gt;
focusingStrategy . . .&lt;br /&gt;
. . .&lt;br /&gt;
focusingEnhancer . . .&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&lt;br /&gt;
default { &lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.strategies { &lt;br /&gt;
	strategy {&lt;br /&gt;
		targets {&lt;br /&gt;
			layoutingStrategy Form2Columns layout= Form2&lt;br /&gt;
			layoutingStrategy Form3Colums layout= Form3&lt;br /&gt;
			layoutingStrategy ^Horizontal layout= Horizontal&lt;br /&gt;
			layoutingStrategy ^Vertical layout= Vertical&lt;br /&gt;
			layoutingStrategy ^Grid layout= Grid&lt;br /&gt;
			layoutingStrategy ^Css layout= Css&lt;br /&gt;
			focusingStrategy GenAltEnter &lt;br /&gt;
ecviewFocusingId= cxAltEnterForward &lt;br /&gt;
focus= Forward &lt;br /&gt;
keyStrokeDefinition {&lt;br /&gt;
					keyCode= ENTER modifierKeys {&lt;br /&gt;
						ALT&lt;br /&gt;
					}&lt;br /&gt;
				} &lt;br /&gt;
			focusingStrategy GenEnter &lt;br /&gt;
ecviewFocusingId= cxEnterForward &lt;br /&gt;
focus= Forward &lt;br /&gt;
keyStrokeDefinition {&lt;br /&gt;
					keyCode= ENTER&lt;br /&gt;
				}&lt;br /&gt;
			focusingStrategy GenTab &lt;br /&gt;
ecviewFocusingId= cxEnTabForward &lt;br /&gt;
focus= Forward &lt;br /&gt;
keyStrokeDefinition {&lt;br /&gt;
					keyCode= TAB&lt;br /&gt;
				}	&lt;br /&gt;
			focusingEnhancer GenEnterTab {&lt;br /&gt;
				GenEnter GenTab&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		default {&lt;br /&gt;
			defaultLayouting= Form2Columns defaultFocusing= GenEnterTab&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====targets====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;targets&amp;lt;/code&amp;gt; is used to define the target strategy and enhancer. There are 3 types of target to be defined, they are '''layoutingStrategy, focusingStrategy''' and '''focusingEnhancer'''. One or more '''layoutingStrategy, focusingStrategy''' and '''focusingEnhancer''' can be defined in the same targets.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
targets [{ &lt;br /&gt;
layoutingStrategy &amp;lt;layoutingStrategy name&amp;gt; &lt;br /&gt;
layout=LayoutingType&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
focusingStrategy &amp;lt;focusingStrategy name&amp;gt; ecviewFocusingId= &amp;lt;ecviewFocusingId&amp;gt; focus=FocusingType &lt;br /&gt;
[keyStrokeDefinition { &lt;br /&gt;
keyCode= &amp;lt;keyCode ID&amp;gt; &lt;br /&gt;
[modifierKeys { &amp;lt;modifierKeys ID&amp;gt;. . .}] &lt;br /&gt;
}]&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
focusingEnhancer &amp;lt;enhancer name&amp;gt; { &lt;br /&gt;
&amp;lt;focusingStrategy name&amp;gt;&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====layoutingStrategy=====&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;code&amp;gt;layoutingStrategy&amp;lt;/code&amp;gt;, strategy name and layout type must be defined. &lt;br /&gt;
* One or more &amp;lt;code&amp;gt;layoutingStrategy&amp;lt;/code&amp;gt; can be defined in the same targets.&lt;br /&gt;
* &amp;lt;code&amp;gt;LayoutingType can be &amp;lt;code&amp;gt;Horizontal, Vertical, Grid, Form2, Form3 or Css&amp;lt;/code&amp;gt;. They are all predefined layouting type.&lt;br /&gt;
* 2 java files will be generated for each layouting strategy in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/:&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;strategy name&amp;gt;+LayoutingStrategy.java&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;strategy name&amp;gt;+LayoutingStrategy+Provider.java&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
targets {&lt;br /&gt;
   		layoutingStrategy GenForm2 layout=Form2&lt;br /&gt;
   		layoutingStrategy GenForm3 layout=Form3&lt;br /&gt;
   		layoutingStrategy GenHorizontal layout=Horizontal&lt;br /&gt;
   		layoutingStrategy GenVertical layout=Vertical&lt;br /&gt;
   		layoutingStrategy GenGrid layout=Grid&lt;br /&gt;
   		layoutingStrategy GenCss layout=Css&lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 6 '''layoutingStrategy''' are defined in '''targets'''. From the following picture, you could see the place where the defined strategies can be selected. &lt;br /&gt;
&lt;br /&gt;
If you select '''layoutingStrategy''' “GenForm3”, then the dialog will have 3 columns:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL07.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL08.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====focusingStartegy=====&lt;br /&gt;
&lt;br /&gt;
For '''focusingStrategy''', strategy name, ecview focusing id and focus type must be defined. &lt;br /&gt;
* One or more '''focusingStrategy''' can be defined in the same '''targets'''.&lt;br /&gt;
* FocusingType can be '''Forward''' or '''Backward'''. They are all predefined focusing type.&lt;br /&gt;
* Keyword '''keyStrokeDefinition''' is optional. One '''keyCode''' should be defined here. '''modifierKeys'''  is optional. One or more modifier keys id could be defined in the same '''modifierKeys''' part.&lt;br /&gt;
* 2 java files will be generated for each focusing strategy in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/:&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;strategy name&amp;gt; + &amp;lt;focusing type&amp;gt; + FocusingStrategy.java&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;strategy name&amp;gt; + &amp;lt;focusing type&amp;gt;+ FocusingStrategy + Provider.java&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
targets {&lt;br /&gt;
		. . .&lt;br /&gt;
		focusingStrategy GenAltEnter &lt;br /&gt;
ecviewFocusingId= cxAltEnterForward &lt;br /&gt;
focus= Forward &lt;br /&gt;
keyStrokeDefinition {&lt;br /&gt;
				keyCode= ENTER modifierKeys {&lt;br /&gt;
					ALT&lt;br /&gt;
				}&lt;br /&gt;
			} 	&lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, a '''focusingStrategy''' '''''GenAltEnter''''' is defined in '''targets'''. &lt;br /&gt;
The ecviewFocusingId must be defined for the ECView. The following code will be generated in &lt;br /&gt;
GenAltEnterForwardFocusingStrategyProvider.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Component(immediate = true, service = IFocusingStrategyProvider.class, property = &amp;quot;ecview.focusing.id=cxAltEnterForward&amp;quot;)&lt;br /&gt;
@SuppressWarnings(&amp;quot;all&amp;quot;)&lt;br /&gt;
public class GenAltEnterForwardFocusingStrategyProvider implements IFocusingStrategyProvider {&lt;br /&gt;
  private final static String ID = &amp;quot;cxAltEnterForward&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  @Override&lt;br /&gt;
  public IFocusingStrategy getStrategy() {&lt;br /&gt;
    return new GenAltEnterForwardFocusingStrategy();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the '''keyStrokeDefinition''' part, '''keyCode''' is defined as ENTER and the '''modifierKeys''' is ALT.&lt;br /&gt;
&lt;br /&gt;
The following code will be generated in GenAltEnterForwardFocusingStrategy.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public KeyStrokeDefinition getKeyStrokeDefinition() {&lt;br /&gt;
    int[] modifierKeys = new int[1];&lt;br /&gt;
    modifierKeys[0] = ModifierKey.ALT;&lt;br /&gt;
    KeyStrokeDefinition def = new KeyStrokeDefinition(&amp;quot;&amp;quot;, KeyCode.ENTER, modifierKeys);&lt;br /&gt;
    return def;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====focusingEnhancer=====&lt;br /&gt;
&lt;br /&gt;
For '''focusingEnhancer''', enhancer name must be defined. &lt;br /&gt;
* One or more and predefined focusing strategy name should be listed. &lt;br /&gt;
* Only 1 java file will be generated in folder ./src-gen/&amp;lt;package name&amp;gt;/, its name is &amp;lt;enhancer name&amp;gt;+FocusingEnhancer.java. &lt;br /&gt;
&lt;br /&gt;
Following code will be generated in &amp;lt;enhancer name&amp;gt;+FocusingEnhancer.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Component(property=&amp;quot;ecview.focusing.enhancer.id=&amp;lt;enhancerName&amp;gt;FocusingEnhancer&amp;quot;)&lt;br /&gt;
@SuppressWarnings(&amp;quot;all&amp;quot;)&lt;br /&gt;
public class &amp;lt;enhancer name&amp;gt;FocusingEnhancer implements IFocusingEnhancer {&lt;br /&gt;
  @Override&lt;br /&gt;
  public void enhanceFocusing(final YStrategyLayout yLayout) {&lt;br /&gt;
    yLayout.getFocusingStrategies().clear();&lt;br /&gt;
//from here is one loop for every listed focusingStrategy  &lt;br /&gt;
    YDelegatingFocusingStrategy yStgy&amp;lt;number from 1 to n&amp;gt; = YECviewFactory.eINSTANCE.createYDelegatingFocusingStrategy();&lt;br /&gt;
    yStgy&amp;lt;number from 1 to n&amp;gt;.setDelegateStrategyId(&amp;quot;&amp;lt;ecviewFocusingId of focusingStrategy&amp;gt;&amp;quot;);&lt;br /&gt;
    yLayout.getFocusingStrategies().add(yStgy&amp;lt;number from 1 to n&amp;gt;);&lt;br /&gt;
//loop end&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
targets {&lt;br /&gt;
		. . .&lt;br /&gt;
		focusingEnhancer GenEnterTab {&lt;br /&gt;
			GenEnter GenTab&lt;br /&gt;
		}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====default====&lt;br /&gt;
&lt;br /&gt;
Keyword default is used to define the default strategy. &lt;br /&gt;
* There are 2 types of default strategy to be defined, they are '''defaultLayouting''' and '''defaultFocusing'''. You must to define one and only one '''defaultLayouting''' and '''defaultFocusing''' for your strategy.&lt;br /&gt;
* For the default part, 3 .java files will be generated, they are DefaultFocusingEnhancer.java, DefaultLayoutingStrategy,java and  DefaultLayoutingStrategyProvider.java. All the .java files are generated in folder ./src-gen/&amp;lt;package name&amp;gt;/. &lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
default {&lt;br /&gt;
&lt;br /&gt;
defaultLayouting=&amp;lt;layoutingStrategy name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
defaultFocusing=&amp;lt;focusingStrategy name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
default {&lt;br /&gt;
		defaultLayouting=GenForm2 defaultFocusing=GenEnterTab&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the examples, '''focusingStrategy''' '''''GenEnterTab''''' is defined to be used as '''defaultFocusing''' in Dialog; '''layoutingStrategy''' '''''GenForm2''''' is defined to be used as '''''defaultLayouting''''' in Dialog. Standard strategy is the ''defaultLayouting'' “GenForm2”, which have 2 columns:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL09.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StrategyDSL10.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL10.png&amp;diff=2261</id>
		<title>File:StrategyDSL10.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL10.png&amp;diff=2261"/>
				<updated>2017-09-04T17:38:52Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL09.png&amp;diff=2260</id>
		<title>File:StrategyDSL09.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL09.png&amp;diff=2260"/>
				<updated>2017-09-04T17:38:46Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL08.png&amp;diff=2259</id>
		<title>File:StrategyDSL08.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL08.png&amp;diff=2259"/>
				<updated>2017-09-04T17:38:39Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL07.png&amp;diff=2258</id>
		<title>File:StrategyDSL07.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL07.png&amp;diff=2258"/>
				<updated>2017-09-04T17:38:33Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL06.png&amp;diff=2257</id>
		<title>File:StrategyDSL06.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL06.png&amp;diff=2257"/>
				<updated>2017-09-04T17:38:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL05.png&amp;diff=2256</id>
		<title>File:StrategyDSL05.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL05.png&amp;diff=2256"/>
				<updated>2017-09-04T17:38:18Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL04.png&amp;diff=2255</id>
		<title>File:StrategyDSL04.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL04.png&amp;diff=2255"/>
				<updated>2017-09-04T17:38:11Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL03.png&amp;diff=2254</id>
		<title>File:StrategyDSL03.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL03.png&amp;diff=2254"/>
				<updated>2017-09-04T17:38:05Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL02.png&amp;diff=2253</id>
		<title>File:StrategyDSL02.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL02.png&amp;diff=2253"/>
				<updated>2017-09-04T17:37:58Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StrategyDSL01.png&amp;diff=2252</id>
		<title>File:StrategyDSL01.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StrategyDSL01.png&amp;diff=2252"/>
				<updated>2017-09-04T17:34:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2251</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2251"/>
				<updated>2017-09-04T17:33:33Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Menu DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Datainterchange DSL]]==&lt;br /&gt;
The [[Datainterchange DSL]] provides import and export functionalities. While all the basic components and interfaces for its usage are defined inside its API package, extended (commercial) features are implemented and based on the [https://www.smooks.org/ Smooks] framework.&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime.&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions.&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model.&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.&lt;br /&gt;
&lt;br /&gt;
==[[Strategy DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee-Specific DSL Instances=&lt;br /&gt;
The ''OS.bee Software Factory'' provides a few specific DSL instances for different requirements.  These are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==Datatypes==&lt;br /&gt;
Several custom datatypes are described in detail in this chapter.&lt;br /&gt;
===[[BlobMapping]]===&lt;br /&gt;
This datatype allows the use of big data as a blob.&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2015</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2015"/>
				<updated>2017-07-26T21:19:35Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Menu DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime.&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions.&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model.&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee-Specific DSL Instances=&lt;br /&gt;
The ''OS.bee Software Factory'' provides a few specific DSL instances for different requirements.  These are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==Datatypes==&lt;br /&gt;
Several custom datatypes are described in detail in this chapter.&lt;br /&gt;
===[[BlobMapping]]===&lt;br /&gt;
This datatype allows the use of big data as a blob.&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2014</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2014"/>
				<updated>2017-07-26T21:19:07Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Perspective DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime.&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions.&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model.&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee-Specific DSL Instances=&lt;br /&gt;
The ''OS.bee Software Factory'' provides a few specific DSL instances for different requirements.  These are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==Datatypes==&lt;br /&gt;
Several custom datatypes are described in detail in this chapter.&lt;br /&gt;
===[[BlobMapping]]===&lt;br /&gt;
This datatype allows the use of big data as a blob.&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2013</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2013"/>
				<updated>2017-07-26T21:18:42Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Organization DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime.&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions.&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee-Specific DSL Instances=&lt;br /&gt;
The ''OS.bee Software Factory'' provides a few specific DSL instances for different requirements.  These are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==Datatypes==&lt;br /&gt;
Several custom datatypes are described in detail in this chapter.&lt;br /&gt;
===[[BlobMapping]]===&lt;br /&gt;
This datatype allows the use of big data as a blob.&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2012</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2012"/>
				<updated>2017-07-26T21:18:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Authorization DSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime.&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee-Specific DSL Instances=&lt;br /&gt;
The ''OS.bee Software Factory'' provides a few specific DSL instances for different requirements.  These are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==Datatypes==&lt;br /&gt;
Several custom datatypes are described in detail in this chapter.&lt;br /&gt;
===[[BlobMapping]]===&lt;br /&gt;
This datatype allows the use of big data as a blob.&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Menu_DSL&amp;diff=2011</id>
		<title>Menu DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Menu_DSL&amp;diff=2011"/>
				<updated>2017-07-26T21:17:27Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.  Entries and the corresponding ui pages of the entries could be defined in this model. Predefined process from blipDSL, perspective from [[Perspective DSL]], table from [[Table DSL]] and dialog from [[Dialog DSL]] can be linked to the main '''''entry''''' or its sub '''''entry'''''.&lt;br /&gt;
&lt;br /&gt;
Here is the menu bar in UI: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you click the '''''entry''''' “Company” under main '''''entry''''' “Menu”, the '''''perspective''''' “Company” will be shown on the web site: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By clicking the other main '''''entry''''' “Persons”, the embedded table will be shown directly in menu: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MenuDSL==&lt;br /&gt;
&lt;br /&gt;
The MenuDSL works for Os.bee models, it defines the Menus for dialog.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the MenuDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “entry” - define the menu entry and subentry.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;[{ &lt;br /&gt;
	expandedImage &amp;lt;expandedImage String&amp;gt; &lt;br /&gt;
collapsedImage &amp;lt;collapsedImage String&amp;gt;&lt;br /&gt;
	[accordionSubmenu][width &amp;lt;width String&amp;gt;][designer]&lt;br /&gt;
	&lt;br /&gt;
MenuEntry&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each menu package, 2 .java file named &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt; +Menu+ContextFunction.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.menues {  &lt;br /&gt;
&lt;br /&gt;
	expandedImage &amp;quot;collapse_arrow_16&amp;quot; collapsedImage &amp;quot;expand_arrow_16&amp;quot; &lt;br /&gt;
accordionSubmenu  width &amp;quot;600px&amp;quot; designer&lt;br /&gt;
entry Menu described by &amp;quot;my menu&amp;quot; {. . . }&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* One or more MenuEntry can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''expandedImage''' and '''collapsedImage''' is used to define the menu image when the menu expanded or collapsed. Following code will be generated in &amp;lt;project name&amp;gt;+Menu.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setIcon(final Accordion accordion, final boolean open) {&lt;br /&gt;
    Tab tab = accordion.getTab(selectedMap.get(accordion));&lt;br /&gt;
    if (tab != null) {&lt;br /&gt;
    	if(open) {&lt;br /&gt;
    		tab.setIcon(themeResourceService.getThemeResource(&lt;br /&gt;
&amp;lt;expandedImage String&amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    	} else {&lt;br /&gt;
    		tab.setIcon(themeResourceService.getThemeResource(&lt;br /&gt;
&amp;lt;collapsedImage String&amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    	}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''accordionSubmenu''' is optional; you can use this keyword to define if the submenu is accordion.&lt;br /&gt;
* Keyword '''width''' is optional; you can use this keyword to define the width of this menu, default value is 400px. Following code will be generated in &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
accRoot.setWidth(&amp;lt;width String&amp;gt;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''designer''' is optional; you can use this keyword to define if this menu could be modified. Following code will be generated in &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (designModeHandler != null &amp;amp;&amp;amp; userAccessService.isSuperuser()) {&lt;br /&gt;
	MenuBar menubar = new MenuBar();&lt;br /&gt;
	tabRoot.addComponent(menubar);&lt;br /&gt;
	MenuItem designer = menubar.addItem(designerText, null, null);&lt;br /&gt;
	MenuItem mode = designer.addItem(designmodeText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designModeHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	mode.setCheckable(true);&lt;br /&gt;
	menuItems.put(designerUndoHandler, designer.addItem(undoText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designerUndoHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(designerRedoHandler, designer.addItem(redoText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designerRedoHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	designer.addSeparator();&lt;br /&gt;
	menuItems.put(newPerspectiveHandler, designer.addItem(newText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			newPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(changePerspectiveHandler, designer.addItem(changeText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			changePerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(exportPerspectiveHandler, designer.addItem(exportText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			exportPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(downloadPerspectiveHandler, designer.addItem(downloadText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			downloadPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====menuEntry====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the menu entry details can be defined here. This part could be reused as subentry under the main entry.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entry &amp;lt;entry name&amp;gt; &lt;br /&gt;
	[described by &amp;lt;description String&amp;gt;][image &amp;lt;ImageString&amp;gt;][showBadge]&lt;br /&gt;
	[&lt;br /&gt;
		process [blip::Blip] | &lt;br /&gt;
		perspective [perspective::Perspective] |&lt;br /&gt;
		table [table::Table] | &lt;br /&gt;
		dialog [dialog::Dialog] |&lt;br /&gt;
		userFilter |&lt;br /&gt;
		keyBinding&lt;br /&gt;
	]&lt;br /&gt;
	[{ &lt;br /&gt;
MenuEntry&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
 }]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''described by''' is optional, it define the description of this entry.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''image''' is optional, it define the image string of this entry.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''showBadge''' is optional, it define if the update badge will be shown for this entry. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''process''' is used to define the predefined process from blipDSL which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''perspective''' is used to define the predefined perspective from [[Perspective DSL]] which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''table''' is used to define the predefined table from [[Table DSL]] which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''dialog''' is used to define the predefined dialog from [[Dialog DSL]] which this entry links to.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''userFilter''' are used to define if  the user filter will be shown. Following code will be generated in &amp;lt;project name&amp;gt;+Menu.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (userAccessService.isSuperuser()) {&lt;br /&gt;
    VerticalLayout tab+&amp;lt;entry name&amp;gt; = new VerticalLayout();&lt;br /&gt;
    userFilter.createView(tab+&amp;lt;entry name&amp;gt;);&lt;br /&gt;
    acc&amp;lt;parent name&amp;gt;.addTab(tab+&amp;lt;entry name&amp;gt;, &amp;lt;entry name&amp;gt;, themeResourceService.getThemeResource(&amp;lt;collapsedImage String &amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    tabs.put(acc&amp;lt;parent name&amp;gt;.getTab(tab+&amp;lt;entry name&amp;gt;), new Pair(&amp;lt;entry name&amp;gt;,&amp;lt;entry description&amp;gt;));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''keyBinding''' is used to define if the key binding works for this entry.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entry Sales {&lt;br /&gt;
		entry CashRegister image &amp;quot;cashregister&amp;quot; perspective CashRegister&lt;br /&gt;
	}&lt;br /&gt;
entry ProductMaintenance process ProductMaintenance&lt;br /&gt;
	entry MyTasks table TaskMenu&lt;br /&gt;
	entry Profile dialog UserAccount&lt;br /&gt;
	entry UserFilter userFilter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the examples, '''entry''' '''''Sales''''' has a sub'''entry''' named '''''CashRegister''''' with '''image''' icon and links to a predefined '''perspective''' named '''''CashReegister''''' from [[Perspective DSL]]; '''entry''' '''''ProductMaintenance''''' links to a predefined '''process''' named '''''ProductMaintenance''''' from blipDSL; '''entry''' '''''MyTasks''''' links to a predefined '''table''' named '''''TaskMenu''''' from [[Table DSL]]; '''entry''' '''''Profile''''' links to a predefined '''dialog''' named '''''UserAccount''''' from [[Dialog DSL]]; '''entry''' '''''UserFilter''''' is defined to shown the user filter.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Menu_DSL&amp;diff=2010</id>
		<title>Menu DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Menu_DSL&amp;diff=2010"/>
				<updated>2017-07-26T21:15:53Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* menuEntry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.  Entries and the corresponding ui pages of the entries could be defined in this model. Predefined process from blipDSL, perspective from perspectiveDSL, table from tableDSL and dialog from [[Dialog DSL]] can be linked to the main '''''entry''''' or its sub '''''entry'''''.&lt;br /&gt;
&lt;br /&gt;
Here is the menu bar in UI: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you click the '''''entry''''' “Company” under main '''''entry''''' “Menu”, the '''''perspective''''' “Company” will be shown on the web site: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By clicking the other main '''''entry''''' “Persons”, the embedded table will be shown directly in menu: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MenuDSL==&lt;br /&gt;
&lt;br /&gt;
The MenuDSL works for Os.bee models, it defines the Menus for dialog.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the MenuDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “entry” - define the menu entry and subentry.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;[{ &lt;br /&gt;
	expandedImage &amp;lt;expandedImage String&amp;gt; &lt;br /&gt;
collapsedImage &amp;lt;collapsedImage String&amp;gt;&lt;br /&gt;
	[accordionSubmenu][width &amp;lt;width String&amp;gt;][designer]&lt;br /&gt;
	&lt;br /&gt;
MenuEntry&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each menu package, 2 .java file named &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt; +Menu+ContextFunction.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.menues {  &lt;br /&gt;
&lt;br /&gt;
	expandedImage &amp;quot;collapse_arrow_16&amp;quot; collapsedImage &amp;quot;expand_arrow_16&amp;quot; &lt;br /&gt;
accordionSubmenu  width &amp;quot;600px&amp;quot; designer&lt;br /&gt;
entry Menu described by &amp;quot;my menu&amp;quot; {. . . }&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* One or more MenuEntry can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''expandedImage''' and '''collapsedImage''' is used to define the menu image when the menu expanded or collapsed. Following code will be generated in &amp;lt;project name&amp;gt;+Menu.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setIcon(final Accordion accordion, final boolean open) {&lt;br /&gt;
    Tab tab = accordion.getTab(selectedMap.get(accordion));&lt;br /&gt;
    if (tab != null) {&lt;br /&gt;
    	if(open) {&lt;br /&gt;
    		tab.setIcon(themeResourceService.getThemeResource(&lt;br /&gt;
&amp;lt;expandedImage String&amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    	} else {&lt;br /&gt;
    		tab.setIcon(themeResourceService.getThemeResource(&lt;br /&gt;
&amp;lt;collapsedImage String&amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    	}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''accordionSubmenu''' is optional; you can use this keyword to define if the submenu is accordion.&lt;br /&gt;
* Keyword '''width''' is optional; you can use this keyword to define the width of this menu, default value is 400px. Following code will be generated in &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
accRoot.setWidth(&amp;lt;width String&amp;gt;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''designer''' is optional; you can use this keyword to define if this menu could be modified. Following code will be generated in &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (designModeHandler != null &amp;amp;&amp;amp; userAccessService.isSuperuser()) {&lt;br /&gt;
	MenuBar menubar = new MenuBar();&lt;br /&gt;
	tabRoot.addComponent(menubar);&lt;br /&gt;
	MenuItem designer = menubar.addItem(designerText, null, null);&lt;br /&gt;
	MenuItem mode = designer.addItem(designmodeText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designModeHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	mode.setCheckable(true);&lt;br /&gt;
	menuItems.put(designerUndoHandler, designer.addItem(undoText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designerUndoHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(designerRedoHandler, designer.addItem(redoText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designerRedoHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	designer.addSeparator();&lt;br /&gt;
	menuItems.put(newPerspectiveHandler, designer.addItem(newText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			newPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(changePerspectiveHandler, designer.addItem(changeText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			changePerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(exportPerspectiveHandler, designer.addItem(exportText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			exportPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(downloadPerspectiveHandler, designer.addItem(downloadText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			downloadPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====menuEntry====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the menu entry details can be defined here. This part could be reused as subentry under the main entry.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entry &amp;lt;entry name&amp;gt; &lt;br /&gt;
	[described by &amp;lt;description String&amp;gt;][image &amp;lt;ImageString&amp;gt;][showBadge]&lt;br /&gt;
	[&lt;br /&gt;
		process [blip::Blip] | &lt;br /&gt;
		perspective [perspective::Perspective] |&lt;br /&gt;
		table [table::Table] | &lt;br /&gt;
		dialog [dialog::Dialog] |&lt;br /&gt;
		userFilter |&lt;br /&gt;
		keyBinding&lt;br /&gt;
	]&lt;br /&gt;
	[{ &lt;br /&gt;
MenuEntry&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
 }]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''described by''' is optional, it define the description of this entry.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''image''' is optional, it define the image string of this entry.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''showBadge''' is optional, it define if the update badge will be shown for this entry. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''process''' is used to define the predefined process from blipDSL which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''perspective''' is used to define the predefined perspective from [[Perspective DSL]] which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''table''' is used to define the predefined table from [[Table DSL]] which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''dialog''' is used to define the predefined dialog from [[Dialog DSL]] which this entry links to.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''userFilter''' are used to define if  the user filter will be shown. Following code will be generated in &amp;lt;project name&amp;gt;+Menu.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (userAccessService.isSuperuser()) {&lt;br /&gt;
    VerticalLayout tab+&amp;lt;entry name&amp;gt; = new VerticalLayout();&lt;br /&gt;
    userFilter.createView(tab+&amp;lt;entry name&amp;gt;);&lt;br /&gt;
    acc&amp;lt;parent name&amp;gt;.addTab(tab+&amp;lt;entry name&amp;gt;, &amp;lt;entry name&amp;gt;, themeResourceService.getThemeResource(&amp;lt;collapsedImage String &amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    tabs.put(acc&amp;lt;parent name&amp;gt;.getTab(tab+&amp;lt;entry name&amp;gt;), new Pair(&amp;lt;entry name&amp;gt;,&amp;lt;entry description&amp;gt;));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''keyBinding''' is used to define if the key binding works for this entry.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entry Sales {&lt;br /&gt;
		entry CashRegister image &amp;quot;cashregister&amp;quot; perspective CashRegister&lt;br /&gt;
	}&lt;br /&gt;
entry ProductMaintenance process ProductMaintenance&lt;br /&gt;
	entry MyTasks table TaskMenu&lt;br /&gt;
	entry Profile dialog UserAccount&lt;br /&gt;
	entry UserFilter userFilter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the examples, '''entry''' '''''Sales''''' has a sub'''entry''' named '''''CashRegister''''' with '''image''' icon and links to a predefined '''perspective''' named '''''CashReegister''''' from [[Perspective DSL]]; '''entry''' '''''ProductMaintenance''''' links to a predefined '''process''' named '''''ProductMaintenance''''' from blipDSL; '''entry''' '''''MyTasks''''' links to a predefined '''table''' named '''''TaskMenu''''' from [[Table DSL]]; '''entry''' '''''Profile''''' links to a predefined '''dialog''' named '''''UserAccount''''' from [[Dialog DSL]]; '''entry''' '''''UserFilter''''' is defined to shown the user filter.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Menu_DSL&amp;diff=2009</id>
		<title>Menu DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Menu_DSL&amp;diff=2009"/>
				<updated>2017-07-26T21:14:15Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.  Entries and the corresponding ui pages of the entries could be defined in this model. Predefined process from blipDSL, perspective from perspectiveDSL, table from tableDSL and dialog from [[Dialog DSL]] can be linked to the main '''''entry''''' or its sub '''''entry'''''.&lt;br /&gt;
&lt;br /&gt;
Here is the menu bar in UI: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you click the '''''entry''''' “Company” under main '''''entry''''' “Menu”, the '''''perspective''''' “Company” will be shown on the web site: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By clicking the other main '''''entry''''' “Persons”, the embedded table will be shown directly in menu: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MenuDSL==&lt;br /&gt;
&lt;br /&gt;
The MenuDSL works for Os.bee models, it defines the Menus for dialog.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the MenuDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “entry” - define the menu entry and subentry.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;[{ &lt;br /&gt;
	expandedImage &amp;lt;expandedImage String&amp;gt; &lt;br /&gt;
collapsedImage &amp;lt;collapsedImage String&amp;gt;&lt;br /&gt;
	[accordionSubmenu][width &amp;lt;width String&amp;gt;][designer]&lt;br /&gt;
	&lt;br /&gt;
MenuEntry&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each menu package, 2 .java file named &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt; +Menu+ContextFunction.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.menues {  &lt;br /&gt;
&lt;br /&gt;
	expandedImage &amp;quot;collapse_arrow_16&amp;quot; collapsedImage &amp;quot;expand_arrow_16&amp;quot; &lt;br /&gt;
accordionSubmenu  width &amp;quot;600px&amp;quot; designer&lt;br /&gt;
entry Menu described by &amp;quot;my menu&amp;quot; {. . . }&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* One or more MenuEntry can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''expandedImage''' and '''collapsedImage''' is used to define the menu image when the menu expanded or collapsed. Following code will be generated in &amp;lt;project name&amp;gt;+Menu.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setIcon(final Accordion accordion, final boolean open) {&lt;br /&gt;
    Tab tab = accordion.getTab(selectedMap.get(accordion));&lt;br /&gt;
    if (tab != null) {&lt;br /&gt;
    	if(open) {&lt;br /&gt;
    		tab.setIcon(themeResourceService.getThemeResource(&lt;br /&gt;
&amp;lt;expandedImage String&amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    	} else {&lt;br /&gt;
    		tab.setIcon(themeResourceService.getThemeResource(&lt;br /&gt;
&amp;lt;collapsedImage String&amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    	}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''accordionSubmenu''' is optional; you can use this keyword to define if the submenu is accordion.&lt;br /&gt;
* Keyword '''width''' is optional; you can use this keyword to define the width of this menu, default value is 400px. Following code will be generated in &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
accRoot.setWidth(&amp;lt;width String&amp;gt;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''designer''' is optional; you can use this keyword to define if this menu could be modified. Following code will be generated in &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (designModeHandler != null &amp;amp;&amp;amp; userAccessService.isSuperuser()) {&lt;br /&gt;
	MenuBar menubar = new MenuBar();&lt;br /&gt;
	tabRoot.addComponent(menubar);&lt;br /&gt;
	MenuItem designer = menubar.addItem(designerText, null, null);&lt;br /&gt;
	MenuItem mode = designer.addItem(designmodeText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designModeHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	mode.setCheckable(true);&lt;br /&gt;
	menuItems.put(designerUndoHandler, designer.addItem(undoText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designerUndoHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(designerRedoHandler, designer.addItem(redoText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designerRedoHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	designer.addSeparator();&lt;br /&gt;
	menuItems.put(newPerspectiveHandler, designer.addItem(newText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			newPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(changePerspectiveHandler, designer.addItem(changeText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			changePerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(exportPerspectiveHandler, designer.addItem(exportText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			exportPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(downloadPerspectiveHandler, designer.addItem(downloadText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			downloadPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====menuEntry====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the menu entry details can be defined here. This part could be reused as subentry under the main entry.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entry &amp;lt;entry name&amp;gt; &lt;br /&gt;
	[described by &amp;lt;description String&amp;gt;][image &amp;lt;ImageString&amp;gt;][showBadge]&lt;br /&gt;
	[&lt;br /&gt;
		process [blip::Blip] | &lt;br /&gt;
		perspective [perspective::Perspective] |&lt;br /&gt;
		table [table::Table] | &lt;br /&gt;
		dialog [dialog::Dialog] |&lt;br /&gt;
		userFilter |&lt;br /&gt;
		keyBinding&lt;br /&gt;
	]&lt;br /&gt;
	[{ &lt;br /&gt;
MenuEntry&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
 }]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''described by''' is optional, it define the description of this entry.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''image''' is optional, it define the image string of this entry.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''showBadge''' is optional, it define if the update badge will be shown for this entry. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''process''' is used to define the predefined process from blipDSL which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''perspective''' is used to define the predefined perspective from perspectiveDSL which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''table''' is used to define the predefined table from tableDSL which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''dialog''' is used to define the predefined dialog from dialogDSL which this entry links to.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''userFilter''' are used to define if  the user filter will be shown. Following code will be generated in &amp;lt;project name&amp;gt;+Menu.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (userAccessService.isSuperuser()) {&lt;br /&gt;
    VerticalLayout tab+&amp;lt;entry name&amp;gt; = new VerticalLayout();&lt;br /&gt;
    userFilter.createView(tab+&amp;lt;entry name&amp;gt;);&lt;br /&gt;
    acc&amp;lt;parent name&amp;gt;.addTab(tab+&amp;lt;entry name&amp;gt;, &amp;lt;entry name&amp;gt;, themeResourceService.getThemeResource(&amp;lt;collapsedImage String &amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    tabs.put(acc&amp;lt;parent name&amp;gt;.getTab(tab+&amp;lt;entry name&amp;gt;), new Pair(&amp;lt;entry name&amp;gt;,&amp;lt;entry description&amp;gt;));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''keyBinding''' is used to define if the key binding works for this entry.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entry Sales {&lt;br /&gt;
		entry CashRegister image &amp;quot;cashregister&amp;quot; perspective CashRegister&lt;br /&gt;
	}&lt;br /&gt;
entry ProductMaintenance process ProductMaintenance&lt;br /&gt;
	entry MyTasks table TaskMenu&lt;br /&gt;
	entry Profile dialog UserAccount&lt;br /&gt;
	entry UserFilter userFilter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the examples, '''entry''' '''''Sales''''' has a sub'''entry''' named '''''CashRegister''''' with '''image''' icon and links to a predefined '''perspective''' named '''''CashReegister''''' from perspectiveDSL; '''entry''' '''''ProductMaintenance''''' links to a predefined '''process''' named '''''ProductMaintenance''''' from blipDSL; '''entry''' '''''MyTasks''''' links to a predefined '''table''' named '''''TaskMenu''''' from tableDSL; '''entry''' '''''Profile''''' links to a predefined '''dialog''' named '''''UserAccount''''' from dialogDSL; '''entry''' '''''UserFilter''''' is defined to shown the user filter.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Action_DSL&amp;diff=2008</id>
		<title>Action DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Action_DSL&amp;diff=2008"/>
				<updated>2017-07-26T21:12:20Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Items&amp;amp;item */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
===CRUD for toolbar===&lt;br /&gt;
&lt;br /&gt;
Editing data is nice but data must be persisted otherwise all effort invested in editing data would be lost. For this reason, OS.bee apps come with a set of create, read, update and delete functionality (CRUD) to manipulate data in a database. OS.bee can be operated with different database products.&lt;br /&gt;
&lt;br /&gt;
====Create====&lt;br /&gt;
&lt;br /&gt;
Create or add new entries.&lt;br /&gt;
&lt;br /&gt;
If you want to create new data entry, please press the “new data” action button, after the action has been executed, a new unique id must be created. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Read====&lt;br /&gt;
&lt;br /&gt;
Read, retrieve, search or view existing entries.&lt;br /&gt;
&lt;br /&gt;
Existed data can be read from the database. If you request existed data to be displayed in the UI, you must either retrieved a unique id to the database so it can select the requested data, or you can search and select one.&lt;br /&gt;
&lt;br /&gt;
In Os.bee web site, for example the perspective of “Persons”, you can click one row from the table on the left, then the detail data will be read from database and shown in the dialog on the right. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Update====&lt;br /&gt;
&lt;br /&gt;
Update or edit existing entries.&lt;br /&gt;
&lt;br /&gt;
After editing your data, please press the “save” button and the data will be saved in the underlying database. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Delete====&lt;br /&gt;
&lt;br /&gt;
Delete, deactivate or remove existing entries.&lt;br /&gt;
&lt;br /&gt;
If you don’t need an existing entry, please select it and press the “delete” button, then this data will be remove from the underlying database.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==ActionDSl==&lt;br /&gt;
&lt;br /&gt;
The ActionDSL works for Os.bee models, it defines the toolbar actions for task, select workload, dialog, report, chart, workflow, datainterchange, ect..&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the ActionDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “toolbar” - define the action details, e.g. toolbar name, description and items… &lt;br /&gt;
&lt;br /&gt;
* “items” – define the items for this action. &lt;br /&gt;
&lt;br /&gt;
* “item” -  define the function and action type for the item … &lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package defintion====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;[{&lt;br /&gt;
toolbar &amp;lt;toolbar name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
		[items { . . .}]&lt;br /&gt;
. . .&lt;br /&gt;
} ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each toolbar, one .java file named &amp;lt;code&amp;gt;&amp;lt;toolbar name&amp;gt;+Action.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* One or more '''toolbars''' can be defined in the same '''package'''.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''descrbied by''' is optional; you can use this keyword to define the description of this toolbar&lt;br /&gt;
&lt;br /&gt;
* One or more '''item''' can be defined in the same '''items''' block.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.actions {&lt;br /&gt;
	toolbar StartTask described by &amp;quot;Toolbar for tables showing tasks&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
	toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { . . . }&lt;br /&gt;
	toolbar HandleTask described by &amp;quot;Toolbar for BPM oriented perspectives&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
toolbar Report described by &amp;quot;Toolbar for reports&amp;quot; items { . . . }&lt;br /&gt;
toolbar WorkloadSelect described by &amp;quot;Toolbar for Workload Selects&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 5 '''toolbars''' are defined in the same '''package'''; they are ''StartTask'', ''Dialog'', ''HandleTask'', ''Report'' and ''WorkloadSelect''.&lt;br /&gt;
&lt;br /&gt;
====Items&amp;amp;item====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the action details can be defined here. For each item, a java file named &amp;lt;code&amp;gt;&amp;lt;toolbar name&amp;gt;+&amp;lt;action rule&amp;gt;+Action.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/. &amp;lt;action rule&amp;gt;&amp;lt;/code&amp;gt; is defined in '''ActionType''' and it will be introduced in the next section.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
items { &lt;br /&gt;
item &amp;lt;item name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
		[icon &amp;lt;URI string&amp;gt;]&lt;br /&gt;
		[group &amp;lt;func.FunctionLibraryGroup name&amp;gt;	&lt;br /&gt;
  [canExecute &amp;lt;func.FunctionLibraryFunction name&amp;gt;]&lt;br /&gt;
&amp;amp; [executeParameter &amp;lt;func.FunctionLibraryFunction name&amp;gt;]&lt;br /&gt;
]&lt;br /&gt;
		ActionType&lt;br /&gt;
		[message &amp;lt;msg.MessageItem name |QualifiedName&amp;gt;]&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
. . .&lt;br /&gt;
} ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''icon''' is optional, it define the identifier for a resource, e.g. icon file &lt;br /&gt;
&lt;br /&gt;
* Keyword '''group''',  '''canExecute &amp;amp; executeParameter''' are used to define the predefined function which this item could use from FunctionlibraryDSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar HandleTask described by &amp;quot;Toolbar for BPM oriented perspectives&amp;quot; items {&lt;br /&gt;
   item stop icon &amp;quot;task_action_stop&amp;quot; group PerspectiveToolbar&lt;br /&gt;
     canExecute stopCanExecute executeParameter getTaskId taskAction Stop&lt;br /&gt;
   . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the following code will be generated in the java file of '''item''' '''''stop''''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@CanExecute&lt;br /&gt;
public boolean canExecute() {&lt;br /&gt;
return net.osbee.sample.foodmart.functionlibraries.PerspectiveToolbar&lt;br /&gt;
.stopCanExecute(getContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@Execute&lt;br /&gt;
public void execute(final IEventBroker eventBroker) {&lt;br /&gt;
    log.debug(&amp;quot;action execute called for stop&amp;quot;);&lt;br /&gt;
    String uuid = (String)eclipseContext.get(&amp;quot;HandleTask_TOOLBAR_ID&amp;quot;);&lt;br /&gt;
eventBroker.send(&lt;br /&gt;
EventBrokerMsg.ACTION_BUTTON_EXECUTE_PREFIX+ &amp;quot;HandleTaskAction&amp;quot;+uuid, &lt;br /&gt;
new EventBrokerMsg(-1, &lt;br /&gt;
&amp;quot;Stop&amp;quot;, &lt;br /&gt;
net.osbee.sample.foodmart.functionlibraries&lt;br /&gt;
.PerspectiveToolbar.getTaskId(getContent())&lt;br /&gt;
)&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''message''' is used to define the action message using predefined message from messageDSL. &lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { &lt;br /&gt;
	item newItem icon &amp;quot;dsnew&amp;quot; dialogAction New&lt;br /&gt;
item saveItem icon &amp;quot;dssave&amp;quot; dialogAction Save message  net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.SaveMsg&lt;br /&gt;
item deleteItem icon &amp;quot;dsdelete&amp;quot; dialogAction Delete message net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.DeleteMsg&lt;br /&gt;
	item cancelItem icon &amp;quot;dscancel&amp;quot; dialogAction Cancel&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''message''' '''''SavMsg''''' and '''''DeleteMsg''''' are defined in messageDSL as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.messages{&lt;br /&gt;
	category FoodMartErrors {&lt;br /&gt;
		group DtoService { &lt;br /&gt;
			message DeleteMsg{ &lt;br /&gt;
				parameter{&lt;br /&gt;
					Exception ex&lt;br /&gt;
					String stackTrace&lt;br /&gt;
				}&lt;br /&gt;
				automatic{}&lt;br /&gt;
				format {&lt;br /&gt;
					log &amp;quot;%%ex.simpleName%%: Delete not allowed! – &lt;br /&gt;
%%stackTrace%%&amp;quot;&lt;br /&gt;
					show &amp;quot;%%ex.simpleName%% - %%ex.localizedMessage%% &lt;br /&gt;
- Delete not allowed!&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			message SaveMsg{&lt;br /&gt;
				parameter{&lt;br /&gt;
					Exception ex&lt;br /&gt;
					String stackTrace&lt;br /&gt;
				}&lt;br /&gt;
				automatic{}&lt;br /&gt;
				format {&lt;br /&gt;
					log &amp;quot;%%ex.simpleName%%: Save not allowed! – &lt;br /&gt;
%%stackTrace%%&amp;quot;&lt;br /&gt;
					show &amp;quot;%%ex.simpleName%% - %%ex.localizedMessage%% &lt;br /&gt;
- Delete not allowed!&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''dialog''' '''''Employee''''' uses this '''toolbar''' '''''Dialog''''' in [[Dialog DSL]] as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.dialogs {&lt;br /&gt;
	dialog Employee described by &amp;quot;Employee data&amp;quot; autobinding MemployeeDto toolbar Dialog&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There will be no code generated in the related toolbar java files. But in the EmployeeDialog.java, where this toolbar will be used, the following code generated for the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void showSaveErrorMessage(final Exception ex) {&lt;br /&gt;
    org.eclipse.osbp.xtext.messagedsl.common.Message errorMsg = net.osbee.sample.foodmart.messages.FoodMartErrorsMessage.DtoService_SaveMsg(ex, ex.getMessage());&lt;br /&gt;
    Notification.show(errorMsg.getShowMessage());&lt;br /&gt;
    log.error(errorMsg.getLogMessage());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void showDeleteErrorMessage(final Exception ex) {&lt;br /&gt;
    org.eclipse.osbp.xtext.messagedsl.common.Message errorMsg = net.osbee.sample.foodmart.messages.FoodMartErrorsMessage.DtoService_DeleteMsg(ex, ex.getMessage());&lt;br /&gt;
    Notification.show(errorMsg.getShowMessage());&lt;br /&gt;
    log.error(errorMsg.getLogMessage());&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''''ActionType''''' will be introduced in the next section.&lt;br /&gt;
&lt;br /&gt;
====ActionType====&lt;br /&gt;
&lt;br /&gt;
'''ActionType''' sets the type of action for the item.&lt;br /&gt;
&lt;br /&gt;
There are 8 kinds of action types:&lt;br /&gt;
&lt;br /&gt;
=====taskAction=====&lt;br /&gt;
&lt;br /&gt;
'''''taskAction''''' is used to define the action of task for bpm.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taskAction &amp;lt;taskAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* taskAction rule includes 15 rules, and its &amp;lt;action rule&amp;gt; is the same as the following rule:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Claim, Start, Stop, Release, Suspend, Resume, Skip, Complete, Delegate, Forward, Fail, Register, Remove, Activate, Exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar StartTask described by &amp;quot;Toolbar for tables showing tasks&amp;quot; items {&lt;br /&gt;
	item claim icon &amp;quot;task_action_claim&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute claimCanExecute executeParameter getTaskId taskAction Claim&lt;br /&gt;
	item start icon &amp;quot;task_action_start&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute startCanExecute executeParameter getTaskId taskAction Start&lt;br /&gt;
	item start icon &amp;quot;task_action_resume&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute resumeCanExecute executeParameter getTaskId taskAction Resume&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====selectWorkloadAction=====&lt;br /&gt;
&lt;br /&gt;
'''''selectWorkloadAction''''' is used to define the action of select workload.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
selectWorkloadAction &amp;lt;selectWorkloadAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* selectWorkloadAction rule includes the 2 rules, and its &amp;lt;action rule&amp;gt; is as same as the following rule:&amp;lt;code&amp;gt; RemoveAll, AddAll&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar WorkloadSelect described by &amp;quot;Toolbar for Workload Selects&amp;quot; items {&lt;br /&gt;
item removeAllWorkloadItems icon &amp;quot;task_status_obsolete&amp;quot; selectWorkloadAction  RemoveAll&lt;br /&gt;
item addAllSelectedItemsToTheWorkload icon &amp;quot;import&amp;quot;            selectWorkloadAction AddAll&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====dialogAction=====&lt;br /&gt;
&lt;br /&gt;
'''DialogAction''' is used to define the actions for dialog. &lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dialogAction &amp;lt;dialogAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dialogAction rule includes the 4 rules, and its &amp;lt;action rule&amp;gt; is as same as the following rule: &amp;lt;code&amp;gt;New, Save, Delete, Cancel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { &lt;br /&gt;
	item newItem icon &amp;quot;dsnew&amp;quot; dialogAction New&lt;br /&gt;
item saveItem icon &amp;quot;dssave&amp;quot; dialogAction Save message  net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.SaveMsg&lt;br /&gt;
item deleteItem icon &amp;quot;dsdelete&amp;quot; dialogAction Delete message net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.DeleteMsg&lt;br /&gt;
	item cancelItem icon &amp;quot;dscancel&amp;quot; dialogAction Cancel&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* “new” means create a new entry.&lt;br /&gt;
&lt;br /&gt;
* “save” means save the changing.&lt;br /&gt;
&lt;br /&gt;
* “delete” means delete the selected entry.&lt;br /&gt;
&lt;br /&gt;
* “cancel” means ignore the changing.&lt;br /&gt;
&lt;br /&gt;
Here is the dialog view in perspective, in which the 4 buttons do the actions by clicking them: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=====reportAction=====&lt;br /&gt;
&lt;br /&gt;
'''''ReportAction''''' is used to define the actions for report.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
reportAction &amp;lt;reportAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reportAction rule includes the 2 rules:  PrintOnServer, Download.&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is PrintOnServer and ReportDownload.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Report described by &amp;quot;Toolbar for reports&amp;quot; items {&lt;br /&gt;
	item print icon &amp;quot;print&amp;quot; reportAction Download&lt;br /&gt;
	item print icon &amp;quot;xml&amp;quot; reportAction PrintOnServer&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====chartAction=====&lt;br /&gt;
&lt;br /&gt;
'''''chartAction''''' is used to define the actions for chart.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
chartAction Download&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''ChartDownload'''''.&lt;br /&gt;
&lt;br /&gt;
=====workflowAction=====&lt;br /&gt;
&lt;br /&gt;
'''''workflowAction''''' is used to define the actions for workflow.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
workflowAction Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''start'''''.&lt;br /&gt;
&lt;br /&gt;
=====genericAction=====&lt;br /&gt;
&lt;br /&gt;
'''''genericAction''''' is used to define the actions for yourself. You can define it as you will.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
genericAction &amp;lt;STRING&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''the string'''''.&lt;br /&gt;
&lt;br /&gt;
=====datainterchangeAction=====&lt;br /&gt;
&lt;br /&gt;
'''''datainterchangeAction''''' is used to define the actions for data interchange&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datainterchangeAction &amp;lt;datainterchangeAction rule&amp;gt; &amp;lt;data.DataInterchange name&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* datainterchangeAction type includes the following types, and its &amp;lt;action rule&amp;gt; is as same as the following rule:  '''Import, Export'''.&lt;br /&gt;
&lt;br /&gt;
* The data interchange should be predefined in datainterchangeDSL.&lt;br /&gt;
&lt;br /&gt;
The following code will be generated in the java file of '''item''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Execute&lt;br /&gt;
  public void execute(final IEventBroker eventBroker) {&lt;br /&gt;
    &amp;lt;datainterchange qualified name&amp;gt; &amp;lt;datainerchange name&amp;gt; = new &amp;lt;datainterchange qualified name&amp;gt;();&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setFileURL(&amp;lt;file path URL String&amp;gt;&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setPersistenceService(persistenceService);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setDirection(WorkerThreadRunnable.Direction.IMPORT);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setEventBroker(eventBroker);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setEventDispatcher(eventDispatcher);&lt;br /&gt;
    executorService.execute(&amp;lt;datainerchange name&amp;gt;);&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Perspective_DSL&amp;diff=2007</id>
		<title>Perspective DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Perspective_DSL&amp;diff=2007"/>
				<updated>2017-07-26T21:10:55Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* perspective */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Os.bee Applications which are generated using the OS.bee software factory have by default a front end based on the E4-UI-Model. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:PerspectiveDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can recognize on the above graphics the main elements of theE4-Model are:&lt;br /&gt;
&lt;br /&gt;
* Perspective.  A perspective is a container for a set of UI graphic elements, like sash, part stack, part, area, etc. Perspectives can be used to store different arrangements of UI graphic elements. Each Workbench window contains one or more perspectives. A perspective defines the initial set and layout of views in the Workbench window. Each perspective provides a set of functionality aimed at accomplishing a specific type of task or works with specific types of resources.&lt;br /&gt;
&lt;br /&gt;
* Sash. A sash is a UI graphic elements container, and it displays all its children at the same time either horizontally or vertically aligned. Default is vertically aligned.&lt;br /&gt;
&lt;br /&gt;
* Part. A Part is a container for a view. Parts are user interface components which allow you to navigate and modify data.  &lt;br /&gt;
&lt;br /&gt;
* Part stack. A part stack contains a stack of parts showing the content of one part while displaying only the headers of the other parts.&lt;br /&gt;
&lt;br /&gt;
* View. A view is used to work on a set of data, which might be a hierarchical structure. If data is changed via the view, this change is directly applied to the underlying data structure. A predefined view could be a bpmn(Business Process Model and Notation) view, a chart, a dialog, a grid, an organigram, a report, a select table, a table or a topology in OS.bee.&lt;br /&gt;
&lt;br /&gt;
==Perspective DSL==&lt;br /&gt;
&lt;br /&gt;
The PerspectiveDSL is used to build the ui for Os.bee Application. &lt;br /&gt;
&lt;br /&gt;
You can find instances of these elements in Os.bee Applications as follows: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:PerspectiveDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the PerspectiveDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “perspective” - define the perspective details, e.g. perspective name, the description… &lt;br /&gt;
&lt;br /&gt;
* “sashContainer” - define the main element sash container for the perspective. &lt;br /&gt;
&lt;br /&gt;
* “partStack” -  define the main element part stack for the perspective.&lt;br /&gt;
&lt;br /&gt;
* “part” -  the main element part for the perspective.&lt;br /&gt;
&lt;br /&gt;
* “view” -  define the part view of the perspective, it can be report, dialog, table, chart …&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt; [{&lt;br /&gt;
	perspective &amp;lt;perspective name&amp;gt;  . . .&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One or more than one perspective could be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.perspectives {&lt;br /&gt;
	perspective Employee . . .&lt;br /&gt;
&lt;br /&gt;
	perspective Supplier . . .&lt;br /&gt;
&lt;br /&gt;
	perspective Products . . .&lt;br /&gt;
&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Employee, &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Supplier, &amp;lt;code&amp;gt;perspective&amp;lt;/code&amp;gt; Products and also other perspectives are defined in the same &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====perspective====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the perspective details can be defined here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective &amp;lt;perspective name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
	[process &amp;lt;blip.blip name&amp;gt; usertask &amp;lt;blip.BlipUserTask name&amp;gt;]&lt;br /&gt;
	([iconURI &amp;lt;iconURI&amp;gt;] &lt;br /&gt;
     &amp;amp;&lt;br /&gt;
	 [accessibility &amp;lt;accessibilityPhrase&amp;gt;] &lt;br /&gt;
     &amp;amp;&lt;br /&gt;
	 [toolbar &amp;lt;action.ActionToolbar&amp;gt;])&lt;br /&gt;
	{ &lt;br /&gt;
PerspectiveElement &lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;described by&amp;lt;/code&amp;gt; is optional; you can use this keyword to define the description of this perspective.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;process. . . usertask. . . &amp;lt;/code&amp;gt; is optional, which define the blip process and blip usertask from predefined blipDSL for this perspective.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;iconURI&amp;lt;/code&amp;gt; is optional, it define the identifier for a resource, e.g. icon file.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt; is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;toolbar&amp;lt;/code&amp;gt; is optional, which define the action tool bar from predefined [[Action DSL]]. Graphical control elements are defined, on which on-screen buttons, icons, menus, or other input or output elements are placed.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
perspective ProductMaintenanceSelect process ProductMaintenance usertask SelectSomeProducts toolbar HandleTask iconURI &amp;quot;information&amp;quot; {&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the next sections, the important elements and keywords of perspective will be introduced one by one.&lt;br /&gt;
&lt;br /&gt;
====PerspectiveElement====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;PerspectiveElement&amp;lt;/code&amp;gt; is used to define the main elements of the perspective.&lt;br /&gt;
&lt;br /&gt;
The main elements are sash container, part stack and part.&lt;br /&gt;
&lt;br /&gt;
=====sashContainer=====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;sashContainer&amp;lt;/code&amp;gt; is used to define the main element sash container of perspective. &lt;br /&gt;
&lt;br /&gt;
A sash container displays all its children at the same time either horizontally or vertically aligned.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
sashContainer &amp;lt;PerspectiveSashContainer ID&amp;gt;&lt;br /&gt;
	[orientation horizontal|vertical] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[selectedElement &amp;lt;PerspectiveElement ID&amp;gt;]&lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;]&lt;br /&gt;
	{ &lt;br /&gt;
PerspectiveElement &lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;orientation&amp;lt;/code&amp;gt; is optional, it can be horizontal or vertical, and default value is vertical.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;selectedElement&amp;lt;/code&amp;gt; is optional; you can select one of the next level perspective element here and which is selected will be shown in the first place.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt; is optional, it redefine the space volume of this sash container in screen. A number will be defined to representing the relative size of this container.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt; is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
		sashContainer bottom orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, in the first place, the &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''outer''''' is defined, in this sash container, 2 second level &amp;lt;code&amp;gt;sash containers&amp;lt;/code&amp;gt; are defined as horizontal, they are '''''top''''' and '''''bottom'''''.&lt;br /&gt;
&lt;br /&gt;
=====partStack=====&lt;br /&gt;
&lt;br /&gt;
Keyword &amp;lt;code&amp;gt;partStack&amp;lt;/code&amp;gt; is used to define the main element part stack of perspective.&lt;br /&gt;
&lt;br /&gt;
A part stack contains a stack of parts showing the contents of one part while displaying only the headers of the other parts.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
partStack &amp;lt;PerspectivePartStack ID&amp;gt;&lt;br /&gt;
	[selectedElement &amp;lt;PerspectivePart ID&amp;gt;]&lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;]&lt;br /&gt;
	{&lt;br /&gt;
PerspectiveElement &lt;br /&gt;
. . .&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;selectedElement&amp;lt;/code&amp;gt;  is optional; you can select the next level perspective element here and which is selected will be shown in the first place.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt;  is optional, it redefine the space volume of this part stack in screen. A number will be defined to representing the relative size of this part stack.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt;  is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			. . .&lt;br /&gt;
		}&lt;br /&gt;
		sashContainer bottom orientation horizontal {&lt;br /&gt;
			partStack EmployeeStack spaceVolume &amp;quot;70&amp;quot; {&lt;br /&gt;
				. . .&lt;br /&gt;
			}&lt;br /&gt;
			partStack Payroll spaceVolume &amp;quot;30&amp;quot; {&lt;br /&gt;
				. . .&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 2 &amp;lt;code&amp;gt;part stacks&amp;lt;/code&amp;gt; are defined under &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''bottom''''', they are '''''EmployeeStack''''' and '''''Payroll'''''. The sizes of them are redefined here, '''''EmployeeStack''''' takes 70% of the screen width and '''''payroll''''' takes the rest 30%. &lt;br /&gt;
&lt;br /&gt;
=====part=====&lt;br /&gt;
&lt;br /&gt;
Keyword part is used to define the main element part of perspective.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
part &amp;lt;PerspectivePart ID&amp;gt;&lt;br /&gt;
	[described by &amp;lt;description String&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[spaceVolume &amp;lt;containerData STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[accessibility &amp;lt;accessibilityPhrase STRING&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[iconURI &amp;lt;iconURI string&amp;gt;] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[view  select &amp;lt;table.Table&amp;gt; | table &amp;lt;table.Table&amp;gt;&lt;br /&gt;
| chart &amp;lt;chart.Chart&amp;gt; | report &amp;lt;report.Report&amp;gt;&lt;br /&gt;
| organigram &amp;lt;organization.Organization&amp;gt;&lt;br /&gt;
| topology &amp;lt;topology.Topology&amp;gt;&lt;br /&gt;
| dialog &amp;lt;dialog.Dialog&amp;gt; | bpmn | grid &amp;lt;table.Table&amp;gt;&lt;br /&gt;
 ] &lt;br /&gt;
    &amp;amp;&lt;br /&gt;
	[isClosable]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;described by&amp;lt;/code&amp;gt;  is optional; you can use this keyword to define the description of this part.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;spaceVolume&amp;lt;/code&amp;gt;  is optional, it redefine the space volume of this part in screen. A number will be defined to representing the relative size of this part.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;accessibility&amp;lt;/code&amp;gt;  is optional, it can be any string; this field is provided as a way to inform accessibility screen readers with extra information. The intent is that the reader should 'say' this phrase as well as what it would normally emit given the widget hierarchy. A screen reader is an essential piece of software for a blind or visually impaired person. Simply put, a screen reader transmits whatever text is displayed on the computer screen into a form that a visually impaired user can process (usually tactile, auditory or a combination of both). While the most basic screen readers will not help blind users navigate a computer, those with additional features can give people with visual impairment much more independence.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;iconURI&amp;lt;/code&amp;gt;  is optional, it define the identifier for a resource, e.g. icon file&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;view&amp;lt;/code&amp;gt;  is optional, it defines the predefined view of this part, it can be report, dialog, table, chart, organigram, topology, bpmn.&lt;br /&gt;
* Keyword &amp;lt;code&amp;gt;isClosable&amp;lt;/code&amp;gt;  is optional; it will allow the user to close this part when this keyword is selected.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
perspective Employee described by &amp;quot;Employee maintenance&amp;quot; iconURI &amp;quot;employee&amp;quot; {&lt;br /&gt;
	sashContainer outer orientation vertical {&lt;br /&gt;
		sashContainer top orientation horizontal {&lt;br /&gt;
			part Orga spaceVolume &amp;quot;40&amp;quot; view organigram FoodMart&lt;br /&gt;
			part Employees spaceVolume &amp;quot;20&amp;quot; view table Employees&lt;br /&gt;
			part EmployeeDialog spaceVolume &amp;quot;40&amp;quot; view dialog Employee&lt;br /&gt;
		}&lt;br /&gt;
		. . .&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 3 &amp;lt;code&amp;gt;parts&amp;lt;/code&amp;gt; are defined under &amp;lt;code&amp;gt;sash container&amp;lt;/code&amp;gt; '''''top''''', they are '''''Orga''''', '''''Employees''''' and '''''EmployeeDialog'''''. The sizes of them are redefined here, '''''Orga''''' and '''''EmployeeDialog''''' take each 40% of the screen width and '''''Employees''''' takes the remaining 20%.  The view of '''''Orga''''' is the predefined &amp;lt;code&amp;gt;organigram&amp;lt;/code&amp;gt; '''''FoodMart'''''; the view of '''''Employees''''' is the predefined &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; '''''Employee'''''; and the view of '''''EmployeeDialog''''' is the predefined &amp;lt;code&amp;gt;dialog&amp;lt;/code&amp;gt; '''''Employee'''''.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Organization_DSL&amp;diff=2006</id>
		<title>Organization DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Organization_DSL&amp;diff=2006"/>
				<updated>2017-07-26T21:09:05Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* position= */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions. The roles which are defined in [[Authorization DSL]] could be assigned to the positions here.&lt;br /&gt;
&lt;br /&gt;
==OrganizationDSL==&lt;br /&gt;
&lt;br /&gt;
The OrganizationDSL is working at runtime. It used to define the organizations, their positions and assign the roles to them. There will be no exported file generated after editing the model. Each user should have its own position, and the roles defined in [[Authorization DSL]] could be assigned to the positions. The authorization of user will be done according to the authorization rules of roles at runtime.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the OrganizationDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “organization” - define organization and its positions in the fact, e.g. president, VP, manager. . .&lt;br /&gt;
&lt;br /&gt;
* “superiorPos” - define which position is the superior position of the current position. &lt;br /&gt;
&lt;br /&gt;
* “position” -  define the position details, including superior position and role. &lt;br /&gt;
&lt;br /&gt;
* “role” - assign the roles which are defined in [[Authorization DSL]] to the positions.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;  {&lt;br /&gt;
    organization &amp;lt;organization name&amp;gt; . . . [{...}]&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The package definition of OrganizationDSL is just like most of the DSL models, you just need to define the package name and in eclipse like other java project press ctrl+shift+o, all necessary models or java classes will be imported automatically. After that, you can define the organizations and positions. One or more organizations can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package org.eclipse.osbp.foodmart.authorizations {&lt;br /&gt;
	import org.eclipse.osbp.foodmart.authorizations.* &lt;br /&gt;
	. . .&lt;br /&gt;
	organization FoodMart . . . {. . .}&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====organization====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. Either position or sub-organization could be defined in the main organization.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization &amp;lt;mainOrganization name 1&amp;gt;  Title &amp;lt;organization title 1&amp;gt; [{&lt;br /&gt;
position &amp;lt;mainPosition name&amp;gt; {. . .}&lt;br /&gt;
[position &amp;lt;position name&amp;gt; superiorPos &amp;lt;superiorPosition name 1&amp;gt; {. . .}]&lt;br /&gt;
	. . .&lt;br /&gt;
[organization &amp;lt;organization name 2&amp;gt;  Title &amp;lt;organization title 2&amp;gt;   &lt;br /&gt;
  superiorPos &amp;lt;superiorPosition name 2&amp;gt; [{ . . . }]]&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization FoodMart Title &amp;quot;Organization&amp;quot; {&lt;br /&gt;
position President {. . .}&lt;br /&gt;
	position VP_Country_Manager superiorPos President {. . .}&lt;br /&gt;
. . .&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos  VP_Country_Manager {. . .}&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, main &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''FoodMart''''' with &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; “Organization” is defined. Many positions and organizations can be defined in this main organization. The main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; of this organization is '''''President'''''; another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''VP_Country_Manager''''' uses this main position as its superior position. A sub organization '''''Store_Manager_Org''''' with &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; “Stores” is also defined in this main organization, which uses '''''VP_Country_Manager''''' as its superior position.&lt;br /&gt;
&lt;br /&gt;
=====position======&lt;br /&gt;
&lt;br /&gt;
You can define the position and its role here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
position &amp;lt;position name&amp;gt; [superiorPos &amp;lt;position name&amp;gt;] {&lt;br /&gt;
		[role &amp;lt;role name&amp;gt;]&lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If the position is not a main position of an organization, its superior position must be defined.&lt;br /&gt;
&lt;br /&gt;
* Superior position must be defined before it is used.&lt;br /&gt;
&lt;br /&gt;
* One position can be defined without role, and also can be defined with one or more roles. &lt;br /&gt;
&lt;br /&gt;
* All roles must be defined in [[Authorization DSL]].&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos VP_Country_Manager  {&lt;br /&gt;
position Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	position Store_Shift_Supervisor superiorPos Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
position Store_Temporary_Checker superiorPos Store_Shift_Supervisor {&lt;br /&gt;
}&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager''''' is the main position of the sub &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''', so it is defined without a superior position; its superior position is defined by the definition of &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''', which means, &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''VP_Country_Manager''''' is the superior position of &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager'''''.  Another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Shift_Supervisor''''' is also defined in this organization, and &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager''''' is its superior position. &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''Sales''''' is assigned to both of the position. The third &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Temporary_Checker''''' is under &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Shift_Supervisor''''', it is defined without a role.&lt;br /&gt;
&lt;br /&gt;
=====organization . . . superiorPos  . . .=====&lt;br /&gt;
&lt;br /&gt;
The sub organization could be defined in this part.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization &amp;lt;organization name 1&amp;gt;  Title &amp;lt;organization title 1&amp;gt;   &lt;br /&gt;
superiorPos &amp;lt;superiorPosition name 1&amp;gt; [{ &lt;br /&gt;
	position &amp;lt;mainPosition name&amp;gt; {. . .}&lt;br /&gt;
	position &amp;lt;position name&amp;gt; superiorPos &amp;lt;superiorPosition name 2&amp;gt; {. . .}&lt;br /&gt;
	. . .&lt;br /&gt;
[organization &amp;lt;organization name 2&amp;gt;  Title &amp;lt;organization title 2&amp;gt;   &lt;br /&gt;
  superiorPos &amp;lt;superiorPosition name 3&amp;gt; [{ . . . }]]&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sub organization must be defined with a superior position.&lt;br /&gt;
&lt;br /&gt;
* Otherwise, the syntax of sub organization is totally as same as main organization.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos VP_Country_Manager  {&lt;br /&gt;
position Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	position Store_Assistant_Manager superiorPos Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
	}&lt;br /&gt;
. . .&lt;br /&gt;
organization Store_Temporary_Stocker_Org Title &amp;quot;Stocker&amp;quot;  superiorPos Store_Assistant_Manager { &lt;br /&gt;
		position Store_Temporary_Stocker {&lt;br /&gt;
			role Sales&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
		position Store_Permanent_Butcher&lt;br /&gt;
		superiorPos Store_Temporary_Stocker {&lt;br /&gt;
			role Sales&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We use the same example, sub &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''':  &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Assistant_Manager''''' is defined under main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager'''''. A new &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Temporary_Stocker_Org''''' is defined under &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Assistant_Manager'''''; it has 2 &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt;:  main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Temporary_Stocker''''', which default has the same superior &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; as this organization, in this case, it is '''''Store_Assistant_Manager'''''; another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Permanent_Butcher''''' and its superior &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Temporary_Stocker'''''; &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''Sales''''' is assigned to both of the position.&lt;br /&gt;
&lt;br /&gt;
The whole organigram can be shown in os.bee applications like the following picture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:OrganizationDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Organization_DSL&amp;diff=2005</id>
		<title>Organization DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Organization_DSL&amp;diff=2005"/>
				<updated>2017-07-26T21:08:30Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* OrganizationDSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions. The roles which are defined in [[Authorization DSL]] could be assigned to the positions here.&lt;br /&gt;
&lt;br /&gt;
==OrganizationDSL==&lt;br /&gt;
&lt;br /&gt;
The OrganizationDSL is working at runtime. It used to define the organizations, their positions and assign the roles to them. There will be no exported file generated after editing the model. Each user should have its own position, and the roles defined in [[Authorization DSL]] could be assigned to the positions. The authorization of user will be done according to the authorization rules of roles at runtime.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the OrganizationDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “organization” - define organization and its positions in the fact, e.g. president, VP, manager. . .&lt;br /&gt;
&lt;br /&gt;
* “superiorPos” - define which position is the superior position of the current position. &lt;br /&gt;
&lt;br /&gt;
* “position” -  define the position details, including superior position and role. &lt;br /&gt;
&lt;br /&gt;
* “role” - assign the roles which are defined in [[Authorization DSL]] to the positions.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;  {&lt;br /&gt;
    organization &amp;lt;organization name&amp;gt; . . . [{...}]&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The package definition of OrganizationDSL is just like most of the DSL models, you just need to define the package name and in eclipse like other java project press ctrl+shift+o, all necessary models or java classes will be imported automatically. After that, you can define the organizations and positions. One or more organizations can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package org.eclipse.osbp.foodmart.authorizations {&lt;br /&gt;
	import org.eclipse.osbp.foodmart.authorizations.* &lt;br /&gt;
	. . .&lt;br /&gt;
	organization FoodMart . . . {. . .}&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====organization====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. Either position or sub-organization could be defined in the main organization.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization &amp;lt;mainOrganization name 1&amp;gt;  Title &amp;lt;organization title 1&amp;gt; [{&lt;br /&gt;
position &amp;lt;mainPosition name&amp;gt; {. . .}&lt;br /&gt;
[position &amp;lt;position name&amp;gt; superiorPos &amp;lt;superiorPosition name 1&amp;gt; {. . .}]&lt;br /&gt;
	. . .&lt;br /&gt;
[organization &amp;lt;organization name 2&amp;gt;  Title &amp;lt;organization title 2&amp;gt;   &lt;br /&gt;
  superiorPos &amp;lt;superiorPosition name 2&amp;gt; [{ . . . }]]&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization FoodMart Title &amp;quot;Organization&amp;quot; {&lt;br /&gt;
position President {. . .}&lt;br /&gt;
	position VP_Country_Manager superiorPos President {. . .}&lt;br /&gt;
. . .&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos  VP_Country_Manager {. . .}&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, main &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''FoodMart''''' with &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; “Organization” is defined. Many positions and organizations can be defined in this main organization. The main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; of this organization is '''''President'''''; another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''VP_Country_Manager''''' uses this main position as its superior position. A sub organization '''''Store_Manager_Org''''' with &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; “Stores” is also defined in this main organization, which uses '''''VP_Country_Manager''''' as its superior position.&lt;br /&gt;
&lt;br /&gt;
=====position======&lt;br /&gt;
&lt;br /&gt;
You can define the position and its role here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
position &amp;lt;position name&amp;gt; [superiorPos &amp;lt;position name&amp;gt;] {&lt;br /&gt;
		[role &amp;lt;role name&amp;gt;]&lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If the position is not a main position of an organization, its superior position must be defined.&lt;br /&gt;
&lt;br /&gt;
* Superior position must be defined before it is used.&lt;br /&gt;
&lt;br /&gt;
* One position can be defined without role, and also can be defined with one or more roles. &lt;br /&gt;
&lt;br /&gt;
* All roles must be defined in AuthorizationDSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos VP_Country_Manager  {&lt;br /&gt;
position Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	position Store_Shift_Supervisor superiorPos Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
position Store_Temporary_Checker superiorPos Store_Shift_Supervisor {&lt;br /&gt;
}&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager''''' is the main position of the sub &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''', so it is defined without a superior position; its superior position is defined by the definition of &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''', which means, &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''VP_Country_Manager''''' is the superior position of &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager'''''.  Another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Shift_Supervisor''''' is also defined in this organization, and &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager''''' is its superior position. &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''Sales''''' is assigned to both of the position. The third &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Temporary_Checker''''' is under &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Shift_Supervisor''''', it is defined without a role.&lt;br /&gt;
&lt;br /&gt;
=====organization . . . superiorPos  . . .=====&lt;br /&gt;
&lt;br /&gt;
The sub organization could be defined in this part.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization &amp;lt;organization name 1&amp;gt;  Title &amp;lt;organization title 1&amp;gt;   &lt;br /&gt;
superiorPos &amp;lt;superiorPosition name 1&amp;gt; [{ &lt;br /&gt;
	position &amp;lt;mainPosition name&amp;gt; {. . .}&lt;br /&gt;
	position &amp;lt;position name&amp;gt; superiorPos &amp;lt;superiorPosition name 2&amp;gt; {. . .}&lt;br /&gt;
	. . .&lt;br /&gt;
[organization &amp;lt;organization name 2&amp;gt;  Title &amp;lt;organization title 2&amp;gt;   &lt;br /&gt;
  superiorPos &amp;lt;superiorPosition name 3&amp;gt; [{ . . . }]]&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sub organization must be defined with a superior position.&lt;br /&gt;
&lt;br /&gt;
* Otherwise, the syntax of sub organization is totally as same as main organization.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos VP_Country_Manager  {&lt;br /&gt;
position Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	position Store_Assistant_Manager superiorPos Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
	}&lt;br /&gt;
. . .&lt;br /&gt;
organization Store_Temporary_Stocker_Org Title &amp;quot;Stocker&amp;quot;  superiorPos Store_Assistant_Manager { &lt;br /&gt;
		position Store_Temporary_Stocker {&lt;br /&gt;
			role Sales&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
		position Store_Permanent_Butcher&lt;br /&gt;
		superiorPos Store_Temporary_Stocker {&lt;br /&gt;
			role Sales&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We use the same example, sub &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''':  &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Assistant_Manager''''' is defined under main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager'''''. A new &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Temporary_Stocker_Org''''' is defined under &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Assistant_Manager'''''; it has 2 &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt;:  main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Temporary_Stocker''''', which default has the same superior &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; as this organization, in this case, it is '''''Store_Assistant_Manager'''''; another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Permanent_Butcher''''' and its superior &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Temporary_Stocker'''''; &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''Sales''''' is assigned to both of the position.&lt;br /&gt;
&lt;br /&gt;
The whole organigram can be shown in os.bee applications like the following picture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:OrganizationDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Organization_DSL&amp;diff=2004</id>
		<title>Organization DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Organization_DSL&amp;diff=2004"/>
				<updated>2017-07-26T21:08:01Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
OrganizationDSL is used to define the organizations and their positions. The roles which are defined in [[Authorization DSL]] could be assigned to the positions here.&lt;br /&gt;
&lt;br /&gt;
==OrganizationDSL==&lt;br /&gt;
&lt;br /&gt;
The OrganizationDSL is working at runtime. It used to define the organizations, their positions and assign the roles to them. There will be no exported file generated after editing the model. Each user should have its own position, and the roles defined in AuthorizationDSL could be assigned to the positions. The authorization of user will be done according to the authorization rules of roles at runtime.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the OrganizationDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “organization” - define organization and its positions in the fact, e.g. president, VP, manager. . .&lt;br /&gt;
&lt;br /&gt;
* “superiorPos” - define which position is the superior position of the current position. &lt;br /&gt;
&lt;br /&gt;
* “position” -  define the position details, including superior position and role. &lt;br /&gt;
&lt;br /&gt;
* “role” - assign the roles which are defined in AuthorizationDSL to the positions.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;  {&lt;br /&gt;
    organization &amp;lt;organization name&amp;gt; . . . [{...}]&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The package definition of OrganizationDSL is just like most of the DSL models, you just need to define the package name and in eclipse like other java project press ctrl+shift+o, all necessary models or java classes will be imported automatically. After that, you can define the organizations and positions. One or more organizations can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package org.eclipse.osbp.foodmart.authorizations {&lt;br /&gt;
	import org.eclipse.osbp.foodmart.authorizations.* &lt;br /&gt;
	. . .&lt;br /&gt;
	organization FoodMart . . . {. . .}&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====organization====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. Either position or sub-organization could be defined in the main organization.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization &amp;lt;mainOrganization name 1&amp;gt;  Title &amp;lt;organization title 1&amp;gt; [{&lt;br /&gt;
position &amp;lt;mainPosition name&amp;gt; {. . .}&lt;br /&gt;
[position &amp;lt;position name&amp;gt; superiorPos &amp;lt;superiorPosition name 1&amp;gt; {. . .}]&lt;br /&gt;
	. . .&lt;br /&gt;
[organization &amp;lt;organization name 2&amp;gt;  Title &amp;lt;organization title 2&amp;gt;   &lt;br /&gt;
  superiorPos &amp;lt;superiorPosition name 2&amp;gt; [{ . . . }]]&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization FoodMart Title &amp;quot;Organization&amp;quot; {&lt;br /&gt;
position President {. . .}&lt;br /&gt;
	position VP_Country_Manager superiorPos President {. . .}&lt;br /&gt;
. . .&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos  VP_Country_Manager {. . .}&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, main &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''FoodMart''''' with &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; “Organization” is defined. Many positions and organizations can be defined in this main organization. The main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; of this organization is '''''President'''''; another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''VP_Country_Manager''''' uses this main position as its superior position. A sub organization '''''Store_Manager_Org''''' with &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; “Stores” is also defined in this main organization, which uses '''''VP_Country_Manager''''' as its superior position.&lt;br /&gt;
&lt;br /&gt;
=====position======&lt;br /&gt;
&lt;br /&gt;
You can define the position and its role here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
position &amp;lt;position name&amp;gt; [superiorPos &amp;lt;position name&amp;gt;] {&lt;br /&gt;
		[role &amp;lt;role name&amp;gt;]&lt;br /&gt;
		. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* If the position is not a main position of an organization, its superior position must be defined.&lt;br /&gt;
&lt;br /&gt;
* Superior position must be defined before it is used.&lt;br /&gt;
&lt;br /&gt;
* One position can be defined without role, and also can be defined with one or more roles. &lt;br /&gt;
&lt;br /&gt;
* All roles must be defined in AuthorizationDSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos VP_Country_Manager  {&lt;br /&gt;
position Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	position Store_Shift_Supervisor superiorPos Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
position Store_Temporary_Checker superiorPos Store_Shift_Supervisor {&lt;br /&gt;
}&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager''''' is the main position of the sub &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''', so it is defined without a superior position; its superior position is defined by the definition of &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''', which means, &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''VP_Country_Manager''''' is the superior position of &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager'''''.  Another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Shift_Supervisor''''' is also defined in this organization, and &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager''''' is its superior position. &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''Sales''''' is assigned to both of the position. The third &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Temporary_Checker''''' is under &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Shift_Supervisor''''', it is defined without a role.&lt;br /&gt;
&lt;br /&gt;
=====organization . . . superiorPos  . . .=====&lt;br /&gt;
&lt;br /&gt;
The sub organization could be defined in this part.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization &amp;lt;organization name 1&amp;gt;  Title &amp;lt;organization title 1&amp;gt;   &lt;br /&gt;
superiorPos &amp;lt;superiorPosition name 1&amp;gt; [{ &lt;br /&gt;
	position &amp;lt;mainPosition name&amp;gt; {. . .}&lt;br /&gt;
	position &amp;lt;position name&amp;gt; superiorPos &amp;lt;superiorPosition name 2&amp;gt; {. . .}&lt;br /&gt;
	. . .&lt;br /&gt;
[organization &amp;lt;organization name 2&amp;gt;  Title &amp;lt;organization title 2&amp;gt;   &lt;br /&gt;
  superiorPos &amp;lt;superiorPosition name 3&amp;gt; [{ . . . }]]&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sub organization must be defined with a superior position.&lt;br /&gt;
&lt;br /&gt;
* Otherwise, the syntax of sub organization is totally as same as main organization.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
organization Store_Manager_Org Title &amp;quot;Stores&amp;quot; superiorPos VP_Country_Manager  {&lt;br /&gt;
position Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	position Store_Assistant_Manager superiorPos Store_Manager {&lt;br /&gt;
		role Sales&lt;br /&gt;
	}&lt;br /&gt;
. . .&lt;br /&gt;
organization Store_Temporary_Stocker_Org Title &amp;quot;Stocker&amp;quot;  superiorPos Store_Assistant_Manager { &lt;br /&gt;
		position Store_Temporary_Stocker {&lt;br /&gt;
			role Sales&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
		position Store_Permanent_Butcher&lt;br /&gt;
		superiorPos Store_Temporary_Stocker {&lt;br /&gt;
			role Sales&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We use the same example, sub &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Manager_Org''''':  &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Assistant_Manager''''' is defined under main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Manager'''''. A new &amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; '''''Store_Temporary_Stocker_Org''''' is defined under &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; '''''Store_Assistant_Manager'''''; it has 2 &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt;:  main &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Temporary_Stocker''''', which default has the same superior &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; as this organization, in this case, it is '''''Store_Assistant_Manager'''''; another &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Permanent_Butcher''''' and its superior &amp;lt;code&amp;gt;position&amp;lt;/code&amp;gt; is '''''Store_Temporary_Stocker'''''; &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''Sales''''' is assigned to both of the position.&lt;br /&gt;
&lt;br /&gt;
The whole organigram can be shown in os.bee applications like the following picture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:OrganizationDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Authorization_DSL&amp;diff=2003</id>
		<title>Authorization DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Authorization_DSL&amp;diff=2003"/>
				<updated>2017-07-26T21:06:05Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* AuthorizationDSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime. For example, when the sales and logistics check the same entity of article, the sales do not need to know how many cases per pallet for an article, so it should be invisible in vision of the sales; the logistics do not need to know how much costs the article, so in vision of the logistics, the price should not be displayed.&lt;br /&gt;
&lt;br /&gt;
==AuthorizationDSL==&lt;br /&gt;
&lt;br /&gt;
The AuthorizationDSL is working at runtime. It's used to define the roles and authorize them. Visibility processor at runtime calculates the authorization of e.g. invisible or editable for the roles; Blips are working for the bpm process at runtime, e.g. starting the user task.&lt;br /&gt;
&lt;br /&gt;
There will be no exported file generated after editing the model. The authorization rules will be store in a hash map at runtime. Each user should have its own position, and the role will be assigned to the positions in [[Organization DSL]], which is also working at runtime. &lt;br /&gt;
&lt;br /&gt;
The authorization at runtime will be done according to the rules which we defined in AuthorizationDSL.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the AuthorizationDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “role” - define the role in the fact, e.g. sales, logistics…It contains further elements such as entity and process.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;entity” - define which entity should be authorized, and how to authorize it for the roles, the entity is defined in [[Entity DSL]] model. &lt;br /&gt;
&lt;br /&gt;
* “attribute” -  define the authorization of the entity attributes for the roles. &lt;br /&gt;
* “relation” - define the authorization of the referenced entity for the roles.&lt;br /&gt;
&lt;br /&gt;
* “process - define which process is startable and if the user task of this process is executable for the roles. The process is defined in BlipDSL model.&lt;br /&gt;
&lt;br /&gt;
* “usertask” - define which user task is executable for the roles.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;  {&lt;br /&gt;
    role &amp;lt;role name&amp;gt; {...}&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The package definition of AuthorizationDSL is just like most of the DSL models, you just need to define the package name and in eclipse like other java project press ctrl+shift+o, all necessary models or java classes will be imported automatically. After that, you can define the roles and their authorization rules. One or more roles can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package org.eclipse.osbp.foodmart.authorizations {&lt;br /&gt;
	import org.eclipse.osbp.foodmart.entities.* &lt;br /&gt;
	import org.eclipse.osbp.foodmart.blips.*&lt;br /&gt;
	. . .&lt;br /&gt;
	role Sales {. . .}&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====role====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. Either entity or process could be authorized in this part.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
role &amp;lt;role name&amp;gt; {&lt;br /&gt;
  entity &amp;lt;entity name&amp;gt; ... [{ ... }]&lt;br /&gt;
	  ...&lt;br /&gt;
  process &amp;lt;blip name&amp;gt;{ ... }&lt;br /&gt;
  ...&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
role Sales {&lt;br /&gt;
entity Mproduct_class any &lt;br /&gt;
	entity Memployee any {. . .}&lt;br /&gt;
	process ProductMaintenance {. . .}&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the authorization rule for &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''Sales''''' will be defined. The rules are using to &amp;lt;code&amp;gt;entity&amp;lt;/code&amp;gt; '''''Mproduct_class''''', &amp;lt;code&amp;gt;entity&amp;lt;/code&amp;gt; '''''Memployee''''' and &amp;lt;code&amp;gt;process&amp;lt;/code&amp;gt; '''''ProductMaintenance'''''.&lt;br /&gt;
&lt;br /&gt;
=====entity=====&lt;br /&gt;
&lt;br /&gt;
You can define the authorization rule for the whole entity or for one or more attribute/reference of this entity.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity &amp;lt;entity name&amp;gt; RoleEnum [{   &lt;br /&gt;
attribute &amp;lt;entityAttribute name&amp;gt; invisible|disabled|noneditable&lt;br /&gt;
relation &amp;lt;entityReference name&amp;gt; invisible|disabled|noneditable&lt;br /&gt;
...&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* RoleEnum is including any, creatable, readable, updatable and deletable. It is defined for the whole entity. any means allowed all. Otherwise, only the operation which is listed is allowed, they are creatable, readable, updatable and deletable; it can be one or more operations listed at the same time.&lt;br /&gt;
&lt;br /&gt;
* Entity attribute and reference could be authorized as invisible, disabled and noneditable. Only the operation which is listed is allowed, it can be one or more operations listed at the same time.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity Mproduct_class any &lt;br /&gt;
	&lt;br /&gt;
entity Memployee any {&lt;br /&gt;
		attribute first_name invisible&lt;br /&gt;
		relation position noneditable&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The following picture is a dialog of &amp;lt;code&amp;gt;entity&amp;lt;/code&amp;gt; '''''Memployee''''', you could see for the &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''sales''''', the attribute '''''first_name''''' is not shown, only '''''full_name''''' and '''''last_name''''' is shown; the reference '''''position''''' is not editable.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:AuthorizationDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====process=====&lt;br /&gt;
The process and the user task in this process could be authorized in this part.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
process &amp;lt;blip name&amp;gt;{ &lt;br /&gt;
[is startable]&lt;br /&gt;
[all usertasks executable]&lt;br /&gt;
usertask &amp;lt;blipUserTask name | userTask name&amp;gt; executable&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;is startable&amp;lt;/code&amp;gt; means: this process &amp;lt;u&amp;gt;is allowed to&amp;lt;/u&amp;gt; be started.&lt;br /&gt;
* &amp;lt;code&amp;gt;all usertasks executable&amp;lt;/code&amp;gt; means: all user tasks of this process &amp;lt;u&amp;gt;are allowed to&amp;lt;/u&amp;gt; be executed.&lt;br /&gt;
* If not all the user tasks are allowed to be executed, you can define here which user task is allowed to be executed using keyword &amp;lt;code&amp;gt;usertask … executable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
process ProductMaintenance {&lt;br /&gt;
	is startable&lt;br /&gt;
	all usertasks executable&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Authorization_DSL&amp;diff=2002</id>
		<title>Authorization DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Authorization_DSL&amp;diff=2002"/>
				<updated>2017-07-26T21:04:48Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* AuthorizationDSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
AuthorizationDSL is used to authorize the roles at runtime. For example, when the sales and logistics check the same entity of article, the sales do not need to know how many cases per pallet for an article, so it should be invisible in vision of the sales; the logistics do not need to know how much costs the article, so in vision of the logistics, the price should not be displayed.&lt;br /&gt;
&lt;br /&gt;
==AuthorizationDSL==&lt;br /&gt;
&lt;br /&gt;
The AuthorizationDSL is working at runtime. It's used to define the roles and authorize them. Visibility processor at runtime calculates the authorization of e.g. invisible or editable for the roles; Blips are working for the bpm process at runtime, e.g. starting the user task.&lt;br /&gt;
&lt;br /&gt;
There will be no exported file generated after editing the model. The authorization rules will be store in a hash map at runtime. Each user should have its own position, and the role will be assigned to the positions in OrganizationDSL, which is also working at runtime. &lt;br /&gt;
&lt;br /&gt;
The authorization at runtime will be done according to the rules which we defined in AuthorizationDSL.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the AuthorizationDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “role” - define the role in the fact, e.g. sales, logistics…It contains further elements such as entity and process.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;entity” - define which entity should be authorized, and how to authorize it for the roles, the entity is defined in [[Entity DSL]] model. &lt;br /&gt;
&lt;br /&gt;
* “attribute” -  define the authorization of the entity attributes for the roles. &lt;br /&gt;
* “relation” - define the authorization of the referenced entity for the roles.&lt;br /&gt;
&lt;br /&gt;
* “process - define which process is startable and if the user task of this process is executable for the roles. The process is defined in BlipDSL model.&lt;br /&gt;
&lt;br /&gt;
* “usertask” - define which user task is executable for the roles.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;  {&lt;br /&gt;
    role &amp;lt;role name&amp;gt; {...}&lt;br /&gt;
    ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The package definition of AuthorizationDSL is just like most of the DSL models, you just need to define the package name and in eclipse like other java project press ctrl+shift+o, all necessary models or java classes will be imported automatically. After that, you can define the roles and their authorization rules. One or more roles can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package org.eclipse.osbp.foodmart.authorizations {&lt;br /&gt;
	import org.eclipse.osbp.foodmart.entities.* &lt;br /&gt;
	import org.eclipse.osbp.foodmart.blips.*&lt;br /&gt;
	. . .&lt;br /&gt;
	role Sales {. . .}&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====role====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. Either entity or process could be authorized in this part.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
role &amp;lt;role name&amp;gt; {&lt;br /&gt;
  entity &amp;lt;entity name&amp;gt; ... [{ ... }]&lt;br /&gt;
	  ...&lt;br /&gt;
  process &amp;lt;blip name&amp;gt;{ ... }&lt;br /&gt;
  ...&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
role Sales {&lt;br /&gt;
entity Mproduct_class any &lt;br /&gt;
	entity Memployee any {. . .}&lt;br /&gt;
	process ProductMaintenance {. . .}&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the authorization rule for &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''Sales''''' will be defined. The rules are using to &amp;lt;code&amp;gt;entity&amp;lt;/code&amp;gt; '''''Mproduct_class''''', &amp;lt;code&amp;gt;entity&amp;lt;/code&amp;gt; '''''Memployee''''' and &amp;lt;code&amp;gt;process&amp;lt;/code&amp;gt; '''''ProductMaintenance'''''.&lt;br /&gt;
&lt;br /&gt;
=====entity=====&lt;br /&gt;
&lt;br /&gt;
You can define the authorization rule for the whole entity or for one or more attribute/reference of this entity.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity &amp;lt;entity name&amp;gt; RoleEnum [{   &lt;br /&gt;
attribute &amp;lt;entityAttribute name&amp;gt; invisible|disabled|noneditable&lt;br /&gt;
relation &amp;lt;entityReference name&amp;gt; invisible|disabled|noneditable&lt;br /&gt;
...&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* RoleEnum is including any, creatable, readable, updatable and deletable. It is defined for the whole entity. any means allowed all. Otherwise, only the operation which is listed is allowed, they are creatable, readable, updatable and deletable; it can be one or more operations listed at the same time.&lt;br /&gt;
&lt;br /&gt;
* Entity attribute and reference could be authorized as invisible, disabled and noneditable. Only the operation which is listed is allowed, it can be one or more operations listed at the same time.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity Mproduct_class any &lt;br /&gt;
	&lt;br /&gt;
entity Memployee any {&lt;br /&gt;
		attribute first_name invisible&lt;br /&gt;
		relation position noneditable&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The following picture is a dialog of &amp;lt;code&amp;gt;entity&amp;lt;/code&amp;gt; '''''Memployee''''', you could see for the &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; '''''sales''''', the attribute '''''first_name''''' is not shown, only '''''full_name''''' and '''''last_name''''' is shown; the reference '''''position''''' is not editable.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:AuthorizationDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====process=====&lt;br /&gt;
The process and the user task in this process could be authorized in this part.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
process &amp;lt;blip name&amp;gt;{ &lt;br /&gt;
[is startable]&lt;br /&gt;
[all usertasks executable]&lt;br /&gt;
usertask &amp;lt;blipUserTask name | userTask name&amp;gt; executable&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;is startable&amp;lt;/code&amp;gt; means: this process &amp;lt;u&amp;gt;is allowed to&amp;lt;/u&amp;gt; be started.&lt;br /&gt;
* &amp;lt;code&amp;gt;all usertasks executable&amp;lt;/code&amp;gt; means: all user tasks of this process &amp;lt;u&amp;gt;are allowed to&amp;lt;/u&amp;gt; be executed.&lt;br /&gt;
* If not all the user tasks are allowed to be executed, you can define here which user task is allowed to be executed using keyword &amp;lt;code&amp;gt;usertask … executable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
process ProductMaintenance {&lt;br /&gt;
	is startable&lt;br /&gt;
	all usertasks executable&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2001</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=2001"/>
				<updated>2017-07-26T21:00:55Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* OS.bee DSL Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee-Specific DSL Instances=&lt;br /&gt;
The ''OS.bee Software Factory'' provides a few specific DSL instances for different requirements.  These are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==Datatypes==&lt;br /&gt;
Several custom datatypes are described in detail in this chapter.&lt;br /&gt;
===[[BlobMapping]]===&lt;br /&gt;
This datatype allows the use of big data as a blob.&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Datamart_DSL&amp;diff=2000</id>
		<title>Datamart DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Datamart_DSL&amp;diff=2000"/>
				<updated>2017-07-26T20:50:39Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* condensed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Datamart DSL ==&lt;br /&gt;
&lt;br /&gt;
A data mart is a condensed and more focused version of a data warehouse, that reflects the regulations and process specifications of each business unit within an organization. Each data mart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
'''Datamart DSL''' generates for each datamart a java file, in which the SQL query for entities, or MDX query for Cubes, or task client connection for BPM are defined.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the Datamart DSL are:&lt;br /&gt;
*'''package''' - The root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
*'''import''' declarations - Used to import external models or even Java classes.&lt;br /&gt;
*'''datamart''' - Defines which data warehouse and which entity/cube/BPM the datamart will use. It contains further elements such as navigation, properties, conditions for entity, derive, axis, slicer for cube and columns, conditions for BPM.&lt;br /&gt;
*'''navigation''' - Used to define joins of entities as “one-to-many” or “many-to-one”.&lt;br /&gt;
*'''one to many … to … / many to one … to …''' - Used to define joins of entities in an MDX query.&lt;br /&gt;
*'''properties''' - Used to define the properties of an entity.&lt;br /&gt;
*'''property''' - Used to define columns and axes for an entity.&lt;br /&gt;
*'''conditions''' - Used to define conditions for entities and BPMs.&lt;br /&gt;
*'''condition''' - Used to define a &amp;quot;Where&amp;quot;-clause for an entity query or conditions for BPM.&lt;br /&gt;
*'''derive … from …''' - Used to define a derived measure of a cube query.&lt;br /&gt;
*'''measure''' - Used in cubes to specify members of a special dimension or a quantity to measure, for example, unit sales of a product, or the cost price of inventory items.&lt;br /&gt;
*'''derived''' - Used for cubes for derived measures defined in the same datamart, instead of the keyword “measure”.&lt;br /&gt;
*'''axis''' - Used for cubes to define the members of the axis, which can be measures, derived measures, or an aggregation or function of a hierarchy. &lt;br /&gt;
*'''hierarchy''' - Used for cubes to define a set of members organized in a structure for convenient analysis. For example, the store hierarchy consists of the store name, city, state, and nation. The hierarchy allows you to form intermediate sub-totals:  the sub-total for a state is the sum of the sub-totals of all of the cities in that state, each of which is the sum of the sub-totals of the stores in that city.&lt;br /&gt;
*'''slicer''' -  Used for cubes to define the &amp;quot;Where&amp;quot;-clause in a cube query. &lt;br /&gt;
*'''columns''' - Used for BPMs to define one or more columns.&lt;br /&gt;
*'''column''' - Used for BPMs to define which BPM column is used in a datamart.&lt;br /&gt;
&lt;br /&gt;
===Datamart definition===&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; [described by &amp;lt;discription&amp;gt;] &lt;br /&gt;
    from &amp;lt;schema name&amp;gt; persistenceUnit &amp;lt;persistence unit name&amp;gt; &lt;br /&gt;
    using entity/cube/task &amp;lt;entity/cube/task name&amp;gt; [&amp;lt;task mode&amp;gt; &amp;lt;mode name&amp;gt; for task] [nonempty values for cube] {&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* This generates a ''&amp;lt;datamart name&amp;gt;Datamart.java'' file, in which a java class named &amp;lt;code&amp;gt;&amp;lt;datamart name&amp;gt;Datamart&amp;lt;/code&amp;gt; is defined. In this class (which is extended from java class &amp;lt;code&amp;gt;ACubeDatamart&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AEntityDatamart&amp;lt;/code&amp;gt;), the database connection, the querying of entities and cubes and the task-client connection of tasks are defined.&lt;br /&gt;
* &amp;lt;task name&amp;gt; can be &amp;lt;code&amp;gt;BusinessAdministrator&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PotentialOwner&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Recipient&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TaskInitiator&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TaskStakeholder&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ExcludedOwner&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;task mode&amp;gt; can be &amp;lt;code&amp;gt;locale&amp;lt;/code&amp;gt; (String), &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; (String) or &amp;lt;code&amp;gt;port&amp;lt;/code&amp;gt; (Integer).'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart EmployeeSalary &lt;br /&gt;
    from CCNGDEFAULT persistenceUnit &amp;quot;foodmart&amp;quot; &lt;br /&gt;
    using entity Memployee {. . .}&lt;br /&gt;
&lt;br /&gt;
datamart SalesByState described by &amp;quot;cube based profit review&amp;quot; &lt;br /&gt;
    from CCNGDEFAULT persistenceUnit &amp;quot;foodmart&amp;quot; &lt;br /&gt;
    using cube Sales nonempty values {. . .}&lt;br /&gt;
&lt;br /&gt;
datamart TaskDetails described by &amp;quot;Task details&amp;quot; &lt;br /&gt;
    from BPM persistenceUnit &amp;quot;drools&amp;quot; &lt;br /&gt;
    using task BusinessAdministrator locale &amp;quot;de-DE&amp;quot; {. . .}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===entity===&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; . . . using entity &amp;lt;entity A name&amp;gt; (tracking){&lt;br /&gt;
		[navigation {. . .}]&lt;br /&gt;
		[properties {. . .}] &lt;br /&gt;
		[conditions {. . .}] &lt;br /&gt;
		[filler rows &amp;lt;INTminRow&amp;gt; to &amp;lt;INTmaxRow&amp;gt;{. . .}] &lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====navigation====&lt;br /&gt;
Using the &amp;lt;code&amp;gt;many to one&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;one to many&amp;lt;/code&amp;gt; clause creates a JOIN of entities in a query.&lt;br /&gt;
&lt;br /&gt;
======many to one … to entity …======&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity &amp;lt;entity A name&amp;gt; {&lt;br /&gt;
    navigation {&lt;br /&gt;
        many to one &amp;lt;entity A name&amp;gt;.&amp;lt;entity B reference in entity A&amp;gt; to entity &amp;lt;entity B name&amp;gt; { &lt;br /&gt;
            [navigation {. . . }] &lt;br /&gt;
            [properties {. . . }] &lt;br /&gt;
            [conditions {. . . }] &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart EmployeeSalary from CCNGDEFAULT persistenceUnit &amp;quot;foodmart&amp;quot; using entity Memployee {&lt;br /&gt;
    navigation { &lt;br /&gt;
        many to one Memployee.position to entity Mposition {&lt;br /&gt;
            properties {&lt;br /&gt;
                property position_title on axis rows&lt;br /&gt;
                property max_scale on axis columns&lt;br /&gt;
                property min_scale on axis columns&lt;br /&gt;
            }&lt;br /&gt;
            conditions {&lt;br /&gt;
                condition property pay_type = filtered&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select Mposition.MAX_SCALE as \&amp;quot;max_scale\&amp;quot;,&lt;br /&gt;
            Mposition.MIN_SCALE as \&amp;quot;min_scale\&amp;quot;, &lt;br /&gt;
            Mposition.POSITION_TITLE as \&amp;quot;position_title\&amp;quot;&lt;br /&gt;
            . . .  &lt;br /&gt;
    from CCNG.MEMPLOYEE Memployee &lt;br /&gt;
    left join CCNG.MPOSITION Mposition on(Mposition.id=Memployee.position_id) &lt;br /&gt;
    where (Mposition.pay_type = $Mposition.pay_type$) &lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
private HashMap&amp;lt;Integer, ArrayList&amp;lt;String&amp;gt;&amp;gt; axisMap = new HashMap&amp;lt;Integer,ArrayList&amp;lt;String&amp;gt;&amp;gt;() {{&lt;br /&gt;
    put(0,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
        . . .&lt;br /&gt;
        add(&amp;quot;max_scale&amp;quot;);&lt;br /&gt;
        add(&amp;quot;min_scale&amp;quot;);&lt;br /&gt;
    }});&lt;br /&gt;
    put(1,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
        . . .&lt;br /&gt;
        add(&amp;quot;position_title&amp;quot;);&lt;br /&gt;
    }});&lt;br /&gt;
}};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======one to many … to entity …======&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity &amp;lt;entity A name&amp;gt; {&lt;br /&gt;
    navigation {&lt;br /&gt;
        one to many &amp;lt;entity A name&amp;gt;.&amp;lt;entity B reference in entity A&amp;gt; to entity &amp;lt;entity B name&amp;gt; { &lt;br /&gt;
            [navigation {. . . }] &lt;br /&gt;
            [properties {. . . }] &lt;br /&gt;
            [conditions {. . . }] &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart SalesByDistrict described by &amp;quot;entity based aggregation of store sales and store cost&amp;quot; &lt;br /&gt;
    from CCNGDEFAULT persistenceUnit &amp;quot;foodmart&amp;quot; &lt;br /&gt;
    using entity Mregion &lt;br /&gt;
{&lt;br /&gt;
    navigation {&lt;br /&gt;
        one to many Mstore.region to entity Mstore {&lt;br /&gt;
            navigation {&lt;br /&gt;
                one to many Msales_fact_1998.store to entity Msales_fact_1998 {&lt;br /&gt;
                    properties {&lt;br /&gt;
                        property store_sales aggregate summation on axis columns&lt;br /&gt;
                        property store_cost aggregate summation on axis columns&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select SUM(Msales_fact_1998.STORE_SALES) as \&amp;quot;store_sales\&amp;quot;,&lt;br /&gt;
            SUM(Msales_fact_1998.STORE_COST) as \&amp;quot;store_cost\&amp;quot; &lt;br /&gt;
            . . .&lt;br /&gt;
    from CCNG.MREGION Mregion &lt;br /&gt;
    left join CCNG.MSTORE Mstore on(Mstore.region_id=Mregion.id) &lt;br /&gt;
    left join CCNG.MSALES_FACT_1998 Msales_fact_1998 on(Msales_fact_1998.store_id=Mstore.id) &lt;br /&gt;
    where . . . group by . . .&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() &lt;br /&gt;
{{&lt;br /&gt;
    put(&amp;quot;$Mregion.id$&amp;quot;,&amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
    put(&amp;quot;$Mstore.id$&amp;quot;,&amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
    put(&amp;quot;$Msales_fact_1998.id$&amp;quot;,&amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
    . . .&lt;br /&gt;
    }};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====properties====&lt;br /&gt;
&lt;br /&gt;
One or more properties are defined here, each using the &amp;lt;code&amp;gt;property&amp;lt;/code&amp;gt; keyword and specifying which kind of aggregation of the property will be queried on which axis.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
properties {&lt;br /&gt;
property &amp;lt;entity A property&amp;gt; [aggregate &amp;lt;sql aggregation&amp;gt;] &lt;br /&gt;
[on axis &amp;lt;axis name&amp;gt;] [scale &amp;lt;scale group number&amp;gt;]&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;sql aggregation&amp;gt; can be average, summation or count.&lt;br /&gt;
*&amp;lt;axis name&amp;gt; can be ''columns'' or ''rows''.&lt;br /&gt;
*&amp;lt;scale group number&amp;gt; is in the range ''group1''-''group9''.&lt;br /&gt;
&lt;br /&gt;
=====on axis ''rows''/''columns''=====&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
property sales_region on axis rows&lt;br /&gt;
property store_sales _nm on axis columns&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private HashMap&amp;lt;Integer, ArrayList&amp;lt;String&amp;gt;&amp;gt; axisMap = new HashMap&amp;lt;Integer,ArrayList&amp;lt;String&amp;gt;&amp;gt;() {{&lt;br /&gt;
            put(0,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
                add(&amp;quot;store_sales&amp;quot;);&lt;br /&gt;
                . . .&lt;br /&gt;
            }});&lt;br /&gt;
            put(1,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
                add(&amp;quot;sales_region&amp;quot;);&lt;br /&gt;
                . . .&lt;br /&gt;
            }});&lt;br /&gt;
    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====aggregate=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sql aggregation&amp;gt; can be:&lt;br /&gt;
*'''average''' - SQL Avg() function, returns the average of (a subset of) all values in a specified column&lt;br /&gt;
*'''summation''' -  SQL Sum() function, returns the sum of (a subset of) all values in a specified column.&lt;br /&gt;
*'''count''' -  SQL Count() function, returns the total number of (a subset of) values in a specified column.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
property store_sales aggregate summation &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select SUM(Msales_fact_1998.STORE_SALES) as \&amp;quot;store_sales\&amp;quot;, . . . &lt;br /&gt;
     from . . . left join . . . on(. . .) group by . . . &amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====scale=====&lt;br /&gt;
&lt;br /&gt;
Used to define different groups of scale values (&amp;lt;code&amp;gt;group1&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;group9&amp;lt;/code&amp;gt;) for diagrams and tables.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
property store_sales scale group1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====conditions====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
conditions {&lt;br /&gt;
     condition &lt;br /&gt;
     [&amp;lt;operator&amp;gt;]&lt;br /&gt;
           Number&lt;br /&gt;
           /STRING&lt;br /&gt;
           /(filtered [optional])|selected&lt;br /&gt;
           /property &amp;lt;entity A property&amp;gt; [aggregate &amp;lt;sql aggregation&amp;gt;]&lt;br /&gt;
           /entitycolumn &amp;lt;entity C&amp;gt;.&amp;lt;entity C Property&amp;gt;&lt;br /&gt;
           /column &amp;lt;task column&amp;gt;&lt;br /&gt;
     [&amp;lt;operator&amp;gt;&lt;br /&gt;
           Number&lt;br /&gt;
           /STRING&lt;br /&gt;
           /(filtered [optional])|selected&lt;br /&gt;
           /property &amp;lt;entity A property&amp;gt; [aggregate &amp;lt;sql aggregation&amp;gt;]&lt;br /&gt;
           /entitycolumn &amp;lt;entity D&amp;gt;.&amp;lt;entity D Property&amp;gt;&lt;br /&gt;
           /column &amp;lt;task column&amp;gt;&lt;br /&gt;
     ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;operator&amp;gt; can be &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;like&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&amp;lt;task column&amp;gt; can be &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Priority&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Status&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Subject&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ExpirationTime&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CreatedOn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CreatedBy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ActivationTime&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ActualOwner&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TaskId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ProcessId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ProcessInstanceId&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ProcessSessionId&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====selected=====&lt;br /&gt;
&lt;br /&gt;
The specified column will be selectable in the GUI.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
condition property gtin_cd = selected&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
    where (gtin.gtin_cd in (§gtin.gtin_cd§))&lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() &lt;br /&gt;
{{&lt;br /&gt;
    . . . &lt;br /&gt;
    put(&amp;quot;§gtin.gtin_cd§&amp;quot;,&amp;quot;select distinct GTIN_CD as \&amp;quot;gtin_cd\&amp;quot; from pod.GTIN&amp;quot;);&lt;br /&gt;
    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====filtered=====&lt;br /&gt;
&lt;br /&gt;
The specified column will be filterable in the GUI.&lt;br /&gt;
&amp;lt;code&amp;gt;optional&amp;lt;/code&amp;gt; means this specified column can be chosen for being filtered or not.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
condition property pay_type = filtered	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
&amp;quot;. . .&lt;br /&gt;
where (Mposition.pay_type = $Mposition.pay_type$)&lt;br /&gt;
. . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;()&lt;br /&gt;
{{&lt;br /&gt;
    . . .&lt;br /&gt;
    put(&amp;quot;$Mposition.pay_type$&amp;quot;,&amp;quot;select distinct PAY_TYPE as \&amp;quot;pay_type\&amp;quot; from CCNG.MPOSITION&amp;quot;);&lt;br /&gt;
    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
condition property education_level = filtered optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
    where (($Memployee.education_level$='*' or Memployee.education_level = $Memployee.education_level$))&lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() {{&lt;br /&gt;
	. . . &lt;br /&gt;
      put(&amp;quot;$Memployee.education_level$&amp;quot;,&amp;quot;select '*' from dual union select distinct EDUCATION_LEVEL as \&amp;quot;education_level\&amp;quot; from CCNG.MEMPLOYEE&amp;quot;);&lt;br /&gt;
    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====filler rows ''mm'' to ''nn''=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
filler rows &amp;lt;INTminRow&amp;gt; to &amp;lt;INTmaxRow&amp;gt;{&lt;br /&gt;
      [fill &amp;lt;entity property&amp;gt; with &lt;br /&gt;
            filler-address city&lt;br /&gt;
            | filler-address postalcode&lt;br /&gt;
            | filler-date future &amp;lt;INT&amp;gt; years&lt;br /&gt;
            | filler-date past &amp;lt;INT&amp;gt; years&lt;br /&gt;
            | filler-date range &amp;lt;+-INTby&amp;gt; up to and including &amp;lt;+-INTey&amp;gt; years&lt;br /&gt;
            | filler-person full name&lt;br /&gt;
            | filler-person first name&lt;br /&gt;
            | filler-person last name&lt;br /&gt;
            | filler-person email&lt;br /&gt;
            | filler-person phone&lt;br /&gt;
            | filler-person gender male as &amp;lt;STRINGmt&amp;gt; female as &amp;lt;STRINGft&amp;gt;&lt;br /&gt;
            | filler-signed-double range &lt;br /&gt;
              [ &amp;lt;+- Double&amp;gt; | &amp;lt;entity property&amp;gt;] &lt;br /&gt;
              up to and including&lt;br /&gt;
              [ &amp;lt;+- Double &amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              with &amp;lt;INT&amp;gt; decimals&lt;br /&gt;
              round to &amp;lt; Double &amp;gt;&lt;br /&gt;
            | filler-signed-double random (&amp;lt;+-Double &amp;gt;)&lt;br /&gt;
            | filler-signed-integer range &lt;br /&gt;
              [ &amp;lt;+-INT&amp;gt; | &amp;lt;entity property&amp;gt;] &lt;br /&gt;
              up to and including&lt;br /&gt;
              [ &amp;lt;+-INT&amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              round to &amp;lt;INT&amp;gt;&lt;br /&gt;
            | filler-signed-integer random ( &amp;lt;+-INT&amp;gt; )&lt;br /&gt;
            | filler-text random ( &amp;lt;STRING&amp;gt; )&lt;br /&gt;
            | filler-text paragraps [&amp;lt;INT&amp;gt;]&lt;br /&gt;
            | filler-text sentences [&amp;lt;INT&amp;gt;]&lt;br /&gt;
            | filler-text words [&amp;lt;INT&amp;gt;]&lt;br /&gt;
            | filler-unsigned-double range &lt;br /&gt;
              [ &amp;lt; Double &amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              up to and including&lt;br /&gt;
              [ &amp;lt; Double &amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              with &amp;lt;INT&amp;gt; decimals&lt;br /&gt;
              round to &amp;lt; Double &amp;gt;&lt;br /&gt;
            | filler-unsigned-double random ( &amp;lt; Double &amp;gt; )&lt;br /&gt;
            | filler-unsigned-integer range &lt;br /&gt;
              [ &amp;lt;INT&amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              up to and including&lt;br /&gt;
              [ &amp;lt;INT&amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              round to &amp;lt;INT&amp;gt;&lt;br /&gt;
            | filler-unsigned-integer random ( &amp;lt;INT&amp;gt; )&lt;br /&gt;
      ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===cube===&lt;br /&gt;
&lt;br /&gt;
Use the keyword &amp;lt;code&amp;gt;cube&amp;lt;/code&amp;gt; to define the data source cube of a FROM clause in an MDX query.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; . . . using cube &amp;lt;cube name&amp;gt;  [nonempty values] { &lt;br /&gt;
    [derive &amp;lt;derived measure name&amp;gt; from &lt;br /&gt;
        [&amp;lt;derive operator&amp;gt;]&lt;br /&gt;
            Number&lt;br /&gt;
            /Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            /Cube Member Tuple&lt;br /&gt;
            /Cube Aggregation&lt;br /&gt;
        [&amp;lt;derive operator&amp;gt;]&lt;br /&gt;
            [Number&lt;br /&gt;
            /Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            /Cube Member Tuple&lt;br /&gt;
            /Cube Aggregation]&lt;br /&gt;
	]&lt;br /&gt;
	[axis &amp;lt;axis name&amp;gt; {&lt;br /&gt;
            Cube Hierarchy&lt;br /&gt;
            /Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            /Cube Set Aggregation&lt;br /&gt;
        }]&lt;br /&gt;
        [slicer &lt;br /&gt;
            Cube Hierarchy&lt;br /&gt;
            /Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            /Cube Set Aggregation&lt;br /&gt;
        ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keywords====&lt;br /&gt;
&lt;br /&gt;
=====nonempty values=====&lt;br /&gt;
&lt;br /&gt;
See the sections [[#NonEmpty() function]] and [[#NonEmptyCrossjoin() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; [described by &amp;lt;description&amp;gt;] &lt;br /&gt;
    from &amp;lt;schema name&amp;gt; persistenceUnit &amp;lt;persistence unit name&amp;gt; &lt;br /&gt;
    using cube &amp;lt;cube name&amp;gt; &lt;br /&gt;
    nonempty values &lt;br /&gt;
{&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select &lt;br /&gt;
    Non Empty{ . . . } on columns, &lt;br /&gt;
    NonEmptyCrossjoin(. . .) on rows &lt;br /&gt;
    from &lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====derive … from=====&lt;br /&gt;
&lt;br /&gt;
Creates a Calculate Member.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive &amp;lt;derived measure name&amp;gt; from&lt;br /&gt;
    [&amp;lt;derive operator&amp;gt;]&lt;br /&gt;
        Number&lt;br /&gt;
        /Cube Measure&lt;br /&gt;
        /Cube Derived Measure&lt;br /&gt;
        /Cube Member Tuple&lt;br /&gt;
        /Cube Aggregation&lt;br /&gt;
    [&amp;lt;derive operator&amp;gt;]&lt;br /&gt;
        [Number&lt;br /&gt;
        /Cube Measure&lt;br /&gt;
        /Cube Derived Measure&lt;br /&gt;
        /Cube Member Tuple&lt;br /&gt;
        /Cube Aggregation]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;derive operator&amp;gt;&amp;lt;/code&amp;gt; can be &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive SumSales from measure SaleNumber * measure unitPrice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[SumSales] as '[Measures].[SaleNumber]*[Measures].[unitPrice]'&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia condensed over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].[All Media])'&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====axis=====&lt;br /&gt;
&lt;br /&gt;
Use the keyword &amp;lt;code&amp;gt;axis&amp;lt;/code&amp;gt; to define the query axes of a SELECT clause in an MDX query.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
axis &amp;lt;axis name&amp;gt; {&lt;br /&gt;
    Cube Hierarchy&lt;br /&gt;
    /Cube Measure&lt;br /&gt;
    /Cube Derived Measure&lt;br /&gt;
    /Cube Set Aggregation&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;axis name&amp;gt;&amp;lt;/code&amp;gt; can be &amp;lt;code&amp;gt;columns&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rows&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pages&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chapters&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sections&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
axis columns {&lt;br /&gt;
    hierarchy PromotionMedia level MediaType detailed ordered by derived MediaPerc descending  &lt;br /&gt;
    derived MediaPerc&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select CrossJoin(Order([PromotionMedia].[MediaType].Members,[Measures].[MediaPerc],Desc),[Measures].[MediaPerc]) on columns&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====slicer=====&lt;br /&gt;
&lt;br /&gt;
Use the keyword &amp;lt;code&amp;gt;slicer&amp;lt;/code&amp;gt; to define the slicer axis of a WHERE clause in an MDX query.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
slicer&lt;br /&gt;
    Cube Hierarchy&lt;br /&gt;
    /Cube Measure&lt;br /&gt;
    /Cube Derived Measure&lt;br /&gt;
    /Cube Set Aggregation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
     where&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Definitions====&lt;br /&gt;
&lt;br /&gt;
=====Cube Measure=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
measure &amp;lt;cube measure&amp;gt; [scale &amp;lt;scale group number&amp;gt;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;scale group number&amp;gt;&amp;lt;/code&amp;gt; can have the values &amp;lt;code&amp;gt;group1&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;group9&amp;lt;/code&amp;gt;, permitting different scales values for diagrams and tables.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Derived Measure=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derived &amp;lt;derived measure name defined in this datamart&amp;gt; &lt;br /&gt;
[scale &amp;lt;scale group number&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;scale group number&amp;gt;&amp;lt;/code&amp;gt; can have the values &amp;lt;code&amp;gt;group1&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;group9&amp;lt;/code&amp;gt;, permitting different scales values for diagrams and tables.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Hierarchy=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
hierarchy &amp;lt;hierarchy name&amp;gt; &lt;br /&gt;
    [default] &lt;br /&gt;
    [condensed] &lt;br /&gt;
    [exploded] &lt;br /&gt;
    [level &amp;lt;level name&amp;gt; &lt;br /&gt;
        [filtered|selected]&lt;br /&gt;
    ] &lt;br /&gt;
    [detailed &lt;br /&gt;
        [except &amp;lt;level name&amp;gt;] &lt;br /&gt;
        [ordered by &lt;br /&gt;
            [Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            ]&lt;br /&gt;
            [descending]&lt;br /&gt;
        ]&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======default======&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;.DefaultMember&amp;lt;/code&amp;gt; of hierarchy, if defaultMember of hierarchy ''is'' defined in [[Cube DSL]].&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dimension PromotionMedia {&lt;br /&gt;
      hierarchy hasAll allMemberName=&amp;quot;All Media&amp;quot; defaultMember=&amp;quot;All Media&amp;quot;{&lt;br /&gt;
            . . .&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia default over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].Defaultmember) &lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;.Members&amp;lt;/code&amp;gt; of hierarchy, if defaultMember of hierarchy ''is not'' defined in [[Cube DSL]].&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
slicer hierarchy Warehouse default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia default over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select . . . &lt;br /&gt;
    from . . . &lt;br /&gt;
    where ([Warehouse].Members)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======condensed======&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;allMemberName&amp;lt;/code&amp;gt; of hierarchy, if &amp;lt;code&amp;gt;allMemberName&amp;lt;/code&amp;gt; of hierarchy defined in [[Cube DSL]].&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dimension PromotionMedia {&lt;br /&gt;
      hierarchy hasAll allMemberName=&amp;quot;All Media&amp;quot; {&lt;br /&gt;
            . . .&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;condensed&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia condensed over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].[All Media])'&lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;.DefaultMember&amp;lt;/code&amp;gt; of hierarchy, if defaultMember of hierarchy defined in [[Cube DSL]].&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dimension PromotionMedia {&lt;br /&gt;
      hierarchy hasAll defaultMember=&amp;quot;All Media&amp;quot;{&lt;br /&gt;
            . . .&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;condensed&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia condensed over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].Defaultmember) &lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;.Members&amp;lt;/code&amp;gt; of hierarchy if nothing is additionally defined for hierarchy in [[Cube DSL]].&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
slicer hierarchy Warehouse condensed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select . . . &lt;br /&gt;
    from . . . &lt;br /&gt;
    where ([Warehouse].Members)&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======exploded======&lt;br /&gt;
&lt;br /&gt;
'''Returns:''' &amp;lt;code&amp;gt;.AllMembers&amp;lt;/code&amp;gt; of hierarchy.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia exploded over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;condensed&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia condensed over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].AllMembers)'&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======level ... filtered======&lt;br /&gt;
&lt;br /&gt;
The specified level can be filtered in the  GUI.&lt;br /&gt;
&lt;br /&gt;
► '''Example:''' in axis&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Datamart . . . {&lt;br /&gt;
      . . .&lt;br /&gt;
        axis rows {&lt;br /&gt;
            hierarchy TheTime level Month filtered &lt;br /&gt;
            hierarchy Store level StoreState selected&lt;br /&gt;
        }&lt;br /&gt;
      . . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
&amp;quot;. . .&lt;br /&gt;
Select . . .&lt;br /&gt;
Crossjoin($[TheTime].[Month]$,§[Store].[StoreState]§) on rows&lt;br /&gt;
. . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() {{&lt;br /&gt;
    put(&amp;quot;$[TheTime].[Month]$&amp;quot;,&amp;quot;select {} on columns,[TheTime].[Month].members on rows from Sales&amp;quot;);&lt;br /&gt;
    . . .    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example:''' in slicer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Datamart . . . {&lt;br /&gt;
      . . .&lt;br /&gt;
      slicer hierarchy TheTime level Quarter filtered&lt;br /&gt;
      slicer hierarchy StoreType level StoreType selected&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select . . . &lt;br /&gt;
     from . . . &lt;br /&gt;
     where (?[TheTime].[Quarter]?,![StoreType].[StoreType]!)&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() {{&lt;br /&gt;
    . . .&lt;br /&gt;
    put(&amp;quot;?[TheTime].[Quarter]?&amp;quot;,&amp;quot;select {} on columns,[TheTime].[Quarter].members on rows from Warehouse&amp;quot;);&lt;br /&gt;
    . . .&lt;br /&gt;
    }};  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======level ... selected======&lt;br /&gt;
&lt;br /&gt;
The specified level can be selected in the GUI.&lt;br /&gt;
&lt;br /&gt;
► '''Example:''' in axis&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Datamart . . . {&lt;br /&gt;
      . . .&lt;br /&gt;
      axis rows {&lt;br /&gt;
          hierarchy TheTime level Month filtered &lt;br /&gt;
          hierarchy Store level StoreState selected&lt;br /&gt;
      }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
     Select . . .&lt;br /&gt;
     Crossjoin($[TheTime].[Month]$,§[Store].[StoreState]§) on rows&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;()&lt;br /&gt;
{{&lt;br /&gt;
    . . .&lt;br /&gt;
    put(&amp;quot;§[Store].[StoreState]§&amp;quot;,&amp;quot;select {} on columns,[Store].[StoreState].members on rows from Sales&amp;quot;);    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example:''' in slicer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Datamart . . . {&lt;br /&gt;
      . . .&lt;br /&gt;
      slicer hierarchy TheTime level Quarter filtered&lt;br /&gt;
      slicer hierarchy StoreType level StoreType selected&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select . . . &lt;br /&gt;
    from . . . &lt;br /&gt;
    where (?[TheTime].[Quarter]?,![StoreType].[StoreType]!)&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() {{&lt;br /&gt;
    . . .&lt;br /&gt;
    put(&amp;quot;![StoreType].[StoreType]!&amp;quot;,&amp;quot;select {} on columns,[StoreType].[StoreType].members on rows from Warehouse&amp;quot;);&lt;br /&gt;
    }};  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======detailed======&lt;br /&gt;
&lt;br /&gt;
► '''Returns:''' &amp;lt;code&amp;gt;.Members&amp;lt;/code&amp;gt; of level.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
axis pages {&lt;br /&gt;
    hierarchy StoreType level StoreType detailed&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;Select [StoreType].[StoreType].Members on pages&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Returns:''' &amp;lt;code&amp;gt;.Children&amp;lt;/code&amp;gt; of level, if the keyword &amp;lt;code&amp;gt;filtered&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;selected&amp;lt;/code&amp;gt; appears before the keyword &amp;lt;code&amp;gt;detailed&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
axis rows {&lt;br /&gt;
      hierarchy TheTime level Month filtered detailed&lt;br /&gt;
      hierarchy Store level StoreState selected detailed&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
     Select . . .&lt;br /&gt;
     Crossjoin($[TheTime].[Month]$.Children,§[Store].[StoreState]§.Children) &lt;br /&gt;
     on rows&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======except======&lt;br /&gt;
&lt;br /&gt;
See the section [[#Except() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
hierarchy TheTime level Month detailed except Quarter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .Except([TheTime].[Month].Members,{%[TheTime].[Quarter]%}) &lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======order by ... (descending)======&lt;br /&gt;
&lt;br /&gt;
See the section [[#Order() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
hierarchy PromotionMedia level MediaType detailed ordered by derived MediaPerc descending&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
     Order([PromotionMedia].[MediaType].Members,[Measures].[MediaPerc],Desc) &lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Member Tuple=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
[&amp;lt;function name&amp;gt; / &amp;lt;parameter function name&amp;gt; (INT)&lt;br /&gt;
  of ]&lt;br /&gt;
      Cube Hierarchy&lt;br /&gt;
  over&lt;br /&gt;
      Cube Measure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;function name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
* '''previous''' - see the section [[#.PrevMember function]] later in this document.&lt;br /&gt;
* '''next''' - see the section [[#.NextMember function]] later in this document.&lt;br /&gt;
* '''first''' - see the section [[#.FirstChild function]] later in this document.&lt;br /&gt;
* '''last''' - see the section [[#.LastChild function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;parameter function name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
* '''lag''' - see the section [[#.Lag() function]] later in this document.&lt;br /&gt;
* '''lead''' - see the section [[#.Lead() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive PrevPeriod from lag(01) of hierarchy TheTime over measure StoreSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[PrevPeriod] as '([Measures].[StoreSales],[TheTime].LAG(1))'&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Set Tuple=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;set function name&amp;gt; / &amp;lt;set parameter function name&amp;gt; (INT) &lt;br /&gt;
  of&lt;br /&gt;
     Cube Hierarchy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;set function name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
*'''year-to-date''' - See the section [[#YTD() function]] later in this document.&lt;br /&gt;
*'''periods''' - See the section [[#PeriodsToDate() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;set parameter function name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
*'''tail''' - See the section [[#Tail() function]] later in this document.&lt;br /&gt;
*'''head''' - See the section [[#Head() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive SumSCount from summation of periods of hierarchy TheTime level Year &lt;br /&gt;
    filtered  over measure SalesCount&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[SumSCount] as &lt;br /&gt;
     'SUM(PERIODSTODATE($[TheTime].[Year]$),[Measures].[SalesCount])' &lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Aggregation=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;aggregation name&amp;gt;&lt;br /&gt;
  of&lt;br /&gt;
     Cube Set Tuple&lt;br /&gt;
     /Cube Hierarchy&lt;br /&gt;
  over&lt;br /&gt;
     Cube Measure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;aggregation name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
*'''average''' - See the section [[#Avg() function]] later in this document.&lt;br /&gt;
*'''summation''' - See the section [[#Sum() function]] later in this document.&lt;br /&gt;
*'''aggregate''' - See the section [[#Aggregate() function]] later in this document.&lt;br /&gt;
*'''deviation''' - See the section [[#StdDev() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive SumSCount from summation of periods of hierarchy TheTime level Year &lt;br /&gt;
    filtered  over measure SalesCount&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &amp;quot;with member [Measures].[SumSCount] as &lt;br /&gt;
    'SUM(PERIODSTODATE($[TheTime].[Year]$),[Measures].[SalesCount])' . . .&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Set Aggregation=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;set aggregation name&amp;gt; (INT)&lt;br /&gt;
  of&lt;br /&gt;
     Cube Set Tuple&lt;br /&gt;
     /Cube Hierarchy&lt;br /&gt;
  over&lt;br /&gt;
     Cube Measure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;set aggregation name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
*'''topcount''' - See the section [[#TopCount() function]] later in this document.&lt;br /&gt;
*'''topsummation''' - See the section [[#TopSum() function]] later in this document.&lt;br /&gt;
*'''toppercentage''' - See the section [[#TopPercent() function]] later in this document.&lt;br /&gt;
*'''bottomcount''' - See the section [[#BottomCount() function]] later in this document.&lt;br /&gt;
*'''bottomsummation''' - See the section [[#BottomSum() function]] later in this document.&lt;br /&gt;
*'''bottompercentage''' - See the section [[#BottomPercent() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
topcount (10) of hierarchy Product level ProductCategory over measure StoreSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
&amp;quot;. . .&lt;br /&gt;
TOPCOUNT([Product].[ProductCategory].Members,10,[Measures].[StoreSales]) &lt;br /&gt;
. . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; . . . using task &amp;lt;task name&amp;gt; ([host &amp;lt;STRhost&amp;gt;] [port &amp;lt;INTport&amp;gt;]) locale &amp;lt;STRlocale&amp;gt; {&lt;br /&gt;
                  [columns {. . .}]&lt;br /&gt;
                  [conditions {. . .}]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*Task name is including BusinessAdministrator, PotentialOwner, Recipient, TaskInitiator, TaskStakeholder and ExcludedOwner.&lt;br /&gt;
*Default value of host is 127.0.0.1 and default port is 9123.&lt;br /&gt;
*The BPM process uses Jboss JBPM version 5.4.&lt;br /&gt;
&lt;br /&gt;
====columns====&lt;br /&gt;
&lt;br /&gt;
one or more “column” are defined here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
columns {&lt;br /&gt;
      column &amp;lt;task column&amp;gt;&lt;br /&gt;
      . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Task Column&amp;lt;/code&amp;gt; can be Name, Priority, Status, Subject, Description, ExpirationTime, CreatedOn, CreatedBy, ActivationTime, ActualOwner, TaskId, ProcessId, ProcessInstanceId and ProcessSessionId.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
column Status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private HashMap&amp;lt;Integer, ArrayList&amp;lt;String&amp;gt;&amp;gt; axisMap = new HashMap&amp;lt;Integer,ArrayList&amp;lt;String&amp;gt;&amp;gt;() {{&lt;br /&gt;
            put(0,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
                              add(&amp;quot;Status&amp;quot;);&lt;br /&gt;
                              . . .&lt;br /&gt;
            }});&lt;br /&gt;
    }};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Basics ==&lt;br /&gt;
&lt;br /&gt;
=== MDX (MultiDimensional eXpressions) ===&lt;br /&gt;
&lt;br /&gt;
MDX is a query language for OLAP databases, much like SQL is a query language for relational databases. It is also a calculation language, with syntax similar to spreadsheet formulas.&lt;br /&gt;
&lt;br /&gt;
MDX has several elements that are used by, or influence, most statements:&lt;br /&gt;
&lt;br /&gt;
*'''Identifiers''' - Identifiers are the names of objects such as cubes, dimensions, members or measures, e.g. &amp;lt;code&amp;gt;[Time]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[Measures]&amp;lt;/code&amp;gt;.&lt;br /&gt;
*'''Data types''' - Define the types of data that are contained by cells, member properties and cell properties. (For details see the section [[#Data types]] later in this document.)&lt;br /&gt;
*'''Expressions (MDX)''' - An expression is a combination of identifiers, values and operators. You can use an expression as part of the data to be retrieved by a query, or as a search condition to look for data that meets a set of criteria. Expressions include functions that return as a single value a set expression, e.g., &amp;lt;code&amp;gt;[Measures].[Discount Amount] * 1.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
*'''Operators''' - Operators are syntax elements that work with one or more simple MDX expressions to make more complex MDX expressions, e.g., &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt;.&lt;br /&gt;
*'''Functions''' - Functions are syntax elements that take zero, one or more input values and return a scalar value or an object, e.g., &amp;lt;code&amp;gt;.Dimension&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;.Level&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;IsEmpty()&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;Order()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.CurrentMember&amp;lt;/code&amp;gt; etc. &lt;br /&gt;
*'''Comments''' - Comments are pieces of text that are inserted into MDX statements or scripts to explain the purpose of the statement. MDX supports &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt; as commenting characters.&lt;br /&gt;
*'''Reserved keywords''' - Reserved keywords are words that are reserved for the use of MDX and should not be used for object names used in MDX statements, e.g., &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
====Data types====&lt;br /&gt;
&lt;br /&gt;
There are six primary data types in MDX:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
! width=&amp;quot;250px&amp;quot; | Type !! width=&amp;quot;750px&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
|scalar||Scalar is either a number or a string. It can be specified as a literal, e.g., &amp;lt;code&amp;gt;number 5&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;string &amp;quot;OLAP&amp;quot;&amp;lt;/code&amp;gt;, or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;Aggregate()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.UniqueName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.Value&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|-&lt;br /&gt;
|Dimension /&amp;lt;br&amp;gt; Hierarchy||Dimension is a dimension of a cube. A dimension is a primary organizer of measure and attribute information in a cube. MDX does not know of, nor does it assume, any dependencies between dimensions - they are assumed to be mutually independent. A dimension will contain some members organized in some hierarchy or hierarchies, each in turn containing levels. It can be specified by its unique name, e.g., &amp;lt;code&amp;gt;[Time]&amp;lt;/code&amp;gt; or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;.Dimension&amp;lt;/code&amp;gt;. Hierarchy is a dimension hierarchy of a cube. It can be specified by its unique name, e.g., &amp;lt;code&amp;gt;[Time].[Fiscal]&amp;lt;/code&amp;gt; or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;.Hierarchy&amp;lt;/code&amp;gt;. Hierarchies are contained within Dimensions. &lt;br /&gt;
|-&lt;br /&gt;
|Level||Level is a level in a dimension hierarchy. It can be specified by its unique name, e.g., &amp;lt;code&amp;gt;[Time].[Fiscal].[Month]&amp;lt;/code&amp;gt; or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;.Level&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Member||Member is a member in a dimension hierarchy. It can be specified by its unique name, e.g., &amp;lt;code&amp;gt;[Time].[Fiscal].[Month].[August 2014]&amp;lt;/code&amp;gt; or its qualified name, e.g., &amp;lt;code&amp;gt;[Time].[Calendar].[2014].[Q3].[August 2014]&amp;lt;/code&amp;gt;, or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;.PrevMember&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.Parent&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.FirstChild&amp;lt;/code&amp;gt; etc. &amp;lt;br&amp;gt;Note that all members are specific to a hierarchy. If the same product is a member of two different hierarchies (&amp;lt;code&amp;gt;[Product].[ByManufacturer]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[Product].[ByCategory]&amp;lt;/code&amp;gt;), then there will be two different members visible that may need to be coordinated in sets and tuples.&lt;br /&gt;
|-&lt;br /&gt;
|Tuple||Tuple is an ordered collection of one or more members of different dimensions. Tuples can be specified by enumerating the members, e.g., (&amp;lt;code&amp;gt;[Time].[Fiscal].[Month].[August]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[Measures].[Sales]&amp;lt;/code&amp;gt;) or returned by an MDX function, e.g., &amp;lt;code&amp;gt;.Item()&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Set||Set is an ordered collection of tuples with the same dimensionality, or hierarchality in the case of Microsoft's implementation. It can be specified by enumerating the tuples, e.g., &amp;lt;code&amp;gt;{([Measures].[Sales], [Time].[Fiscal].[2014]), ([Measures].[Sales], [Time].[Fiscal].[2014])}&amp;lt;/code&amp;gt; or returned by an MDX function or operator, e.g., &amp;lt;code&amp;gt;Crossjoin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Filter()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Order()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Descendants()&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|-&lt;br /&gt;
|other data types||Member properties are equivalent to attributes in the data warehouse sense. They can be retrieved by name in a query through an axis PROPERTIES clause of a query. The scalar data value of a member property for some member can be accessed in an expression through MDX, either by naming the property (e.g., &amp;lt;code&amp;gt;[Product].CurrentMember.[Sales Price]&amp;lt;/code&amp;gt;) or by using a special access function (e.g., &amp;lt;code&amp;gt;[Product].CurrentMember.Properties(&amp;quot;Sales Price&amp;quot;)&amp;lt;/code&amp;gt;). In limited contexts, MDX allows other data types as well - for example Array can be used inside the &amp;lt;code&amp;gt;SetToArray()&amp;lt;/code&amp;gt; function to specify an array that is not processed by MDX but passed to a user-defined function in an ActiveX library. Objects of other data types are represented as scalar strings indicating the object names, such as measure group name in Microsoft's &amp;lt;code&amp;gt;MeasureGroupMeasures()&amp;lt;/code&amp;gt; function or KPI(Key Performance Indicator) name in, for example, Microsoft's &amp;lt;code&amp;gt;KPIValue()&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;KPIGoal()&amp;lt;/code&amp;gt; functions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Basic Syntax of an MDX query====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
-- One of the three ways to write comments&lt;br /&gt;
SELECT {set 0} on COLUMNS, /* block comment */&lt;br /&gt;
  {set 1} on ROWS // line comment&lt;br /&gt;
  ...&lt;br /&gt;
  {set n} on AXIS(n)&lt;br /&gt;
FROM [cube]&lt;br /&gt;
WHERE (tuple) // called &amp;quot;slicer dimension&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Key differences between MDX and SQL&lt;br /&gt;
*“Cube in, Cube out” for MDX.&lt;br /&gt;
*Set notation needs to be used after &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;.&lt;br /&gt;
*The &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; clause can name only one cube.&lt;br /&gt;
*The &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt; clause describes the slicer axis (i.e., all the axes that are not query axes) and is filtered by its default members.&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&lt;br /&gt;
=====A typical query=====&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2013], &lt;br /&gt;
   [Time].[Calendar].[Year].[2014]} ON COLUMNS,&lt;br /&gt;
  {[Store].[Store Name].MEMBERS} ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Store Sales])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====.MEMBERS and .CHILDREN functions=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Hierarchy.Members&lt;br /&gt;
Level.Members&lt;br /&gt;
...&lt;br /&gt;
Member.Children&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;.Members&amp;lt;/code&amp;gt; returns the set of members in a dimension, level, or hierarchy.&lt;br /&gt;
* &amp;lt;code&amp;gt;.Children&amp;lt;/code&amp;gt; returns the set of children of a specified member.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2014].CHILDREN} ON COLUMNS,&lt;br /&gt;
  {[Store].[Store City].MEMBERS} ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Store Sales])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Calculate Member=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER parent1.name1 AS ’expression1’&lt;br /&gt;
  MEMBER parent2.name2 AS ’expression2’&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* If a calculated member is only required for a single MDX query, you can define that calculated member by using the &amp;lt;code&amp;gt;WITH&amp;lt;/code&amp;gt; keyword. A calculated member that is created by using the &amp;lt;code&amp;gt;WITH&amp;lt;/code&amp;gt; keyword no longer exists after the query has finished running.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Time].[Calendar].[Year].[2014].[H1] AS&lt;br /&gt;
’[Time].[Calendar].[Year].[2014].[Q1] + [Time].[Calendar].[Year].[2014].[Q2]’&lt;br /&gt;
MEMBER [Time].[Calendar].[Year].[2014].[H2] AS&lt;br /&gt;
’[Time].[Calendar].[Year].[2014].[Q3] + [Time].[Calendar].[Year].[2014].[Q4]’&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2014].[H1], &lt;br /&gt;
   [Time].[Calendar].[Year].[2014].[H2]} ON COLUMNS&lt;br /&gt;
  [Store].[Store Name].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': define and use new measures&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Measures].[ProfitPercent] AS&lt;br /&gt;
’([Measures].[Store Sales] – [Measures].[Store Cost]) / ([Measures].[Store Cost])’&lt;br /&gt;
SELECT [Time].[Calendar].[Year].[2014].CHILDREN ON COLUMNS,&lt;br /&gt;
 [Store].[Store Name].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[ProfitPercent])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Slicer Dimension=====&lt;br /&gt;
&lt;br /&gt;
► '''Example''': slice on the [Product] dimension&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2014].CHILDREN} ON COLUMNS,&lt;br /&gt;
  {[Store].[Store City].MEMBERS} ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Product].[Product Family].[Drink],&lt;br /&gt;
[Measures].[Store Sales])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Filter() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
FILTER(set, logical expression )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the set that results from filtering a specified set based on a search condition.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': if we are only interested in stores whose 2014 unit sales exceed 1000&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2014].CHILDREN} ON COLUMNS,&lt;br /&gt;
   FILTER( {[Store].[Store City].MEMBERS},&lt;br /&gt;
           ([Measures].[Unit Sales], [Time].[Calendar].[Year].[2014]) &amp;gt; 1000 ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Store Sales])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Order() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
ORDER(set, numeric/string expression, [, ASC | DESC | BASC | BDESC]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Arranges members of a specified set, optionally preserving or breaking the hierarchy.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''': list all measures for each city in decreasing order of their sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
    ORDER(&lt;br /&gt;
        [Store].[Store City].MEMBERS,&lt;br /&gt;
        [Measures].[Sales Count], &lt;br /&gt;
        BDESC&lt;br /&gt;
    ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': if we are only interested in stores whose name is between “Berlin” and “Heidelberg”&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
    ORDER(&lt;br /&gt;
        {[Store].[Store City].[Berlin]:[Heidelberg]},&lt;br /&gt;
        [Store].CURRENTMEMBER.Name,&lt;br /&gt;
        BASC&lt;br /&gt;
    ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Lag() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.LAG(index)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the member that is a specified number of positions before a specified member on the member's level.&lt;br /&gt;
* &amp;lt;code&amp;gt;.Lag(1)&amp;lt;/code&amp;gt; is equivalent to the &amp;lt;code&amp;gt;.PrevMember&amp;lt;/code&amp;gt; function. &lt;br /&gt;
* &amp;lt;code&amp;gt;.Lag(-1)&amp;lt;/code&amp;gt; is equivalent to the &amp;lt;code&amp;gt;.NextMember&amp;lt;/code&amp;gt; function. &lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for December, 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
       [Time].[Fiscal].[Month].[February 2015].LAG(2) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Lead() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.LEAD(index)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the member that is a specified number of positions following a specified member at the member's level.&lt;br /&gt;
* &amp;lt;code&amp;gt;.Lead(n)&amp;lt;/code&amp;gt; is equivalent to the &amp;lt;code&amp;gt;.Lag(-n)&amp;lt;/code&amp;gt; function. &lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for December, 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Fiscal].[Month].[February 2015].LEAD(-2) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====PrevMember function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.PREVMEMBER&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the previous member in the level that contains a specified member.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for January, 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Fiscal].[Month].[February 2015].PREVMEMBER ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====NextMember function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.NEXTMEMBER&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the next member in the level that contains a specified member.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for March, 2015&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Fiscal].[Month].[February 2015].NEXTMEMBER ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====FirstChild function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.FIRSTCHILD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the first child of a specified member.&lt;br /&gt;
* Leaf members have no children and therefore no first child.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for the first quarter of 2015, which is the first child of year 2015&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Calendar].[Year].[2015].FIRSTCHILD ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====LastChild function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.LASTCHILD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the last child of a specified member.&lt;br /&gt;
* Leaf members have no children and therefore no last child.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for March, 2015, which is the last child of the first quarter of the year 2015&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Calendar].[Quarter].[Q1 2015].LASTCHILD ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Head() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
HEAD(set [ ,count ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the first specified number of elements of a set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the profit of top-5 cities in terms of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    HEAD( ORDER( {[Store].[Store City].MEMBERS},&lt;br /&gt;
                [Measures].[Sales Count],&lt;br /&gt;
                BDESC &lt;br /&gt;
               ), &lt;br /&gt;
          5&lt;br /&gt;
        ) ON ROWS&lt;br /&gt;
FROM [Sales]	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Tail() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
TAIL(set [ ,count ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the last specified number of elements of a set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the profit of bottom-5 cities in terms of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    TAIL( ORDER( {[Store].[Store City].MEMBERS},&lt;br /&gt;
                [Measures].[Sales Count],&lt;br /&gt;
                BDESC &lt;br /&gt;
               ), &lt;br /&gt;
          5&lt;br /&gt;
        ) ON ROWS&lt;br /&gt;
FROM [Sales]	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====TopCount() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
TOPCOUNT(set, count [ ,numeric expression ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set in descending order and returns the specified number of elements with the highest values.&lt;br /&gt;
* The numeric expression is used to evaluate the tuple values.  If a numeric expression is not specified, the function returns the set of members in their natural order, without any sorting, behaving like the &amp;lt;code&amp;gt;Head()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the profit of top-5 cities in terms of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    TOPCOUNT( [Store].[Store City].MEMBERS,&lt;br /&gt;
                5,&lt;br /&gt;
                [Measures].[Sales Count]&lt;br /&gt;
            ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====BottomCount() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
BOTTOMCOUNT(set, count [ ,numeric expression ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set in ascending order and returns the specified number of elements with the lowest values. &lt;br /&gt;
* The numeric expression is used to evaluate the tuple values.  If a numeric expression is not specified, the function returns the set of members in their natural order, without any sorting, behaving like the &amp;lt;code&amp;gt;Tail()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the profit of bottom-5 cities in terms of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    BOTTOMCOUNT( [Store].[Store City].MEMBERS,&lt;br /&gt;
                5,&lt;br /&gt;
                [Measures].[Sales Count]&lt;br /&gt;
            ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====TopPercent() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
TOPPERCENT(set, percentage, numeric expression)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set in descending order and then returns the set of tuples with the highest values whose cumulative total is equal to or greater than a specified percentage of the total of all values.&lt;br /&gt;
* Percentage must be a positive value between 0 and 100.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the best profit and cities that make up the top 10% of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    TOPPERCENT( [Store].[Store City].MEMBERS,&lt;br /&gt;
                10,&lt;br /&gt;
                [Measures].[Sales Count]&lt;br /&gt;
            ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====BottomPercent() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
BOTTOMPERCENT(set, percentage, numeric expression)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set in ascending order and then returns the set of tuples with the lowest values whose cumulative total is equal to or greater than a specified percentage of the total of all values.&lt;br /&gt;
* Percentage must be a positive value between 0 and 100.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the worst profit and cities that make the bottom 10% of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    BOTTOMPERCENT( [Store].[Store City].MEMBERS,&lt;br /&gt;
                    10,&lt;br /&gt;
                    [Measures].[Sales Count]&lt;br /&gt;
                 ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====TopSum() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
TOPSUM(set, value, numeric expression)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set and returns the topmost set of elements whose cumulative total is at least a specified value. &lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the smallest set whose cumulative total using the profit measure is at least the sum of 50000, beginning with the members of this set with the highest sales count values&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    TOPSUM ( [Store].[Store City].MEMBERS,&lt;br /&gt;
             50000,&lt;br /&gt;
             [Measures].[Sales Count]&lt;br /&gt;
           ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====BottomSum() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
BOTTOMSUM(set, value, numeric expression)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set and returns the bottommost set of elements whose sum is equal to or less than a specified value.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the smallest set whose cumulative total using the profit measure is at least the sum of 50000, beginning with the members of this set with the smallest number of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    BOTTOMSUM( [Store].[Store City].MEMBERS,&lt;br /&gt;
               50000,&lt;br /&gt;
               [Measures].[Sales Count]&lt;br /&gt;
             ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Aggregate() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
AGGREGATE(set [, numeric expression])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns a number that is calculated by aggregating over the cells returned by the set expression. &lt;br /&gt;
* If a numeric expression ''is not'' provided, this function aggregates each measure within the current query context by using the default aggregation operator that is specified for each measure.&lt;br /&gt;
* If a numeric expression ''is'' provided, this function first evaluates, and then sums, the numeric expression for each cell in the specified set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': aggregate profit for all the calendar months&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Time].[Calendar].[All sales] AS&lt;br /&gt;
    AGGREGATE([Time].[Calendar].[Month].MEMBERS, [Measures].[Amount])&lt;br /&gt;
SELECT [Time].[Calendar].[All sales] ON COLUMNS,&lt;br /&gt;
  [Store].[Store City].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE [Measures].[Profit]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Avg() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
AVG(set [, numeric expression])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Evaluates a set and returns the average of the non-empty values of the cells in the set, averaged over the measures in the set or over a specified measure.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the average profit for each calendar year&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Measures].[Avg Profit] AS&lt;br /&gt;
      AVG( [Time].[Calendar].[Month].MEMBERS, Measures.[Profit])&lt;br /&gt;
SELECT&lt;br /&gt;
      Measures.[Avg Profit] ON COLUMNS,&lt;br /&gt;
      [Time].[Calendar].[Year].MEMBERS ON ROWS&lt;br /&gt;
FROM  [Sales]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Sum() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SUM(set [, numeric expression])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Shows the sum of all values of the cells in the set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the total profit for the calendar years 2013 and 2014 (the sum of the 2013 and 2014 profit values for all members of the &amp;lt;code&amp;gt;[Product].[Category]&amp;lt;/code&amp;gt; hierarchy)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Measures].[Sum Profit] AS &lt;br /&gt;
        SUM( { [Time].[Calendar].[Year].[2013],&lt;br /&gt;
               [Time].[Calendar].[Year].[2014] }&lt;br /&gt;
           , [Measures].[Profit]&lt;br /&gt;
           )&lt;br /&gt;
SELECT [Measures].[Sum Profit] ON COLUMNS,&lt;br /&gt;
         [Product].[Category].Members ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====StdDev() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
STDDEV(set [, numeric expression])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the sample standard deviation of a numeric expression evaluated over a set, using the unbiased population formula (dividing by n-1).&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the standard deviation of the profit values, evaluated over the first 3 months of calendar year 2014, using the unbiased population formula&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Measures].[Stddev Profit] AS &lt;br /&gt;
	STDDEV( { [Time].[Calendar].[Month].[January 2014],&lt;br /&gt;
               [Time].[Calendar].[Month].[February 2014],&lt;br /&gt;
               [Time].[Calendar].[Month].[March 2014]}&lt;br /&gt;
           , [Measures].[Profit]&lt;br /&gt;
	   )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====PeriodsToDate() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
PERIODSTODATE([level [, member]])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns a set of sibling members from the same level as a given member, starting with the first sibling and ending with the given member, as constrained by a specified level in the Time dimension.&lt;br /&gt;
* If the &amp;lt;code&amp;gt;member&amp;lt;/code&amp;gt; expression is missing, then the level &amp;lt;code&amp;gt;hierarchy.CurrentMember&amp;lt;/code&amp;gt; will be used.&lt;br /&gt;
* If the &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt; expression is missing, then the parent level of the &amp;lt;code&amp;gt;[Time].CurrentMember&amp;lt;/code&amp;gt; in the default time dimension of the cube will be used.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': aggregate profit for the first 8 calendar months of the year 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Time].[Calendar].[first8Months2014] AS&lt;br /&gt;
    AGGREGATE (&lt;br /&gt;
        PERIODSTODATE(  [Time].[Calendar].[Year], &lt;br /&gt;
                        [Time].[Calendar].[Month].[August 2014],&lt;br /&gt;
                     )&lt;br /&gt;
              )		&lt;br /&gt;
SELECT [Time].[Calendar].[All sales] ON COLUMNS,&lt;br /&gt;
    [Store].[Store City].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE [Measures].[Profit]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====YTD() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
YTD([member])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns a set of sibling members from the same level as a given member, starting with the first sibling and ending with the given member, as constrained by the Year level in the Time dimension.&lt;br /&gt;
* &amp;lt;code&amp;gt;Ytd(member)&amp;lt;/code&amp;gt; is equivalent to &amp;lt;code&amp;gt;PeriodsToDate(Year level, member)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If no ''member'' is defined, then &amp;lt;code&amp;gt;[Time].currentMember&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
* This function does not work when the Type property is set to &amp;lt;code&amp;gt;FiscalYears&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': aggregate profit for the first 8 calendar months of the year 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Time].[Calendar].[first8Months2014] AS&lt;br /&gt;
    AGGREGATE (&lt;br /&gt;
                YTD( [Time].[Calendar].[Month].[August 2014] )&lt;br /&gt;
              )		&lt;br /&gt;
SELECT [Time].[Calendar].[All sales] ON COLUMNS,&lt;br /&gt;
    [Store].[Store City].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE [Measures].[Profit]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====CrossJoin() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
CROSSJOIN(set1, set2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the cross product of one or more sets.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': the query axis (ROWS) is the combination of 2 cube dimensions&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Time].[Calendar].[Year].[2014].CHILDREN ON COLUMNS,&lt;br /&gt;
    CROSSJOIN( [Store].[Store State].MEMBERS,&lt;br /&gt;
                [Product].[Product Family].MEMBERS&lt;br /&gt;
             ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====NonEmpty() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
NONEMPTY(set1 [,set2])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the set of non-empty tuples from a specified set, based on the cross product of the specified set with a second set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Time].[Calendar].[Year].[2014].CHILDREN ON COLUMNS,&lt;br /&gt;
    NONEMPTY(&lt;br /&gt;
        CROSSJOIN( [Store].[Store State].MEMBERS,&lt;br /&gt;
                   [Product].[Product Family].MEMBERS&lt;br /&gt;
                 )&lt;br /&gt;
            ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====NonEmptyCrossJoin() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
NONEMPTYCROSSJOIN(set1 [,set2, . . .][, count])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns a set that contains the cross product of one or more sets, excluding empty tuples and tuples without associated fact table data.&lt;br /&gt;
* If &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt; is not specified, the function cross-joins all specified sets and excludes empty members from the result set.&lt;br /&gt;
* If a number of sets is specified, the function cross joins the numbers of sets specified, starting with the first specified set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Time].[Calendar].[Year].[2014].CHILDREN ON COLUMNS,&lt;br /&gt;
    NONEMPTYCROSSJOIN( [Store].[Store State].MEMBERS,&lt;br /&gt;
                       [Product].[Product Family].MEMBERS&lt;br /&gt;
                     ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Except() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
EXCEPT(set1 ,set2 [, ALL])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Evaluates two sets and removes those tuples in the first set that also exist in the second set;  ensuing duplicates are optionally removed.&lt;br /&gt;
* If &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt; is specified, the function retains duplicates found in the first set;  duplicates found in the second set will still be removed. The members are returned in the order they appear in the first set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Time].[Calendar].[Month].CHILDREN ON COLUMNS,&lt;br /&gt;
    EXCEPT( [Product].[Product Categories].[All].Children ,&lt;br /&gt;
            {[Product].[Product Categories].[Components]}&lt;br /&gt;
          ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jboss JBPM 5.4 ===&lt;br /&gt;
&lt;br /&gt;
jBPM is a flexible Business Process Management (BPM) suite. It allows you to model, execute and monitor business processes, throughout their life cycle.&lt;br /&gt;
&lt;br /&gt;
jBPM focuses on executable business processes, which are business processes that contain enough detail so that they can actually be executed on a BPM engine. Executable business processes bridge the gap between business users and developers as they are higher-level and use domain-specific concepts that are understood by business users but can also be executed directly.&lt;br /&gt;
&lt;br /&gt;
To interact with the process engine (for example, to start a process), you need to set up a session. This session is used to communicate with the process engine. A session needs to have a reference to a knowledge base, which in turn contains a reference to all the relevant process definitions. This knowledge base is used to look up the process definitions whenever necessary. To create a session, you first need to create a knowledge base, load all the necessary process definitions (this can be from various sources, such as classpath, file system or process repository) and then instantiate a session.&lt;br /&gt;
&lt;br /&gt;
For example, imagine you are writing an application to process sales orders. You could then define one or more process definitions that define how the order should be processed. When starting up your application, you first need to create a knowledge base that contains those process definitions. You can then create a session based on this knowledge base so that, whenever a new sales order comes in, a new process instance is started for that sales order. That process instance contains the state of the process for that specific sales request.&lt;br /&gt;
&lt;br /&gt;
The jBPM project has a clear separation between the API the users should be interacting with and the actual implementation classes. The public API exposes most of the features we believe &amp;quot;normal&amp;quot; users can safely use and should remain rather stable across releases. Expert users can still access internal classes but should be aware that they should know what they are doing and that the internal API might still change in the future.&lt;br /&gt;
&lt;br /&gt;
As explained above, the jBPM API should thus be used to create a knowledge base that contains your process definitions, and to create a session to start new process instances, signal existing ones, register listeners, etc.&lt;br /&gt;
&lt;br /&gt;
You can find more information at http://docs.jboss.org/jbpm/v5.4/userguide/&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Datamart_DSL&amp;diff=1999</id>
		<title>Datamart DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Datamart_DSL&amp;diff=1999"/>
				<updated>2017-07-26T20:49:13Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* default */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Datamart DSL ==&lt;br /&gt;
&lt;br /&gt;
A data mart is a condensed and more focused version of a data warehouse, that reflects the regulations and process specifications of each business unit within an organization. Each data mart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
'''Datamart DSL''' generates for each datamart a java file, in which the SQL query for entities, or MDX query for Cubes, or task client connection for BPM are defined.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the Datamart DSL are:&lt;br /&gt;
*'''package''' - The root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
*'''import''' declarations - Used to import external models or even Java classes.&lt;br /&gt;
*'''datamart''' - Defines which data warehouse and which entity/cube/BPM the datamart will use. It contains further elements such as navigation, properties, conditions for entity, derive, axis, slicer for cube and columns, conditions for BPM.&lt;br /&gt;
*'''navigation''' - Used to define joins of entities as “one-to-many” or “many-to-one”.&lt;br /&gt;
*'''one to many … to … / many to one … to …''' - Used to define joins of entities in an MDX query.&lt;br /&gt;
*'''properties''' - Used to define the properties of an entity.&lt;br /&gt;
*'''property''' - Used to define columns and axes for an entity.&lt;br /&gt;
*'''conditions''' - Used to define conditions for entities and BPMs.&lt;br /&gt;
*'''condition''' - Used to define a &amp;quot;Where&amp;quot;-clause for an entity query or conditions for BPM.&lt;br /&gt;
*'''derive … from …''' - Used to define a derived measure of a cube query.&lt;br /&gt;
*'''measure''' - Used in cubes to specify members of a special dimension or a quantity to measure, for example, unit sales of a product, or the cost price of inventory items.&lt;br /&gt;
*'''derived''' - Used for cubes for derived measures defined in the same datamart, instead of the keyword “measure”.&lt;br /&gt;
*'''axis''' - Used for cubes to define the members of the axis, which can be measures, derived measures, or an aggregation or function of a hierarchy. &lt;br /&gt;
*'''hierarchy''' - Used for cubes to define a set of members organized in a structure for convenient analysis. For example, the store hierarchy consists of the store name, city, state, and nation. The hierarchy allows you to form intermediate sub-totals:  the sub-total for a state is the sum of the sub-totals of all of the cities in that state, each of which is the sum of the sub-totals of the stores in that city.&lt;br /&gt;
*'''slicer''' -  Used for cubes to define the &amp;quot;Where&amp;quot;-clause in a cube query. &lt;br /&gt;
*'''columns''' - Used for BPMs to define one or more columns.&lt;br /&gt;
*'''column''' - Used for BPMs to define which BPM column is used in a datamart.&lt;br /&gt;
&lt;br /&gt;
===Datamart definition===&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; [described by &amp;lt;discription&amp;gt;] &lt;br /&gt;
    from &amp;lt;schema name&amp;gt; persistenceUnit &amp;lt;persistence unit name&amp;gt; &lt;br /&gt;
    using entity/cube/task &amp;lt;entity/cube/task name&amp;gt; [&amp;lt;task mode&amp;gt; &amp;lt;mode name&amp;gt; for task] [nonempty values for cube] {&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* This generates a ''&amp;lt;datamart name&amp;gt;Datamart.java'' file, in which a java class named &amp;lt;code&amp;gt;&amp;lt;datamart name&amp;gt;Datamart&amp;lt;/code&amp;gt; is defined. In this class (which is extended from java class &amp;lt;code&amp;gt;ACubeDatamart&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AEntityDatamart&amp;lt;/code&amp;gt;), the database connection, the querying of entities and cubes and the task-client connection of tasks are defined.&lt;br /&gt;
* &amp;lt;task name&amp;gt; can be &amp;lt;code&amp;gt;BusinessAdministrator&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PotentialOwner&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Recipient&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TaskInitiator&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TaskStakeholder&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ExcludedOwner&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;task mode&amp;gt; can be &amp;lt;code&amp;gt;locale&amp;lt;/code&amp;gt; (String), &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; (String) or &amp;lt;code&amp;gt;port&amp;lt;/code&amp;gt; (Integer).'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart EmployeeSalary &lt;br /&gt;
    from CCNGDEFAULT persistenceUnit &amp;quot;foodmart&amp;quot; &lt;br /&gt;
    using entity Memployee {. . .}&lt;br /&gt;
&lt;br /&gt;
datamart SalesByState described by &amp;quot;cube based profit review&amp;quot; &lt;br /&gt;
    from CCNGDEFAULT persistenceUnit &amp;quot;foodmart&amp;quot; &lt;br /&gt;
    using cube Sales nonempty values {. . .}&lt;br /&gt;
&lt;br /&gt;
datamart TaskDetails described by &amp;quot;Task details&amp;quot; &lt;br /&gt;
    from BPM persistenceUnit &amp;quot;drools&amp;quot; &lt;br /&gt;
    using task BusinessAdministrator locale &amp;quot;de-DE&amp;quot; {. . .}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===entity===&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; . . . using entity &amp;lt;entity A name&amp;gt; (tracking){&lt;br /&gt;
		[navigation {. . .}]&lt;br /&gt;
		[properties {. . .}] &lt;br /&gt;
		[conditions {. . .}] &lt;br /&gt;
		[filler rows &amp;lt;INTminRow&amp;gt; to &amp;lt;INTmaxRow&amp;gt;{. . .}] &lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====navigation====&lt;br /&gt;
Using the &amp;lt;code&amp;gt;many to one&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;one to many&amp;lt;/code&amp;gt; clause creates a JOIN of entities in a query.&lt;br /&gt;
&lt;br /&gt;
======many to one … to entity …======&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity &amp;lt;entity A name&amp;gt; {&lt;br /&gt;
    navigation {&lt;br /&gt;
        many to one &amp;lt;entity A name&amp;gt;.&amp;lt;entity B reference in entity A&amp;gt; to entity &amp;lt;entity B name&amp;gt; { &lt;br /&gt;
            [navigation {. . . }] &lt;br /&gt;
            [properties {. . . }] &lt;br /&gt;
            [conditions {. . . }] &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart EmployeeSalary from CCNGDEFAULT persistenceUnit &amp;quot;foodmart&amp;quot; using entity Memployee {&lt;br /&gt;
    navigation { &lt;br /&gt;
        many to one Memployee.position to entity Mposition {&lt;br /&gt;
            properties {&lt;br /&gt;
                property position_title on axis rows&lt;br /&gt;
                property max_scale on axis columns&lt;br /&gt;
                property min_scale on axis columns&lt;br /&gt;
            }&lt;br /&gt;
            conditions {&lt;br /&gt;
                condition property pay_type = filtered&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select Mposition.MAX_SCALE as \&amp;quot;max_scale\&amp;quot;,&lt;br /&gt;
            Mposition.MIN_SCALE as \&amp;quot;min_scale\&amp;quot;, &lt;br /&gt;
            Mposition.POSITION_TITLE as \&amp;quot;position_title\&amp;quot;&lt;br /&gt;
            . . .  &lt;br /&gt;
    from CCNG.MEMPLOYEE Memployee &lt;br /&gt;
    left join CCNG.MPOSITION Mposition on(Mposition.id=Memployee.position_id) &lt;br /&gt;
    where (Mposition.pay_type = $Mposition.pay_type$) &lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
private HashMap&amp;lt;Integer, ArrayList&amp;lt;String&amp;gt;&amp;gt; axisMap = new HashMap&amp;lt;Integer,ArrayList&amp;lt;String&amp;gt;&amp;gt;() {{&lt;br /&gt;
    put(0,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
        . . .&lt;br /&gt;
        add(&amp;quot;max_scale&amp;quot;);&lt;br /&gt;
        add(&amp;quot;min_scale&amp;quot;);&lt;br /&gt;
    }});&lt;br /&gt;
    put(1,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
        . . .&lt;br /&gt;
        add(&amp;quot;position_title&amp;quot;);&lt;br /&gt;
    }});&lt;br /&gt;
}};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======one to many … to entity …======&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entity &amp;lt;entity A name&amp;gt; {&lt;br /&gt;
    navigation {&lt;br /&gt;
        one to many &amp;lt;entity A name&amp;gt;.&amp;lt;entity B reference in entity A&amp;gt; to entity &amp;lt;entity B name&amp;gt; { &lt;br /&gt;
            [navigation {. . . }] &lt;br /&gt;
            [properties {. . . }] &lt;br /&gt;
            [conditions {. . . }] &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart SalesByDistrict described by &amp;quot;entity based aggregation of store sales and store cost&amp;quot; &lt;br /&gt;
    from CCNGDEFAULT persistenceUnit &amp;quot;foodmart&amp;quot; &lt;br /&gt;
    using entity Mregion &lt;br /&gt;
{&lt;br /&gt;
    navigation {&lt;br /&gt;
        one to many Mstore.region to entity Mstore {&lt;br /&gt;
            navigation {&lt;br /&gt;
                one to many Msales_fact_1998.store to entity Msales_fact_1998 {&lt;br /&gt;
                    properties {&lt;br /&gt;
                        property store_sales aggregate summation on axis columns&lt;br /&gt;
                        property store_cost aggregate summation on axis columns&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select SUM(Msales_fact_1998.STORE_SALES) as \&amp;quot;store_sales\&amp;quot;,&lt;br /&gt;
            SUM(Msales_fact_1998.STORE_COST) as \&amp;quot;store_cost\&amp;quot; &lt;br /&gt;
            . . .&lt;br /&gt;
    from CCNG.MREGION Mregion &lt;br /&gt;
    left join CCNG.MSTORE Mstore on(Mstore.region_id=Mregion.id) &lt;br /&gt;
    left join CCNG.MSALES_FACT_1998 Msales_fact_1998 on(Msales_fact_1998.store_id=Mstore.id) &lt;br /&gt;
    where . . . group by . . .&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() &lt;br /&gt;
{{&lt;br /&gt;
    put(&amp;quot;$Mregion.id$&amp;quot;,&amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
    put(&amp;quot;$Mstore.id$&amp;quot;,&amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
    put(&amp;quot;$Msales_fact_1998.id$&amp;quot;,&amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
    . . .&lt;br /&gt;
    }};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====properties====&lt;br /&gt;
&lt;br /&gt;
One or more properties are defined here, each using the &amp;lt;code&amp;gt;property&amp;lt;/code&amp;gt; keyword and specifying which kind of aggregation of the property will be queried on which axis.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
properties {&lt;br /&gt;
property &amp;lt;entity A property&amp;gt; [aggregate &amp;lt;sql aggregation&amp;gt;] &lt;br /&gt;
[on axis &amp;lt;axis name&amp;gt;] [scale &amp;lt;scale group number&amp;gt;]&lt;br /&gt;
. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;sql aggregation&amp;gt; can be average, summation or count.&lt;br /&gt;
*&amp;lt;axis name&amp;gt; can be ''columns'' or ''rows''.&lt;br /&gt;
*&amp;lt;scale group number&amp;gt; is in the range ''group1''-''group9''.&lt;br /&gt;
&lt;br /&gt;
=====on axis ''rows''/''columns''=====&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
property sales_region on axis rows&lt;br /&gt;
property store_sales _nm on axis columns&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private HashMap&amp;lt;Integer, ArrayList&amp;lt;String&amp;gt;&amp;gt; axisMap = new HashMap&amp;lt;Integer,ArrayList&amp;lt;String&amp;gt;&amp;gt;() {{&lt;br /&gt;
            put(0,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
                add(&amp;quot;store_sales&amp;quot;);&lt;br /&gt;
                . . .&lt;br /&gt;
            }});&lt;br /&gt;
            put(1,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
                add(&amp;quot;sales_region&amp;quot;);&lt;br /&gt;
                . . .&lt;br /&gt;
            }});&lt;br /&gt;
    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====aggregate=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sql aggregation&amp;gt; can be:&lt;br /&gt;
*'''average''' - SQL Avg() function, returns the average of (a subset of) all values in a specified column&lt;br /&gt;
*'''summation''' -  SQL Sum() function, returns the sum of (a subset of) all values in a specified column.&lt;br /&gt;
*'''count''' -  SQL Count() function, returns the total number of (a subset of) values in a specified column.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
property store_sales aggregate summation &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select SUM(Msales_fact_1998.STORE_SALES) as \&amp;quot;store_sales\&amp;quot;, . . . &lt;br /&gt;
     from . . . left join . . . on(. . .) group by . . . &amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====scale=====&lt;br /&gt;
&lt;br /&gt;
Used to define different groups of scale values (&amp;lt;code&amp;gt;group1&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;group9&amp;lt;/code&amp;gt;) for diagrams and tables.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
property store_sales scale group1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====conditions====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
conditions {&lt;br /&gt;
     condition &lt;br /&gt;
     [&amp;lt;operator&amp;gt;]&lt;br /&gt;
           Number&lt;br /&gt;
           /STRING&lt;br /&gt;
           /(filtered [optional])|selected&lt;br /&gt;
           /property &amp;lt;entity A property&amp;gt; [aggregate &amp;lt;sql aggregation&amp;gt;]&lt;br /&gt;
           /entitycolumn &amp;lt;entity C&amp;gt;.&amp;lt;entity C Property&amp;gt;&lt;br /&gt;
           /column &amp;lt;task column&amp;gt;&lt;br /&gt;
     [&amp;lt;operator&amp;gt;&lt;br /&gt;
           Number&lt;br /&gt;
           /STRING&lt;br /&gt;
           /(filtered [optional])|selected&lt;br /&gt;
           /property &amp;lt;entity A property&amp;gt; [aggregate &amp;lt;sql aggregation&amp;gt;]&lt;br /&gt;
           /entitycolumn &amp;lt;entity D&amp;gt;.&amp;lt;entity D Property&amp;gt;&lt;br /&gt;
           /column &amp;lt;task column&amp;gt;&lt;br /&gt;
     ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;operator&amp;gt; can be &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;like&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;.&lt;br /&gt;
*&amp;lt;task column&amp;gt; can be &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Priority&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Status&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Subject&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ExpirationTime&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CreatedOn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CreatedBy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ActivationTime&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ActualOwner&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TaskId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ProcessId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ProcessInstanceId&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ProcessSessionId&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====selected=====&lt;br /&gt;
&lt;br /&gt;
The specified column will be selectable in the GUI.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
condition property gtin_cd = selected&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
    where (gtin.gtin_cd in (§gtin.gtin_cd§))&lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() &lt;br /&gt;
{{&lt;br /&gt;
    . . . &lt;br /&gt;
    put(&amp;quot;§gtin.gtin_cd§&amp;quot;,&amp;quot;select distinct GTIN_CD as \&amp;quot;gtin_cd\&amp;quot; from pod.GTIN&amp;quot;);&lt;br /&gt;
    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====filtered=====&lt;br /&gt;
&lt;br /&gt;
The specified column will be filterable in the GUI.&lt;br /&gt;
&amp;lt;code&amp;gt;optional&amp;lt;/code&amp;gt; means this specified column can be chosen for being filtered or not.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
condition property pay_type = filtered	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
&amp;quot;. . .&lt;br /&gt;
where (Mposition.pay_type = $Mposition.pay_type$)&lt;br /&gt;
. . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;()&lt;br /&gt;
{{&lt;br /&gt;
    . . .&lt;br /&gt;
    put(&amp;quot;$Mposition.pay_type$&amp;quot;,&amp;quot;select distinct PAY_TYPE as \&amp;quot;pay_type\&amp;quot; from CCNG.MPOSITION&amp;quot;);&lt;br /&gt;
    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
condition property education_level = filtered optional&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
    where (($Memployee.education_level$='*' or Memployee.education_level = $Memployee.education_level$))&lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() {{&lt;br /&gt;
	. . . &lt;br /&gt;
      put(&amp;quot;$Memployee.education_level$&amp;quot;,&amp;quot;select '*' from dual union select distinct EDUCATION_LEVEL as \&amp;quot;education_level\&amp;quot; from CCNG.MEMPLOYEE&amp;quot;);&lt;br /&gt;
    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====filler rows ''mm'' to ''nn''=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
filler rows &amp;lt;INTminRow&amp;gt; to &amp;lt;INTmaxRow&amp;gt;{&lt;br /&gt;
      [fill &amp;lt;entity property&amp;gt; with &lt;br /&gt;
            filler-address city&lt;br /&gt;
            | filler-address postalcode&lt;br /&gt;
            | filler-date future &amp;lt;INT&amp;gt; years&lt;br /&gt;
            | filler-date past &amp;lt;INT&amp;gt; years&lt;br /&gt;
            | filler-date range &amp;lt;+-INTby&amp;gt; up to and including &amp;lt;+-INTey&amp;gt; years&lt;br /&gt;
            | filler-person full name&lt;br /&gt;
            | filler-person first name&lt;br /&gt;
            | filler-person last name&lt;br /&gt;
            | filler-person email&lt;br /&gt;
            | filler-person phone&lt;br /&gt;
            | filler-person gender male as &amp;lt;STRINGmt&amp;gt; female as &amp;lt;STRINGft&amp;gt;&lt;br /&gt;
            | filler-signed-double range &lt;br /&gt;
              [ &amp;lt;+- Double&amp;gt; | &amp;lt;entity property&amp;gt;] &lt;br /&gt;
              up to and including&lt;br /&gt;
              [ &amp;lt;+- Double &amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              with &amp;lt;INT&amp;gt; decimals&lt;br /&gt;
              round to &amp;lt; Double &amp;gt;&lt;br /&gt;
            | filler-signed-double random (&amp;lt;+-Double &amp;gt;)&lt;br /&gt;
            | filler-signed-integer range &lt;br /&gt;
              [ &amp;lt;+-INT&amp;gt; | &amp;lt;entity property&amp;gt;] &lt;br /&gt;
              up to and including&lt;br /&gt;
              [ &amp;lt;+-INT&amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              round to &amp;lt;INT&amp;gt;&lt;br /&gt;
            | filler-signed-integer random ( &amp;lt;+-INT&amp;gt; )&lt;br /&gt;
            | filler-text random ( &amp;lt;STRING&amp;gt; )&lt;br /&gt;
            | filler-text paragraps [&amp;lt;INT&amp;gt;]&lt;br /&gt;
            | filler-text sentences [&amp;lt;INT&amp;gt;]&lt;br /&gt;
            | filler-text words [&amp;lt;INT&amp;gt;]&lt;br /&gt;
            | filler-unsigned-double range &lt;br /&gt;
              [ &amp;lt; Double &amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              up to and including&lt;br /&gt;
              [ &amp;lt; Double &amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              with &amp;lt;INT&amp;gt; decimals&lt;br /&gt;
              round to &amp;lt; Double &amp;gt;&lt;br /&gt;
            | filler-unsigned-double random ( &amp;lt; Double &amp;gt; )&lt;br /&gt;
            | filler-unsigned-integer range &lt;br /&gt;
              [ &amp;lt;INT&amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              up to and including&lt;br /&gt;
              [ &amp;lt;INT&amp;gt; | &amp;lt;entity property&amp;gt;]&lt;br /&gt;
              round to &amp;lt;INT&amp;gt;&lt;br /&gt;
            | filler-unsigned-integer random ( &amp;lt;INT&amp;gt; )&lt;br /&gt;
      ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===cube===&lt;br /&gt;
&lt;br /&gt;
Use the keyword &amp;lt;code&amp;gt;cube&amp;lt;/code&amp;gt; to define the data source cube of a FROM clause in an MDX query.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; . . . using cube &amp;lt;cube name&amp;gt;  [nonempty values] { &lt;br /&gt;
    [derive &amp;lt;derived measure name&amp;gt; from &lt;br /&gt;
        [&amp;lt;derive operator&amp;gt;]&lt;br /&gt;
            Number&lt;br /&gt;
            /Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            /Cube Member Tuple&lt;br /&gt;
            /Cube Aggregation&lt;br /&gt;
        [&amp;lt;derive operator&amp;gt;]&lt;br /&gt;
            [Number&lt;br /&gt;
            /Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            /Cube Member Tuple&lt;br /&gt;
            /Cube Aggregation]&lt;br /&gt;
	]&lt;br /&gt;
	[axis &amp;lt;axis name&amp;gt; {&lt;br /&gt;
            Cube Hierarchy&lt;br /&gt;
            /Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            /Cube Set Aggregation&lt;br /&gt;
        }]&lt;br /&gt;
        [slicer &lt;br /&gt;
            Cube Hierarchy&lt;br /&gt;
            /Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            /Cube Set Aggregation&lt;br /&gt;
        ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keywords====&lt;br /&gt;
&lt;br /&gt;
=====nonempty values=====&lt;br /&gt;
&lt;br /&gt;
See the sections [[#NonEmpty() function]] and [[#NonEmptyCrossjoin() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; [described by &amp;lt;description&amp;gt;] &lt;br /&gt;
    from &amp;lt;schema name&amp;gt; persistenceUnit &amp;lt;persistence unit name&amp;gt; &lt;br /&gt;
    using cube &amp;lt;cube name&amp;gt; &lt;br /&gt;
    nonempty values &lt;br /&gt;
{&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select &lt;br /&gt;
    Non Empty{ . . . } on columns, &lt;br /&gt;
    NonEmptyCrossjoin(. . .) on rows &lt;br /&gt;
    from &lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====derive … from=====&lt;br /&gt;
&lt;br /&gt;
Creates a Calculate Member.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive &amp;lt;derived measure name&amp;gt; from&lt;br /&gt;
    [&amp;lt;derive operator&amp;gt;]&lt;br /&gt;
        Number&lt;br /&gt;
        /Cube Measure&lt;br /&gt;
        /Cube Derived Measure&lt;br /&gt;
        /Cube Member Tuple&lt;br /&gt;
        /Cube Aggregation&lt;br /&gt;
    [&amp;lt;derive operator&amp;gt;]&lt;br /&gt;
        [Number&lt;br /&gt;
        /Cube Measure&lt;br /&gt;
        /Cube Derived Measure&lt;br /&gt;
        /Cube Member Tuple&lt;br /&gt;
        /Cube Aggregation]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;derive operator&amp;gt;&amp;lt;/code&amp;gt; can be &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive SumSales from measure SaleNumber * measure unitPrice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[SumSales] as '[Measures].[SaleNumber]*[Measures].[unitPrice]'&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia condensed over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].[All Media])'&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====axis=====&lt;br /&gt;
&lt;br /&gt;
Use the keyword &amp;lt;code&amp;gt;axis&amp;lt;/code&amp;gt; to define the query axes of a SELECT clause in an MDX query.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
axis &amp;lt;axis name&amp;gt; {&lt;br /&gt;
    Cube Hierarchy&lt;br /&gt;
    /Cube Measure&lt;br /&gt;
    /Cube Derived Measure&lt;br /&gt;
    /Cube Set Aggregation&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;axis name&amp;gt;&amp;lt;/code&amp;gt; can be &amp;lt;code&amp;gt;columns&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rows&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pages&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chapters&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sections&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
axis columns {&lt;br /&gt;
    hierarchy PromotionMedia level MediaType detailed ordered by derived MediaPerc descending  &lt;br /&gt;
    derived MediaPerc&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select CrossJoin(Order([PromotionMedia].[MediaType].Members,[Measures].[MediaPerc],Desc),[Measures].[MediaPerc]) on columns&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====slicer=====&lt;br /&gt;
&lt;br /&gt;
Use the keyword &amp;lt;code&amp;gt;slicer&amp;lt;/code&amp;gt; to define the slicer axis of a WHERE clause in an MDX query.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
slicer&lt;br /&gt;
    Cube Hierarchy&lt;br /&gt;
    /Cube Measure&lt;br /&gt;
    /Cube Derived Measure&lt;br /&gt;
    /Cube Set Aggregation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
     where&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Definitions====&lt;br /&gt;
&lt;br /&gt;
=====Cube Measure=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
measure &amp;lt;cube measure&amp;gt; [scale &amp;lt;scale group number&amp;gt;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;scale group number&amp;gt;&amp;lt;/code&amp;gt; can have the values &amp;lt;code&amp;gt;group1&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;group9&amp;lt;/code&amp;gt;, permitting different scales values for diagrams and tables.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Derived Measure=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derived &amp;lt;derived measure name defined in this datamart&amp;gt; &lt;br /&gt;
[scale &amp;lt;scale group number&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;lt;scale group number&amp;gt;&amp;lt;/code&amp;gt; can have the values &amp;lt;code&amp;gt;group1&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;group9&amp;lt;/code&amp;gt;, permitting different scales values for diagrams and tables.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Hierarchy=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
hierarchy &amp;lt;hierarchy name&amp;gt; &lt;br /&gt;
    [default] &lt;br /&gt;
    [condensed] &lt;br /&gt;
    [exploded] &lt;br /&gt;
    [level &amp;lt;level name&amp;gt; &lt;br /&gt;
        [filtered|selected]&lt;br /&gt;
    ] &lt;br /&gt;
    [detailed &lt;br /&gt;
        [except &amp;lt;level name&amp;gt;] &lt;br /&gt;
        [ordered by &lt;br /&gt;
            [Cube Measure&lt;br /&gt;
            /Cube Derived Measure&lt;br /&gt;
            ]&lt;br /&gt;
            [descending]&lt;br /&gt;
        ]&lt;br /&gt;
    ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======default======&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;.DefaultMember&amp;lt;/code&amp;gt; of hierarchy, if defaultMember of hierarchy ''is'' defined in [[Cube DSL]].&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dimension PromotionMedia {&lt;br /&gt;
      hierarchy hasAll allMemberName=&amp;quot;All Media&amp;quot; defaultMember=&amp;quot;All Media&amp;quot;{&lt;br /&gt;
            . . .&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia default over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].Defaultmember) &lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;.Members&amp;lt;/code&amp;gt; of hierarchy, if defaultMember of hierarchy ''is not'' defined in [[Cube DSL]].&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
slicer hierarchy Warehouse default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia default over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select . . . &lt;br /&gt;
    from . . . &lt;br /&gt;
    where ([Warehouse].Members)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======condensed======&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;allMemberName&amp;lt;/code&amp;gt; of hierarchy, if &amp;lt;code&amp;gt;allMemberName&amp;lt;/code&amp;gt; of hierarchy defined in cubeDSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dimension PromotionMedia {&lt;br /&gt;
      hierarchy hasAll allMemberName=&amp;quot;All Media&amp;quot; {&lt;br /&gt;
            . . .&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;condensed&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia condensed over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].[All Media])'&lt;br /&gt;
    . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;.DefaultMember&amp;lt;/code&amp;gt; of hierarchy, if defaultMember of hierarchy defined in cubeDSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dimension PromotionMedia {&lt;br /&gt;
      hierarchy hasAll defaultMember=&amp;quot;All Media&amp;quot;{&lt;br /&gt;
            . . .&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;condensed&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia condensed over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].Defaultmember) &lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Returns:'''  &amp;lt;code&amp;gt;.Members&amp;lt;/code&amp;gt; of hierarchy if nothing is additionally defined for hierarchy in cubeDSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
slicer hierarchy Warehouse condensed&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select . . . &lt;br /&gt;
    from . . . &lt;br /&gt;
    where ([Warehouse].Members)&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======exploded======&lt;br /&gt;
&lt;br /&gt;
'''Returns:''' &amp;lt;code&amp;gt;.AllMembers&amp;lt;/code&amp;gt; of hierarchy.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia exploded over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, we use the keyword &amp;lt;code&amp;gt;condensed&amp;lt;/code&amp;gt; for a hierarchy in datamartDSL, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive MediaTotal from hierarchy PromotionMedia condensed over measure UnitSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[MediaTotal] as '([Measures].[UnitSales],[PromotionMedia].AllMembers)'&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======level ... filtered======&lt;br /&gt;
&lt;br /&gt;
The specified level can be filtered in the  GUI.&lt;br /&gt;
&lt;br /&gt;
► '''Example:''' in axis&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Datamart . . . {&lt;br /&gt;
      . . .&lt;br /&gt;
        axis rows {&lt;br /&gt;
            hierarchy TheTime level Month filtered &lt;br /&gt;
            hierarchy Store level StoreState selected&lt;br /&gt;
        }&lt;br /&gt;
      . . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
&amp;quot;. . .&lt;br /&gt;
Select . . .&lt;br /&gt;
Crossjoin($[TheTime].[Month]$,§[Store].[StoreState]§) on rows&lt;br /&gt;
. . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() {{&lt;br /&gt;
    put(&amp;quot;$[TheTime].[Month]$&amp;quot;,&amp;quot;select {} on columns,[TheTime].[Month].members on rows from Sales&amp;quot;);&lt;br /&gt;
    . . .    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example:''' in slicer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Datamart . . . {&lt;br /&gt;
      . . .&lt;br /&gt;
      slicer hierarchy TheTime level Quarter filtered&lt;br /&gt;
      slicer hierarchy StoreType level StoreType selected&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select . . . &lt;br /&gt;
     from . . . &lt;br /&gt;
     where (?[TheTime].[Quarter]?,![StoreType].[StoreType]!)&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() {{&lt;br /&gt;
    . . .&lt;br /&gt;
    put(&amp;quot;?[TheTime].[Quarter]?&amp;quot;,&amp;quot;select {} on columns,[TheTime].[Quarter].members on rows from Warehouse&amp;quot;);&lt;br /&gt;
    . . .&lt;br /&gt;
    }};  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======level ... selected======&lt;br /&gt;
&lt;br /&gt;
The specified level can be selected in the GUI.&lt;br /&gt;
&lt;br /&gt;
► '''Example:''' in axis&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Datamart . . . {&lt;br /&gt;
      . . .&lt;br /&gt;
      axis rows {&lt;br /&gt;
          hierarchy TheTime level Month filtered &lt;br /&gt;
          hierarchy Store level StoreState selected&lt;br /&gt;
      }&lt;br /&gt;
    . . .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
     Select . . .&lt;br /&gt;
     Crossjoin($[TheTime].[Month]$,§[Store].[StoreState]§) on rows&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;()&lt;br /&gt;
{{&lt;br /&gt;
    . . .&lt;br /&gt;
    put(&amp;quot;§[Store].[StoreState]§&amp;quot;,&amp;quot;select {} on columns,[Store].[StoreState].members on rows from Sales&amp;quot;);    }};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example:''' in slicer&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Datamart . . . {&lt;br /&gt;
      . . .&lt;br /&gt;
      slicer hierarchy TheTime level Quarter filtered&lt;br /&gt;
      slicer hierarchy StoreType level StoreType selected&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;select . . . &lt;br /&gt;
    from . . . &lt;br /&gt;
    where (?[TheTime].[Quarter]?,![StoreType].[StoreType]!)&amp;quot;;&lt;br /&gt;
private final HashMap&amp;lt;String, String&amp;gt; filterMap = new HashMap&amp;lt;String,String&amp;gt;() {{&lt;br /&gt;
    . . .&lt;br /&gt;
    put(&amp;quot;![StoreType].[StoreType]!&amp;quot;,&amp;quot;select {} on columns,[StoreType].[StoreType].members on rows from Warehouse&amp;quot;);&lt;br /&gt;
    }};  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======detailed======&lt;br /&gt;
&lt;br /&gt;
► '''Returns:''' &amp;lt;code&amp;gt;.Members&amp;lt;/code&amp;gt; of level.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
axis pages {&lt;br /&gt;
    hierarchy StoreType level StoreType detailed&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;Select [StoreType].[StoreType].Members on pages&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Returns:''' &amp;lt;code&amp;gt;.Children&amp;lt;/code&amp;gt; of level, if the keyword &amp;lt;code&amp;gt;filtered&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;selected&amp;lt;/code&amp;gt; appears before the keyword &amp;lt;code&amp;gt;detailed&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
axis rows {&lt;br /&gt;
      hierarchy TheTime level Month filtered detailed&lt;br /&gt;
      hierarchy Store level StoreState selected detailed&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
     Select . . .&lt;br /&gt;
     Crossjoin($[TheTime].[Month]$.Children,§[Store].[StoreState]§.Children) &lt;br /&gt;
     on rows&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======except======&lt;br /&gt;
&lt;br /&gt;
See the section [[#Except() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
hierarchy TheTime level Month detailed except Quarter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .Except([TheTime].[Month].Members,{%[TheTime].[Quarter]%}) &lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======order by ... (descending)======&lt;br /&gt;
&lt;br /&gt;
See the section [[#Order() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
hierarchy PromotionMedia level MediaType detailed ordered by derived MediaPerc descending&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;. . .&lt;br /&gt;
     Order([PromotionMedia].[MediaType].Members,[Measures].[MediaPerc],Desc) &lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Member Tuple=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
[&amp;lt;function name&amp;gt; / &amp;lt;parameter function name&amp;gt; (INT)&lt;br /&gt;
  of ]&lt;br /&gt;
      Cube Hierarchy&lt;br /&gt;
  over&lt;br /&gt;
      Cube Measure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;function name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
* '''previous''' - see the section [[#.PrevMember function]] later in this document.&lt;br /&gt;
* '''next''' - see the section [[#.NextMember function]] later in this document.&lt;br /&gt;
* '''first''' - see the section [[#.FirstChild function]] later in this document.&lt;br /&gt;
* '''last''' - see the section [[#.LastChild function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;parameter function name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
* '''lag''' - see the section [[#.Lag() function]] later in this document.&lt;br /&gt;
* '''lead''' - see the section [[#.Lead() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive PrevPeriod from lag(01) of hierarchy TheTime over measure StoreSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[PrevPeriod] as '([Measures].[StoreSales],[TheTime].LAG(1))'&lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Set Tuple=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;set function name&amp;gt; / &amp;lt;set parameter function name&amp;gt; (INT) &lt;br /&gt;
  of&lt;br /&gt;
     Cube Hierarchy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;set function name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
*'''year-to-date''' - See the section [[#YTD() function]] later in this document.&lt;br /&gt;
*'''periods''' - See the section [[#PeriodsToDate() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;set parameter function name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
*'''tail''' - See the section [[#Tail() function]] later in this document.&lt;br /&gt;
*'''head''' - See the section [[#Head() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive SumSCount from summation of periods of hierarchy TheTime level Year &lt;br /&gt;
    filtered  over measure SalesCount&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
    &amp;quot;with member [Measures].[SumSCount] as &lt;br /&gt;
     'SUM(PERIODSTODATE($[TheTime].[Year]$),[Measures].[SalesCount])' &lt;br /&gt;
     . . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Aggregation=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;aggregation name&amp;gt;&lt;br /&gt;
  of&lt;br /&gt;
     Cube Set Tuple&lt;br /&gt;
     /Cube Hierarchy&lt;br /&gt;
  over&lt;br /&gt;
     Cube Measure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;aggregation name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
*'''average''' - See the section [[#Avg() function]] later in this document.&lt;br /&gt;
*'''summation''' - See the section [[#Sum() function]] later in this document.&lt;br /&gt;
*'''aggregate''' - See the section [[#Aggregate() function]] later in this document.&lt;br /&gt;
*'''deviation''' - See the section [[#StdDev() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
derive SumSCount from summation of periods of hierarchy TheTime level Year &lt;br /&gt;
    filtered  over measure SalesCount&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &amp;quot;with member [Measures].[SumSCount] as &lt;br /&gt;
    'SUM(PERIODSTODATE($[TheTime].[Year]$),[Measures].[SalesCount])' . . .&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Cube Set Aggregation=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;set aggregation name&amp;gt; (INT)&lt;br /&gt;
  of&lt;br /&gt;
     Cube Set Tuple&lt;br /&gt;
     /Cube Hierarchy&lt;br /&gt;
  over&lt;br /&gt;
     Cube Measure&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;set aggregation name&amp;gt;&amp;lt;/code&amp;gt; can be:&lt;br /&gt;
*'''topcount''' - See the section [[#TopCount() function]] later in this document.&lt;br /&gt;
*'''topsummation''' - See the section [[#TopSum() function]] later in this document.&lt;br /&gt;
*'''toppercentage''' - See the section [[#TopPercent() function]] later in this document.&lt;br /&gt;
*'''bottomcount''' - See the section [[#BottomCount() function]] later in this document.&lt;br /&gt;
*'''bottomsummation''' - See the section [[#BottomSum() function]] later in this document.&lt;br /&gt;
*'''bottompercentage''' - See the section [[#BottomPercent() function]] later in this document.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
topcount (10) of hierarchy Product level ProductCategory over measure StoreSales&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private String statement = &lt;br /&gt;
&amp;quot;. . .&lt;br /&gt;
TOPCOUNT([Product].[ProductCategory].Members,10,[Measures].[StoreSales]) &lt;br /&gt;
. . .&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Task===&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datamart &amp;lt;datamart name&amp;gt; . . . using task &amp;lt;task name&amp;gt; ([host &amp;lt;STRhost&amp;gt;] [port &amp;lt;INTport&amp;gt;]) locale &amp;lt;STRlocale&amp;gt; {&lt;br /&gt;
                  [columns {. . .}]&lt;br /&gt;
                  [conditions {. . .}]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
*Task name is including BusinessAdministrator, PotentialOwner, Recipient, TaskInitiator, TaskStakeholder and ExcludedOwner.&lt;br /&gt;
*Default value of host is 127.0.0.1 and default port is 9123.&lt;br /&gt;
*The BPM process uses Jboss JBPM version 5.4.&lt;br /&gt;
&lt;br /&gt;
====columns====&lt;br /&gt;
&lt;br /&gt;
one or more “column” are defined here.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
columns {&lt;br /&gt;
      column &amp;lt;task column&amp;gt;&lt;br /&gt;
      . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;Task Column&amp;lt;/code&amp;gt; can be Name, Priority, Status, Subject, Description, ExpirationTime, CreatedOn, CreatedBy, ActivationTime, ActualOwner, TaskId, ProcessId, ProcessInstanceId and ProcessSessionId.&lt;br /&gt;
&lt;br /&gt;
► '''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
column Status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following Java code is generated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
private HashMap&amp;lt;Integer, ArrayList&amp;lt;String&amp;gt;&amp;gt; axisMap = new HashMap&amp;lt;Integer,ArrayList&amp;lt;String&amp;gt;&amp;gt;() {{&lt;br /&gt;
            put(0,new ArrayList&amp;lt;String&amp;gt;() {{&lt;br /&gt;
                              add(&amp;quot;Status&amp;quot;);&lt;br /&gt;
                              . . .&lt;br /&gt;
            }});&lt;br /&gt;
    }};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Basics ==&lt;br /&gt;
&lt;br /&gt;
=== MDX (MultiDimensional eXpressions) ===&lt;br /&gt;
&lt;br /&gt;
MDX is a query language for OLAP databases, much like SQL is a query language for relational databases. It is also a calculation language, with syntax similar to spreadsheet formulas.&lt;br /&gt;
&lt;br /&gt;
MDX has several elements that are used by, or influence, most statements:&lt;br /&gt;
&lt;br /&gt;
*'''Identifiers''' - Identifiers are the names of objects such as cubes, dimensions, members or measures, e.g. &amp;lt;code&amp;gt;[Time]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[Measures]&amp;lt;/code&amp;gt;.&lt;br /&gt;
*'''Data types''' - Define the types of data that are contained by cells, member properties and cell properties. (For details see the section [[#Data types]] later in this document.)&lt;br /&gt;
*'''Expressions (MDX)''' - An expression is a combination of identifiers, values and operators. You can use an expression as part of the data to be retrieved by a query, or as a search condition to look for data that meets a set of criteria. Expressions include functions that return as a single value a set expression, e.g., &amp;lt;code&amp;gt;[Measures].[Discount Amount] * 1.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
*'''Operators''' - Operators are syntax elements that work with one or more simple MDX expressions to make more complex MDX expressions, e.g., &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt;.&lt;br /&gt;
*'''Functions''' - Functions are syntax elements that take zero, one or more input values and return a scalar value or an object, e.g., &amp;lt;code&amp;gt;.Dimension&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;.Level&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;IsEmpty()&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;Order()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.CurrentMember&amp;lt;/code&amp;gt; etc. &lt;br /&gt;
*'''Comments''' - Comments are pieces of text that are inserted into MDX statements or scripts to explain the purpose of the statement. MDX supports &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt; as commenting characters.&lt;br /&gt;
*'''Reserved keywords''' - Reserved keywords are words that are reserved for the use of MDX and should not be used for object names used in MDX statements, e.g., &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
====Data types====&lt;br /&gt;
&lt;br /&gt;
There are six primary data types in MDX:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
! width=&amp;quot;250px&amp;quot; | Type !! width=&amp;quot;750px&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
|scalar||Scalar is either a number or a string. It can be specified as a literal, e.g., &amp;lt;code&amp;gt;number 5&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;string &amp;quot;OLAP&amp;quot;&amp;lt;/code&amp;gt;, or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;Aggregate()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.UniqueName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.Value&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|-&lt;br /&gt;
|Dimension /&amp;lt;br&amp;gt; Hierarchy||Dimension is a dimension of a cube. A dimension is a primary organizer of measure and attribute information in a cube. MDX does not know of, nor does it assume, any dependencies between dimensions - they are assumed to be mutually independent. A dimension will contain some members organized in some hierarchy or hierarchies, each in turn containing levels. It can be specified by its unique name, e.g., &amp;lt;code&amp;gt;[Time]&amp;lt;/code&amp;gt; or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;.Dimension&amp;lt;/code&amp;gt;. Hierarchy is a dimension hierarchy of a cube. It can be specified by its unique name, e.g., &amp;lt;code&amp;gt;[Time].[Fiscal]&amp;lt;/code&amp;gt; or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;.Hierarchy&amp;lt;/code&amp;gt;. Hierarchies are contained within Dimensions. &lt;br /&gt;
|-&lt;br /&gt;
|Level||Level is a level in a dimension hierarchy. It can be specified by its unique name, e.g., &amp;lt;code&amp;gt;[Time].[Fiscal].[Month]&amp;lt;/code&amp;gt; or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;.Level&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Member||Member is a member in a dimension hierarchy. It can be specified by its unique name, e.g., &amp;lt;code&amp;gt;[Time].[Fiscal].[Month].[August 2014]&amp;lt;/code&amp;gt; or its qualified name, e.g., &amp;lt;code&amp;gt;[Time].[Calendar].[2014].[Q3].[August 2014]&amp;lt;/code&amp;gt;, or it can be returned by an MDX function, e.g., &amp;lt;code&amp;gt;.PrevMember&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.Parent&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.FirstChild&amp;lt;/code&amp;gt; etc. &amp;lt;br&amp;gt;Note that all members are specific to a hierarchy. If the same product is a member of two different hierarchies (&amp;lt;code&amp;gt;[Product].[ByManufacturer]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[Product].[ByCategory]&amp;lt;/code&amp;gt;), then there will be two different members visible that may need to be coordinated in sets and tuples.&lt;br /&gt;
|-&lt;br /&gt;
|Tuple||Tuple is an ordered collection of one or more members of different dimensions. Tuples can be specified by enumerating the members, e.g., (&amp;lt;code&amp;gt;[Time].[Fiscal].[Month].[August]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[Measures].[Sales]&amp;lt;/code&amp;gt;) or returned by an MDX function, e.g., &amp;lt;code&amp;gt;.Item()&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Set||Set is an ordered collection of tuples with the same dimensionality, or hierarchality in the case of Microsoft's implementation. It can be specified by enumerating the tuples, e.g., &amp;lt;code&amp;gt;{([Measures].[Sales], [Time].[Fiscal].[2014]), ([Measures].[Sales], [Time].[Fiscal].[2014])}&amp;lt;/code&amp;gt; or returned by an MDX function or operator, e.g., &amp;lt;code&amp;gt;Crossjoin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Filter()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Order()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Descendants()&amp;lt;/code&amp;gt; etc.&lt;br /&gt;
|-&lt;br /&gt;
|other data types||Member properties are equivalent to attributes in the data warehouse sense. They can be retrieved by name in a query through an axis PROPERTIES clause of a query. The scalar data value of a member property for some member can be accessed in an expression through MDX, either by naming the property (e.g., &amp;lt;code&amp;gt;[Product].CurrentMember.[Sales Price]&amp;lt;/code&amp;gt;) or by using a special access function (e.g., &amp;lt;code&amp;gt;[Product].CurrentMember.Properties(&amp;quot;Sales Price&amp;quot;)&amp;lt;/code&amp;gt;). In limited contexts, MDX allows other data types as well - for example Array can be used inside the &amp;lt;code&amp;gt;SetToArray()&amp;lt;/code&amp;gt; function to specify an array that is not processed by MDX but passed to a user-defined function in an ActiveX library. Objects of other data types are represented as scalar strings indicating the object names, such as measure group name in Microsoft's &amp;lt;code&amp;gt;MeasureGroupMeasures()&amp;lt;/code&amp;gt; function or KPI(Key Performance Indicator) name in, for example, Microsoft's &amp;lt;code&amp;gt;KPIValue()&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;KPIGoal()&amp;lt;/code&amp;gt; functions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Basic Syntax of an MDX query====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
-- One of the three ways to write comments&lt;br /&gt;
SELECT {set 0} on COLUMNS, /* block comment */&lt;br /&gt;
  {set 1} on ROWS // line comment&lt;br /&gt;
  ...&lt;br /&gt;
  {set n} on AXIS(n)&lt;br /&gt;
FROM [cube]&lt;br /&gt;
WHERE (tuple) // called &amp;quot;slicer dimension&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Key differences between MDX and SQL&lt;br /&gt;
*“Cube in, Cube out” for MDX.&lt;br /&gt;
*Set notation needs to be used after &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;.&lt;br /&gt;
*The &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt; clause can name only one cube.&lt;br /&gt;
*The &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt; clause describes the slicer axis (i.e., all the axes that are not query axes) and is filtered by its default members.&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&lt;br /&gt;
=====A typical query=====&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2013], &lt;br /&gt;
   [Time].[Calendar].[Year].[2014]} ON COLUMNS,&lt;br /&gt;
  {[Store].[Store Name].MEMBERS} ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Store Sales])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====.MEMBERS and .CHILDREN functions=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Hierarchy.Members&lt;br /&gt;
Level.Members&lt;br /&gt;
...&lt;br /&gt;
Member.Children&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;.Members&amp;lt;/code&amp;gt; returns the set of members in a dimension, level, or hierarchy.&lt;br /&gt;
* &amp;lt;code&amp;gt;.Children&amp;lt;/code&amp;gt; returns the set of children of a specified member.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2014].CHILDREN} ON COLUMNS,&lt;br /&gt;
  {[Store].[Store City].MEMBERS} ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Store Sales])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Calculate Member=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER parent1.name1 AS ’expression1’&lt;br /&gt;
  MEMBER parent2.name2 AS ’expression2’&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* If a calculated member is only required for a single MDX query, you can define that calculated member by using the &amp;lt;code&amp;gt;WITH&amp;lt;/code&amp;gt; keyword. A calculated member that is created by using the &amp;lt;code&amp;gt;WITH&amp;lt;/code&amp;gt; keyword no longer exists after the query has finished running.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Time].[Calendar].[Year].[2014].[H1] AS&lt;br /&gt;
’[Time].[Calendar].[Year].[2014].[Q1] + [Time].[Calendar].[Year].[2014].[Q2]’&lt;br /&gt;
MEMBER [Time].[Calendar].[Year].[2014].[H2] AS&lt;br /&gt;
’[Time].[Calendar].[Year].[2014].[Q3] + [Time].[Calendar].[Year].[2014].[Q4]’&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2014].[H1], &lt;br /&gt;
   [Time].[Calendar].[Year].[2014].[H2]} ON COLUMNS&lt;br /&gt;
  [Store].[Store Name].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': define and use new measures&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Measures].[ProfitPercent] AS&lt;br /&gt;
’([Measures].[Store Sales] – [Measures].[Store Cost]) / ([Measures].[Store Cost])’&lt;br /&gt;
SELECT [Time].[Calendar].[Year].[2014].CHILDREN ON COLUMNS,&lt;br /&gt;
 [Store].[Store Name].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[ProfitPercent])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Slicer Dimension=====&lt;br /&gt;
&lt;br /&gt;
► '''Example''': slice on the [Product] dimension&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2014].CHILDREN} ON COLUMNS,&lt;br /&gt;
  {[Store].[Store City].MEMBERS} ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Product].[Product Family].[Drink],&lt;br /&gt;
[Measures].[Store Sales])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Filter() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
FILTER(set, logical expression )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the set that results from filtering a specified set based on a search condition.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': if we are only interested in stores whose 2014 unit sales exceed 1000&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT {[Time].[Calendar].[Year].[2014].CHILDREN} ON COLUMNS,&lt;br /&gt;
   FILTER( {[Store].[Store City].MEMBERS},&lt;br /&gt;
           ([Measures].[Unit Sales], [Time].[Calendar].[Year].[2014]) &amp;gt; 1000 ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Store Sales])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Order() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
ORDER(set, numeric/string expression, [, ASC | DESC | BASC | BDESC]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Arranges members of a specified set, optionally preserving or breaking the hierarchy.&lt;br /&gt;
&lt;br /&gt;
► '''Example 1''': list all measures for each city in decreasing order of their sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
    ORDER(&lt;br /&gt;
        [Store].[Store City].MEMBERS,&lt;br /&gt;
        [Measures].[Sales Count], &lt;br /&gt;
        BDESC&lt;br /&gt;
    ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
► '''Example 2''': if we are only interested in stores whose name is between “Berlin” and “Heidelberg”&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
    ORDER(&lt;br /&gt;
        {[Store].[Store City].[Berlin]:[Heidelberg]},&lt;br /&gt;
        [Store].CURRENTMEMBER.Name,&lt;br /&gt;
        BASC&lt;br /&gt;
    ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Lag() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.LAG(index)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the member that is a specified number of positions before a specified member on the member's level.&lt;br /&gt;
* &amp;lt;code&amp;gt;.Lag(1)&amp;lt;/code&amp;gt; is equivalent to the &amp;lt;code&amp;gt;.PrevMember&amp;lt;/code&amp;gt; function. &lt;br /&gt;
* &amp;lt;code&amp;gt;.Lag(-1)&amp;lt;/code&amp;gt; is equivalent to the &amp;lt;code&amp;gt;.NextMember&amp;lt;/code&amp;gt; function. &lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for December, 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
       [Time].[Fiscal].[Month].[February 2015].LAG(2) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Lead() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.LEAD(index)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the member that is a specified number of positions following a specified member at the member's level.&lt;br /&gt;
* &amp;lt;code&amp;gt;.Lead(n)&amp;lt;/code&amp;gt; is equivalent to the &amp;lt;code&amp;gt;.Lag(-n)&amp;lt;/code&amp;gt; function. &lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for December, 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Fiscal].[Month].[February 2015].LEAD(-2) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====PrevMember function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.PREVMEMBER&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the previous member in the level that contains a specified member.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for January, 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Fiscal].[Month].[February 2015].PREVMEMBER ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====NextMember function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.NEXTMEMBER&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the next member in the level that contains a specified member.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for March, 2015&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Fiscal].[Month].[February 2015].NEXTMEMBER ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====FirstChild function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.FIRSTCHILD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the first child of a specified member.&lt;br /&gt;
* Leaf members have no children and therefore no first child.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for the first quarter of 2015, which is the first child of year 2015&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Calendar].[Year].[2015].FIRSTCHILD ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====LastChild function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
Member.LASTCHILD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the last child of a specified member.&lt;br /&gt;
* Leaf members have no children and therefore no last child.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': list all measures for March, 2015, which is the last child of the first quarter of the year 2015&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  [Measures].MEMBERS ON COLUMNS,&lt;br /&gt;
        [Time].[Calendar].[Quarter].[Q1 2015].LASTCHILD ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Head() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
HEAD(set [ ,count ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the first specified number of elements of a set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the profit of top-5 cities in terms of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    HEAD( ORDER( {[Store].[Store City].MEMBERS},&lt;br /&gt;
                [Measures].[Sales Count],&lt;br /&gt;
                BDESC &lt;br /&gt;
               ), &lt;br /&gt;
          5&lt;br /&gt;
        ) ON ROWS&lt;br /&gt;
FROM [Sales]	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Tail() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
TAIL(set [ ,count ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the last specified number of elements of a set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the profit of bottom-5 cities in terms of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    TAIL( ORDER( {[Store].[Store City].MEMBERS},&lt;br /&gt;
                [Measures].[Sales Count],&lt;br /&gt;
                BDESC &lt;br /&gt;
               ), &lt;br /&gt;
          5&lt;br /&gt;
        ) ON ROWS&lt;br /&gt;
FROM [Sales]	&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====TopCount() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
TOPCOUNT(set, count [ ,numeric expression ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set in descending order and returns the specified number of elements with the highest values.&lt;br /&gt;
* The numeric expression is used to evaluate the tuple values.  If a numeric expression is not specified, the function returns the set of members in their natural order, without any sorting, behaving like the &amp;lt;code&amp;gt;Head()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the profit of top-5 cities in terms of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    TOPCOUNT( [Store].[Store City].MEMBERS,&lt;br /&gt;
                5,&lt;br /&gt;
                [Measures].[Sales Count]&lt;br /&gt;
            ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====BottomCount() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
BOTTOMCOUNT(set, count [ ,numeric expression ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set in ascending order and returns the specified number of elements with the lowest values. &lt;br /&gt;
* The numeric expression is used to evaluate the tuple values.  If a numeric expression is not specified, the function returns the set of members in their natural order, without any sorting, behaving like the &amp;lt;code&amp;gt;Tail()&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the profit of bottom-5 cities in terms of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    BOTTOMCOUNT( [Store].[Store City].MEMBERS,&lt;br /&gt;
                5,&lt;br /&gt;
                [Measures].[Sales Count]&lt;br /&gt;
            ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====TopPercent() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
TOPPERCENT(set, percentage, numeric expression)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set in descending order and then returns the set of tuples with the highest values whose cumulative total is equal to or greater than a specified percentage of the total of all values.&lt;br /&gt;
* Percentage must be a positive value between 0 and 100.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the best profit and cities that make up the top 10% of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    TOPPERCENT( [Store].[Store City].MEMBERS,&lt;br /&gt;
                10,&lt;br /&gt;
                [Measures].[Sales Count]&lt;br /&gt;
            ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====BottomPercent() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
BOTTOMPERCENT(set, percentage, numeric expression)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set in ascending order and then returns the set of tuples with the lowest values whose cumulative total is equal to or greater than a specified percentage of the total of all values.&lt;br /&gt;
* Percentage must be a positive value between 0 and 100.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the worst profit and cities that make the bottom 10% of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    BOTTOMPERCENT( [Store].[Store City].MEMBERS,&lt;br /&gt;
                    10,&lt;br /&gt;
                    [Measures].[Sales Count]&lt;br /&gt;
                 ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====TopSum() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
TOPSUM(set, value, numeric expression)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set and returns the topmost set of elements whose cumulative total is at least a specified value. &lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the smallest set whose cumulative total using the profit measure is at least the sum of 50000, beginning with the members of this set with the highest sales count values&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    TOPSUM ( [Store].[Store City].MEMBERS,&lt;br /&gt;
             50000,&lt;br /&gt;
             [Measures].[Sales Count]&lt;br /&gt;
           ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====BottomSum() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
BOTTOMSUM(set, value, numeric expression)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Sorts a set and returns the bottommost set of elements whose sum is equal to or less than a specified value.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the smallest set whose cumulative total using the profit measure is at least the sum of 50000, beginning with the members of this set with the smallest number of sales count&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Measures].[Profit] ON COLUMNS,&lt;br /&gt;
    BOTTOMSUM( [Store].[Store City].MEMBERS,&lt;br /&gt;
               50000,&lt;br /&gt;
               [Measures].[Sales Count]&lt;br /&gt;
             ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Aggregate() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
AGGREGATE(set [, numeric expression])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns a number that is calculated by aggregating over the cells returned by the set expression. &lt;br /&gt;
* If a numeric expression ''is not'' provided, this function aggregates each measure within the current query context by using the default aggregation operator that is specified for each measure.&lt;br /&gt;
* If a numeric expression ''is'' provided, this function first evaluates, and then sums, the numeric expression for each cell in the specified set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': aggregate profit for all the calendar months&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Time].[Calendar].[All sales] AS&lt;br /&gt;
    AGGREGATE([Time].[Calendar].[Month].MEMBERS, [Measures].[Amount])&lt;br /&gt;
SELECT [Time].[Calendar].[All sales] ON COLUMNS,&lt;br /&gt;
  [Store].[Store City].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE [Measures].[Profit]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Avg() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
AVG(set [, numeric expression])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Evaluates a set and returns the average of the non-empty values of the cells in the set, averaged over the measures in the set or over a specified measure.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the average profit for each calendar year&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Measures].[Avg Profit] AS&lt;br /&gt;
      AVG( [Time].[Calendar].[Month].MEMBERS, Measures.[Profit])&lt;br /&gt;
SELECT&lt;br /&gt;
      Measures.[Avg Profit] ON COLUMNS,&lt;br /&gt;
      [Time].[Calendar].[Year].MEMBERS ON ROWS&lt;br /&gt;
FROM  [Sales]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Sum() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SUM(set [, numeric expression])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Shows the sum of all values of the cells in the set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the total profit for the calendar years 2013 and 2014 (the sum of the 2013 and 2014 profit values for all members of the &amp;lt;code&amp;gt;[Product].[Category]&amp;lt;/code&amp;gt; hierarchy)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Measures].[Sum Profit] AS &lt;br /&gt;
        SUM( { [Time].[Calendar].[Year].[2013],&lt;br /&gt;
               [Time].[Calendar].[Year].[2014] }&lt;br /&gt;
           , [Measures].[Profit]&lt;br /&gt;
           )&lt;br /&gt;
SELECT [Measures].[Sum Profit] ON COLUMNS,&lt;br /&gt;
         [Product].[Category].Members ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====StdDev() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
STDDEV(set [, numeric expression])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the sample standard deviation of a numeric expression evaluated over a set, using the unbiased population formula (dividing by n-1).&lt;br /&gt;
&lt;br /&gt;
► '''Example''': show the standard deviation of the profit values, evaluated over the first 3 months of calendar year 2014, using the unbiased population formula&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Measures].[Stddev Profit] AS &lt;br /&gt;
	STDDEV( { [Time].[Calendar].[Month].[January 2014],&lt;br /&gt;
               [Time].[Calendar].[Month].[February 2014],&lt;br /&gt;
               [Time].[Calendar].[Month].[March 2014]}&lt;br /&gt;
           , [Measures].[Profit]&lt;br /&gt;
	   )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====PeriodsToDate() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
PERIODSTODATE([level [, member]])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns a set of sibling members from the same level as a given member, starting with the first sibling and ending with the given member, as constrained by a specified level in the Time dimension.&lt;br /&gt;
* If the &amp;lt;code&amp;gt;member&amp;lt;/code&amp;gt; expression is missing, then the level &amp;lt;code&amp;gt;hierarchy.CurrentMember&amp;lt;/code&amp;gt; will be used.&lt;br /&gt;
* If the &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt; expression is missing, then the parent level of the &amp;lt;code&amp;gt;[Time].CurrentMember&amp;lt;/code&amp;gt; in the default time dimension of the cube will be used.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': aggregate profit for the first 8 calendar months of the year 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Time].[Calendar].[first8Months2014] AS&lt;br /&gt;
    AGGREGATE (&lt;br /&gt;
        PERIODSTODATE(  [Time].[Calendar].[Year], &lt;br /&gt;
                        [Time].[Calendar].[Month].[August 2014],&lt;br /&gt;
                     )&lt;br /&gt;
              )		&lt;br /&gt;
SELECT [Time].[Calendar].[All sales] ON COLUMNS,&lt;br /&gt;
    [Store].[Store City].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE [Measures].[Profit]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====YTD() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
YTD([member])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns a set of sibling members from the same level as a given member, starting with the first sibling and ending with the given member, as constrained by the Year level in the Time dimension.&lt;br /&gt;
* &amp;lt;code&amp;gt;Ytd(member)&amp;lt;/code&amp;gt; is equivalent to &amp;lt;code&amp;gt;PeriodsToDate(Year level, member)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If no ''member'' is defined, then &amp;lt;code&amp;gt;[Time].currentMember&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
* This function does not work when the Type property is set to &amp;lt;code&amp;gt;FiscalYears&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': aggregate profit for the first 8 calendar months of the year 2014&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
WITH MEMBER [Time].[Calendar].[first8Months2014] AS&lt;br /&gt;
    AGGREGATE (&lt;br /&gt;
                YTD( [Time].[Calendar].[Month].[August 2014] )&lt;br /&gt;
              )		&lt;br /&gt;
SELECT [Time].[Calendar].[All sales] ON COLUMNS,&lt;br /&gt;
    [Store].[Store City].MEMBERS ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE [Measures].[Profit]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====CrossJoin() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
CROSSJOIN(set1, set2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the cross product of one or more sets.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': the query axis (ROWS) is the combination of 2 cube dimensions&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Time].[Calendar].[Year].[2014].CHILDREN ON COLUMNS,&lt;br /&gt;
    CROSSJOIN( [Store].[Store State].MEMBERS,&lt;br /&gt;
                [Product].[Product Family].MEMBERS&lt;br /&gt;
             ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====NonEmpty() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
NONEMPTY(set1 [,set2])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns the set of non-empty tuples from a specified set, based on the cross product of the specified set with a second set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Time].[Calendar].[Year].[2014].CHILDREN ON COLUMNS,&lt;br /&gt;
    NONEMPTY(&lt;br /&gt;
        CROSSJOIN( [Store].[Store State].MEMBERS,&lt;br /&gt;
                   [Product].[Product Family].MEMBERS&lt;br /&gt;
                 )&lt;br /&gt;
            ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====NonEmptyCrossJoin() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
NONEMPTYCROSSJOIN(set1 [,set2, . . .][, count])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Returns a set that contains the cross product of one or more sets, excluding empty tuples and tuples without associated fact table data.&lt;br /&gt;
* If &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt; is not specified, the function cross-joins all specified sets and excludes empty members from the result set.&lt;br /&gt;
* If a number of sets is specified, the function cross joins the numbers of sets specified, starting with the first specified set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Time].[Calendar].[Year].[2014].CHILDREN ON COLUMNS,&lt;br /&gt;
    NONEMPTYCROSSJOIN( [Store].[Store State].MEMBERS,&lt;br /&gt;
                       [Product].[Product Family].MEMBERS&lt;br /&gt;
                     ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Except() function=====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
EXCEPT(set1 ,set2 [, ALL])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Notes:'''&lt;br /&gt;
* Evaluates two sets and removes those tuples in the first set that also exist in the second set;  ensuing duplicates are optionally removed.&lt;br /&gt;
* If &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt; is specified, the function retains duplicates found in the first set;  duplicates found in the second set will still be removed. The members are returned in the order they appear in the first set.&lt;br /&gt;
&lt;br /&gt;
► '''Example''': &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT [Time].[Calendar].[Month].CHILDREN ON COLUMNS,&lt;br /&gt;
    EXCEPT( [Product].[Product Categories].[All].Children ,&lt;br /&gt;
            {[Product].[Product Categories].[Components]}&lt;br /&gt;
          ) ON ROWS&lt;br /&gt;
FROM [Sales]&lt;br /&gt;
WHERE ([Measures].[Profit])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jboss JBPM 5.4 ===&lt;br /&gt;
&lt;br /&gt;
jBPM is a flexible Business Process Management (BPM) suite. It allows you to model, execute and monitor business processes, throughout their life cycle.&lt;br /&gt;
&lt;br /&gt;
jBPM focuses on executable business processes, which are business processes that contain enough detail so that they can actually be executed on a BPM engine. Executable business processes bridge the gap between business users and developers as they are higher-level and use domain-specific concepts that are understood by business users but can also be executed directly.&lt;br /&gt;
&lt;br /&gt;
To interact with the process engine (for example, to start a process), you need to set up a session. This session is used to communicate with the process engine. A session needs to have a reference to a knowledge base, which in turn contains a reference to all the relevant process definitions. This knowledge base is used to look up the process definitions whenever necessary. To create a session, you first need to create a knowledge base, load all the necessary process definitions (this can be from various sources, such as classpath, file system or process repository) and then instantiate a session.&lt;br /&gt;
&lt;br /&gt;
For example, imagine you are writing an application to process sales orders. You could then define one or more process definitions that define how the order should be processed. When starting up your application, you first need to create a knowledge base that contains those process definitions. You can then create a session based on this knowledge base so that, whenever a new sales order comes in, a new process instance is started for that sales order. That process instance contains the state of the process for that specific sales request.&lt;br /&gt;
&lt;br /&gt;
The jBPM project has a clear separation between the API the users should be interacting with and the actual implementation classes. The public API exposes most of the features we believe &amp;quot;normal&amp;quot; users can safely use and should remain rather stable across releases. Expert users can still access internal classes but should be aware that they should know what they are doing and that the internal API might still change in the future.&lt;br /&gt;
&lt;br /&gt;
As explained above, the jBPM API should thus be used to create a knowledge base that contains your process definitions, and to create a session to start new process instances, signal existing ones, register listeners, etc.&lt;br /&gt;
&lt;br /&gt;
You can find more information at http://docs.jboss.org/jbpm/v5.4/userguide/&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Menu_DSL&amp;diff=1998</id>
		<title>Menu DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Menu_DSL&amp;diff=1998"/>
				<updated>2017-07-25T19:26:47Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: Created page with &amp;quot;==Introduction==  Menu model is used for the UI menu definition.  Entries and the corresponding ui pages of the entries could be defined in this model. Predefined process from...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Menu model is used for the UI menu definition.  Entries and the corresponding ui pages of the entries could be defined in this model. Predefined process from blipDSL, perspective from perspectiveDSL, table from tableDSL and dialog from dialogDSL can be linked to the main '''''entry''''' or its sub '''''entry'''''.&lt;br /&gt;
&lt;br /&gt;
Here is the menu bar in UI: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you click the '''''entry''''' “Company” under main '''''entry''''' “Menu”, the '''''perspective''''' “Company” will be shown on the web site: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By clicking the other main '''''entry''''' “Persons”, the embedded table will be shown directly in menu: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MenuDSL_03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MenuDSL==&lt;br /&gt;
&lt;br /&gt;
The MenuDSL works for Os.bee models, it defines the Menus for dialog.&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the MenuDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “entry” - define the menu entry and subentry.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package definition====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;[{ &lt;br /&gt;
	expandedImage &amp;lt;expandedImage String&amp;gt; &lt;br /&gt;
collapsedImage &amp;lt;collapsedImage String&amp;gt;&lt;br /&gt;
	[accordionSubmenu][width &amp;lt;width String&amp;gt;][designer]&lt;br /&gt;
	&lt;br /&gt;
MenuEntry&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each menu package, 2 .java file named &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt; +Menu+ContextFunction.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.menues {  &lt;br /&gt;
&lt;br /&gt;
	expandedImage &amp;quot;collapse_arrow_16&amp;quot; collapsedImage &amp;quot;expand_arrow_16&amp;quot; &lt;br /&gt;
accordionSubmenu  width &amp;quot;600px&amp;quot; designer&lt;br /&gt;
entry Menu described by &amp;quot;my menu&amp;quot; {. . . }&lt;br /&gt;
	. . . &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* One or more MenuEntry can be defined in the same package.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''expandedImage''' and '''collapsedImage''' is used to define the menu image when the menu expanded or collapsed. Following code will be generated in &amp;lt;project name&amp;gt;+Menu.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setIcon(final Accordion accordion, final boolean open) {&lt;br /&gt;
    Tab tab = accordion.getTab(selectedMap.get(accordion));&lt;br /&gt;
    if (tab != null) {&lt;br /&gt;
    	if(open) {&lt;br /&gt;
    		tab.setIcon(themeResourceService.getThemeResource(&lt;br /&gt;
&amp;lt;expandedImage String&amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    	} else {&lt;br /&gt;
    		tab.setIcon(themeResourceService.getThemeResource(&lt;br /&gt;
&amp;lt;collapsedImage String&amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    	}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''accordionSubmenu''' is optional; you can use this keyword to define if the submenu is accordion.&lt;br /&gt;
* Keyword '''width''' is optional; you can use this keyword to define the width of this menu, default value is 400px. Following code will be generated in &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
accRoot.setWidth(&amp;lt;width String&amp;gt;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''designer''' is optional; you can use this keyword to define if this menu could be modified. Following code will be generated in &amp;lt;code&amp;gt;&amp;lt;project name&amp;gt;+Menu.java&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (designModeHandler != null &amp;amp;&amp;amp; userAccessService.isSuperuser()) {&lt;br /&gt;
	MenuBar menubar = new MenuBar();&lt;br /&gt;
	tabRoot.addComponent(menubar);&lt;br /&gt;
	MenuItem designer = menubar.addItem(designerText, null, null);&lt;br /&gt;
	MenuItem mode = designer.addItem(designmodeText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designModeHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	mode.setCheckable(true);&lt;br /&gt;
	menuItems.put(designerUndoHandler, designer.addItem(undoText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designerUndoHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(designerRedoHandler, designer.addItem(redoText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			designerRedoHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	designer.addSeparator();&lt;br /&gt;
	menuItems.put(newPerspectiveHandler, designer.addItem(newText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			newPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(changePerspectiveHandler, designer.addItem(changeText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			changePerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(exportPerspectiveHandler, designer.addItem(exportText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			exportPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
	menuItems.put(downloadPerspectiveHandler, designer.addItem(downloadText, null, new MenuBar.Command() {&lt;br /&gt;
		public void menuSelected(MenuItem selectedItem) {&lt;br /&gt;
			downloadPerspectiveHandler.execute(selectedItem);&lt;br /&gt;
		}&lt;br /&gt;
	}));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====menuEntry====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the menu entry details can be defined here. This part could be reused as subentry under the main entry.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entry &amp;lt;entry name&amp;gt; &lt;br /&gt;
	[described by &amp;lt;description String&amp;gt;][image &amp;lt;ImageString&amp;gt;][showBadge]&lt;br /&gt;
	[&lt;br /&gt;
		process [blip::Blip] | &lt;br /&gt;
		perspective [perspective::Perspective] |&lt;br /&gt;
		table [table::Table] | &lt;br /&gt;
		dialog [dialog::Dialog] |&lt;br /&gt;
		userFilter |&lt;br /&gt;
		keyBinding&lt;br /&gt;
	]&lt;br /&gt;
	[{ &lt;br /&gt;
MenuEntry&lt;br /&gt;
. . .&lt;br /&gt;
&lt;br /&gt;
 }]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''described by''' is optional, it define the description of this entry.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''image''' is optional, it define the image string of this entry.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''showBadge''' is optional, it define if the update badge will be shown for this entry. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''process''' is used to define the predefined process from blipDSL which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''perspective''' is used to define the predefined perspective from perspectiveDSL which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''table''' is used to define the predefined table from tableDSL which this entry links to. &lt;br /&gt;
&lt;br /&gt;
* Keyword '''dialog''' is used to define the predefined dialog from dialogDSL which this entry links to.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''userFilter''' are used to define if  the user filter will be shown. Following code will be generated in &amp;lt;project name&amp;gt;+Menu.java file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (userAccessService.isSuperuser()) {&lt;br /&gt;
    VerticalLayout tab+&amp;lt;entry name&amp;gt; = new VerticalLayout();&lt;br /&gt;
    userFilter.createView(tab+&amp;lt;entry name&amp;gt;);&lt;br /&gt;
    acc&amp;lt;parent name&amp;gt;.addTab(tab+&amp;lt;entry name&amp;gt;, &amp;lt;entry name&amp;gt;, themeResourceService.getThemeResource(&amp;lt;collapsedImage String &amp;gt;, ThemeResourceType.ICON));&lt;br /&gt;
    tabs.put(acc&amp;lt;parent name&amp;gt;.getTab(tab+&amp;lt;entry name&amp;gt;), new Pair(&amp;lt;entry name&amp;gt;,&amp;lt;entry description&amp;gt;));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''keyBinding''' is used to define if the key binding works for this entry.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
entry Sales {&lt;br /&gt;
		entry CashRegister image &amp;quot;cashregister&amp;quot; perspective CashRegister&lt;br /&gt;
	}&lt;br /&gt;
entry ProductMaintenance process ProductMaintenance&lt;br /&gt;
	entry MyTasks table TaskMenu&lt;br /&gt;
	entry Profile dialog UserAccount&lt;br /&gt;
	entry UserFilter userFilter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the examples, '''entry''' '''''Sales''''' has a sub'''entry''' named '''''CashRegister''''' with '''image''' icon and links to a predefined '''perspective''' named '''''CashReegister''''' from perspectiveDSL; '''entry''' '''''ProductMaintenance''''' links to a predefined '''process''' named '''''ProductMaintenance''''' from blipDSL; '''entry''' '''''MyTasks''''' links to a predefined '''table''' named '''''TaskMenu''''' from tableDSL; '''entry''' '''''Profile''''' links to a predefined '''dialog''' named '''''UserAccount''''' from dialogDSL; '''entry''' '''''UserFilter''''' is defined to shown the user filter.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:MenuDSL_03.png&amp;diff=1997</id>
		<title>File:MenuDSL 03.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:MenuDSL_03.png&amp;diff=1997"/>
				<updated>2017-07-25T19:26:23Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:MenuDSL_02.png&amp;diff=1996</id>
		<title>File:MenuDSL 02.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:MenuDSL_02.png&amp;diff=1996"/>
				<updated>2017-07-25T19:25:24Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: Cmollik uploaded a new version of File:MenuDSL 02.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:MenuDSL_02.png&amp;diff=1995</id>
		<title>File:MenuDSL 02.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:MenuDSL_02.png&amp;diff=1995"/>
				<updated>2017-07-25T19:23:45Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:MenuDSL_01.png&amp;diff=1994</id>
		<title>File:MenuDSL 01.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:MenuDSL_01.png&amp;diff=1994"/>
				<updated>2017-07-25T19:23:29Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=1993</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=1993"/>
				<updated>2017-07-25T18:57:14Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* OS.bee DSL Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Menu DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee-Specific DSL Instances=&lt;br /&gt;
The ''OS.bee Software Factory'' provides a few specific DSL instances for different requirements.  These are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==Datatypes==&lt;br /&gt;
Several custom datatypes are described in detail in this chapter.&lt;br /&gt;
===[[BlobMapping]]===&lt;br /&gt;
This datatype allows the use of big data as a blob.&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Action_DSL&amp;diff=1992</id>
		<title>Action DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Action_DSL&amp;diff=1992"/>
				<updated>2017-07-25T14:47:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* ActionDSl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
===CRUD for toolbar===&lt;br /&gt;
&lt;br /&gt;
Editing data is nice but data must be persisted otherwise all effort invested in editing data would be lost. For this reason, OS.bee apps come with a set of create, read, update and delete functionality (CRUD) to manipulate data in a database. OS.bee can be operated with different database products.&lt;br /&gt;
&lt;br /&gt;
====Create====&lt;br /&gt;
&lt;br /&gt;
Create or add new entries.&lt;br /&gt;
&lt;br /&gt;
If you want to create new data entry, please press the “new data” action button, after the action has been executed, a new unique id must be created. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Read====&lt;br /&gt;
&lt;br /&gt;
Read, retrieve, search or view existing entries.&lt;br /&gt;
&lt;br /&gt;
Existed data can be read from the database. If you request existed data to be displayed in the UI, you must either retrieved a unique id to the database so it can select the requested data, or you can search and select one.&lt;br /&gt;
&lt;br /&gt;
In Os.bee web site, for example the perspective of “Persons”, you can click one row from the table on the left, then the detail data will be read from database and shown in the dialog on the right. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Update====&lt;br /&gt;
&lt;br /&gt;
Update or edit existing entries.&lt;br /&gt;
&lt;br /&gt;
After editing your data, please press the “save” button and the data will be saved in the underlying database. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Delete====&lt;br /&gt;
&lt;br /&gt;
Delete, deactivate or remove existing entries.&lt;br /&gt;
&lt;br /&gt;
If you don’t need an existing entry, please select it and press the “delete” button, then this data will be remove from the underlying database.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==ActionDSl==&lt;br /&gt;
&lt;br /&gt;
The ActionDSL works for Os.bee models, it defines the toolbar actions for task, select workload, dialog, report, chart, workflow, datainterchange, ect..&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the ActionDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “toolbar” - define the action details, e.g. toolbar name, description and items… &lt;br /&gt;
&lt;br /&gt;
* “items” – define the items for this action. &lt;br /&gt;
&lt;br /&gt;
* “item” -  define the function and action type for the item … &lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package defintion====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;[{&lt;br /&gt;
toolbar &amp;lt;toolbar name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
		[items { . . .}]&lt;br /&gt;
. . .&lt;br /&gt;
} ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each toolbar, one .java file named &amp;lt;code&amp;gt;&amp;lt;toolbar name&amp;gt;+Action.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* One or more '''toolbars''' can be defined in the same '''package'''.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''descrbied by''' is optional; you can use this keyword to define the description of this toolbar&lt;br /&gt;
&lt;br /&gt;
* One or more '''item''' can be defined in the same '''items''' block.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.actions {&lt;br /&gt;
	toolbar StartTask described by &amp;quot;Toolbar for tables showing tasks&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
	toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { . . . }&lt;br /&gt;
	toolbar HandleTask described by &amp;quot;Toolbar for BPM oriented perspectives&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
toolbar Report described by &amp;quot;Toolbar for reports&amp;quot; items { . . . }&lt;br /&gt;
toolbar WorkloadSelect described by &amp;quot;Toolbar for Workload Selects&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 5 '''toolbars''' are defined in the same '''package'''; they are ''StartTask'', ''Dialog'', ''HandleTask'', ''Report'' and ''WorkloadSelect''.&lt;br /&gt;
&lt;br /&gt;
====Items&amp;amp;item====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the action details can be defined here. For each item, a java file named &amp;lt;code&amp;gt;&amp;lt;toolbar name&amp;gt;+&amp;lt;action rule&amp;gt;+Action.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/. &amp;lt;action rule&amp;gt;&amp;lt;/code&amp;gt; is defined in '''ActionType''' and it will be introduced in the next section.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
items { &lt;br /&gt;
item &amp;lt;item name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
		[icon &amp;lt;URI string&amp;gt;]&lt;br /&gt;
		[group &amp;lt;func.FunctionLibraryGroup name&amp;gt;	&lt;br /&gt;
  [canExecute &amp;lt;func.FunctionLibraryFunction name&amp;gt;]&lt;br /&gt;
&amp;amp; [executeParameter &amp;lt;func.FunctionLibraryFunction name&amp;gt;]&lt;br /&gt;
]&lt;br /&gt;
		ActionType&lt;br /&gt;
		[message &amp;lt;msg.MessageItem name |QualifiedName&amp;gt;]&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
. . .&lt;br /&gt;
} ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''icon''' is optional, it define the identifier for a resource, e.g. icon file &lt;br /&gt;
&lt;br /&gt;
* Keyword '''group''',  '''canExecute &amp;amp; executeParameter''' are used to define the predefined function which this item could use from FunctionlibraryDSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar HandleTask described by &amp;quot;Toolbar for BPM oriented perspectives&amp;quot; items {&lt;br /&gt;
   item stop icon &amp;quot;task_action_stop&amp;quot; group PerspectiveToolbar&lt;br /&gt;
     canExecute stopCanExecute executeParameter getTaskId taskAction Stop&lt;br /&gt;
   . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the following code will be generated in the java file of '''item''' '''''stop''''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@CanExecute&lt;br /&gt;
public boolean canExecute() {&lt;br /&gt;
return net.osbee.sample.foodmart.functionlibraries.PerspectiveToolbar&lt;br /&gt;
.stopCanExecute(getContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@Execute&lt;br /&gt;
public void execute(final IEventBroker eventBroker) {&lt;br /&gt;
    log.debug(&amp;quot;action execute called for stop&amp;quot;);&lt;br /&gt;
    String uuid = (String)eclipseContext.get(&amp;quot;HandleTask_TOOLBAR_ID&amp;quot;);&lt;br /&gt;
eventBroker.send(&lt;br /&gt;
EventBrokerMsg.ACTION_BUTTON_EXECUTE_PREFIX+ &amp;quot;HandleTaskAction&amp;quot;+uuid, &lt;br /&gt;
new EventBrokerMsg(-1, &lt;br /&gt;
&amp;quot;Stop&amp;quot;, &lt;br /&gt;
net.osbee.sample.foodmart.functionlibraries&lt;br /&gt;
.PerspectiveToolbar.getTaskId(getContent())&lt;br /&gt;
)&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''message''' is used to define the action message using predefined message from messageDSL. &lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { &lt;br /&gt;
	item newItem icon &amp;quot;dsnew&amp;quot; dialogAction New&lt;br /&gt;
item saveItem icon &amp;quot;dssave&amp;quot; dialogAction Save message  net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.SaveMsg&lt;br /&gt;
item deleteItem icon &amp;quot;dsdelete&amp;quot; dialogAction Delete message net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.DeleteMsg&lt;br /&gt;
	item cancelItem icon &amp;quot;dscancel&amp;quot; dialogAction Cancel&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''message''' '''''SavMsg''''' and '''''DeleteMsg''''' are defined in messageDSL as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.messages{&lt;br /&gt;
	category FoodMartErrors {&lt;br /&gt;
		group DtoService { &lt;br /&gt;
			message DeleteMsg{ &lt;br /&gt;
				parameter{&lt;br /&gt;
					Exception ex&lt;br /&gt;
					String stackTrace&lt;br /&gt;
				}&lt;br /&gt;
				automatic{}&lt;br /&gt;
				format {&lt;br /&gt;
					log &amp;quot;%%ex.simpleName%%: Delete not allowed! – &lt;br /&gt;
%%stackTrace%%&amp;quot;&lt;br /&gt;
					show &amp;quot;%%ex.simpleName%% - %%ex.localizedMessage%% &lt;br /&gt;
- Delete not allowed!&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			message SaveMsg{&lt;br /&gt;
				parameter{&lt;br /&gt;
					Exception ex&lt;br /&gt;
					String stackTrace&lt;br /&gt;
				}&lt;br /&gt;
				automatic{}&lt;br /&gt;
				format {&lt;br /&gt;
					log &amp;quot;%%ex.simpleName%%: Save not allowed! – &lt;br /&gt;
%%stackTrace%%&amp;quot;&lt;br /&gt;
					show &amp;quot;%%ex.simpleName%% - %%ex.localizedMessage%% &lt;br /&gt;
- Delete not allowed!&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''dialog''' '''''Employee''''' uses this '''toolbar''' '''''Dialog''''' in dialogDSL as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.dialogs {&lt;br /&gt;
	dialog Employee described by &amp;quot;Employee data&amp;quot; autobinding MemployeeDto toolbar Dialog&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There will be no code generated in the related toolbar java files. But in the EmployeeDialog.java, where this toolbar will be used, the following code generated for the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void showSaveErrorMessage(final Exception ex) {&lt;br /&gt;
    org.eclipse.osbp.xtext.messagedsl.common.Message errorMsg = net.osbee.sample.foodmart.messages.FoodMartErrorsMessage.DtoService_SaveMsg(ex, ex.getMessage());&lt;br /&gt;
    Notification.show(errorMsg.getShowMessage());&lt;br /&gt;
    log.error(errorMsg.getLogMessage());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void showDeleteErrorMessage(final Exception ex) {&lt;br /&gt;
    org.eclipse.osbp.xtext.messagedsl.common.Message errorMsg = net.osbee.sample.foodmart.messages.FoodMartErrorsMessage.DtoService_DeleteMsg(ex, ex.getMessage());&lt;br /&gt;
    Notification.show(errorMsg.getShowMessage());&lt;br /&gt;
    log.error(errorMsg.getLogMessage());&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''''ActionType''''' will be introduced in the next section.&lt;br /&gt;
&lt;br /&gt;
====ActionType====&lt;br /&gt;
&lt;br /&gt;
'''ActionType''' sets the type of action for the item.&lt;br /&gt;
&lt;br /&gt;
There are 8 kinds of action types:&lt;br /&gt;
&lt;br /&gt;
=====taskAction=====&lt;br /&gt;
&lt;br /&gt;
'''''taskAction''''' is used to define the action of task for bpm.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taskAction &amp;lt;taskAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* taskAction rule includes 15 rules, and its &amp;lt;action rule&amp;gt; is the same as the following rule:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Claim, Start, Stop, Release, Suspend, Resume, Skip, Complete, Delegate, Forward, Fail, Register, Remove, Activate, Exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar StartTask described by &amp;quot;Toolbar for tables showing tasks&amp;quot; items {&lt;br /&gt;
	item claim icon &amp;quot;task_action_claim&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute claimCanExecute executeParameter getTaskId taskAction Claim&lt;br /&gt;
	item start icon &amp;quot;task_action_start&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute startCanExecute executeParameter getTaskId taskAction Start&lt;br /&gt;
	item start icon &amp;quot;task_action_resume&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute resumeCanExecute executeParameter getTaskId taskAction Resume&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====selectWorkloadAction=====&lt;br /&gt;
&lt;br /&gt;
'''''selectWorkloadAction''''' is used to define the action of select workload.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
selectWorkloadAction &amp;lt;selectWorkloadAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* selectWorkloadAction rule includes the 2 rules, and its &amp;lt;action rule&amp;gt; is as same as the following rule:&amp;lt;code&amp;gt; RemoveAll, AddAll&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar WorkloadSelect described by &amp;quot;Toolbar for Workload Selects&amp;quot; items {&lt;br /&gt;
item removeAllWorkloadItems icon &amp;quot;task_status_obsolete&amp;quot; selectWorkloadAction  RemoveAll&lt;br /&gt;
item addAllSelectedItemsToTheWorkload icon &amp;quot;import&amp;quot;            selectWorkloadAction AddAll&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====dialogAction=====&lt;br /&gt;
&lt;br /&gt;
'''DialogAction''' is used to define the actions for dialog. &lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dialogAction &amp;lt;dialogAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dialogAction rule includes the 4 rules, and its &amp;lt;action rule&amp;gt; is as same as the following rule: &amp;lt;code&amp;gt;New, Save, Delete, Cancel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { &lt;br /&gt;
	item newItem icon &amp;quot;dsnew&amp;quot; dialogAction New&lt;br /&gt;
item saveItem icon &amp;quot;dssave&amp;quot; dialogAction Save message  net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.SaveMsg&lt;br /&gt;
item deleteItem icon &amp;quot;dsdelete&amp;quot; dialogAction Delete message net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.DeleteMsg&lt;br /&gt;
	item cancelItem icon &amp;quot;dscancel&amp;quot; dialogAction Cancel&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* “new” means create a new entry.&lt;br /&gt;
&lt;br /&gt;
* “save” means save the changing.&lt;br /&gt;
&lt;br /&gt;
* “delete” means delete the selected entry.&lt;br /&gt;
&lt;br /&gt;
* “cancel” means ignore the changing.&lt;br /&gt;
&lt;br /&gt;
Here is the dialog view in perspective, in which the 4 buttons do the actions by clicking them: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=====reportAction=====&lt;br /&gt;
&lt;br /&gt;
'''''ReportAction''''' is used to define the actions for report.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
reportAction &amp;lt;reportAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reportAction rule includes the 2 rules:  PrintOnServer, Download.&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is PrintOnServer and ReportDownload.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Report described by &amp;quot;Toolbar for reports&amp;quot; items {&lt;br /&gt;
	item print icon &amp;quot;print&amp;quot; reportAction Download&lt;br /&gt;
	item print icon &amp;quot;xml&amp;quot; reportAction PrintOnServer&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====chartAction=====&lt;br /&gt;
&lt;br /&gt;
'''''chartAction''''' is used to define the actions for chart.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
chartAction Download&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''ChartDownload'''''.&lt;br /&gt;
&lt;br /&gt;
=====workflowAction=====&lt;br /&gt;
&lt;br /&gt;
'''''workflowAction''''' is used to define the actions for workflow.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
workflowAction Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''start'''''.&lt;br /&gt;
&lt;br /&gt;
=====genericAction=====&lt;br /&gt;
&lt;br /&gt;
'''''genericAction''''' is used to define the actions for yourself. You can define it as you will.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
genericAction &amp;lt;STRING&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''the string'''''.&lt;br /&gt;
&lt;br /&gt;
=====datainterchangeAction=====&lt;br /&gt;
&lt;br /&gt;
'''''datainterchangeAction''''' is used to define the actions for data interchange&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datainterchangeAction &amp;lt;datainterchangeAction rule&amp;gt; &amp;lt;data.DataInterchange name&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* datainterchangeAction type includes the following types, and its &amp;lt;action rule&amp;gt; is as same as the following rule:  '''Import, Export'''.&lt;br /&gt;
&lt;br /&gt;
* The data interchange should be predefined in datainterchangeDSL.&lt;br /&gt;
&lt;br /&gt;
The following code will be generated in the java file of '''item''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Execute&lt;br /&gt;
  public void execute(final IEventBroker eventBroker) {&lt;br /&gt;
    &amp;lt;datainterchange qualified name&amp;gt; &amp;lt;datainerchange name&amp;gt; = new &amp;lt;datainterchange qualified name&amp;gt;();&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setFileURL(&amp;lt;file path URL String&amp;gt;&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setPersistenceService(persistenceService);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setDirection(WorkerThreadRunnable.Direction.IMPORT);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setEventBroker(eventBroker);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setEventDispatcher(eventDispatcher);&lt;br /&gt;
    executorService.execute(&amp;lt;datainerchange name&amp;gt;);&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=Action_DSL&amp;diff=1991</id>
		<title>Action DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=Action_DSL&amp;diff=1991"/>
				<updated>2017-07-25T14:46:13Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: Created page with &amp;quot;==Introduction==  ===CRUD for toolbar===  Editing data is nice but data must be persisted otherwise all effort invested in editing data would be lost. For this reason, OS.bee...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
===CRUD for toolbar===&lt;br /&gt;
&lt;br /&gt;
Editing data is nice but data must be persisted otherwise all effort invested in editing data would be lost. For this reason, OS.bee apps come with a set of create, read, update and delete functionality (CRUD) to manipulate data in a database. OS.bee can be operated with different database products.&lt;br /&gt;
&lt;br /&gt;
====Create====&lt;br /&gt;
&lt;br /&gt;
Create or add new entries.&lt;br /&gt;
&lt;br /&gt;
If you want to create new data entry, please press the “new data” action button, after the action has been executed, a new unique id must be created. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Read====&lt;br /&gt;
&lt;br /&gt;
Read, retrieve, search or view existing entries.&lt;br /&gt;
&lt;br /&gt;
Existed data can be read from the database. If you request existed data to be displayed in the UI, you must either retrieved a unique id to the database so it can select the requested data, or you can search and select one.&lt;br /&gt;
&lt;br /&gt;
In Os.bee web site, for example the perspective of “Persons”, you can click one row from the table on the left, then the detail data will be read from database and shown in the dialog on the right. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Update====&lt;br /&gt;
&lt;br /&gt;
Update or edit existing entries.&lt;br /&gt;
&lt;br /&gt;
After editing your data, please press the “save” button and the data will be saved in the underlying database. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Delete====&lt;br /&gt;
&lt;br /&gt;
Delete, deactivate or remove existing entries.&lt;br /&gt;
&lt;br /&gt;
If you don’t need an existing entry, please select it and press the “delete” button, then this data will be remove from the underlying database.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==ActionDSl==&lt;br /&gt;
&lt;br /&gt;
The actionDSL works for Os.bee models, it defines the toolbar actions for task, select workload, dialog, report, chart, workflow, datainterchange, ect..&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the ActionDSL are:&lt;br /&gt;
&lt;br /&gt;
* “package” - the root element that contains all the other elements. A model can contain multiple packages. &lt;br /&gt;
&lt;br /&gt;
* “toolbar” - define the action details, e.g. toolbar name, description and items… &lt;br /&gt;
&lt;br /&gt;
* “items” – define the items for this action. &lt;br /&gt;
&lt;br /&gt;
* “item” -  define the function and action type for the item … &lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&lt;br /&gt;
====package defintion====&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package &amp;lt;package name&amp;gt;[{&lt;br /&gt;
toolbar &amp;lt;toolbar name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
		[items { . . .}]&lt;br /&gt;
. . .&lt;br /&gt;
} ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each toolbar, one .java file named &amp;lt;code&amp;gt;&amp;lt;toolbar name&amp;gt;+Action.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* One or more '''toolbars''' can be defined in the same '''package'''.&lt;br /&gt;
&lt;br /&gt;
* Keyword '''descrbied by''' is optional; you can use this keyword to define the description of this toolbar&lt;br /&gt;
&lt;br /&gt;
* One or more '''item''' can be defined in the same '''items''' block.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.actions {&lt;br /&gt;
	toolbar StartTask described by &amp;quot;Toolbar for tables showing tasks&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
	toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { . . . }&lt;br /&gt;
	toolbar HandleTask described by &amp;quot;Toolbar for BPM oriented perspectives&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
toolbar Report described by &amp;quot;Toolbar for reports&amp;quot; items { . . . }&lt;br /&gt;
toolbar WorkloadSelect described by &amp;quot;Toolbar for Workload Selects&amp;quot; &lt;br /&gt;
items { . . . }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, 5 '''toolbars''' are defined in the same '''package'''; they are ''StartTask'', ''Dialog'', ''HandleTask'', ''Report'' and ''WorkloadSelect''.&lt;br /&gt;
&lt;br /&gt;
====Items&amp;amp;item====&lt;br /&gt;
&lt;br /&gt;
This is the main part of this model. All the action details can be defined here. For each item, a java file named &amp;lt;code&amp;gt;&amp;lt;toolbar name&amp;gt;+&amp;lt;action rule&amp;gt;+Action.java&amp;lt;/code&amp;gt; will be generated in folder &amp;lt;code&amp;gt;./src-gen/&amp;lt;package name&amp;gt;/. &amp;lt;action rule&amp;gt;&amp;lt;/code&amp;gt; is defined in '''ActionType''' and it will be introduced in the next section.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
items { &lt;br /&gt;
item &amp;lt;item name&amp;gt; [described by &amp;lt;description&amp;gt;]&lt;br /&gt;
		[icon &amp;lt;URI string&amp;gt;]&lt;br /&gt;
		[group &amp;lt;func.FunctionLibraryGroup name&amp;gt;	&lt;br /&gt;
  [canExecute &amp;lt;func.FunctionLibraryFunction name&amp;gt;]&lt;br /&gt;
&amp;amp; [executeParameter &amp;lt;func.FunctionLibraryFunction name&amp;gt;]&lt;br /&gt;
]&lt;br /&gt;
		ActionType&lt;br /&gt;
		[message &amp;lt;msg.MessageItem name |QualifiedName&amp;gt;]&lt;br /&gt;
. . .&lt;br /&gt;
}]&lt;br /&gt;
. . .&lt;br /&gt;
} ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''icon''' is optional, it define the identifier for a resource, e.g. icon file &lt;br /&gt;
&lt;br /&gt;
* Keyword '''group''',  '''canExecute &amp;amp; executeParameter''' are used to define the predefined function which this item could use from FunctionlibraryDSL.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar HandleTask described by &amp;quot;Toolbar for BPM oriented perspectives&amp;quot; items {&lt;br /&gt;
   item stop icon &amp;quot;task_action_stop&amp;quot; group PerspectiveToolbar&lt;br /&gt;
     canExecute stopCanExecute executeParameter getTaskId taskAction Stop&lt;br /&gt;
   . . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the following code will be generated in the java file of '''item''' '''''stop''''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@CanExecute&lt;br /&gt;
public boolean canExecute() {&lt;br /&gt;
return net.osbee.sample.foodmart.functionlibraries.PerspectiveToolbar&lt;br /&gt;
.stopCanExecute(getContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@Execute&lt;br /&gt;
public void execute(final IEventBroker eventBroker) {&lt;br /&gt;
    log.debug(&amp;quot;action execute called for stop&amp;quot;);&lt;br /&gt;
    String uuid = (String)eclipseContext.get(&amp;quot;HandleTask_TOOLBAR_ID&amp;quot;);&lt;br /&gt;
eventBroker.send(&lt;br /&gt;
EventBrokerMsg.ACTION_BUTTON_EXECUTE_PREFIX+ &amp;quot;HandleTaskAction&amp;quot;+uuid, &lt;br /&gt;
new EventBrokerMsg(-1, &lt;br /&gt;
&amp;quot;Stop&amp;quot;, &lt;br /&gt;
net.osbee.sample.foodmart.functionlibraries&lt;br /&gt;
.PerspectiveToolbar.getTaskId(getContent())&lt;br /&gt;
)&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Keyword '''message''' is used to define the action message using predefined message from messageDSL. &lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { &lt;br /&gt;
	item newItem icon &amp;quot;dsnew&amp;quot; dialogAction New&lt;br /&gt;
item saveItem icon &amp;quot;dssave&amp;quot; dialogAction Save message  net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.SaveMsg&lt;br /&gt;
item deleteItem icon &amp;quot;dsdelete&amp;quot; dialogAction Delete message net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.DeleteMsg&lt;br /&gt;
	item cancelItem icon &amp;quot;dscancel&amp;quot; dialogAction Cancel&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''message''' '''''SavMsg''''' and '''''DeleteMsg''''' are defined in messageDSL as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.messages{&lt;br /&gt;
	category FoodMartErrors {&lt;br /&gt;
		group DtoService { &lt;br /&gt;
			message DeleteMsg{ &lt;br /&gt;
				parameter{&lt;br /&gt;
					Exception ex&lt;br /&gt;
					String stackTrace&lt;br /&gt;
				}&lt;br /&gt;
				automatic{}&lt;br /&gt;
				format {&lt;br /&gt;
					log &amp;quot;%%ex.simpleName%%: Delete not allowed! – &lt;br /&gt;
%%stackTrace%%&amp;quot;&lt;br /&gt;
					show &amp;quot;%%ex.simpleName%% - %%ex.localizedMessage%% &lt;br /&gt;
- Delete not allowed!&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			message SaveMsg{&lt;br /&gt;
				parameter{&lt;br /&gt;
					Exception ex&lt;br /&gt;
					String stackTrace&lt;br /&gt;
				}&lt;br /&gt;
				automatic{}&lt;br /&gt;
				format {&lt;br /&gt;
					log &amp;quot;%%ex.simpleName%%: Save not allowed! – &lt;br /&gt;
%%stackTrace%%&amp;quot;&lt;br /&gt;
					show &amp;quot;%%ex.simpleName%% - %%ex.localizedMessage%% &lt;br /&gt;
- Delete not allowed!&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''dialog''' '''''Employee''''' uses this '''toolbar''' '''''Dialog''''' in dialogDSL as following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package net.osbee.sample.foodmart.dialogs {&lt;br /&gt;
	dialog Employee described by &amp;quot;Employee data&amp;quot; autobinding MemployeeDto toolbar Dialog&lt;br /&gt;
	. . .&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There will be no code generated in the related toolbar java files. But in the EmployeeDialog.java, where this toolbar will be used, the following code generated for the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void showSaveErrorMessage(final Exception ex) {&lt;br /&gt;
    org.eclipse.osbp.xtext.messagedsl.common.Message errorMsg = net.osbee.sample.foodmart.messages.FoodMartErrorsMessage.DtoService_SaveMsg(ex, ex.getMessage());&lt;br /&gt;
    Notification.show(errorMsg.getShowMessage());&lt;br /&gt;
    log.error(errorMsg.getLogMessage());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void showDeleteErrorMessage(final Exception ex) {&lt;br /&gt;
    org.eclipse.osbp.xtext.messagedsl.common.Message errorMsg = net.osbee.sample.foodmart.messages.FoodMartErrorsMessage.DtoService_DeleteMsg(ex, ex.getMessage());&lt;br /&gt;
    Notification.show(errorMsg.getShowMessage());&lt;br /&gt;
    log.error(errorMsg.getLogMessage());&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''''ActionType''''' will be introduced in the next section.&lt;br /&gt;
&lt;br /&gt;
====ActionType====&lt;br /&gt;
&lt;br /&gt;
'''ActionType''' sets the type of action for the item.&lt;br /&gt;
&lt;br /&gt;
There are 8 kinds of action types:&lt;br /&gt;
&lt;br /&gt;
=====taskAction=====&lt;br /&gt;
&lt;br /&gt;
'''''taskAction''''' is used to define the action of task for bpm.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
taskAction &amp;lt;taskAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* taskAction rule includes 15 rules, and its &amp;lt;action rule&amp;gt; is the same as the following rule:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Claim, Start, Stop, Release, Suspend, Resume, Skip, Complete, Delegate, Forward, Fail, Register, Remove, Activate, Exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar StartTask described by &amp;quot;Toolbar for tables showing tasks&amp;quot; items {&lt;br /&gt;
	item claim icon &amp;quot;task_action_claim&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute claimCanExecute executeParameter getTaskId taskAction Claim&lt;br /&gt;
	item start icon &amp;quot;task_action_start&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute startCanExecute executeParameter getTaskId taskAction Start&lt;br /&gt;
	item start icon &amp;quot;task_action_resume&amp;quot; group TaskToolbar &lt;br /&gt;
 canExecute resumeCanExecute executeParameter getTaskId taskAction Resume&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====selectWorkloadAction=====&lt;br /&gt;
&lt;br /&gt;
'''''selectWorkloadAction''''' is used to define the action of select workload.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
selectWorkloadAction &amp;lt;selectWorkloadAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* selectWorkloadAction rule includes the 2 rules, and its &amp;lt;action rule&amp;gt; is as same as the following rule:&amp;lt;code&amp;gt; RemoveAll, AddAll&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar WorkloadSelect described by &amp;quot;Toolbar for Workload Selects&amp;quot; items {&lt;br /&gt;
item removeAllWorkloadItems icon &amp;quot;task_status_obsolete&amp;quot; selectWorkloadAction  RemoveAll&lt;br /&gt;
item addAllSelectedItemsToTheWorkload icon &amp;quot;import&amp;quot;            selectWorkloadAction AddAll&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====dialogAction=====&lt;br /&gt;
&lt;br /&gt;
'''DialogAction''' is used to define the actions for dialog. &lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
dialogAction &amp;lt;dialogAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dialogAction rule includes the 4 rules, and its &amp;lt;action rule&amp;gt; is as same as the following rule: &amp;lt;code&amp;gt;New, Save, Delete, Cancel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Dialog described by &amp;quot;Toolbar for Dialogs&amp;quot; items { &lt;br /&gt;
	item newItem icon &amp;quot;dsnew&amp;quot; dialogAction New&lt;br /&gt;
item saveItem icon &amp;quot;dssave&amp;quot; dialogAction Save message  net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.SaveMsg&lt;br /&gt;
item deleteItem icon &amp;quot;dsdelete&amp;quot; dialogAction Delete message net.osbee.sample.foodmart.messages.FoodMartErrors.DtoService.DeleteMsg&lt;br /&gt;
	item cancelItem icon &amp;quot;dscancel&amp;quot; dialogAction Cancel&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* “new” means create a new entry.&lt;br /&gt;
&lt;br /&gt;
* “save” means save the changing.&lt;br /&gt;
&lt;br /&gt;
* “delete” means delete the selected entry.&lt;br /&gt;
&lt;br /&gt;
* “cancel” means ignore the changing.&lt;br /&gt;
&lt;br /&gt;
Here is the dialog view in perspective, in which the 4 buttons do the actions by clicking them: &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ActionDSL_05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=====reportAction=====&lt;br /&gt;
&lt;br /&gt;
'''''ReportAction''''' is used to define the actions for report.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
reportAction &amp;lt;reportAction rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reportAction rule includes the 2 rules:  PrintOnServer, Download.&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is PrintOnServer and ReportDownload.&lt;br /&gt;
&lt;br /&gt;
► '''Example''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
toolbar Report described by &amp;quot;Toolbar for reports&amp;quot; items {&lt;br /&gt;
	item print icon &amp;quot;print&amp;quot; reportAction Download&lt;br /&gt;
	item print icon &amp;quot;xml&amp;quot; reportAction PrintOnServer&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====chartAction=====&lt;br /&gt;
&lt;br /&gt;
'''''chartAction''''' is used to define the actions for chart.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
chartAction Download&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''ChartDownload'''''.&lt;br /&gt;
&lt;br /&gt;
=====workflowAction=====&lt;br /&gt;
&lt;br /&gt;
'''''workflowAction''''' is used to define the actions for workflow.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
workflowAction Start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''start'''''.&lt;br /&gt;
&lt;br /&gt;
=====genericAction=====&lt;br /&gt;
&lt;br /&gt;
'''''genericAction''''' is used to define the actions for yourself. You can define it as you will.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
genericAction &amp;lt;STRING&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Its &amp;lt;action rule&amp;gt; is '''''the string'''''.&lt;br /&gt;
&lt;br /&gt;
=====datainterchangeAction=====&lt;br /&gt;
&lt;br /&gt;
'''''datainterchangeAction''''' is used to define the actions for data interchange&lt;br /&gt;
&lt;br /&gt;
► '''Syntax''':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
datainterchangeAction &amp;lt;datainterchangeAction rule&amp;gt; &amp;lt;data.DataInterchange name&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* datainterchangeAction type includes the following types, and its &amp;lt;action rule&amp;gt; is as same as the following rule:  '''Import, Export'''.&lt;br /&gt;
&lt;br /&gt;
* The data interchange should be predefined in datainterchangeDSL.&lt;br /&gt;
&lt;br /&gt;
The following code will be generated in the java file of '''item''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
@Execute&lt;br /&gt;
  public void execute(final IEventBroker eventBroker) {&lt;br /&gt;
    &amp;lt;datainterchange qualified name&amp;gt; &amp;lt;datainerchange name&amp;gt; = new &amp;lt;datainterchange qualified name&amp;gt;();&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setFileURL(&amp;lt;file path URL String&amp;gt;&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setPersistenceService(persistenceService);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setDirection(WorkerThreadRunnable.Direction.IMPORT);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setEventBroker(eventBroker);&lt;br /&gt;
    &amp;lt;datainerchange name&amp;gt;.setEventDispatcher(eventDispatcher);&lt;br /&gt;
    executorService.execute(&amp;lt;datainerchange name&amp;gt;);&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:ActionDSL_05.png&amp;diff=1990</id>
		<title>File:ActionDSL 05.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:ActionDSL_05.png&amp;diff=1990"/>
				<updated>2017-07-25T12:39:18Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:ActionDSL_04.png&amp;diff=1989</id>
		<title>File:ActionDSL 04.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:ActionDSL_04.png&amp;diff=1989"/>
				<updated>2017-07-25T12:39:12Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:ActionDSL_03.png&amp;diff=1988</id>
		<title>File:ActionDSL 03.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:ActionDSL_03.png&amp;diff=1988"/>
				<updated>2017-07-25T12:39:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:ActionDSL_02.png&amp;diff=1987</id>
		<title>File:ActionDSL 02.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:ActionDSL_02.png&amp;diff=1987"/>
				<updated>2017-07-25T12:36:06Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:ActionDSL_01.png&amp;diff=1986</id>
		<title>File:ActionDSL 01.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:ActionDSL_01.png&amp;diff=1986"/>
				<updated>2017-07-25T12:34:03Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=1985</id>
		<title>OS.bee Software Factory Documentation</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Documentation&amp;diff=1985"/>
				<updated>2017-07-25T12:15:54Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* OS.bee DSL Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OS.bee DSL Documentation=&lt;br /&gt;
The ''OS.bee Software Factory'' is composed of various domain specific languages (DSLs), which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Entity DSL]]==&lt;br /&gt;
The [[Entity DSL]] is,  beside Datatypes, the basic DSL for the Software Factory. It allows you, through the creation of entity model files, to describe the entity relationship models that will be used to create, read, update and delete content on a persistence level, such as with an SQL database.&lt;br /&gt;
&lt;br /&gt;
==[[DTO DSL]]==&lt;br /&gt;
The [[DTO DSL]] handles data transfer objects in order to transfer data between processes. It uses the [[Entity DSL]].&lt;br /&gt;
&lt;br /&gt;
==[[Chart DSL]]==&lt;br /&gt;
The [[Chart DSL]] provides Vaadin dCharts.&lt;br /&gt;
&lt;br /&gt;
==[[Cube DSL]]==&lt;br /&gt;
The [[Cube DSL]] provides MDX access to Mondrian OLAP Cubes.&lt;br /&gt;
&lt;br /&gt;
==[[Datamart DSL]]==&lt;br /&gt;
A datamart is a condensed and more focused version of a data warehouse that reflects the regulations and process specifications of each business unit within an organization.  Each datamart is dedicated to a specific business function or region.&lt;br /&gt;
&lt;br /&gt;
==[[Dialog DSL]]==&lt;br /&gt;
The [[Dialog DSL]] generates the [https://vaadin.com/home Vaadin] UI&lt;br /&gt;
&lt;br /&gt;
==[[Report DSL]]==&lt;br /&gt;
The [[Report DSL]] generates the [https://vaadin.com/home Vaadin] UI and the [http://developer.actuate.com/about/ BIRT] report module.&lt;br /&gt;
&lt;br /&gt;
==[[Table DSL ]]==&lt;br /&gt;
The [[Table DSL]] generates the [https://vaadin.com/home Vaadin] table UI.&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL ]]==&lt;br /&gt;
The [[Topology DSL]] generates [https://d3js.org/ D3.js], a JavaScript library for manipulating documents based on data, to generate the visualization of topology charts.   Data used is [https://github.com/topojson topojson], an extension of [http://geojson.org/ GeoJSON] that encodes topology and the corresponding UI components.&lt;br /&gt;
&lt;br /&gt;
==[[Entitymock DSL]]==&lt;br /&gt;
The [[Entitymock DSL]] generates mock data for entity models automatically upon initialization.&lt;br /&gt;
&lt;br /&gt;
==[[Statemachine DSL]]==&lt;br /&gt;
The [[Statemachine DSL]] adds behavior to user interfaces.  Instances of this DSL interconnect UI instances, FunctionLibrary instances, persistence layers and peripheral devices, and therefore act as controllers in a multiple Model-View-Controller environment.  There is no limitation of how many statemachine instances control a single business application.&lt;br /&gt;
&lt;br /&gt;
==[[Authorization DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Organization DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Topology DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Perspective DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[Action DSL]]==&lt;br /&gt;
&lt;br /&gt;
==[[How to add pictures]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee-Specific DSL Instances=&lt;br /&gt;
The ''OS.bee Software Factory'' provides a few specific DSL instances for different requirements.  These are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==Datatypes==&lt;br /&gt;
Several custom datatypes are described in detail in this chapter.&lt;br /&gt;
===[[BlobMapping]]===&lt;br /&gt;
This datatype allows the use of big data as a blob.&lt;br /&gt;
&lt;br /&gt;
=Other OS.bee-Specific Solutions=&lt;br /&gt;
The ''OS.bee Software Factory'' also provides other solutions, which are described in detail on the following pages.&lt;br /&gt;
&lt;br /&gt;
==[[Themes]]==&lt;br /&gt;
&lt;br /&gt;
=OS.bee Third-Party Software Solutions=&lt;br /&gt;
OS.bee also uses products of other software vendors (third-party products) that are based on open-source products.&lt;br /&gt;
&lt;br /&gt;
==[[Peripheral Devices]]==&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=DTO_DSL&amp;diff=1957</id>
		<title>DTO DSL</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=DTO_DSL&amp;diff=1957"/>
				<updated>2017-07-05T08:32:49Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* DTO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
&lt;br /&gt;
The DTO DSL facilitates the creation and handling of data transfer objects (DTOs) in order to transfer data between processes. Communication between processes is usually done by calls to remote interfaces and services, where each call is a computationally expensive and time-consuming operation. The use of DTOs that aggregate data that would have been transferred separately reduces the number of calls that are necessary, thus speeding up the data-transfer operation. Furthermore, DTOs are decoupled from the JPA, thus eliminating burdensome dependencies.&lt;br /&gt;
&lt;br /&gt;
Using the DTO DSL, it is easy to create DTOs and the mapper classes that link them to the respective persistence entities. Property-change support is automatically included, in order to have current data without direct dependencies on the persistence layer.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The main semantic elements of the DTO DSL are the following:&lt;br /&gt;
* '''package''' - The root element that contains all the other elements. A model can contain multiple packages.&lt;br /&gt;
* '''import''' declarations - Used to import other DTO models or the entity model files that are covered by the DTOs.&lt;br /&gt;
* '''datatype''' declarations - A way to define datatypes that can be used (only within the package - private scope).&lt;br /&gt;
* '''DTO''' - The model of a DTO that wraps an entity. It contains further elements such as properties and references. Appropriate mapper methods can be specified.&lt;br /&gt;
* '''property''' - A reference to an enum, a Java class or a “simple datatype&amp;quot; (as defined in the datatype declaration). Can be inherited from the wrapped entity and offers multiplicity.&lt;br /&gt;
* '''reference''' - A reference to another DTO. Can be inherited from the wrapped entity and offers multiplicity.&lt;br /&gt;
* '''operation''' - Similar to Java methods. The Xbase expression language can be used to write high-level code.&lt;br /&gt;
* '''comment''' - Can be added to all elements.&lt;br /&gt;
&lt;br /&gt;
► Note:  In order to make use of the DTO DSL, one has to make sure that the OSBP builder is executed after the Xtext builder.&lt;br /&gt;
&lt;br /&gt;
==DTO model files==&lt;br /&gt;
&lt;br /&gt;
DTO models are described in &amp;lt;code&amp;gt;.dtos&amp;lt;/code&amp;gt; files. These files describe the DTO model and are the basis for the code generation. DTO models may be split over several &amp;lt;code&amp;gt;.dtos&amp;lt;/code&amp;gt; files containing packages in the same namespace.&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.dtos&amp;lt;/code&amp;gt; file may contain several packages with DTOs.&lt;br /&gt;
&lt;br /&gt;
===package===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Packages are the root element of the DTO DSL grammar. Everything is contained in a &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;;  imports, datatypes, DTOs and enums have to be defined within the package. One document can contain multiple packages with unique names.&lt;br /&gt;
&lt;br /&gt;
The elements a package can contain are DTOs and enums. Additionally, a package allows &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt; statements and the declaration of datatypes.&lt;br /&gt;
[[File:Dto-01.png|right|frame|''Figure 1 - DTO model file - a package is the topmost element and contains other items.'']]&lt;br /&gt;
 &lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 package name {&lt;br /&gt;
    import importStatement;&lt;br /&gt;
    datatype datatypeDefinition;&lt;br /&gt;
    DTOs&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===import===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
In order to wrap entities into DTOs, the DTO DSL has to reference entities defined in entity model files. Furthermore, it is possible to reference DTOs in other packages. The &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt; statement is a way to address these elements without having to use their fully qualified name.&lt;br /&gt;
&lt;br /&gt;
Import statements allow the use of the '*' wildcard.&lt;br /&gt;
 &lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package name {&lt;br /&gt;
    import importStatement;&lt;br /&gt;
    datatype datatypeDefinition;&lt;br /&gt;
    DTOs&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Dto-02.png|center|frame|''Figure 2 - Items contained in another package can be accessed and handled if the package is imported.'']]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===datatype===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The DTO DSL allows the definition of datatypes. These are translated by the inferrer into their standard Java presentation. The behavior of the generator can be controlled by the datatype definitions.&lt;br /&gt;
There are three types of datatype definitions:&lt;br /&gt;
&lt;br /&gt;
;jvmTypes: Datatype definitons that map types to jvmTypes take the basic syntax of &amp;lt;br&amp;gt; &amp;lt;code&amp;gt;datatype &amp;lt;name&amp;gt; jvmType &amp;lt;type&amp;gt; as primitive;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt; Specifying datatypes in this manner uses an appropriate wrapper class in the generated Java code.&amp;lt;br&amp;gt; Adding the keywords &amp;lt;code&amp;gt;as primitive&amp;lt;/code&amp;gt; enforces the use of primitive datatypes where applicable: &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;datatype foo jvmType Integer&amp;lt;/code&amp;gt; compiles to an &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; whereas &amp;lt;br&amp;gt;&amp;lt;code&amp;gt;datatype foo jvmType Integer as primitive&amp;lt;/code&amp;gt; results in &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;dateTypes: The datatypes for handling temporal information can be defined by the following statement:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;datatype &amp;lt;name&amp;gt; datetype date|time|timestamp;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Datatypes that have been defined in this manner can be used as property variables in DTOs.&lt;br /&gt;
&lt;br /&gt;
;blobs: Binary blobs can be handled by defining a datatype with the &amp;lt;code&amp;gt;as blob&amp;lt;/code&amp;gt; keyword. The Java implementation of such a blob is a byte array.&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;datatype &amp;lt;name&amp;gt; as blob;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt; statements and &amp;lt;code&amp;gt;datatype&amp;lt;/code&amp;gt; definitions, the content of the .dtos file is made up of DTO definitions.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DTO==&lt;br /&gt;
&lt;br /&gt;
Data Transfer Objects ('''DTOs''') are the most complex elements in the DTO DSL. A DTO wraps an '''entity''' defined in the [[Entity DSL]] together with its properties and references into a single object used for communication purposes.&lt;br /&gt;
&lt;br /&gt;
DTOs are defined by name, properties, references and wrapper methods. A DTO normally does not implement business logic.&lt;br /&gt;
&lt;br /&gt;
For each DTO that is defined in a package, the DTO DSL automatically generates a Java DTO class and a corresponding mapper class that handles data transfer and conversion between DTO and entity.&lt;br /&gt;
&lt;br /&gt;
► '''Syntax:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
abstract dto &amp;lt;name&amp;gt; extends &amp;lt;parentDto&amp;gt; wraps &amp;lt;entityName&amp;gt; {&lt;br /&gt;
    dtoFeatures&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dto-03.png|center|frame|''Figure 3 - The defined DTO is translated to a Java class and an appropriate mapper class.'']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===extends===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;extends&amp;lt;/code&amp;gt; marks a DTO that is derived from another DTO. That means that the properties and references of the parent DTO are inherited.&lt;br /&gt;
&lt;br /&gt;
[[File:dto-04.png|center|frame|''Figure 4 - The &amp;lt;code&amp;gt;extends&amp;lt;/code&amp;gt; keyword causes a Java subclass to be created for the DTO.'']]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===wraps===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;wraps&amp;lt;/code&amp;gt; indicates the entity that is handled by the DTO. The entity has to be imported from the entity model file into the DTO package (for importing several entities, the use of the '*' wildcard may be advisable). &lt;br /&gt;
&lt;br /&gt;
[[File:dto-05.png|center|frame|''Figure 4 - The &amp;lt;code&amp;gt;wraps&amp;lt;/code&amp;gt; keyword links the DTO to its respective entity. Thus, properties and references of the entity are made available in the DTO (and can be accessed there via content assist).'']]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Enums==&lt;br /&gt;
&lt;br /&gt;
Enums are an abstraction of the Java enum. They compile to &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; classes and can be used as properties in DTOs.&lt;br /&gt;
&lt;br /&gt;
[[File:dto-06.png|center|frame|''Figure 6 - Defining enums allows using them as variables in DTOs.'']]&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
Properties of DTOs are references to datatypes or enums. They can be regarded as variables and are defined by a keyword followed by a datatype (Java type or datatype defined in the datatype section) and a name. &lt;br /&gt;
&lt;br /&gt;
Properties can be determined with the following keywords:&lt;br /&gt;
&lt;br /&gt;
===var===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The basic property. Defines a variable that can be used within the DTO. Appropriate getters and setters are created.&lt;br /&gt;
&lt;br /&gt;
[[File:dto-07.png|center|frame|''Figure 7 - Variables can be defined using the &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; keyword.'']]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===id===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
{{deprecated}}&lt;br /&gt;
&lt;br /&gt;
Defines a field in the DTO for mapping an &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; property (used as a primary key in the persistence layer). This keyword is deprecated. If no &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; is given, a warning is shown. Caution: ID autogeneration causes problems, since the value is not set before the entity is persisted to the database, which can cause problems. &lt;br /&gt;
&lt;br /&gt;
'''It is advised to use the &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt; keyword instead.'''&lt;br /&gt;
&lt;br /&gt;
[[File:dto-08.png|center|frame|''Figure 8 - Using the &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; property, &amp;quot;id&amp;quot; is defined as a unique key.'']]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===uuid===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Creates a field for the mapping of Universally Unique IDs as primary keys. UUIDs must be strings. &lt;br /&gt;
&lt;br /&gt;
[[File:dto-09.png|center|frame|''Figure 9 - By using the &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt; keyword, reliably unique IDs can be used as primary keys and mapped to a DTO.'']]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===version===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Defines a field for mapping a version property used by the JPA Compiler. &lt;br /&gt;
&lt;br /&gt;
[[File:dto-10.png|center|frame|''Figure 10 - A version property can be mapped into a DTO by using the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; keyword.'']]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===transient===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Marks the property as &amp;lt;code&amp;gt;transient&amp;lt;/code&amp;gt;. Transient properties are not mapped from the DTO to the entity and are thus not persisted. Getter and setter methods are created.&lt;br /&gt;
&lt;br /&gt;
[[File:dto-11.png|center|frame|''Figure 11 - The &amp;lt;code&amp;gt;transient&amp;lt;/code&amp;gt; keyword allows properties to be excluded from the mapping.'']]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===derived===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Marks the property as being derived from other values. The logic used in the derivation process may be specified using Xbase. Derived properties are not persisted, and only a getter is created.&lt;br /&gt;
&lt;br /&gt;
[[File:dto-12.png|center|frame|''Figure 12 - The &amp;lt;code&amp;gt;derived&amp;lt;/code&amp;gt; keyword marks properties that are based on other values and are computed at runtime. The calculation logic is translated to Java. Derived properties are excluded from the mapping.'']]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
The DTO DSL tracks relationships between DTOs by using the concept of references. Where appropriate, reverse references can be created using the &amp;lt;code&amp;gt;opposite&amp;lt;/code&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
References are defined by the &amp;lt;code&amp;gt;ref&amp;lt;/code&amp;gt; keyword, a type and a name. The exact type of reference can be specified as follows:&lt;br /&gt;
&lt;br /&gt;
*'''multiplicity and nullability''': The DTO DSL supports the specification of multiplicities in square brackets appended to the type:&lt;br /&gt;
**&amp;lt;code&amp;gt;[1]&amp;lt;/code&amp;gt; defines a non-nullable, one-to-one relationship.&lt;br /&gt;
**&amp;lt;code&amp;gt;[0..1]&amp;lt;/code&amp;gt; defines a nullable, one-to-one relationship (this is the default behavior).&lt;br /&gt;
**&amp;lt;code&amp;gt;[1..*]&amp;lt;/code&amp;gt; defines a non-nullable, one-to-many relationship. An &amp;lt;code&amp;gt;opposite&amp;lt;/code&amp;gt; reference is required.&lt;br /&gt;
**&amp;lt;code&amp;gt;[0..*]&amp;lt;/code&amp;gt;, or simply &amp;lt;code&amp;gt;[*]&amp;lt;/code&amp;gt;, defines a nullable, one-to-many relationship. An &amp;lt;code&amp;gt;opposite&amp;lt;/code&amp;gt; reference is required.&lt;br /&gt;
*'''opposite reference''': In the [[Entity DSL]], lifecycle references between entities need the specification of an &amp;lt;code&amp;gt;opposite&amp;lt;/code&amp;gt; reference in order to navigate back to the original object after following the reference. The DTO DSL includes a mechanism to map such references using the &amp;lt;code&amp;gt;opposite&amp;lt;/code&amp;gt; keyword.&lt;br /&gt;
*'''cascade''': The cascade specifier controls the behavior of the database on delete operations. If &amp;lt;code&amp;gt;cascade&amp;lt;/code&amp;gt; is specified, dependent records are also deleted. In the DTO DSL, these cascading references can be mapped to DTOs by the same keyword.&lt;br /&gt;
&lt;br /&gt;
[[File:dto-13.png|center|frame|''Figure 13 - An example of two DTOs referencing each other. The second DTO maps a cascading, non-nullable, one-to-many reference.'']]&lt;br /&gt;
&lt;br /&gt;
==Inherited Features==&lt;br /&gt;
&lt;br /&gt;
Inherited properties and references are the core of the DTO DSL. They provide the mechanism for mapping entities and their features to the respective DTOs and their features.&lt;br /&gt;
&lt;br /&gt;
There are two types of inherited features: inherited properties and inherited references.&lt;br /&gt;
&lt;br /&gt;
Inherited features are defined by the &amp;lt;code&amp;gt;inherit&amp;lt;/code&amp;gt; keyword followed by the feature type and the name of the feature in the entity. After that, the DTO to which a referenced entity or an embedded bean is mapped may be specified using the &amp;lt;code&amp;gt;mapto&amp;lt;/code&amp;gt; keyword.&lt;br /&gt;
Finally, custom mapper directives may be specified (see [[#Custom Mappers|Custom Mappers]]).&lt;br /&gt;
*'''inherit var''': used for mapping entity properties to DTO properties&lt;br /&gt;
*'''inherit ref''': used for mapping entity references to DTO references&lt;br /&gt;
*'''mapto''': defines the DTO the feature should be mapped to. In the case of inherit var, this keyword is used to point to a DTO that maps a bean from the entity model file. In the case of inherit ref, a DTO must be specified that the reference points to.&lt;br /&gt;
&lt;br /&gt;
►	Syntax:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
inherit var|ref entityFeature mapto dtoName {customMapper} ;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dto-14.png|center|frame|''Figure 14 - The &amp;lt;code&amp;gt;inherit&amp;lt;/code&amp;gt; var keyword is used to map entity properties to DTO properties. Content assist is available. The &amp;lt;code&amp;gt;mapto&amp;lt;/code&amp;gt; keyword specifies which DTO an embedded bean is mapped to.'']]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dto-15.png|center|frame|''Figure 15 - The &amp;lt;code&amp;gt;inherit ref&amp;lt;/code&amp;gt; keywords allow for mapping entity references to DTO references. Content assist is available, and multiplicities and opposite references are automatically carried over from the entity model file. The &amp;lt;code&amp;gt;mapto&amp;lt;/code&amp;gt; keyword indicates the DTO that serves as the other end of the reference.'']]&lt;br /&gt;
&lt;br /&gt;
==Custom Mappers==&lt;br /&gt;
&lt;br /&gt;
The DTO DSL provides a mechanism for creating custom mappers between DTOs and entities. These can be defined after the declaration of a property or reference, and they control the information exchange for the respective feature.&lt;br /&gt;
&lt;br /&gt;
In order to create a custom mapper, the &amp;lt;code&amp;gt;toDTO&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;fromDTO&amp;lt;/code&amp;gt; keywords are used, followed by the mapper definition in curly braces. &amp;lt;code&amp;gt;toDTO&amp;lt;/code&amp;gt; controls the flow of information from entity to DTO, &amp;lt;code&amp;gt;fromDTO&amp;lt;/code&amp;gt; vice versa. Within the curly braces, the special words &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;out&amp;lt;/code&amp;gt; may be used to reference the source and destination of the mapping.&lt;br /&gt;
&lt;br /&gt;
► Syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
inherit var|ref &amp;lt;entityFeature&amp;gt; mapto &amp;lt;dtoName&amp;gt; {&lt;br /&gt;
    toDto {&lt;br /&gt;
        XbaseDirectives&lt;br /&gt;
    }&lt;br /&gt;
    fromDto {&lt;br /&gt;
        XbaseDirectives&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dto-16.png|center|frame|''Figure 16 - The &amp;lt;code&amp;gt;toDto&amp;lt;/code&amp;gt; section creates a custom mapping from entity to DTO: First, a local variable &amp;lt;code&amp;gt;ArrayList&amp;lt;/code&amp;gt; is created, then an InfoDetail with a disclaimer is added to each entry. The &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; keyword is used to reference the entity for the iteration.'']]&lt;br /&gt;
&lt;br /&gt;
==Operations==&lt;br /&gt;
&lt;br /&gt;
The DTO DSL supports the declaration of operations that can be performed within the DTOs. These operations are based on Xbase and offer a huge set of semantic features, extending the featureset of Java. Xbase additionally offers features like closures. When using operations, bear in mind that it is not good practice to implement business logic within DTOs. Operations can be declared by the &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; keyword followed by braces containing the inline operation.&lt;br /&gt;
&lt;br /&gt;
► Syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
def returnType operationName() {&lt;br /&gt;
    XbaseDirectives&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dto-17.png|center|frame|''Figure 17 - The &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; keyword allows the inlining of custom methods in the DTO DSL code. These methods are translated into the appropriate Java methods.'']]&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&lt;br /&gt;
Comments can be added anywhere in a .dtos text file and are copied over into the generated Java code. Comments are enclosed in &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:dto-18.png|center|frame|''Figure 18 - The comments added in the DTO DSL are transformed into Java-style comments in the generated code.'']]&lt;br /&gt;
&lt;br /&gt;
Comments before the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; keyword are copied over to all generated Java classes - this is the place for copyright notices.&lt;br /&gt;
&lt;br /&gt;
[[File:dto-19.png|center|frame|''Figure 19 - A comment before the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; keyword ends up in all generated Java classes (DTO and mapper classes).'']]&lt;br /&gt;
==Copyright Notice==&lt;br /&gt;
&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Installation_Neon&amp;diff=1956</id>
		<title>OS.bee Software Factory Installation Neon</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Installation_Neon&amp;diff=1956"/>
				<updated>2017-07-05T07:59:49Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation of the Software Factory ==&lt;br /&gt;
&lt;br /&gt;
=== Before you start ===&lt;br /&gt;
&lt;br /&gt;
==== ''Java'' Version ====&lt;br /&gt;
&lt;br /&gt;
To be able to use the ''OS.bee Software Factory'', you need to have the right ''Java'' version installed.&lt;br /&gt;
&lt;br /&gt;
On 64-bit ''Windows'' systems, this is '''Java JDK 8 64bit''' [http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk Java SE Downloads].  If you have ''Java'' installed, there is generally a ''Java'' icon on the control panel which will enable you to find out the current version.&lt;br /&gt;
&lt;br /&gt;
==== ''Eclipse'' Version ====&lt;br /&gt;
&lt;br /&gt;
To be able to use the ''OS.bee Software Factory'', you need to have the correct ''Eclipse Neon'' version installed.&lt;br /&gt;
You can use [https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/3/eclipse-dsl-neon-3-win32-x86_64.zip&amp;amp;mirror_id=1190 Eclipse Neon 3 DSL Developers].&lt;br /&gt;
Download and extract it to a folder location of your choosing. On ''Windows'', we recommend '''C:\'''. This results in the installation folder '''C:\eclipse'''. This will be the assumed ''Eclipse'' installation folder for the rest of this document.&lt;br /&gt;
&lt;br /&gt;
To be able to launch ''Eclipse'' easily, create a shortcut on the computer's desktop to the program '''C:\eclipse\eclipse.exe'''. Be sure to add the parameter &amp;lt;code&amp;gt;-data /path/to/your/workspace&amp;lt;/code&amp;gt; to the shortcut's invocation of ''Eclipse'' in order to start in the correct workspace in the future.  Otherwise, you will be prompted to specify a workspace each time you start ''Eclipse''. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the following change to the '''eclipse.ini''' file found in the '''C:\eclipse''' folder:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
-Xmx4096m&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line allocates extra memory for ''Eclipse'' to use.&lt;br /&gt;
&lt;br /&gt;
A resulting '''eclipse.ini''' file for a ''Windows'' installation might look like this:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;existing lines above&amp;gt;&lt;br /&gt;
 -Xms128m&lt;br /&gt;
 -Xmx4096m&lt;br /&gt;
&lt;br /&gt;
==== OS.bee P2 Repository ====&lt;br /&gt;
&lt;br /&gt;
'''At the moment, the installation is only possible if you have access to the internal network. Use this --&amp;gt; [http://ccngiw2.compex.de/downloads/p2/osbee/neon/latest/ link] directly in Eclipse.'''&lt;br /&gt;
&lt;br /&gt;
=== Installation of the ''OS.bee Software Factory'' ===&lt;br /&gt;
&lt;br /&gt;
# Start the new ''Eclipse'' installation and select or define a workspace. It is important that each ''Eclipse'' installation is assigned to its own workspace.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:Workspace1.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to the menu bar and select '''Help''' -&amp;gt; '''Install New Software...'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Get the link to the repository from the [http://www.osbee.org/free-download/ download page], activate the checkbox if you agree to our '''Terms of Service and Use''' and if you '''are not a consumer'''. Click on one of the then activated buttons, copy the link and paste it into the field labeled '''Work with:'''. Then press '''Enter''' to make ''Eclipse'' load the content of the repository.&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;[[File:OSbeeInstall05.PNG|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the '''OS.bee Software Factory''' group, select the '''OS.bee Software Factory''' and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall02.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# If during installation you encounter this, just hit '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall99.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# In the installation dialog, confirm the software to be installed by clicking on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall03.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Accept the terms of the license aggreement after reading them carefully, and then confirm the dialog by clicking on '''Finish'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The installation will now begin. This may take a while, depending on your Internet connection speed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall05.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# After the software has been downloaded, confirm the &amp;quot;Security Warning&amp;quot; dialog by clicking on '''OK'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:InstallUnsignedCodeWarning.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# You will then be prompted to '''restart''' ''Eclipse''. Please do so.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set the Target Platform for the ''OS.bee Software Factory''===&lt;br /&gt;
&lt;br /&gt;
# Check if the workspace you are using is the one you selected above when first opening ''Eclipse''. If not, open the right one.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Set the target platform here: '''Menu''' -&amp;gt; '''Window''' -&amp;gt; '''Preferences''' -&amp;gt; '''Plug-in Development''' -&amp;gt; '''Target Platform'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Click on '''Add...''' to add a new target definition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Select &amp;quot;Default: ...&amp;quot; and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Click on '''Add...''' to add content, select &amp;quot;Software Site&amp;quot; and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Use the same URL previously saved to the clipboard for the Software Site.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the group '''OS.bee Softwarefactory''', select '''OS.bee Softwarefactory Targetplatform (DON'T INSTALL...)''',&amp;lt;br&amp;gt;'''uncheck''' the '''Include required software''' checkbox and click on '''Finish'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Change to register '''Content'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''x.a''' in the filter and deactivate the following bundles in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;javax.annotation version 1.2&amp;lt;br&amp;gt;javax.annotation.source version 1.2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''guava''' in the filter and deactivate the following bundle in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;com.google.guava version 21.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall17.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''antlr''' in the filter and deactivate the following bundle in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;org.antlr.runtime version 4.3&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;and click on finish.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall18.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# '''Do not forget to activate your newly created target definition! '''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall12.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Restart Eclipse. You can use Menu -&amp;gt; File -&amp;gt; Restart to do so.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set preferences in Eclipse ===&lt;br /&gt;
==== Git settings ====&lt;br /&gt;
Be sure to uncheck the automatic git-ignore for derived files, else generated files will not be checked in:&lt;br /&gt;
&amp;lt;br&amp;gt; [[File:Git-Preferences.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DS Annotations ====&lt;br /&gt;
# It is neccessary to activate the generation of descriptors based on DS Annotations&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to Window / Preferences in your Eclipse IDE&amp;lt;br&amp;gt;&lt;br /&gt;
# Activate the &amp;quot;Generate descriptors from annotaded sources&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall13.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to Window / Preferences in your Eclipse IDE, filter for &amp;quot;java&amp;quot; and go to '''Installed JREs''' and click on '''Search...'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall14.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== JDK Settings ====&lt;br /&gt;
# Locate your JDK (On Windows it's usually under &amp;lt;code&amp;gt;C:\Program FIles\Java\...&amp;lt;/code&amp;gt;) and hit '''OK''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall15.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Select the newly added JDK and hit '''Apply''', then '''OK''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall16.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Maven Settings ====&lt;br /&gt;
&lt;br /&gt;
'''For developers only!'''&lt;br /&gt;
&lt;br /&gt;
Maven requires some settings in a file called &amp;lt;code&amp;gt;settings.xml&amp;lt;/code&amp;gt;. The file is usually expected by Eclipse to be located in the .m2 directory in the Users home directory. &lt;br /&gt;
&lt;br /&gt;
# You can start with the following content of the settings.xml (don't forget to replace the '''xxxx''' with the appropriate repo names):&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;settings xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot;&lt;br /&gt;
	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
	xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;!-- TODO: adapt the local path to your personal favourite --&amp;gt;&lt;br /&gt;
	&amp;lt;localRepository&amp;gt;c:/maven/.m2/repository&amp;lt;/localRepository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;mirrors&amp;gt;&lt;br /&gt;
		&amp;lt;!-- mirror | Specifies a repository mirror site to use instead of a given &lt;br /&gt;
			repository. The repository that | this mirror serves has an ID that matches &lt;br /&gt;
			the mirrorOf element of this mirror. IDs are used | for inheritance and direct &lt;br /&gt;
			lookup purposes, and must be unique across the set of mirrors. | &amp;lt;mirror&amp;gt; &lt;br /&gt;
			&amp;lt;id&amp;gt;mirrorId&amp;lt;/id&amp;gt; &amp;lt;mirrorOf&amp;gt;repositoryId&amp;lt;/mirrorOf&amp;gt; &amp;lt;name&amp;gt;Human Readable &lt;br /&gt;
			Name for this Mirror.&amp;lt;/name&amp;gt; &amp;lt;url&amp;gt;http://my.repository.com/repo/path&amp;lt;/url&amp;gt; &lt;br /&gt;
			&amp;lt;/mirror&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- not working mirrors p2: Gemini DBaccess maven: central.maven.org, --&amp;gt;&lt;br /&gt;
		&amp;lt;mirror&amp;gt;&lt;br /&gt;
			&amp;lt;id&amp;gt;Apache Mirror&amp;lt;/id&amp;gt;&lt;br /&gt;
			&amp;lt;mirrorOf&amp;gt;apache-nexus-snapshots&amp;lt;/mirrorOf&amp;gt;&lt;br /&gt;
			&amp;lt;url&amp;gt;http://www-eu.apache.org/dist/&amp;lt;/url&amp;gt;&lt;br /&gt;
		&amp;lt;/mirror&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/mirrors&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- profiles | This is a list of profiles which can be activated in a variety &lt;br /&gt;
		of ways, and which can modify | the build process. Profiles provided in the &lt;br /&gt;
		settings.xml are intended to provide local machine- | specific paths and &lt;br /&gt;
		repository locations which allow the build to work in the local environment. &lt;br /&gt;
		| | For example, if you have an integration testing plugin - like cactus &lt;br /&gt;
		- that needs to know where | your Tomcat instance is installed, you can provide &lt;br /&gt;
		a variable here such that the variable is | dereferenced during the build &lt;br /&gt;
		process to configure the cactus plugin. | | As noted above, profiles can &lt;br /&gt;
		be activated in a variety of ways. One way - the activeProfiles | section &lt;br /&gt;
		of this document (settings.xml) - will be discussed later. Another way essentially &lt;br /&gt;
		| relies on the detection of a system property, either matching a particular &lt;br /&gt;
		value for the property, | or merely testing its existence. Profiles can also &lt;br /&gt;
		be activated by JDK version prefix, where a | value of '1.4' might activate &lt;br /&gt;
		a profile when the build is executed on a JDK version of '1.4.2_07'. | Finally, &lt;br /&gt;
		the list of active profiles can be specified directly from the command line. &lt;br /&gt;
		| | NOTE: For profiles defined in the settings.xml, you are restricted to &lt;br /&gt;
		specifying only artifact | repositories, plugin repositories, and free-form &lt;br /&gt;
		properties to be used as configuration | variables for plugins in the POM. &lt;br /&gt;
		| | --&amp;gt;&lt;br /&gt;
	&amp;lt;profiles&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;profile&amp;gt;&lt;br /&gt;
			&amp;lt;id&amp;gt;osbp-dev&amp;lt;/id&amp;gt;&lt;br /&gt;
			&amp;lt;activation&amp;gt;&lt;br /&gt;
				&amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt;&lt;br /&gt;
			&amp;lt;/activation&amp;gt;&lt;br /&gt;
			&amp;lt;properties&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.build.ignore.license&amp;gt;false&amp;lt;/osbp.build.ignore.license&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.build.verbose.license&amp;gt;true&amp;lt;/osbp.build.verbose.license&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.skip.javadoc&amp;gt;false&amp;lt;/osbp.skip.javadoc&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.javadoc.failOnError&amp;gt;false&amp;lt;/osbp.javadoc.failOnError&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.skip.test&amp;gt;true&amp;lt;/osbp.skip.test&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.build.branch&amp;gt;latest&amp;lt;/osbp.build.branch&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.developer.home&amp;gt;C:${file.separator}osbee${file.separator}downloads${file.separator}&amp;lt;/osbp.developer.home&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.build.ignore.license&amp;gt;false&amp;lt;/osbee.build.ignore.license&amp;gt;&lt;br /&gt;
				&amp;lt;osbee.build.verbose.license&amp;gt;true&amp;lt;/osbee.build.verbose.license&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.developer.home&amp;gt;${osbp.developer.home}&amp;lt;/osbee.developer.home&amp;gt;&lt;br /&gt;
				&amp;lt;osbee.build.branch&amp;gt;${osbp.build.branch}&amp;lt;/osbee.build.branch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;distribution.server.baseurl&amp;gt;http://my.own.nexus.local&amp;lt;/distribution.server.baseurl&amp;gt;&lt;br /&gt;
				&amp;lt;!-- where to deploy the release artifacts --&amp;gt;&lt;br /&gt;
				&amp;lt;distribution.repository.release.url&amp;gt;${distribution.server.baseurl}:8086/nexus/content/repositories/developer-releases/&amp;lt;/distribution.repository.release.url&amp;gt;&lt;br /&gt;
				&amp;lt;!-- where to deploy the snapshot artifacts --&amp;gt;&lt;br /&gt;
				&amp;lt;distribution.repository.snapshot.url&amp;gt;${distribution.server.baseurl}:8086/nexus/content/repositories/developer-snapshots/&amp;lt;/distribution.repository.snapshot.url&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.p2&amp;gt;http://download.osbee.org/downloads/p2/osbp/neon/xxxx&amp;lt;/osbp.p2&amp;gt;&lt;br /&gt;
				&amp;lt;org.osbee.p2&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxx&amp;lt;/org.osbee.p2&amp;gt;&lt;br /&gt;
				&amp;lt;net.osbee.p2&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxx&amp;lt;/net.osbee.p2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.helpdesk.product.download.folder&amp;gt;${osbp.developer.home}products${file.separator}helpdesk&amp;lt;/osbee.helpdesk.product.download.folder&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;pluginRepositories&amp;gt;&lt;br /&gt;
				&amp;lt;pluginRepository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-release&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Release&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-releases/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;
				&amp;lt;pluginRepository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-snapshots&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Snapshots&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-snapshots/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;updatePolicy&amp;gt;always&amp;lt;/updatePolicy&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;
			&amp;lt;/pluginRepositories&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;repositories&amp;gt;&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-snapshots&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Snapshots&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-snapshots/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;updatePolicy&amp;gt;always&amp;lt;/updatePolicy&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-release&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Release&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-releases/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;Compex Internal P2 OSbee&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;!-- use the URL you installed the softwarefactory from --&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxxx&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;layout&amp;gt;p2&amp;lt;/layout&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
			&amp;lt;/repositories&amp;gt;&lt;br /&gt;
		&amp;lt;/profile&amp;gt;&lt;br /&gt;
	&amp;lt;/profiles&amp;gt;&lt;br /&gt;
	&amp;lt;!-- activeProfiles | List of profiles that are active for all builds. | &lt;br /&gt;
		&amp;lt;activeProfiles&amp;gt; &amp;lt;activeProfile&amp;gt;alwaysActiveProfile&amp;lt;/activeProfile&amp;gt; &amp;lt;activeProfile&amp;gt;anotherAlwaysActiveProfile&amp;lt;/activeProfile&amp;gt; &lt;br /&gt;
		&amp;lt;/activeProfiles&amp;gt; --&amp;gt;&lt;br /&gt;
 &amp;lt;/settings&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# go to the Eclipse preferences / Maven / User Settings and enter the path to the settings.xml in the '''User settings''' section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can now continue with [[OS.bee Software Factory Samples]]&lt;br /&gt;
&lt;br /&gt;
== General information ==&lt;br /&gt;
=== Copyright Notice ===&lt;br /&gt;
{{Copyright Notice}}&lt;br /&gt;
&lt;br /&gt;
=== License information ===&lt;br /&gt;
&lt;br /&gt;
{{License information}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=My_first_app&amp;diff=1955</id>
		<title>My first app</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=My_first_app&amp;diff=1955"/>
				<updated>2017-07-05T07:52:14Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* How to generate My1App */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General information ==&lt;br /&gt;
&lt;br /&gt;
=== Abstract===&lt;br /&gt;
&lt;br /&gt;
''My1App'' is an OSBP application created purely from models, based on the OS.bee Software Factory. &lt;br /&gt;
&lt;br /&gt;
If you want to have a basis on which you can explore OS.bee, this is a good starting point. You can try to modify models and see the resulting changes. The models show everything from persistence up to the UI and demonstrate a lot of the stunning features and simplicity of MDSD (Model-Driven Software Development) with OS.bee.&lt;br /&gt;
&lt;br /&gt;
In this introduction, you will find the system requirements for running the app, the steps needed to generate the app, how to start the app and tips for configuring the app.&lt;br /&gt;
&lt;br /&gt;
=== License information ===&lt;br /&gt;
&lt;br /&gt;
{{License information}}&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
Please install the '''OS.bee Software Factory''' first. &lt;br /&gt;
Instructions for the installation can be found [http://download.osbee.org/documentation/index.php/OS.bee_Software_Factory_Installation here].&lt;br /&gt;
&lt;br /&gt;
== How to generate ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''My1App'' is generated from within ''Eclipse''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# In Project Explorer, right click the mouse, then select '''New''' -&amp;gt; '''Other...'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Expand the entry '''OSBP Projects''', select '''My1App''' and then click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon02.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The general configuration window for ''My1App'' will then be displayed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon03.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The '''JNDI Data Source''' can be set up on this page. Click '''Next''' when done.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
#* The default value is '''h2memory''', which saves all data in memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you want to use a different JNDI Data Source, e.g., ''MySQL'' or ''Oracle'', you can change it later.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon04.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Setup for the mock-data generation. Click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon05.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Choose the location where you would like to save the files of ''My1App''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* You can use the default location:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon06.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Or you can specify your own folder by unchecking the checkbox:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon07.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Next''' when done.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The XMS Memory is usually ¼ of total physical memory, but you can change it if you want. The desktop link which will be used later to start the application can also be found here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon08.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Finish''' to start the application generation step.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon09.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# When the window disappears, you can see in Project Explorer that all projects of ''My1App'' have been generated.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon10.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Please note that up until this point, the application has not yet been completely generated. Typically, the workspace is still being built (see the bottom right corner of the window).  Wait until this process has completed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon11.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# When the &amp;lt;code&amp;gt;Building Workspace&amp;lt;/code&amp;gt; message disappears, the generation of ''My1App'' is complete. Project Explorer should now look like this:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon12.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to start ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* Now we are ready to start ''My1App''. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* If you want to change any settings before starting the application, please see: [[#How_to_configure_My1App|How to configure ''My1App'']]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Launch Eclipse Application ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the file '''my1app.product''' contained in the '''org.osbp.my1app.product''' project.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# First, the product definition should be validated.  Please click the button at the top right.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# If no problems were detected, click on '''OK'''.  Otherwise, fix any problems first.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App03.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Now, click on '''Launch an Eclipse application''' to start ''My1App''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# While the application is being launched, open the '''Console''' view to monitor the progress.  One of the last lines displayed should end with the phrase &amp;lt;code&amp;gt;TRIGGER DONE...&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting ''My1App'' in a Browser ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To start ''My1App'', point your browser to this address:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;http://localhost:8081/my1app&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Login&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## The login screen is displayed first.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## Enter the user name and password, e.g., Admin, Admin, then click on '''Login''' to continue.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Welcome screen &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* The welcome screen is now displayed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Menu list&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* At the top left of the window, just beside &amp;lt;code&amp;gt;Admin&amp;lt;/code&amp;gt;, is the '''MENU''' button.  Click it to pop open the menu.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* There are two main menus:  '''Menu''' and '''Persons'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## '''Menu'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##* There are two submenus under '''Menu''': &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##*# '''Persons''':&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##*# '''User administration''':&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Tab list&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* At the top right of the window, there are some tabs.  By clicking on them, you can easily switch between pages. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to configure ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note that this part is optional, since ''My1App'' can always be started without additional configuration. If you want to change the default settings however, please continue reading.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
*All configuration is performed within ''Eclipse''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Select '''OSBP Application Project''' ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* The first step of the configuration is to change the '''Product Configuration''' from &amp;lt;code&amp;gt;workspace&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; in '''Preferences''' -&amp;gt; '''OSBP Application Configuration'''. Please note that this entry is not saved.  You must repeat this step each time you wish to configure ''My1App''. Or, you can access the '''Preferences''' for &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; by right-clicking &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; and selecting '''Properties'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The '''Desktop Url Path''' is:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;http://localhost:8081/my1app&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detail Configuration  ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
No configuration is necessary for ''My1App'' to run. However, if you wish to change anything, you can.&amp;lt;br&amp;gt;&lt;br /&gt;
Click on the '&amp;gt;' symbol next to '''OSBP Application Configuration''' to expand the tree.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure '''Authentication'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Bpm Engine'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Controls'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Data Sources'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* All data sources can be set up here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you want to use other data sources, please configure them first. Click &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to expand the tree, and then enter all necessary information, e.g. '''Server Name''', '''Server Port''', '''Database Name''' etc.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Email'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''External Data Sources'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Localization'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''PersistenceUnits'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* All details about '''Persistence Units''' can be changed here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to expand the tree.  You can then change the '''JNDI Data Source''', '''DDL Generation''' etc.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App12.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App13.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Project Wizard'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App14.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Service Communication'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App15.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Verify Dependencies'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you see all green points, it means ''My1App'' is ready to start without any dependency errors.  If you see any red points, you must fix the errors before starting the app.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App16.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=My_first_app&amp;diff=1954</id>
		<title>My first app</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=My_first_app&amp;diff=1954"/>
				<updated>2017-07-05T07:50:57Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Abstract */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General information ==&lt;br /&gt;
&lt;br /&gt;
=== Abstract===&lt;br /&gt;
&lt;br /&gt;
''My1App'' is an OSBP application created purely from models, based on the OS.bee Software Factory. &lt;br /&gt;
&lt;br /&gt;
If you want to have a basis on which you can explore OS.bee, this is a good starting point. You can try to modify models and see the resulting changes. The models show everything from persistence up to the UI and demonstrate a lot of the stunning features and simplicity of MDSD (Model-Driven Software Development) with OS.bee.&lt;br /&gt;
&lt;br /&gt;
In this introduction, you will find the system requirements for running the app, the steps needed to generate the app, how to start the app and tips for configuring the app.&lt;br /&gt;
&lt;br /&gt;
=== License information ===&lt;br /&gt;
&lt;br /&gt;
{{License information}}&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
Please install the '''OS.bee Software Factory''' first. &lt;br /&gt;
Instructions for the installation can be found [http://download.osbee.org/documentation/index.php/OS.bee_Software_Factory_Installation here].&lt;br /&gt;
&lt;br /&gt;
== How to generate ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''My First Application'' is generated from within ''Eclipse''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# In Project Explorer, right click the mouse, then select '''New''' -&amp;gt; '''Other...'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Expand the entry '''OSBP Projects''', select '''My1App''' and then click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon02.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The general configuration window for ''My1App'' will then be displayed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon03.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The '''JNDI Data Source''' can be set up on this page. Click '''Next''' when done.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
#* The default value is '''h2memory''', which saves all data in memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you want to use a different JNDI Data Source, e.g., ''MySQL'' or ''Oracle'', you can change it later.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon04.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Setup for the mock-data generation. Click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon05.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Choose the location where you would like to save the files of ''My1App''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* You can use the default location:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon06.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Or you can specify your own folder by unchecking the checkbox:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon07.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Next''' when done.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The XMS Memory is usually ¼ of total physical memory, but you can change it if you want. The desktop link which will be used later to start the application can also be found here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon08.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Finish''' to start the application generation step.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon09.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# When the window disappears, you can see in Project Explorer that all projects of ''My1App'' have been generated.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon10.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Please note that up until this point, the application has not yet been completely generated. Typically, the workspace is still being built (see the bottom right corner of the window).  Wait until this process has completed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon11.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# When the &amp;lt;code&amp;gt;Building Workspace&amp;lt;/code&amp;gt; message disappears, the generation of ''My1App'' is complete. Project Explorer should now look like this:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon12.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to start ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* Now we are ready to start ''My1App''. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* If you want to change any settings before starting the application, please see: [[#How_to_configure_My1App|How to configure ''My1App'']]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Launch Eclipse Application ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the file '''my1app.product''' contained in the '''org.osbp.my1app.product''' project.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# First, the product definition should be validated.  Please click the button at the top right.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# If no problems were detected, click on '''OK'''.  Otherwise, fix any problems first.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App03.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Now, click on '''Launch an Eclipse application''' to start ''My1App''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# While the application is being launched, open the '''Console''' view to monitor the progress.  One of the last lines displayed should end with the phrase &amp;lt;code&amp;gt;TRIGGER DONE...&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting ''My1App'' in a Browser ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To start ''My1App'', point your browser to this address:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;http://localhost:8081/my1app&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Login&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## The login screen is displayed first.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## Enter the user name and password, e.g., Admin, Admin, then click on '''Login''' to continue.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Welcome screen &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* The welcome screen is now displayed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Menu list&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* At the top left of the window, just beside &amp;lt;code&amp;gt;Admin&amp;lt;/code&amp;gt;, is the '''MENU''' button.  Click it to pop open the menu.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* There are two main menus:  '''Menu''' and '''Persons'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## '''Menu'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##* There are two submenus under '''Menu''': &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##*# '''Persons''':&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##*# '''User administration''':&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Tab list&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* At the top right of the window, there are some tabs.  By clicking on them, you can easily switch between pages. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to configure ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note that this part is optional, since ''My1App'' can always be started without additional configuration. If you want to change the default settings however, please continue reading.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
*All configuration is performed within ''Eclipse''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Select '''OSBP Application Project''' ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* The first step of the configuration is to change the '''Product Configuration''' from &amp;lt;code&amp;gt;workspace&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; in '''Preferences''' -&amp;gt; '''OSBP Application Configuration'''. Please note that this entry is not saved.  You must repeat this step each time you wish to configure ''My1App''. Or, you can access the '''Preferences''' for &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; by right-clicking &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; and selecting '''Properties'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The '''Desktop Url Path''' is:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;http://localhost:8081/my1app&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detail Configuration  ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
No configuration is necessary for ''My1App'' to run. However, if you wish to change anything, you can.&amp;lt;br&amp;gt;&lt;br /&gt;
Click on the '&amp;gt;' symbol next to '''OSBP Application Configuration''' to expand the tree.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure '''Authentication'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Bpm Engine'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Controls'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Data Sources'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* All data sources can be set up here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you want to use other data sources, please configure them first. Click &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to expand the tree, and then enter all necessary information, e.g. '''Server Name''', '''Server Port''', '''Database Name''' etc.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Email'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''External Data Sources'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Localization'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''PersistenceUnits'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* All details about '''Persistence Units''' can be changed here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to expand the tree.  You can then change the '''JNDI Data Source''', '''DDL Generation''' etc.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App12.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App13.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Project Wizard'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App14.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Service Communication'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App15.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Verify Dependencies'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you see all green points, it means ''My1App'' is ready to start without any dependency errors.  If you see any red points, you must fix the errors before starting the app.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App16.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Installation_Neon&amp;diff=1953</id>
		<title>OS.bee Software Factory Installation Neon</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=OS.bee_Software_Factory_Installation_Neon&amp;diff=1953"/>
				<updated>2017-07-05T07:46:18Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Installation of the Software Factory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General information ==&lt;br /&gt;
=== Copyright Notice ===&lt;br /&gt;
{{Copyright Notice}}&lt;br /&gt;
&lt;br /&gt;
=== License information ===&lt;br /&gt;
&lt;br /&gt;
{{License information}}&lt;br /&gt;
&lt;br /&gt;
== Installation of the Software Factory ==&lt;br /&gt;
&lt;br /&gt;
=== Before you start ===&lt;br /&gt;
&lt;br /&gt;
==== ''Java'' Version ====&lt;br /&gt;
&lt;br /&gt;
To be able to use the ''OS.bee Software Factory'', you need to have the right ''Java'' version installed.&lt;br /&gt;
&lt;br /&gt;
On 64-bit ''Windows'' systems, this is '''Java JDK 8 64bit''' [http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk Java SE Downloads].  If you have ''Java'' installed, there is generally a ''Java'' icon on the control panel which will enable you to find out the current version.&lt;br /&gt;
&lt;br /&gt;
==== ''Eclipse'' Version ====&lt;br /&gt;
&lt;br /&gt;
To be able to use the ''OS.bee Software Factory'', you need to have the correct ''Eclipse Neon'' version installed.&lt;br /&gt;
You can use [https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/3/eclipse-dsl-neon-3-win32-x86_64.zip&amp;amp;mirror_id=1190 Eclipse Neon 3 DSL Developers].&lt;br /&gt;
Download and extract it to a folder location of your choosing. On ''Windows'', we recommend '''C:\'''. This results in the installation folder '''C:\eclipse'''. This will be the assumed ''Eclipse'' installation folder for the rest of this document.&lt;br /&gt;
&lt;br /&gt;
To be able to launch ''Eclipse'' easily, create a shortcut on the computer's desktop to the program '''C:\eclipse\eclipse.exe'''. Be sure to add the parameter &amp;lt;code&amp;gt;-data /path/to/your/workspace&amp;lt;/code&amp;gt; to the shortcut's invocation of ''Eclipse'' in order to start in the correct workspace in the future.  Otherwise, you will be prompted to specify a workspace each time you start ''Eclipse''. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the following change to the '''eclipse.ini''' file found in the '''C:\eclipse''' folder:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
-Xmx4096m&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This line allocates extra memory for ''Eclipse'' to use.&lt;br /&gt;
&lt;br /&gt;
A resulting '''eclipse.ini''' file for a ''Windows'' installation might look like this:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;existing lines above&amp;gt;&lt;br /&gt;
 -Xms128m&lt;br /&gt;
 -Xmx4096m&lt;br /&gt;
&lt;br /&gt;
==== OS.bee P2 Repository ====&lt;br /&gt;
&lt;br /&gt;
'''At the moment, the installation is only possible if you have access to the internal network. Use this --&amp;gt; [http://ccngiw2.compex.de/downloads/p2/osbee/neon/latest/ link] directly in Eclipse.'''&lt;br /&gt;
&lt;br /&gt;
=== Installation of the ''OS.bee Software Factory'' ===&lt;br /&gt;
&lt;br /&gt;
# Start the new ''Eclipse'' installation and select or define a workspace. It is important that each ''Eclipse'' installation is assigned to its own workspace.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:Workspace1.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to the menu bar and select '''Help''' -&amp;gt; '''Install New Software...'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Get the link to the repository from the [http://www.osbee.org/free-download/ download page], activate the checkbox if you agree to our '''Terms of Service and Use''' and if you '''are not a consumer'''. Click on one of the then activated buttons, copy the link and paste it into the field labeled '''Work with:'''. Then press '''Enter''' to make ''Eclipse'' load the content of the repository.&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;[[File:OSbeeInstall05.PNG|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the '''OS.bee Software Factory''' group, select the '''OS.bee Software Factory''' and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall02.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# If during installation you encounter this, just hit '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall99.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# In the installation dialog, confirm the software to be installed by clicking on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall03.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Accept the terms of the license aggreement after reading them carefully, and then confirm the dialog by clicking on '''Finish'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The installation will now begin. This may take a while, depending on your Internet connection speed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall05.png|600px]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# After the software has been downloaded, confirm the &amp;quot;Security Warning&amp;quot; dialog by clicking on '''OK'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:InstallUnsignedCodeWarning.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# You will then be prompted to '''restart''' ''Eclipse''. Please do so.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set the Target Platform for the ''OS.bee Software Factory''===&lt;br /&gt;
&lt;br /&gt;
# Check if the workspace you are using is the one you selected above when first opening ''Eclipse''. If not, open the right one.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Set the target platform here: '''Menu''' -&amp;gt; '''Window''' -&amp;gt; '''Preferences''' -&amp;gt; '''Plug-in Development''' -&amp;gt; '''Target Platform'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Click on '''Add...''' to add a new target definition.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Select &amp;quot;Default: ...&amp;quot; and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Click on '''Add...''' to add content, select &amp;quot;Software Site&amp;quot; and click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Use the same URL previously saved to the clipboard for the Software Site.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the group '''OS.bee Softwarefactory''', select '''OS.bee Softwarefactory Targetplatform (DON'T INSTALL...)''',&amp;lt;br&amp;gt;'''uncheck''' the '''Include required software''' checkbox and click on '''Finish'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Change to register '''Content'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''x.a''' in the filter and deactivate the following bundles in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;javax.annotation version 1.2&amp;lt;br&amp;gt;javax.annotation.source version 1.2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''guava''' in the filter and deactivate the following bundle in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;com.google.guava version 21.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall17.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Enter '''antlr''' in the filter and deactivate the following bundle in the resulting target definition:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;org.antlr.runtime version 4.3&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;and click on finish.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall18.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# '''Do not forget to activate your newly created target definition! '''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall12.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Restart Eclipse. You can use Menu -&amp;gt; File -&amp;gt; Restart to do so.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set preferences in Eclipse ===&lt;br /&gt;
==== Git settings ====&lt;br /&gt;
Be sure to uncheck the automatic git-ignore for derived files, else generated files will not be checked in:&lt;br /&gt;
&amp;lt;br&amp;gt; [[File:Git-Preferences.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DS Annotations ====&lt;br /&gt;
# It is neccessary to activate the generation of descriptors based on DS Annotations&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to Window / Preferences in your Eclipse IDE&amp;lt;br&amp;gt;&lt;br /&gt;
# Activate the &amp;quot;Generate descriptors from annotaded sources&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall13.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Go to Window / Preferences in your Eclipse IDE, filter for &amp;quot;java&amp;quot; and go to '''Installed JREs''' and click on '''Search...'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall14.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== JDK Settings ====&lt;br /&gt;
# Locate your JDK (On Windows it's usually under &amp;lt;code&amp;gt;C:\Program FIles\Java\...&amp;lt;/code&amp;gt;) and hit '''OK''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall15.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Select the newly added JDK and hit '''Apply''', then '''OK''' &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:NeonOsbeeInstall16.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Maven Settings ====&lt;br /&gt;
&lt;br /&gt;
'''For developers only!'''&lt;br /&gt;
&lt;br /&gt;
Maven requires some settings in a file called &amp;lt;code&amp;gt;settings.xml&amp;lt;/code&amp;gt;. The file is usually expected by Eclipse to be located in the .m2 directory in the Users home directory. &lt;br /&gt;
&lt;br /&gt;
# You can start with the following content of the settings.xml (don't forget to replace the '''xxxx''' with the appropriate repo names):&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;settings xmlns=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0&amp;quot;&lt;br /&gt;
	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;
	xsi:schemaLocation=&amp;quot;http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;!-- TODO: adapt the local path to your personal favourite --&amp;gt;&lt;br /&gt;
	&amp;lt;localRepository&amp;gt;c:/maven/.m2/repository&amp;lt;/localRepository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;mirrors&amp;gt;&lt;br /&gt;
		&amp;lt;!-- mirror | Specifies a repository mirror site to use instead of a given &lt;br /&gt;
			repository. The repository that | this mirror serves has an ID that matches &lt;br /&gt;
			the mirrorOf element of this mirror. IDs are used | for inheritance and direct &lt;br /&gt;
			lookup purposes, and must be unique across the set of mirrors. | &amp;lt;mirror&amp;gt; &lt;br /&gt;
			&amp;lt;id&amp;gt;mirrorId&amp;lt;/id&amp;gt; &amp;lt;mirrorOf&amp;gt;repositoryId&amp;lt;/mirrorOf&amp;gt; &amp;lt;name&amp;gt;Human Readable &lt;br /&gt;
			Name for this Mirror.&amp;lt;/name&amp;gt; &amp;lt;url&amp;gt;http://my.repository.com/repo/path&amp;lt;/url&amp;gt; &lt;br /&gt;
			&amp;lt;/mirror&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;!-- not working mirrors p2: Gemini DBaccess maven: central.maven.org, --&amp;gt;&lt;br /&gt;
		&amp;lt;mirror&amp;gt;&lt;br /&gt;
			&amp;lt;id&amp;gt;Apache Mirror&amp;lt;/id&amp;gt;&lt;br /&gt;
			&amp;lt;mirrorOf&amp;gt;apache-nexus-snapshots&amp;lt;/mirrorOf&amp;gt;&lt;br /&gt;
			&amp;lt;url&amp;gt;http://www-eu.apache.org/dist/&amp;lt;/url&amp;gt;&lt;br /&gt;
		&amp;lt;/mirror&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;/mirrors&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- profiles | This is a list of profiles which can be activated in a variety &lt;br /&gt;
		of ways, and which can modify | the build process. Profiles provided in the &lt;br /&gt;
		settings.xml are intended to provide local machine- | specific paths and &lt;br /&gt;
		repository locations which allow the build to work in the local environment. &lt;br /&gt;
		| | For example, if you have an integration testing plugin - like cactus &lt;br /&gt;
		- that needs to know where | your Tomcat instance is installed, you can provide &lt;br /&gt;
		a variable here such that the variable is | dereferenced during the build &lt;br /&gt;
		process to configure the cactus plugin. | | As noted above, profiles can &lt;br /&gt;
		be activated in a variety of ways. One way - the activeProfiles | section &lt;br /&gt;
		of this document (settings.xml) - will be discussed later. Another way essentially &lt;br /&gt;
		| relies on the detection of a system property, either matching a particular &lt;br /&gt;
		value for the property, | or merely testing its existence. Profiles can also &lt;br /&gt;
		be activated by JDK version prefix, where a | value of '1.4' might activate &lt;br /&gt;
		a profile when the build is executed on a JDK version of '1.4.2_07'. | Finally, &lt;br /&gt;
		the list of active profiles can be specified directly from the command line. &lt;br /&gt;
		| | NOTE: For profiles defined in the settings.xml, you are restricted to &lt;br /&gt;
		specifying only artifact | repositories, plugin repositories, and free-form &lt;br /&gt;
		properties to be used as configuration | variables for plugins in the POM. &lt;br /&gt;
		| | --&amp;gt;&lt;br /&gt;
	&amp;lt;profiles&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;profile&amp;gt;&lt;br /&gt;
			&amp;lt;id&amp;gt;osbp-dev&amp;lt;/id&amp;gt;&lt;br /&gt;
			&amp;lt;activation&amp;gt;&lt;br /&gt;
				&amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt;&lt;br /&gt;
			&amp;lt;/activation&amp;gt;&lt;br /&gt;
			&amp;lt;properties&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.build.ignore.license&amp;gt;false&amp;lt;/osbp.build.ignore.license&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.build.verbose.license&amp;gt;true&amp;lt;/osbp.build.verbose.license&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.skip.javadoc&amp;gt;false&amp;lt;/osbp.skip.javadoc&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.javadoc.failOnError&amp;gt;false&amp;lt;/osbp.javadoc.failOnError&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.skip.test&amp;gt;true&amp;lt;/osbp.skip.test&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbp.build.branch&amp;gt;latest&amp;lt;/osbp.build.branch&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.developer.home&amp;gt;C:${file.separator}osbee${file.separator}downloads${file.separator}&amp;lt;/osbp.developer.home&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.build.ignore.license&amp;gt;false&amp;lt;/osbee.build.ignore.license&amp;gt;&lt;br /&gt;
				&amp;lt;osbee.build.verbose.license&amp;gt;true&amp;lt;/osbee.build.verbose.license&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.developer.home&amp;gt;${osbp.developer.home}&amp;lt;/osbee.developer.home&amp;gt;&lt;br /&gt;
				&amp;lt;osbee.build.branch&amp;gt;${osbp.build.branch}&amp;lt;/osbee.build.branch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;distribution.server.baseurl&amp;gt;http://my.own.nexus.local&amp;lt;/distribution.server.baseurl&amp;gt;&lt;br /&gt;
				&amp;lt;!-- where to deploy the release artifacts --&amp;gt;&lt;br /&gt;
				&amp;lt;distribution.repository.release.url&amp;gt;${distribution.server.baseurl}:8086/nexus/content/repositories/developer-releases/&amp;lt;/distribution.repository.release.url&amp;gt;&lt;br /&gt;
				&amp;lt;!-- where to deploy the snapshot artifacts --&amp;gt;&lt;br /&gt;
				&amp;lt;distribution.repository.snapshot.url&amp;gt;${distribution.server.baseurl}:8086/nexus/content/repositories/developer-snapshots/&amp;lt;/distribution.repository.snapshot.url&amp;gt;&lt;br /&gt;
				&amp;lt;osbp.p2&amp;gt;http://download.osbee.org/downloads/p2/osbp/neon/xxxx&amp;lt;/osbp.p2&amp;gt;&lt;br /&gt;
				&amp;lt;org.osbee.p2&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxx&amp;lt;/org.osbee.p2&amp;gt;&lt;br /&gt;
				&amp;lt;net.osbee.p2&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxx&amp;lt;/net.osbee.p2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;osbee.helpdesk.product.download.folder&amp;gt;${osbp.developer.home}products${file.separator}helpdesk&amp;lt;/osbee.helpdesk.product.download.folder&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;/properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;pluginRepositories&amp;gt;&lt;br /&gt;
				&amp;lt;pluginRepository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-release&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Release&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-releases/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;
				&amp;lt;pluginRepository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-snapshots&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Snapshots&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-snapshots/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;updatePolicy&amp;gt;always&amp;lt;/updatePolicy&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/pluginRepository&amp;gt;&lt;br /&gt;
			&amp;lt;/pluginRepositories&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;repositories&amp;gt;&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-snapshots&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Snapshots&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-snapshots/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;updatePolicy&amp;gt;always&amp;lt;/updatePolicy&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;compex-nexus-release&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;name&amp;gt;Compex Nexus Release&amp;lt;/name&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org:8086/nexus/content/repositories/osbp-master-clean-releases/&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;releases&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/releases&amp;gt;&lt;br /&gt;
					&amp;lt;snapshots&amp;gt;&lt;br /&gt;
						&amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
					&amp;lt;/snapshots&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;repository&amp;gt;&lt;br /&gt;
					&amp;lt;id&amp;gt;Compex Internal P2 OSbee&amp;lt;/id&amp;gt;&lt;br /&gt;
					&amp;lt;!-- use the URL you installed the softwarefactory from --&amp;gt;&lt;br /&gt;
					&amp;lt;url&amp;gt;http://download.osbee.org/downloads/p2/osbee/neon/xxxxx&lt;br /&gt;
					&amp;lt;/url&amp;gt;&lt;br /&gt;
					&amp;lt;layout&amp;gt;p2&amp;lt;/layout&amp;gt;&lt;br /&gt;
				&amp;lt;/repository&amp;gt;&lt;br /&gt;
			&amp;lt;/repositories&amp;gt;&lt;br /&gt;
		&amp;lt;/profile&amp;gt;&lt;br /&gt;
	&amp;lt;/profiles&amp;gt;&lt;br /&gt;
	&amp;lt;!-- activeProfiles | List of profiles that are active for all builds. | &lt;br /&gt;
		&amp;lt;activeProfiles&amp;gt; &amp;lt;activeProfile&amp;gt;alwaysActiveProfile&amp;lt;/activeProfile&amp;gt; &amp;lt;activeProfile&amp;gt;anotherAlwaysActiveProfile&amp;lt;/activeProfile&amp;gt; &lt;br /&gt;
		&amp;lt;/activeProfiles&amp;gt; --&amp;gt;&lt;br /&gt;
 &amp;lt;/settings&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# go to the Eclipse preferences / Maven / User Settings and enter the path to the settings.xml in the '''User settings''' section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can now continue with [[OS.bee Software Factory Samples]]&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=File:StartMy1App09.png&amp;diff=1952</id>
		<title>File:StartMy1App09.png</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=File:StartMy1App09.png&amp;diff=1952"/>
				<updated>2017-07-03T15:30:30Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: Cmollik uploaded a new version of File:StartMy1App09.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	<entry>
		<id>https://download.osbee.org/documentation/index.php?title=My_first_app&amp;diff=1951</id>
		<title>My first app</title>
		<link rel="alternate" type="text/html" href="https://download.osbee.org/documentation/index.php?title=My_first_app&amp;diff=1951"/>
				<updated>2017-07-03T15:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;Cmollik: /* Starting My1App in a Browser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General information ==&lt;br /&gt;
&lt;br /&gt;
=== Abstract===&lt;br /&gt;
&lt;br /&gt;
''My First Application'' is an OSBP application created purely from models, based on the OS.bee Software Factory. &lt;br /&gt;
&lt;br /&gt;
If you want to have a basis on which you can explore OS.bee, this is a good starting point. You can try to modify models and see the resulting changes. The models show everything from persistence up to the UI and demonstrate a lot of the stunning features and simplicity of MDSD (Model-Driven Software Development) with OS.bee.&lt;br /&gt;
&lt;br /&gt;
In this introduction, you will find the system requirements for running the app, the steps needed to generate the app, how to start the app and tips for configuring the app.&lt;br /&gt;
&lt;br /&gt;
=== License information ===&lt;br /&gt;
&lt;br /&gt;
{{License information}}&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
Please install the '''OS.bee Software Factory''' first. &lt;br /&gt;
Instructions for the installation can be found [http://download.osbee.org/documentation/index.php/OS.bee_Software_Factory_Installation here].&lt;br /&gt;
&lt;br /&gt;
== How to generate ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''My First Application'' is generated from within ''Eclipse''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# In Project Explorer, right click the mouse, then select '''New''' -&amp;gt; '''Other...'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Expand the entry '''OSBP Projects''', select '''My1App''' and then click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon02.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The general configuration window for ''My1App'' will then be displayed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon03.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The '''JNDI Data Source''' can be set up on this page. Click '''Next''' when done.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
#* The default value is '''h2memory''', which saves all data in memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you want to use a different JNDI Data Source, e.g., ''MySQL'' or ''Oracle'', you can change it later.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon04.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Setup for the mock-data generation. Click on '''Next'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon05.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Choose the location where you would like to save the files of ''My1App''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* You can use the default location:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon06.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Or you can specify your own folder by unchecking the checkbox:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon07.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Next''' when done.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# The XMS Memory is usually ¼ of total physical memory, but you can change it if you want. The desktop link which will be used later to start the application can also be found here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon08.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click on '''Finish''' to start the application generation step.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon09.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# When the window disappears, you can see in Project Explorer that all projects of ''My1App'' have been generated.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon10.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Please note that up until this point, the application has not yet been completely generated. Typically, the workspace is still being built (see the bottom right corner of the window).  Wait until this process has completed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon11.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# When the &amp;lt;code&amp;gt;Building Workspace&amp;lt;/code&amp;gt; message disappears, the generation of ''My1App'' is complete. Project Explorer should now look like this:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:MyFirstAppNeon12.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to start ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* Now we are ready to start ''My1App''. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* If you want to change any settings before starting the application, please see: [[#How_to_configure_My1App|How to configure ''My1App'']]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Launch Eclipse Application ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
# Open the file '''my1app.product''' contained in the '''org.osbp.my1app.product''' project.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# First, the product definition should be validated.  Please click the button at the top right.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# If no problems were detected, click on '''OK'''.  Otherwise, fix any problems first.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App03.png]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Now, click on '''Launch an Eclipse application''' to start ''My1App''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# While the application is being launched, open the '''Console''' view to monitor the progress.  One of the last lines displayed should end with the phrase &amp;lt;code&amp;gt;TRIGGER DONE...&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting ''My1App'' in a Browser ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To start ''My1App'', point your browser to this address:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;http://localhost:8081/my1app&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Login&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## The login screen is displayed first.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## Enter the user name and password, e.g., Admin, Admin, then click on '''Login''' to continue.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Welcome screen &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* The welcome screen is now displayed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Menu list&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* At the top left of the window, just beside &amp;lt;code&amp;gt;Admin&amp;lt;/code&amp;gt;, is the '''MENU''' button.  Click it to pop open the menu.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* There are two main menus:  '''Menu''' and '''Persons'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
## '''Menu'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##* There are two submenus under '''Menu''': &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##*# '''Persons''':&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
##*# '''User administration''':&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:StartMy1App11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Tab list&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* At the top right of the window, there are some tabs.  By clicking on them, you can easily switch between pages. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to configure ''My1App'' ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note that this part is optional, since ''My1App'' can always be started without additional configuration. If you want to change the default settings however, please continue reading.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
*All configuration is performed within ''Eclipse''.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Select '''OSBP Application Project''' ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* The first step of the configuration is to change the '''Product Configuration''' from &amp;lt;code&amp;gt;workspace&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; in '''Preferences''' -&amp;gt; '''OSBP Application Configuration'''. Please note that this entry is not saved.  You must repeat this step each time you wish to configure ''My1App''. Or, you can access the '''Preferences''' for &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; by right-clicking &amp;lt;code&amp;gt;org.osbp.my1app.product&amp;lt;/code&amp;gt; and selecting '''Properties'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App01.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The '''Desktop Url Path''' is:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;http://localhost:8081/my1app&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App02.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detail Configuration  ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
No configuration is necessary for ''My1App'' to run. However, if you wish to change anything, you can.&amp;lt;br&amp;gt;&lt;br /&gt;
Click on the '&amp;gt;' symbol next to '''OSBP Application Configuration''' to expand the tree.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Configure '''Authentication'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App03.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Bpm Engine'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App04.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Controls'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App05.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Data Sources'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* All data sources can be set up here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App06.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you want to use other data sources, please configure them first. Click &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to expand the tree, and then enter all necessary information, e.g. '''Server Name''', '''Server Port''', '''Database Name''' etc.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App07.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Email'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App08.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''External Data Sources'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App09.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Localization'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App10.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''PersistenceUnits'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* All details about '''Persistence Units''' can be changed here.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App11.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* Click &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to expand the tree.  You can then change the '''JNDI Data Source''', '''DDL Generation''' etc.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App12.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App13.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Project Wizard'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App14.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Service Communication'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App15.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Configure '''Verify Dependencies'''.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#* If you see all green points, it means ''My1App'' is ready to start without any dependency errors.  If you see any red points, you must fix the errors before starting the app.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:ConfigureMy1App16.png|600px]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
{{Copyright Notice}}&lt;/div&gt;</summary>
		<author><name>Cmollik</name></author>	</entry>

	</feed>