├── .project ├── Admin ├── AutomatedWorkflows.md ├── DatabaseManagement.md ├── EMailServices.md ├── GroupwareServices.md ├── HowToUpgrade.md ├── InstallOnDocker.md ├── InstallerServer.md ├── ManagingSecurity.md ├── ManagingUsers.md ├── Miscellaneous.md ├── README.md └── files │ ├── AutomatedWorkflows │ ├── pic010.png │ ├── pic020.png │ ├── pic030.png │ ├── pic040.png │ ├── pic050.png │ ├── pic060.png │ └── pic070.png │ ├── DatabaseManagement │ ├── pic010.png │ ├── pic020.png │ ├── pic030.png │ ├── pic040.png │ ├── pic050.png │ ├── pic060.png │ ├── pic070.png │ ├── pic080.png │ └── pic090.png │ ├── EMailServices │ ├── pic010.png │ ├── pic020.png │ ├── pic030.png │ ├── pic040.png │ ├── pic050.png │ ├── pic060.png │ ├── pic070.png │ ├── pic080.png │ ├── pic090.png │ ├── pic100.png │ ├── pic110.png │ ├── pic120.png │ ├── pic130.png │ ├── pic140.png │ ├── pic150.png │ ├── pic160.png │ ├── pic170.png │ ├── pic180.png │ ├── pic190.png │ ├── pic200.png │ ├── pic210.png │ ├── pic220.png │ ├── pic230.png │ └── pic240.png │ ├── GroupwareServices │ ├── pic010.png │ ├── pic020.png │ ├── pic030.png │ ├── pic040.png │ ├── pic050.png │ ├── pic060.png │ ├── pic070.png │ ├── pic080.png │ ├── pic090.png │ ├── pic100.png │ ├── pic110.png │ ├── pic120.png │ ├── pic130.png │ ├── pic140.png │ ├── pic150.png │ ├── pic160.png │ ├── pic170.png │ ├── pic180.png │ ├── pic190.png │ ├── pic200.png │ ├── pic210.png │ ├── pic220.png │ ├── pic230.png │ ├── pic240.png │ ├── pic250.png │ ├── pic260.png │ ├── pic270.png │ ├── pic280.png │ ├── pic290.png │ ├── pic300.png │ ├── pic310.png │ ├── pic320.png │ ├── pic330.png │ ├── pic340.png │ ├── pic350.png │ └── pic360.png │ ├── InstallerServer │ ├── pic010.png │ ├── pic020.png │ ├── pic030.png │ ├── pic040.png │ ├── pic050.png │ ├── pic060.png │ ├── pic070.png │ ├── pic080.png │ ├── pic090.png │ └── pic100.png │ ├── ManagingSecurity │ ├── pic010.png │ ├── pic020.png │ ├── pic030.png │ ├── pic040.png │ ├── pic050.png │ ├── pic060.png │ ├── pic070.png │ ├── pic080.png │ ├── pic090.png │ ├── pic100.png │ ├── pic110.png │ ├── pic120.png │ ├── pic130.png │ ├── pic140.png │ ├── pic150.png │ ├── pic160.png │ ├── pic170.png │ ├── pic180.png │ ├── pic190.png │ ├── pic200.png │ ├── pic210.png │ ├── pic220.png │ └── pic230.png │ ├── ManagingUsers │ ├── pic010.png │ ├── pic020.png │ ├── pic030.png │ ├── pic040.png │ ├── pic050.png │ ├── pic060.png │ ├── pic070.png │ ├── pic080.png │ └── pic090.png │ └── Miscellaneous │ ├── pic010.png │ └── pic020.png ├── Customizing └── README.md ├── README.md ├── Sdk ├── BuildFromSource.md ├── CustomProject.md ├── Modeling.md ├── Modeling2.md ├── NativeJavaClient.md ├── PolymerClient.md ├── PortalExtension.md ├── README.md ├── RemoteAndroidClient.md ├── RemoteJavaClient.md ├── Rest.md ├── WFE.md └── files │ ├── CustomProject │ ├── pic140.png │ ├── pic150.png │ └── pic160.png │ ├── RemoteAndroidClient │ ├── openCRX+Custom+-+Android+Sample.apk │ └── opencrx-sample-android.zip │ ├── Rest │ ├── pic010.png │ └── pic020.png │ └── WFE │ ├── pic010.png │ ├── pic020.png │ ├── pic030.png │ ├── pic040.png │ ├── pic050.png │ └── pic060.png └── Users ├── Activities.md ├── DataImportExport.md ├── README.md ├── Reporting.md ├── SubscribeNotify.md ├── UserSettings.md └── files ├── Activities ├── pic010.png ├── pic020.png ├── pic030.png ├── pic040.png ├── pic050.png ├── pic060.png ├── pic070.png ├── pic080.png ├── pic090.png ├── pic100.png ├── pic110.png ├── pic120.png ├── pic130.png ├── pic140.png ├── pic150.png ├── pic160.png ├── pic170.png ├── pic180.png ├── pic190.png ├── pic200.png ├── pic210.png ├── pic220.png ├── pic230.png └── pic240.png ├── DataImportExport ├── pic010.png ├── pic020.png ├── pic030.png ├── pic040.png ├── pic050.png ├── pic060.png ├── pic070.png ├── pic080.png ├── pic090.png ├── pic100.png ├── pic110.png ├── pic120.png ├── pic130.png ├── pic140.png ├── pic150.png ├── pic160.png ├── pic170.png └── pic180.png ├── Reporting ├── pic010.png └── pic020.png ├── SubscribeNotify ├── pic010.png ├── pic020.png ├── pic030.png └── pic040.png └── UserSettings ├── pic010.png └── pic020.png /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | openCRX 6 ~ Documentation 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Admin/AutomatedWorkflows.md: -------------------------------------------------------------------------------- 1 | # How to configure and manage automated Workflows # 2 | 3 | ## Introduction ## 4 | 5 | With the Workflow Controller the openCRX Root administrator (admin-Root) can enable / 6 | disable various automated background workflows included in the openCRX distribution. 7 | This chapter gives an overview over the currently available automated workflows and 8 | explains how to start/stop them. You can launch the WorkflowController wizard as 9 | follows: 10 | 11 | * login as admin-Root 12 | * Launch the wizard in menu _Wizards > Workflow Controller_ 13 | 14 | ![img](files/AutomatedWorkflows/pic010.png) 15 | 16 | The following figure shows the Workflow Controller: 17 | 18 | ![img](files/AutomatedWorkflows/pic020.png) 19 | 20 | __NOTE:__ Please note that access is granted to the openCRX Root administrator 21 | (admin-Root) only. Hence, if you see the openCRX login screen instead of the Workflow 22 | Controller you must first login as Root administrator. Also, ensure that openCRX 23 | is properly initialized before you connect to the Workflow Controller. 24 | 25 | The first time the Workflow Controller is started it will create a default 26 | configuration: 27 | 28 | ![img](files/AutomatedWorkflows/pic030.png) 29 | 30 | If you ever need to recreate this default configuration, you can do so with the 31 | following steps: 32 | 33 | * stop the WorkflowController 34 | * delete the Configuration with the name WorkflowController 35 | * start the WorkflowController 36 | 37 | You can manually start (stop) automated workflows that are managed by the Workflow 38 | Controller by clicking on _Turn On_ (_Turn Off_). Please note that you can control 39 | automated workflows for each segment individually. For example, if you created a 40 | segment _OtherSegment_ in addition to the segment _Standard_ you can start / stop 41 | automated workflows of the segment _OtherSegment_ without interfering with the 42 | automated workflows of the segment _Standard_. 43 | 44 | ## Workflow Controller Configuration ## 45 | 46 | In addition to configuring the Startup option of the Workflow Controller you can 47 | also configure various options related to the servlets managed by the Workflow 48 | Controller. The configuration of the Workflow Controller is available to the openCRX 49 | Root administrator (admin-Root) by navigating to the tab __Administration__ and then 50 | clicking on the icon of the WorkflowController: 51 | 52 | ![img](files/AutomatedWorkflows/pic040.png) 53 | 54 | In case you create the WorkflowController configuration manually, please note that 55 | both name and qualifier are equal to the string WorkflowController. 56 | 57 | ### Auto-startup of the Workflow Controller ### 58 | 59 | By default the workflow controller is only started when you first launch it as 60 | admin-Root. owever, it is also possible to start the Workflow Controller automatically 61 | at start-up of the application server by activating the corresponding option in the 62 | file web.xml: 63 | 64 | ``` 65 | 66 | 67 | WorkflowController 68 | org.opencrx.kernel.workflow.servlet.WorkflowControllerServlet 69 | ... 70 | 71 | 10 72 | 73 | ``` 74 | 75 | With the value of load-on-startup (10 above) you can control the order of starting up 76 | servlets in case there is more than one servlet configured in web.xml. 77 | 78 | ### ServerURL ### 79 | 80 | Adapt the value of serverURL to your environment: 81 | 82 | ![img](files/AutomatedWorkflows/pic050.png) 83 | 84 | ### Handler pingrate and autostart ### 85 | 86 | Use pingrate to define the interval (in minutes) between successive calls of the 87 | respective handler and autostart (true/false) to indicate, whether the respective 88 | servlet / handler should be on/off after (re)starting openCRX: 89 | 90 | ![img](files/AutomatedWorkflows/pic060.png) 91 | 92 | ## Indexer ## 93 | 94 | The openCRX Indexer updates index entries (used for keyword/index based search) 95 | by indexing all objects which do not have an IndexEntry newer than the modification 96 | date of the object. The Indexe creates an index by invoking the operation updateIndex() 97 | on the object to be indexed. 98 | 99 | Please note that indexing can put some heavy load on your database server. Hence, 100 | you might consider turning off (or at least lowering the frequency of calling) the 101 | IndexerServlet during busy hours. 102 | 103 | If you are looking for a way to define advanced schedules for calling the openCRX 104 | indexer you might consider _cURL_ in combination with a scheduler provided by your 105 | operating system (e.g. Scheduled Tasks on Windows, cron on Linux). The following example 106 | shows how to call the indexer for the provider CRX and the segment Standard: 107 | 108 | ``` 109 | curl "http://localhost:8080/opencrx-core-CRX/IndexerServlet/execute?provider=CRX&segment=Standard" 110 | ``` 111 | 112 | ## SubscriptionHandler ## 113 | 114 | The SubscriptionHandler is the backbone of the openCRX Subscribe / Notify Services. 115 | The Subscription Handler does not require any configuration other than setting the 116 | pingrate and autostart options, i.e. it is designed to work out-of-the-box. Turning 117 | on the SubscriptionHandler of a particular segment is required if you want that segment 118 | to provide Alerts, E-mail Notifications, etc. to its Users. The SubscriptionHandler 119 | checks openCRX audit entries on a regular basis and - if matching Subscriptions exist - 120 | executes the Workflow Process referenced by the Subscription using 121 | _Userhome.executeWorkflow()_. Executing a workflow creates an entry in 122 | _WfProcessInstance_ entry (accessible through the grid 123 | _UserHome > Workflow Process Instances_). Synchronous workflows are executed immediately, 124 | asynchronous workflows are left alone and executed asynchronously by the _WorkflowHandler_. 125 | 126 | ## DocumentScanner ## 127 | 128 | The DocumentScanner scans a file system directory and its subdirs for files and maps 129 | them to openCRX Documents and DocumentFolders. The DocumentScanner is configured in 130 | the file web.xml as follows: 131 | 132 | ``` 133 | ... 134 | 135 | 136 | path[3] 137 | /DocumentScannerServlet 138 | 139 | ... 140 | ``` 141 | 142 | ``` 143 | ... 144 | 145 | 146 | DocumentScannerServlet 147 | org.opencrx.application.document.DocumentScannerServlet 148 | 149 | ... 150 | ``` 151 | 152 | ``` 153 | ... 154 | 155 | DocumentScannerServlet 156 | /DocumentScannerServlet/* 157 | 158 | ... 159 | ``` 160 | 161 | The DocumentScanner can be configured as admin-Root by adding entries to the 162 | WorkflowController configuration. The following options are supported: 163 | 164 | * __scanDir:__ directory to be scanned for documents 165 | * __urlPrefix:__ Document revisions are created of type ResourceIdentifier. The URL of the resource identifier is set to urlPrefix + current directory name within scanDir + document name 166 | * __groups:__ List of principal groups. owningGroup of all created objects is set to the specified list of principal groups 167 | * __upload:__ if set to true, successfully uploaded documents are removed from the directory 168 | 169 | All options are multi-valued, i.e. can have an optional index suffix [0]..[9]. All 170 | options must be prefixed with _{Provider name}.{Segment name}_., e.g. _CRX.Standard.scanDir_ 171 | or _MyProvider.MySegment.urlPrefix_. 172 | 173 | The openCRX administrator can set the pingrate and autostart options; alternatively, 174 | you can call the DocumentScanner with _cron_ / _cUrl_. 175 | 176 | ## WorkflowHandler ## 177 | The openCRX WorkflowHandler executes Workflow Process Instances that have not been 178 | executed yet, which are based on asynchronous WfProcesses like: 179 | 180 | * org.opencrx.mail.workflow.ExportMailWorkflow 181 | * org.opencrx.mail.workflow.SendMailNotificationWorkflow 182 | * org.opencrx.mail.workflow.SendMailWorkflow 183 | 184 | The execution frequency can be set by the Root administrator. 185 | 186 | __NOTE:__ Please note that the WorkflowHandler is required for outbound E-Mail Services. 187 | 188 | The first time the WorkflowHandler is started it will create a default configuration: 189 | 190 | ![img](files/AutomatedWorkflows/pic070.png) 191 | 192 | If you ever need to recreate these default Workflow Processes, you can do so with the 193 | following steps: 194 | 195 | * stop the Servlet WorkflowHandler 196 | * delete the Workflow Processes that were originally created by the WorkflowHandler (or at least the ones that still exist) 197 | * start the Servlet WorkflowHandler 198 | 199 | __NOTE:__ All WfProcesses with undefined / unknown runtime length should be defined 200 | as asynchronous. This is particularly true for WfProcesses that might block. The default 201 | setup ensures that blocking WfProcesses cannot block openCRX because they are executed 202 | in a separate thread. 203 | 204 | ## MailImporterServlet ## 205 | A sample configuration (which you need to adapt to you own environment) of the 206 | MailImporterServlet is contained in _TOMCAT_HOME/apps/opencrx-core-CRX/opencrx-core-CRX/WEB-INF/web.xml_. 207 | You also need a ComponentConfiguration named MailImporterServlet. The following 208 | configuration options (String Properties) are supported: 209 | 210 | * ..mailServiceName: Mail service name in web.xml 211 | * ..deleteImportedMessages: Delete imported messages 212 | * ..mailbox: Mailbox name 213 | 214 | A sample ComponentConfiguration looks as follows: 215 | 216 | * CRX.Standard.mailServiceName: /mail/provider/CRX 217 | * CRX.Standard.deleteImportedMessages: false 218 | * CRX.Standard.mailbox: INBOX 219 | 220 | To activate the MailImporter, you also need to add the relevant entries to the WorkflowController. 221 | 222 | ## Trouble Shooting ## 223 | All automated workflows controlled by the Workflow Controller log their actions to 224 | the server log file (e.g. _TOMCAT_HOME\log\catalina..log_). The following log file 225 | extract shows, for example, that the three workflows Indexer­Servlet, SubscriptionHandler, 226 | and WorkflowHandler seem to be working fine: 227 | 228 | ``` 229 | 20:25:18,388 INFO [STDOUT] Tue Mar 04 20:25:18 CET 2008: Indexer CRX/Standard 230 | 20:27:18,400 INFO [STDOUT] Tue Mar 04 20:27:18 CET 2008: SubscriptionHandler CRX/Standard 231 | 20:27:18,400 INFO [STDOUT] Tue Mar 04 20:27:18 CET 2008: WorkflowHandler CRX/Standard 232 | ``` 233 | 234 | openCRX Exceptions (like NullPointers, etc.), however, are still logged to the 235 | application log file as configured during the installation. It is always worth checking 236 | whether the Workflow Handlers actually are active; they must be started by the Root 237 | administrator. You can find out by connecting to the Workflow Controller. 238 | 239 | __IMPORTANT:__ After restarting the application server all servlets managed by the 240 | WorkflowController are inactive, i.e. the Root Administrator must explicitly turn them on 241 | again (if desired) unless the respective servlet's autostart option is set to true in the 242 | WorkflowController's configuration and the WorkflowController's Startup option is set to 243 | true in the file web.xml. The servlets do not automatically resume the state they were in 244 | before the application server was shut down. 245 | 246 | -------------------------------------------------------------------------------- /Admin/DatabaseManagement.md: -------------------------------------------------------------------------------- 1 | # Database Management # 2 | 3 | This guide explains how to manage to openCRX database. 4 | 5 | __IMPORTANT:__ This guide assumes that _openCRX Server_ is successfully setup as described in [openCRX Server Installation Guide](Admin/InstallerServer.md). 6 | 7 | openCRX provides the following tools for the database management: 8 | 9 | * __DbSchemaWizard__: The schema wizard allows to create or upgrade an openCRX schema for 10 | a given target database. The target database is specified with the JDBC connection URL. 11 | * __DbCopy__: The database copy wizard allows to copy the openCRX data from a source database 12 | to a given target database. __DbCopy__ offers the following features: 13 | * the set of tables to be copied are specified with a regexp pattern 14 | * the source and target database can be of different types (e.g. HSQLDB, PostgreSQL) 15 | * replace string patterns 16 | 17 | __IMPORTANT:__ The wizards assume that the required JDBC database driver JARs are installed in the 18 | Apache TomEE directory _apache-tomee-plus-8.0.15/lib/_. The driver for HSQLDB is installed by 19 | default. However, the drivers for other databases must be installed manually. After installing the 20 | drivers restart _openCRX_. 21 | 22 | ## DbSchemaWizard ## 23 | 24 | _openCRX_ supports the following databases: HSQLDB, PostgreSQL, MySQL, DB/2, Oracle, and MS SQL Server. 25 | 26 | This guide assumes that you have 27 | 28 | * a running database instance 29 | * an (empty) database schema / database where the _openCRX_ schema will be installed 30 | * user names and password 31 | * the _JDBC_ connection URL 32 | 33 | In most cases, setting up a new _openCRX_ database schema is straight forward and requires no specific administration tasks. 34 | However, some databases require specific settings which are listed below. 35 | 36 | ### PostgreSQL ### 37 | 38 | #### Prerequisites #### 39 | * Download PostgreSQL Database Server from [here](http://www.postgresql.org/download/) 40 | * Download pgAdmin III from [here](http://www.postgresql.org/download/) 41 | * Download the matching PostgreSQL JDBC driver from [here](http://jdbc.postgresql.org/download.html) 42 | 43 | As a next step you must install PostgreSQL and pgAdmin III (please refer to the PostgreSQL documentation for installation details). 44 | 45 | #### Issues specific to PostgreSQL #### 46 | Based on our analysis, it seems PostgreSQL is not behaving consistently across platforms. The replies to the following (trivial) select statements are irritating: 47 | 48 | | Select Statement | expected reply | PG on Windows | PG on Linux | 49 | |--------------------|----------------|---------------|-------------| 50 | | select '0' > '/' | true | true | true | 51 | | select '0' > '/a' | true | true | false | 52 | | select '0' > '/aa' | true | true | false | 53 | 54 | The replies of PostgreSQL on Windows are correct, some of the replies of PostgreSQL on Linux are (in our opinion) not correct. 55 | 56 | A note to the PostgreSQL community: 57 | We are aware of locale-specific sorting, but the results of the above 3 select statements should be true for any locale as 58 | '0' > '/' implies '0' > '/(.)+' (unless '/' is treated as some kind of special escape character in a particular locale so 59 | that '/a < '0' is true for such a locale; to our best knowledge, such a locale does not exist). 60 | 61 | As “object ID matching” (OID matching) is a frequent operation it is absolutely crucial that it can be done in a very 62 | efficient way, otherwise openCRX will suffer from a performance hit. The openCRX database plug-in does OID matching with 63 | SQL statements containing comparisons like (object_id > id_pattern_0) and (object_id < id_pattern_1). Given the issues that 64 | exist with PostgreSQL the default configuration of the openCRX database plug-in resorts to a comparison based on LIKE. We are 65 | aware of the implications - a severe performance hit with PostgreSQL earlier than 9.x - as prepared statements with LIKE 66 | comparisons typically don't use indices. 67 | 68 | If any of the following conditions is true you can override the default setting of the openCRX database plug-in: 69 | 70 | * the locale of the openCRX database is equal to C 71 | * the locale of the openCRX database is equal to POSIX 72 | * lc_collate and lc_ctype of your PostgreSQL cluster are equal to C; open a query window in pgAdmin and execute 73 | “show all” to see the settings of your database cluster. 74 | 75 | With PostgreSQL, the system property 76 | 77 | ``` 78 | -Dorg.openmdx.persistence.jdbc.useLikeForOidMatching 79 | ``` 80 | 81 | is by default set to true; this ensures that OID matching works as expected, but the price is a performance hit. 82 | If any of the above conditions is satisfied you can safely set this system property to false resulting in much 83 | improved performance. You can override the default setting by providing the following startup option to openCRX: 84 | 85 | ``` 86 | -Dorg.openmdx.persistence.jdbc.useLikeForOidMatching=false 87 | ``` 88 | 89 | #### Support for SOUNDS LIKE and SOUNDS NOT LIKE #### 90 | Out of the box PostgreSQL does not support the operators SOUNDS LIKE and SOUNDS NOT LIKE. However, you can run the 91 | script fuzzystrmatch.sql, which is contained in the directory /share/contrib. Executing 92 | the script will add support for SOUNDS LIKE and SOUNDS NOT LIKE. 93 | 94 | #### UTF-8 support #### 95 | Assuming you want full UTF-8 support for the openCRX database, we recommend you set the locale behavior of the server to C as follows. 96 | 97 | On Linux, 98 | 99 | * install the latest version of PostgreSQL (and the required libraries) 100 | * install pgadmin 101 | * please note that the package installer runs initdb automatically, but probably not with the desired locale settings (by default, initdb is run with the same locale as your OS default locale, i.e. typically UTF-8; this leads to problems as indicated in chapter 3.1 Puzzling behavior of PostgreSQL), hence we need to redo the initialization: 102 | * stop pg daemon 103 | * rename /var/lib/pgsql/data to /var/lib/pgsql/data.ori 104 | * su - postgres 105 | * initdb --pgdata=data --encoding=UTF8 --locale=C --username=postgres --pwprompt 106 | 107 | Alternatively, you can set "LC_ALL=C" in the environment of the relevant pg processes; if LC_ALL is set to "C", the PostgreSQL sort order is also correct. 108 | 109 | On Windows, use the pgInstaller which allows you to set initdb parameters. 110 | 111 | ## Create the database schema ## 112 | Start _openCRX Server_ and login as _admin-Root_. Launch the Database schema wizard as shown below. 113 | 114 | ![img](files/DatabaseManagement/pic010.png) 115 | 116 | Specify the JDBC connection URL, username and password for the target database. 117 | 118 | ![img](files/DatabaseManagement/pic020.png) 119 | 120 | Now click on _Validate_. The wizard checks the schema of the target database and reports any 121 | missing tables and views. It also checks the table columns and reports missing and extra columns. 122 | 123 | ![img](files/DatabaseManagement/pic030.png) 124 | 125 | For every reported problem the wizard also offers a fix in form a a database statement 126 | (_CREATE TABLE ..._, _CREATE VIEW ..._, _ALTER TABLE ..._, etc.). You can copy/paste the statement 127 | and run it in your favorite SQL Editor in order to update the database. To make things easier, 128 | the wizard offers the _Validate & Fix_ function which runs the statements on the target 129 | database. In case of a database with an empty schema you have to run the _Validate & Fix_ 130 | two or three times: In a first step it creates all tables, in a second step all dependent 131 | views and indexes. Finally, if everything goes well no errors should be reported. 132 | 133 | ![img](files/DatabaseManagement/pic040.png) 134 | 135 | ## DbCopy ## 136 | If you want to migrate the data from an existing database to a new target database you can do it with the DbCopy wizard. Start _openCRX Server_ and login as _admin-Root_. 137 | 138 | ![img](files/DatabaseManagement/pic050.png) 139 | 140 | Specify the JDBC connection URL, username and password of the source database and target database. 141 | 142 | ![img](files/DatabaseManagement/pic060.png) 143 | 144 | In addition you must specify the tables which are to be copied: 145 | 146 | * Include objects: a list of regexp patterns. A table is copied if it matches one of the specified patterns. 147 | The pattern «.\*» can be used to copy all tables. 148 | * Exclude objects: a list of regexp patterns. A table is not copied if it matches one of the specified regexp patterns. 149 | E.g. the pattern «_OOCKE1\_AUDITENTRY_» excludes the table _OOCKE1\_AUDITENTRY. 150 | 151 | Then click _Copy_. The wizard shows to progress of the copy procedure. Clicking _Refresh_ updates 152 | the progress output. 153 | 154 | ![img](files/DatabaseManagement/pic070.png) 155 | 156 | _DbCopy_ also allows to search / replace string values. This can be done by specifying a list of value and replace patterns. E.g. with the value 157 | pattern «TEST» and the replacement pattern «MYCOMPANY», all occurrences of the string TEST are replaced with the string MYCOMPANY. 158 | 159 | ### Troubleshooting ### 160 | 161 | ``` 162 | Insert failed. Reason: Data truncation: Data too long for column 'CONTENT' at row 1 163 | statement=INSERT INTO OOCKE1_MEDIA (OBJECT_ID, ACCESS_LEVEL_BROWSE, ACCESS_LEVEL_DELETE, ACCESS_LEVEL_UPDATE, CONTENT, CONTENT_MIME_TYPE, CONTENT_NAME, CREATED_AT, CREATED_BY_, P$$PARENT, MODIFIED_BY_, NAME, OWNER_, MODIFIED_AT, DTYPE) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 164 | ``` 165 | 166 | This error occurs if the target column is too small to store the data of the source column. In this case 167 | increase the size of the target column using a native SQL Browser / Editor. In the case shown above the 168 | column _CONTENT_ in the table _OOCKE1_MEDIA_ must be redefined from _BLOB_ to _LONGBLOB_ using 169 | the _MySQL Query Browser_. 170 | 171 | __IMPORTANT:__ Only use the target database if the copy runs without errors. 172 | 173 | __IMPORTANT:__ The current value of the database sequences (_oocke1\_activity\_number_seq_, 174 | _oocke1\_position\_number\_seq_) are not migrated by _DbCopy_. Set the values manually to proper 175 | values before using the database. 176 | 177 | ## Setup a database connector ## 178 | Next configure the database connector which allows _Apache TomEE_ to connect to your newly created database. For this purpose open the file _{opencrxServer_installdir}/apache-tomee-plus-7.0.5/conf/tomee.xml_ and adapt the following section: 179 | 180 | ``` 181 | 182 | JdbcDriver org.hsqldb.jdbcDriver 183 | JdbcUrl jdbc:hsqldb:hsql://127.0.0.1:9001/CRX 184 | UserName sa 185 | Password manager99 186 | JtaManaged true 187 | 188 | ``` 189 | according to your database settings. 190 | 191 | __PostgreSQL:__ 192 | 193 | ``` 194 | JdbcDriver org.postgresql.Driver 195 | JdbcUrl jdbc:postgresql://localhost/CRX 196 | ``` 197 | 198 | __MySQL:__ 199 | 200 | ``` 201 | JdbcDriver com.mysql.jdbc.Driver 202 | JdbcUrl jdbc:mysql://localhost:3306/CRX?sessionVariables=sql_mode=ANSI 203 | ``` 204 | 205 | __DB/2:__ 206 | 207 | ``` 208 | JdbcDriver com.ibm.db2.jcc.DB2Driver 209 | JdbcUrl jdbc:db2://localhost:50000/CRX 210 | ``` 211 | 212 | __Oracle:__ 213 | 214 | ``` 215 | JdbcDriver oracle.jdbc.driver.OracleDriver 216 | JdbcUrl jdbc:oracle:thin:@localhost:1521:XE 217 | UserName CRX 218 | ``` 219 | 220 | __SQL Server:__ 221 | 222 | ``` 223 | JdbcDriver com.microsoft.sqlserver.jdbc.SQLServerDriver 224 | JdbcUrl jdbc:sqlserver://localhost:1433;databaseName=CRX;selectMethod=cursor 225 | ``` 226 | 227 | Also adapt correspondingly the _openCRX_ launch script _{opencrxServer_installdir}/apache-tomee-plus-8.0.15/bin/opencrx.sh_ and _{opencrxServer_installdir}/apache-tomee-plus-7.0.5/bin/opencrx.bat_. If required, disable the START and STOP commands for the _HSQLDB_ database. 228 | 229 | ## Segment management 230 | Start _openCRX Server_ and login as _admin-Root_. Open the generate database script dialog as shown below: 231 | 232 | ![img](files/DatabaseManagement/pic080.png) 233 | 234 | After entering the command and clicking OK the script will be generated and can be downloaded as text file for further processing. 235 | 236 | ![img](files/DatabaseManagement/pic090.png) 237 | 238 | Please note that the operation _::generateDatabaseScript_ is available as REST service and can therefore be used in scripts to automate workflows. 239 | 240 | ``` 241 | curl -X POST "http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.admin1/provider/CRX/segment/Root/generateDatabaseScript" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"org.opencrx.kernel.admin1.GenerateDatabaseScriptParams\":{\"command\":\"createSchema -t HSQL\"}}" 242 | ``` 243 | 244 | __Usage createDatabaseScript:__ 245 | 246 | ``` 247 | Usage: generateDatabaseScript [COMMAND] 248 | Commands: 249 | createSchema Generate script with database schema (tables only). 250 | deleteSegment Generate script to delete a segment. 251 | copySegment Generate script to copy a segment. 252 | renameSegment Generate script to rename a segment. 253 | ``` 254 | 255 | __Usage createSchema:__ 256 | 257 | ``` 258 | Usage: generateDatabaseScript createSchema [-h] -t=TYPE 259 | Generate script with database schema (tables only). 260 | -h, --help display a help message 261 | -t, --databaseType=TYPE database type [PostgreSQL, HSQL, MySQL, DB2, Oracle, Microsoft] 262 | ``` 263 | 264 | __Usage deleteSegment:__ 265 | 266 | ``` 267 | Missing required option: '--segment=SEGMENT' 268 | Usage: generateDatabaseScript deleteSegment [-h] [-p=PROVIDER] -s=SEGMENT 269 | Generate script to delete a segment. 270 | -h, --help display a help message 271 | -p, --provider=PROVIDER the provider name 272 | -s, --segment=SEGMENT the segment name 273 | ``` 274 | 275 | __Usage renameSegment:__ 276 | 277 | ``` 278 | Usage: generateDatabaseScript renameSegment [-h] -f=FROM [-p=PROVIDER] -t=TO 279 | Generate script to rename a segment. 280 | -f, --segmentFrom=FROM the FROM segment name 281 | -h, --help display a help message 282 | -p, --provider=PROVIDER the provider name 283 | -t, --segmentTo=TO the TO segment name 284 | ``` 285 | 286 | __Usage copySegment:__ 287 | 288 | ``` 289 | Usage: generateDatabaseScript copySegment [-h] -d=DATABASE [-p=PROVIDER] -s=SEGMENT 290 | Generate script to copy a segment. 291 | -d, --database=DATABASE the name of the source database / schema 292 | -h, --help display a help message 293 | -p, --provider=PROVIDER the provider name 294 | -s, --segment=SEGMENT the segment name 295 | ``` 296 | 297 | ## Start TomEE ## 298 | Now you are ready to start _TomEE_. _openCRX_ now connects to the newly created and populated database. 299 | -------------------------------------------------------------------------------- /Admin/HowToUpgrade.md: -------------------------------------------------------------------------------- 1 | # How to upgrade openCRX from a previous version # 2 | 3 | ## About versioning in openCRX ## 4 | We identify an openCRX version with 3 numbers x, y, and z (i.e. openCRX x.y.z). x.y.z is the 5 | Implementation Version, x.y is the corresponding Specification Version. The meaning of individual 6 | numbers is listed in the table below: 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 48 | 49 | 50 | 51 |
 Name Interfaces/FunctionsImplementationDatabaseImplications
xMajor Versionif major version number increasedinterfaces will be different (i.e. not upward compatible)will be differentnew tables and possibly
change of existing tables 28 |
Implementation:
- bugs fixed
- new functions
- user code requires refactoring

Database:
- modification of existing tables
   and adding of new tables
- no data migration
yMinor Versionif minor version number increased (but same major version number)interfaces have been extended and/or new functions have been added (but upward compatibility is guaranteed)will be differentpossibly new tablesImplementation:
- bugs fixed
- new functions
- user code upwards compatible

Database:
- script adding new columns to table
  and adding new tables
- no data migration
zPatch Versionif patch version number increased (but same specification number)unchangedwill be differentpossibly new columns
of existing tables 47 |
Implementation:
- bugs fixed
- user code upwards compatible

Database:
- script adding new columns to table
- no data migration
52 | 53 | ## Upgrading to current version ## 54 | 55 | * Stop the running openCRX server 56 | * Backup your database 57 | * Install the current version of with the _openCRX Server Installer_ in a new directory 58 | * In case you made changes to the standard configuration of your previous openCRX installation, amend the changes in the new openCRX installation: 59 | * Verify `{OPENCRX_INSTALL_DIR}/apache-tomee-plus-[version]/bin/setenv.sh` (or setenv.bat on Windows) 60 | * Verify `{OPENCRX_INSTALL_DIR}/apache-tomee-plus-[version]/conf/tomee.xml` (called openejb.xml in older versions) 61 | * Verify `{OPENCRX_INSTALL_DIR}/apache-tomee-plus-[version]/conf/server.xml` 62 | * Verify `{OPENCRX_INSTALL_DIR}/apache-tomee-plus-[version]/conf/tomcat-users.xml` 63 | * Copy and upgrade extra JARs (e.g. JDBC-drivers, etc.) you added to `{OPENCRX_INSTALL_DIR}/apache-tomee-plus-[version]/lib` 64 | * In case you use HSQLDB as a database: 65 | * Copy `{OPENCRX_INSTALL_DIR_OLD}/data/crx/crx.script` to `{OPENCR_INSTALL_DIR}/data/crx/crx.script` 66 | * Start openCRX Server (the newly installed instance); you can either use the shortcut created by the installer or open a shell/cmd window and 67 | * cd to `{OPENCRX_INSTALL_DIR}/apache-tomee-plus-[version]/bin` and 68 | * execute `./opencrx.sh` run (or `opencrx.bat` run on Windows) 69 | * Once you have openCRX running again, proceed as follows: 70 | * Login as _admin-Root_ 71 | * Launch the _Database schema wizard_ from _Wizards > Database schema wizard_ 72 | * Click on the button _Validate and Fix_ (the wizard will upgrade your DB schema to the appropriate version of openCRX; the wizard will not delete/drop any tables or columns, i.e. if there are validation messages that you have extra tables/columns in your database, you should drop those manually with your preferred DB admin tool, e.g. pgAdmin for PostgreSQL). __Hint:__ some databases do not support create/update view and you will have to manually delete all views in your openCRX database so that the database schema wizard can create the new views; you have to do this with your preferred database administration tool (e.g. pgAdmin for PostgreSQL). 73 | * If there are validation messages that you have extra tables/columns in your database, you might want to drop those manually (the wizard does not drop tables/columns ever); please note, however, that __the wizard does not know about tables/columns related to model extensions in custom-projects__, i.e. double-check any table/column before you actually drop it 74 | * Click on the button _Validate_ to verify the database schema; it is important that the schema validation reports NO errors before you continue - if there are errors reported, try another cycle of _Validate and Fix_ followed by _Validate_; if that doesn't help, try deleting the views manually as explained above and then try another cycle of _Validate and Fix_ followed by _Validate_ 75 | * Delete all codes as follows: 76 | * Navigate to _Codes_ 77 | * In the grid _Codes_ select View > Show 500 rows 78 | * In the grid _Codes_ click the checkbox to the left of the header Identity to select all code rows 79 | * In the gird _Codes_ select Edit > Delete to delete all code entries 80 | * Import codes and data as follows: 81 | * Navigate to _Administration_ 82 | * In the grid _Administration_ select View > Reload to import the new codes and data 83 | * Set the access levels of codes to 4, 3, 2, 1 as follows: 84 | * Navigate to _Codes_ 85 | * In the grid _Codes_ select Security > Set Access Level 86 | * Set the drop downs in the dialog Set Access Level to the following values: 87 | * 4 for Browse access level 88 | * 3 for Update access level 89 | * 2 for Delete access level 90 | * 1 for Mode Recursive 91 | * Stop openCRX Server; it is important to shut down openCRX properly - you can either use the shortcut created by the installer or open a shell/cmd window and 92 | * cd to `{OPENCRX_INSTALL_DIR}/apache-tomee-plus-[version]/bin` and 93 | * execute `./opencrx.sh stop` (or `opencrx.bat stop` on Windows) 94 | * Start openCRX Server 95 | * For each of your segments (e.g. Standard) login as segment administrator (e.g. _admin-Standard_) and run the wizard Segment Setup (_Home > Wizards > Segment Setup_) to bring your configuration up to date 96 | * Optionally: you can now uninstall the new installation of openCRX as it is no longer needed 97 | -------------------------------------------------------------------------------- /Admin/InstallOnDocker.md: -------------------------------------------------------------------------------- 1 | # How to install openCRX on Docker # 2 | 3 | openCRX comes with a Docker image. See [here](https://github.com/opencrx/opencrx-docker) for information. 4 | -------------------------------------------------------------------------------- /Admin/InstallerServer.md: -------------------------------------------------------------------------------- 1 | # openCRX Server Installation # 2 | This book describes how to install an openCRX Server with the IzPack cross-platform installer 3 | (works on Windows, Linux, Mac OS, etc.). Please note that this is a guide to set up a runtime 4 | environment suitable for evaluation and testing purposes. If you intend to use openCRX in a 5 | production environment it is recommended that you migrate to one of the recommended database 6 | management systems (see guide “How to migrate openCRX database”). 7 | 8 | openCRX is the leading enterprise-class open source CRM suite. openCRX is based on openMDX, 9 | an open source MDA framework based on the OMG's model driven architecture (MDA) standards. 10 | This guarantees total openness, compliance with all relevant standards, a state-of-the-art 11 | component-based architecture, and virtually unlimited scalability. 12 | 13 | ### Who this book is for ### 14 | The intended audience are openCRX administrators and advanced users interested in evaluating openCRX. 15 | 16 | ### What you need to know with this book ### 17 | This book describes how to install openCRX with the IzPack installer, which takes care of 18 | all the tricky configuration issues for you. The prerequisites are minimal (JDK and Apache Ant) 19 | and once they are met you should have openCRX up and running in less than 5 minutes. 20 | 21 | ## Prerequisites ## 22 | 23 | ### JDK 21 ### 24 | Install [OpenJDK 21](https://openjdk.java.net/projects/jdk/21/). 25 | 26 | __IMPORTANT:__ 27 | 28 | * With openCRX 6.x you really do need Java 21. Earlier versions do not work. 29 | * It is not sufficient to have a Java Runtime Environment (JRE) only. The full-blown JDK 30 | is required to run openCRX. 31 | * On Windows, it is a good idea to avoid paths containing blanks like the default installation 32 | directory ...\\Program Files\\.... 33 | 34 | ### Apache Ant ### 35 | Download and install the latest version of [Apache Ant](https://ant.apache.org/index.html) for your platform and install it by expanding the downloaded file to a directory of your choice. 36 | 37 | ### openCRX Server Installer ### 38 | Download the openCRX Server Installer from [GitHub](https://github.com/opencrx/opencrx/releases/). The openCRX Server installer 39 | installs Apache TomEE, the openCRX EAR, an openCRX database (HSQLDB) and various configuration files on your system. 40 | 41 | __NOTE:__ 42 | Please note that HSQLDB is not exactly a high performance DBMS nor is it meant to be 43 | used as a productive DBMS for openCRX. However, it gets lots of points for "ease of installation" 44 | and that is what counts for getting off the ground fast. Once you're comfortable with openCRX you 45 | can easily migrate to another DBMS without losing any data. More information about choosing a 46 | suitable DBMS and migrating from HSQLDB to another DBMS is available [here](http://www.opencrx.org/faq.htm#changedb) 47 | 48 | ## Installing openCRX Server ## 49 | 50 | * Open a console (Terminal window, DOS window, etc.) and navigate to the directory 51 | that contains the openCRX IzPack installer. 52 | * Launch the installer with the following command ((use the option -console to launch 53 | the installer in text mode): 54 | 55 | 56 | ``` 57 | java -jar opencrxServer-6.0.0-installer.jre-21.jar 58 | ``` 59 | 60 | 61 | * Click _Next_ on the following screen: 62 | 63 | ![img](files/InstallerServer/pic010.png) 64 | 65 | * Accept the BSD License Agreement and click _Next_ again: 66 | 67 | ![img](files/InstallerServer/pic020.png) 68 | 69 | * Select the home directory of your JDK 21 installation (automatically selected if the environment 70 | variable _JAVA\_HOME_ is set) - for example /usr/lib/jvm/java-21-openjdk-amd64 - and then click 71 | _Next_ to continue: 72 | 73 | ![img](files/InstallerServer/pic030.png) 74 | 75 | * Select the home directory of your Ant installation (automatically selected if the environment 76 | variable _ANT\_HOME_ is set correctly) - for example /opt/apache-ant-1.9.4 - and then click _Next_ 77 | to continue: 78 | 79 | ![img](files/InstallerServer/pic040.png) 80 | 81 | * Select the installation directory - for example /opt/opencrxServer - and then click 82 | _Next_ to continue. Note that if you choose to create a new directory you will have to confirm 83 | your choice by clicking _OK_ in the respective pop-up. 84 | 85 | ![img](files/InstallerServer/pic050.png) 86 | 87 | * Verify the configuration data and then click _Next_ to continue: 88 | 89 | ![img](files/InstallerServer/pic060.png) 90 | 91 | * openCRX Server is now being installed. Once the installation process has completed, 92 | click _Next_ to continue: 93 | 94 | ![img](files/InstallerServer/pic070.png) 95 | 96 | * If you want the installer to create shortcuts, select options as shown below and then 97 | click _Next_ to continue: 98 | 99 | ![img](files/InstallerServer/pic080.png) 100 | 101 | * Carefully read the README, in particular information about valid URLs, 102 | preconfigured users and passwords. Click _Next_ to continue: 103 | 104 | ![img](files/InstallerServer/pic090.png) 105 | 106 | * Finally, click _Done_ to finish: 107 | 108 | ![img](files/InstallerServer/pic100.png) 109 | 110 | That's it for the installation. 111 | 112 | ## Running openCRX Server ## 113 | The installation process created various shortcuts in your Windows Start Menu 114 | (shortcuts/launchers in your application directory on Linux). 115 | 116 | __NOTE:__ Your version numbers might be different depending on the Tomcat version included in the installer. 117 | 118 | ### Starting openCRX Server ### 119 | Launch the shortcut _Start openCRX Server 6.0.0 (8080)_. 120 | 121 | If you did not create the shortcuts (or if the installer could not create them) you can start 122 | openCRX Server with the command: 123 | 124 | Linux: 125 | 126 | ``` 127 | cd ./opencrxServer/apache-tomee-plus-10.0.0/bin 128 | ./opencrx.sh run 129 | ``` 130 | 131 | Windows: 132 | 133 | ``` 134 | cd .\opencrxServer\apache-tomee-plus-10.0.0\bin 135 | opencrx.bat run 136 | ``` 137 | 138 | directly from a console (Terminal window, DOS window). Please note that on 139 | Linux/Mac platforms you might have to start the server with elevated rights, 140 | e.g. sudo ./opencrx.sh run. 141 | 142 | ### Connecting and Login ### 143 | Launch your browser and load the URL 144 | 145 | ``` 146 | http://localhost:8080/opencrx-core-CRX/ 147 | ``` 148 | 149 | If you want to load the login page in a specific language, 150 | read [here](http://www.opencrx.org/faq.htm#login) on how to do it. 151 | 152 | ### Stopping openCRX Server ### 153 | Launch the shortcut _Stop openCRX Server 6.0.0 (8080)_. 154 | 155 | ## Next Steps ## 156 | Now that you have successfully installed openCRX you might want to have a look at some of 157 | the additional documentation published [here](http://www.opencrx.org/documents.htm). 158 | -------------------------------------------------------------------------------- /Admin/ManagingSecurity.md: -------------------------------------------------------------------------------- 1 | # Managing Security # 2 | In this chapter we will present a high-level overview of openCRX security and discuss a few important issues. 3 | 4 | __WARNING:__ We do not recommend learning about security with mission critical data. Backup your data before you make changes if you are not certain what the consequences are! The risk of you being locked out is real and the resources required to fix broken security settings can not be overestimated! 5 | 6 | The default settings should work for virtually all users; the probability of getting yourself into trouble by changing default settings should not be underestimated. Read and understand at least the basics of openCRX security BEFORE you make any changes. 7 | 8 | ## Introduction ## 9 | 10 | ### Basic Concepts and Conventions ### 11 | 12 | * Each “real user” is represented by a Subject (e.g. “guest”). Subjects are managed by the openCRX Root administrator (admin-Root). 13 | * Each subject has an Application Login Principal (also called login id). Application login principals are managed by the openCRX Root administrator (admin-Root). 14 | * Each application login principal is assigned to a subject (e.g. principal “guest” is assigned to subject “guest”) and allows a “real user” to login. 15 | * A “real user” can have one or more additional segment login principals. The Segment Login Principal has typically the same name as the application login principal (e.g. “guest”) and grants a “real user” login access to a segment. Segment login principals are managed by openCRX segment administrators (admin-Standard for the Segment Standard). 16 | * Each “real user” who has access to a segment (i.e. has a segment login principal) has (in addition to the segment login principal) a segment user principal, e.g. “guest.User”. The Segment User Principal is required to assign objects to an Owning User. Each “real user” also has a Principal Group, e.g. “guest.Group”. 17 | * Each segment has a corresponding realm to manage Principals: 18 | * The application login principals are stored in the realm Default. 19 | * The segment login principals for segment _segment name_ are stored in the realm _segment name_ (e.g. principals for the segment Standard are stored in the realm Standard). 20 | * Each segment has a segment administrator principal (admin-_segment name_) (e.g. _admin-Standard_ for the segment Standard). 21 | 22 | The following figure shows the situation after the initial setup of openCRX: 23 | 24 | ![img](files/ManagingSecurity/pic010.png) 25 | 26 | Summarizing the above: 27 | 28 | * there is a realm for each segment (e.g. a realm Standard corresponding to the segment Standard) 29 | * the realm Default acts as login realm; it contains all principals who are allowed to login to the openCRX application; PrincipalGroups in this realm are only used to configure Granted Roles by inheritance (in addition to configuring them directly in the appropriate grid). 30 | * there is a subject for each “real user” and all principals of a user are assigned to the same subject; this allows openCRX to find all principals of a user (→ role selection drop down) 31 | 32 | The segment administrator (e.g. admin-Standard) creates principals and User home pages with the operation createUser: 33 | 34 | ![img](files/ManagingSecurity/pic020.png) 35 | 36 | Each segment login principal has a home page in the respective segment (qualifier of principal and home page must match!). 37 | 38 | Each segment login principal is correlated with a contact. This correlation is for example required to find all activities and contracts assigned to the logged in principal. 39 | 40 | ![img](files/ManagingSecurity/pic030.png) 41 | 42 | While each “real user” (typically) has 1 application login principal only, “real users” may have multiple segment login principals (e.g. because a “real user” is allowed to access multiple segments or because a “real user” is allowed to access a particular segment in different roles like Head of Sales or CFO). 43 | 44 | Available segment login principals are listed in the so-called Role Drop Down: 45 | 46 | ![img](files/ManagingSecurity/pic040.png) 47 | 48 | ### Permissions / Access Control ### 49 | The openCRX security framework makes a clear distinction between Ownership Permissions (permissions granted on a particular object) and Model Permissions (permissions granted on a particular model element). As the latter are not implemented (yet) we only talk about Ownership Permissions in this guide. In addition to wwnership permissions there are also GUI Permissions (see the guide openCRX GUI – Getting Started). 50 | 51 | Ownership permissions are used to control browse/update/delete access to openCRX objects by Users and UserGroups (i.e. Ownership access control). Every openCRX object is a SecureObject. The following figure shows an extract from the UML model (if you are interested in all the details and the formally correct and complete specifications you should refer to the latest openCRX UML models): 52 | 53 | ![img](files/ManagingSecurity/pic050.png) 54 | 55 | __NOTE:__ If you see N/P in a reference field instead of a more meaningful value you probably do not have browse access to the respective object (N/P stands for No Permission) 56 | 57 | __NOTE:__ If you see N/A in a reference field instead of a more meaningful value the object cannot be retrieved (N/A stands for Not Available); maybe the object was deleted or the respective provider is not accessible/available. 58 | 59 | The most important security attributes of an object X are discussed below: 60 | 61 | * __Owning User:__ this user "owns" object X; the Owning User can always browse/update/delete object X (unless the access level is set to 0 - in which case nobody has access and is probably not a desirable situation). 62 | * __Owning Groups:__ these groups might enjoy privileged treatment for browsing/updating/deleting object X depending on the relevant access level settings. 63 | * __Access Granted by Parent:__ this attribute is set by configuration and refers to the parent object that grants access to object X. 64 | * __Browse Access Level:__ this setting determines which users/user groups are granted browse access to direct composite objects of object X (i.e. who can view/inspect direct composite objects of object X (including all their attributes)). It is a common misconception that browse access level of an object X controls browse access to this object X – please read the above definition carefully! 65 | * __Update Access Level:__ this setting determines which users/user groups are granted update access to object X (i.e. who can change object X; this includes adding composite objects to object X). 66 | * __Delete Access Level:__ this setting determines which users/user groups are granted delete access to object X and all its composite objects (recursively!) (i.e. who can delete object X and all its composite objects (recursively!)). 67 | 68 | ![img](files/ManagingSecurity/pic060.png) 69 | 70 | The following access levels are available to control which users/user groups are granted permission to browse/delete/update a particular object X: 71 | 72 | Access Level | Meaning 73 | -------------|--------- 74 | 0 - N/A | no access 75 | 1 - private | access is granted if the user is owning user of object X 76 | 2 - basic | access is granted if at least one of the following conditions is true: 77 | | (a) the user is owning user of object X 78 | | (b) the user is member of any of the owning groups of object X 79 | | (c) any of the owning groups of object X is a subgroup** of any group the user is member of 80 | 3 - deep | access is granted if at least one of the following conditions is true: 81 | | (a) the user is owning user of object X 82 | | (b) the user is member of any of the owning groups of object X 83 | | (c) any of the owning groups of object X is a subgroup** of any group the user is member of 84 | | (d) any of the owning groups of object X is a subgroup** of any supergroup* of any group the user is member of 85 | 4 – global | all users are granted access 86 | 87 | (\*) Owning group Gsuper is a supergroup of an owning group G if every user who is member of G is also member of Gsuper 88 | (\**) Owning group Gsub is a subgroup of an owning group G if every user who is member of Gsub is also member of G 89 | 90 | ### Default Principal Groups ### 91 | The figure on the right shows the openCRX default principal groups and their memberships: 92 | 93 | * Unassigned 94 | * Public 95 | * Administrators 96 | * Users 97 | * Unspecified 98 | 99 | ![img](files/ManagingSecurity/pic070.png) 100 | 101 | ### The SQL approach to understanding security ### 102 | If you are familiar with SQL, the following approach to understanding security might be helpful. Let's put ourselves into the role of the AccessControl Plugin; accessing an object (read mode) results in a SELECT statement as follows: 103 | 104 | ``` 105 | SELECT * FROM T WHERE owner IN (p1, p2, ....) 106 | ``` 107 | 108 | * owner is a column that is present in all (multi-valued) tables xACCOUNT_, xADDRESS_, etc.) and it contains a list of principals who are permitted to access the respective object in read-mode 109 | * the set P = {p1, p2, ...} is calculated by the AccessControl Plugin before accessing the object and it corresponds to the principals who are assigned to the current user based on the object's AccessLevel as shown in the following table: 110 | 111 | Access Level | Set P = {p1, p2, ...} 112 | -------------|---------------------- 113 | 0 - N/A | P = {} 114 | 1 - private | P = Pp where Pp = {all groups directly assigned to the principal p} 115 | 2 - basic | P = Pp + Pupper where Pp = {all groups directly assigned to the principal p}, Pupper = {all groups that contain at least one group contained in Pp} 116 | 3 - deep | P = Pp + Pupper + Plower where Pp = {all groups directly assigned to the principal p}, Pupper = {all groups that contain at least one group contained in Pp}, Plower = {all groups contained in Pupper} 117 | 4 – global | the where-clause “WHERE owner IN (p1, p2, ....)” is not required, i.e. the SELECT statement reduces to SELECT * FROM T 118 | 119 | You can mark PrincipalGroups as _Base group_ to better control the inclusion of PrincipalGroups with Access Level 3. 120 | 121 | ## Activating Security ## 122 | Security (including Access Control) is not just a fancy add-on, rather it is an integral part of openCRX; openCRX Access Control is always activated. 123 | 124 | The openCRX security provider manages all security data and provides access control services for all requests through the openCRX API. Hence, you can rely on openCRX access control even if you write you own clients or adapters for openCRX. 125 | 126 | __NOTE:__ The only “hardening” you might want to do is the one described in the following chapter: set browse access level to 3 for non-Root segments. 127 | 128 | ### Default Settings ### 129 | Default access level settings for non-Root segments (e.g. segment Standard) after a clean install are as follows: 130 | 131 | * Browse Access Level: 4 - global 132 | * Update Access Level: 3 - deep 133 | * Delete Access Level: 1 - private 134 | 135 | ![img](files/ManagingSecurity/pic080.png) 136 | 137 | Due to the setting access_level_browse = 4 (global) any user with access to a particular segment is allowed to browse top level objects (i.e. any user can browse all accounts, all activities, all documents, etc.). 138 | 139 | These default settings are suitable for test environments and deployments in smaller companies/teams with a generous access policy; for most real-world applications, however, it is more appropriate to set access_level_browse = 3 (deep) for non-Root segments. You can do this by changing the values in the column access_level_browse from 4 to 3 (table OOCKE1_SEGMENT). 140 | 141 | After this change, the table OOCKE1_SEGMENT will look as follows: 142 | 143 | ![img](files/ManagingSecurity/pic090.png) 144 | 145 | __IMPORTANT:__ Segment security settings are loaded during the initialization of the openCRX servlet. Hence, if you change settings you must redeploy openCRX for the new settings to become active. 146 | 147 | ## Security Settings of New Objects ## 148 | New objects are by default created with the following security settings: 149 | 150 | * Browse Access Level: 3 - deep 151 | * Update Access Level: 2 - basic 152 | * Delete Access Level: 2 - basic 153 | * Access Granted by Parent: 154 | * in general: Parent object as modeled 155 | * exceptions: there are some select exceptions, but they are all pre-configured 156 | * Owning User: User who is creating the object 157 | * Owning Groups: Primary User Group of the user who is creating the object and (meaning as well as) Owning Group(s) of the parent object of the new object (except Users, see below). 158 | 159 | __WARNING:__ Please note that the User Group Users (e.g. Standard\\Users) is not added to the list of Owning Groups of newly created objects unless the creating user's Primary User Group is equal to Users. 160 | 161 | __WARNING:__ By default, a user's primary user group is .Group. This group is created automatically when the segment administrator runs the wizard User Settings from a user's homepage. 162 | 163 | __WARNING:__ Please note that a User's Primary User Group can be set by the segment administrator with the operation Create User . To change an existing user's primary group, the segment administrator simply executes the operation Create User again with a new parameter for primary user group. 164 | 165 | __NOTE:__ In the context of activity management there are various operations that set/change the Owning Groups of objects based on the settings of an assigned Activity Creator or assigned Activity Group and not based on the settings of the user who executes the operation. 166 | 167 | ## Checking Permissions ## 168 | You can check security permissions on any SecureObject with the operation Security > Check Permissions. Provide the principal name as a parameter. The following figure shows the result of the operation on a user's homepage: 169 | 170 | ![img](files/ManagingSecurity/pic100.png) 171 | 172 | The meaning of the above result is as follows: 173 | 174 | * Has read permission: 175 | * Checked: principal can browse this object 176 | * Unchecked: principal cannot browse this object 177 | * Has update permission: 178 | * Checked: principal can modify/update this object 179 | * Unchecked: principal cannot modify/update this object 180 | * Has delete permission: 181 | * Checked: principal can delete this object 182 | * Unchecked: principal cannot delete this object 183 | * Membership for read: principal has read permission if the intersection of the resulting list of groups and the list of owning groups of the respective SecureObject is not empty 184 | * Membership for update: principal has modify/update permission if the intersection of the resulting list of groups and the list of owning groups of the respective SecureObject is not empty 185 | * Membership for delete: principal has delete permission if the intersection of the resulting list of groups and the list of owning groups of the respective SecureObject is not empty 186 | 187 | ## Role-based GUI Permissions ## 188 | 189 | ### Adding roles ### 190 | With the following steps you can add new user roles: 191 | 192 | * login as segment administrator (e.g. admin-Standard) 193 | * click on the tab _Security Policy_ 194 | * in the grid _Roles_, select _New > Role_ 195 | * set both the name and the qualifier to _Admin_ and enter _Admin Role_ as description as shown below - then click the button _Save_: 196 | 197 | ![img](files/ManagingSecurity/pic160.png) 198 | 199 | * in the grid _Roles_, select _New > Role_ again set both the name and the qualifier to _Public_ and enter _Public Role_ as description as shown below - then click the button _Save_: 200 | 201 | ![img](files/ManagingSecurity/pic170.png) 202 | 203 | * your default Security Policy Standard should now contain the two roles _Admin_ and _Public_. 204 | 205 | ### Managing Permissions ### 206 | Only segment administrators (e.g. admin-Standard) can manage permissions. 207 | 208 | #### Granting a role to a user #### 209 | With the following steps you can grant a role to a user: 210 | 211 | * login as segment administrator (e.g. admin-Standard) 212 | * select the top-level tab _Security Realm_ 213 | * click on the tab _Principals_ and locate and then navigate to the principal whom you want to grant a new role. 214 | * the grid _Granted Roles_ contains the (ordered) list of roles currently granted to the respective principal 215 | * start typing the name of the role to be granted into the input box just below the menu Edit (as show below) and then select the desired role, e.g. _Public_: 216 | 217 | ![img](files/ManagingSecurity/pic180.png) 218 | 219 | * select the menu _Edit > Add object_ to grant the role: 220 | 221 | ![img](files/ManagingSecurity/pic190.png) 222 | 223 | ![img](files/ManagingSecurity/pic200.png) 224 | 225 | __NOTE:__ If permissions granted to roles contradict each other, the last role in the list of granted roles “wins”, i.e. the order in which roles are granted to a principal matters!. You can use _Edit > Move up_ object and _Edit > Move down_ object to change the order of roles in the grid _Granted Roles_. 226 | 227 | __NOTE:__ Grant the role Public to all users (including segment administrators), but grant the role _Admin_ to segment administrator only, to make it easy to disable certain GUI elements for normal users. 228 | 229 | #### Revoking a role previously granted to a user #### 230 | With the following steps you can revoke a role previously granted to an openCRX user: 231 | 232 | * login as segment administrator (e.g. admin-Standard) 233 | * select the top-level tab _Security Realm_ 234 | * click on the tab _Principals_ and locate and then navigate to the principal whom you want to grant a new role. 235 | * the grid _Granted Roles_ contains the (ordered) list of roles currently granted to the respective principal: 236 | 237 | ![img](files/ManagingSecurity/pic210.png) 238 | 239 | * click on the line of the role to be revoked to select it (the selected line turns grey) and then select the menu _Edit > Remove_ object to revoke the role: 240 | 241 | ![img](files/ManagingSecurity/pic220.png) 242 | 243 | #### Enabling / Disabling GUI elements #### 244 | With the following steps you can disable a GUI element: 245 | 246 | * login as segment administrator (e.g. admin-Standard) 247 | * navigate to the screen that contains the GUI element you want to disable 248 | * start the wizard _Wizards > Manage GUI Permissions_: 249 | 250 | ![img](files/ManagingSecurity/pic230.png) 251 | 252 | * select the role you want to manage permissions for (e.g. Public) 253 | * select the type of GUI element you want to enable/disable (e.g. Operations, Fields, Grids) 254 | * use the buttons _>_ and _<_ to add / remove permissions 255 | * once you're done, click the button _Apply_ to persist your changes 256 | 257 | ## Login Procedure ## 258 | 259 | ### Apache Tomcat / Application Server Login ### 260 | The Apache Tomcat / application server login procedure depends on various parameters: 261 | 262 | * Servlet container (Apache Tomcat, JBoss, BEA WLS, IBM WAS, etc.) 263 | * configuration of Apache Tomcat / application server 264 | * file-based realm (e.g. tomcat-users.xml for Tomcat) 265 | * DB-based realm (e.g. DataSourceRealm Tomcat) 266 | * LDAP-based realm (e.g. JNDIRealm for Tomcat; see also chapter 18.4 Tomcat w/ openCRX and LDAP-based Authentication) 267 | * company-specific / custom-tailored realms 268 | 269 | Please note that even though openCRX might be involved in managing some of the above-mentioned realms (e.g. DB-based realm) the login procedure is not really under control of openCRX. As a consequence, many login problems are related to incomplete/faulty configuration settings of the servlet container. 270 | 271 | __NOTE:__ Detailed documentation about the many Realms supported by Apache Tomcat is available [here](http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html). 272 | 273 | ### Disabling Login ### 274 | Please refer to the chapter “Disable/Deactivate Users”. 275 | 276 | ## Resetting Security ## 277 | If you get the setting of Update Access Level wrong you may not be able to change the respective object from the GUI anymore (and that includes the security settings of that object!). For example, the only way to recover from setting Update Access Level to 0 – N/A for a particular object is to edit the data directly in the database! 278 | 279 | It is simply not possible to disable openCRX Security. 280 | 281 | If you (or one of your users) managed to screw up the security settings in a major way you might be forced to reset all security settings to a well-defined state. Not an easy task – and it typically involves a lot of manual work. 282 | 283 | __NOTE:__ Educate your users about openCRX security. You might also consider disabling some of the more powerful operations and/or security attributes in the default GUI. 284 | -------------------------------------------------------------------------------- /Admin/ManagingUsers.md: -------------------------------------------------------------------------------- 1 | # Managing Users # 2 | 3 | ## Create Users as Segment Administrator ## 4 | The Segment administrator can create new users with the following steps: 5 | 6 | * Login as Segment administrator (e.g. admin-Standard) 7 | * Create a contact for the new user 8 | * Click on the element “User Homepages” of the breadcrum: 9 | 10 | ![img](files/ManagingUsers/pic010.png) 11 | 12 | * Next you select the operation Actions > Create User... which allows you to create and initialize a new user: 13 | 14 | ![img](files/ManagingUsers/pic020.png) 15 | 16 | * Type the new user's principal name (e.g. guest) into the field Principal name, use the Lookup Inspector or the auto-completer to fetch values for Contact and Primary user group (unless you have a good reason to provide a user group, leave Primary User Group empty and openCRX will automatically create a user group with name .Group), and then type a password (e.g. opencrx) into the fields Initial password and Password again: 17 | 18 | ![img](files/ManagingUsers/pic030.png) 19 | 20 | * Status 0 indicates that the user guest was created without errors: 21 | 22 | ![img](files/ManagingUsers/pic040.png) 23 | 24 | * Please note that we are still logged in as admin-Standard (as shown in the header of the application), but we are looking at the homepage of the user guest. Execute the operation _Edit > User Settings_: 25 | 26 | ![img](files/ManagingUsers/pic050.png) 27 | 28 | * This will start the wizard User Settings. You can configure various settings with this wizard. At a minimum you should probably set the timezone and enter the new user's e-mail address. Once you're done you can click the button _Save_. The wizard will then create a bunch of objects and finalize the initialization of the user guest: 29 | 30 | ![img](files/ManagingUsers/pic060.png) 31 | 32 | * Click _Close_ to leave the wizard. 33 | 34 | __NOTE: __ The wizard User Settings creates a user group .Group, in the above case guest.Group. The primary user group of the user guest was automatically set to this new user group guest.Group. If you want to change the primary user group to anything else or if you ever must reset a user (lost password, etc.), you can re-execute the operation Create User as admin-Standard at any time. If you want to reset a user without changing the user's password, you can simply leave the password fields empty when recreating the user. 35 | 36 | * Logoff as admin-Standard and login as the newly created user (guest in our example) 37 | 38 | * Execute the operation Edit > User Settings and click _Save_. This time (i.e. when executed by the newly created user) the wizard User Settings creates various user-specific/private objects. 39 | 40 | For security and consistency purposes creating new users is a 3-phase process: 41 | 42 | Phase | Description 43 | --------|----------------------- 44 | Phase 1 | The segment administrator (e.g. admin-Standard) executes createUser() and then enters the principal's name) 45 | | If the new principal name matches the name of an already existing principal, the new principal is not created and an alert (“CreateUserConfirmationRequest”) is created in all segments the already existing principal has access to. 46 | Phase 2 | The user related to the already existing principal must accept in at least one segment the “CreateUserConfirmationRequest” 47 | Phase 3 | once at least one “ CreateUserConfirmationRequest” has been accepted, the segment administrator can execute createUser() again with the respective principal name; this time the new user (i.e. UserHome) is created 48 | 49 | ### Import Subjects and Application Login Principals ### 50 | Creating large numbers of subjects/principals by hand can be quite a tedious job. If you prepare a text file containing the appropriate information in the file format as outlined below, the Root administrator (admin-Root) can use the operation Actions > Import Login Principals to create Subjects and Application Login Principals automatically. 51 | 52 | ![img](files/ManagingUsers/pic070.png) 53 | 54 | __File Format Subjects and Application Login Principals:__ 55 | 56 | ``` 57 | Subject;; 58 | 59 | Principal;;;; 60 | ``` 61 | 62 | __Example File Subjects and Application Login Principals:__ 63 | 64 | ``` 65 | Subject;joe;Doe, Joe 66 | Subject;mark;Ferguson, Mark 67 | Subject;peter;Lagerfeld, Peter 68 | Principal;joe;Doe, Joe;joe;Users,Administrators 69 | Principal;mark;Ferguson, Mark;mark;Users 70 | Principal;peter;Lagerfeld, Peter;peter;Users 71 | ``` 72 | 73 | ## Import Users ## 74 | Similarly to importing Subjects and Application Login Principals from a file you can also import Users from a file. If you prepare a text file containing the appropriate information in the file format as outlined below, the Segment administrator (admin-) can use the operation Actions > Import Users to create Users automatically. 75 | 76 | ![img](files/ManagingUsers/pic080.png) 77 | 78 | __File Format Users:__ 79 | 80 | ``` 81 | User;;;;;[;[;[;]]] 82 | ``` 83 | 84 | Parameter | Description 85 | ------------------|----------------------- 86 | principal | required, name of principal 87 | account alias | at least one value per user must be provided, i.e. either the alias name of the contact, or then the full name 88 | account full name | at least one value per user must be provided, i.e. either the alias name of the contact, or then the full name 89 | primary group | optional, default is .Group 90 | password | required, clear text value 91 | groups | optional, comma separated list of memberOf principal groups, the user is made a member of each provided principal group 92 | email | optional e-mail address, e.g. joe@opencrx.org 93 | timezone | optional time zone, e.g. Europe/Zurich 94 | 95 | __NOTE:__ Please note that a “-” value (a dash without the quotes) means empty in the context of a user file. Example: if you don't want to explicitly define a primary group, put a dash – the importer will then create the default primary group .Group. 96 | 97 | __Example File Users:__ 98 | 99 | ``` 100 | User;joe;JD;Doe, Joe;Users;2%jOd.IT;MGMT,SALES 101 | User;mark;Fergi;Ferguson, Mark;Users;maFe&.3-;MGMT 102 | User;peter;-;Lagerfeld, Peter;-;PlF*;ReGaL;SALES 103 | ``` 104 | 105 | __IMPORTANT:__ Contacts are not created automatically; existing Contacts are first searched by . If no matching account alias is found, Contacts are search by . If still no matching account is found, the UserHome is not created. Users are only imported/created if the referenced Principals exist. 106 | 107 | ## Disable/Deactivate Users ## 108 | There are various ways of disabling/deactivating users. To fully understand your options it is helpful if you are familiar with the openCRX Login Procedure. 109 | 110 | ### Disable Users at the level Tomcat /Application Server ### 111 | Depending on the configuration of your application server you can disable users at that level. For example, if you rely on file-based realms, you can simply remove users from the file tomcat-users.xml (with Apache Tomcat) or users.properties (with JBoss) to prevent access to openCRX. If you block access at the level Tomcat / application server such users are locked out from accessing any application and any openCRX segment. However, as the servlet container's login procedure is not entirely controlled by openCRX you might have to consult the documentation of your respective servlet container (e.g. Tomcat or JBoss) or ask your administrator for details. 112 | 113 | ### Disable Users at the level openCRX ### 114 | The segment administrator (e.g. admin-Standard) can prevent a user from accessing a particular openCRX segment by either disabling the respective Segment Login Principal or by deleting it altogether. Disabling is the preferred option to prevent access temporarily. If a user has multiple Segment Login Principals you must disable all of them to prevent access to the openCRX application. 115 | 116 | ![img](files/ManagingUsers/pic090.png) 117 | 118 | __IMPORTANT:__ You should not delete a particular Subject as long as it is referenced by any Principal. Otherwise you'll end up with “dangling” Subject references. 119 | -------------------------------------------------------------------------------- /Admin/Miscellaneous.md: -------------------------------------------------------------------------------- 1 | # Miscellaneous Topics # 2 | 3 | ## Managing Locales ## 4 | The default installation of openCRX activates all locales that are included in the Open Source distribution. The openCRX administrator may wish to deactivate certain locales from the locale list. This chapter shows how you can achieve this. 5 | 6 | The locale list is contained in the file _opencrx-core-CRX/opencrx-core-CRX/WEB-INF/web.xml_. Look for the section \ 10 | 11 | locale[0] 12 | en_US 13 | 14 | 15 | locale[1] 16 | de_CH 17 | 18 | 19 | locale[2] 20 | es_MX 21 | 22 | ... 23 | ``` 24 | 25 | You can deactivate locales by simply commenting them out. The following example shows how to deactivate the locale _de\_CH_. 26 | 27 | ``` 28 | 29 | 30 | locale[0] 31 | en_US 32 | 33 | 39 | 40 | ... 41 | ``` 42 | 43 | __WARNING:__Please note that you must not deactivate the base locale (that is the locale with the id 0, typically en_US) as the base locale contains a lot of customizing information not present in other locales. 44 | 45 | ## Managing Root Objects ## 46 | The default installation of openCRX activates all root objects that are included in the Open Source distribution. The openCRX administrator may wish to deactivate certain root objects if they are not used. This chapter shows how you can achieve this. 47 | 48 | Root objects are configured in the file _opencrx-core-CRX/opencrx-core-CRX/WEB-INF/web.xml_. Look for the section \ 52 | 53 | rootObject[0] 54 | xri:@openmdx:org.opencrx.kernel.admin1/provider/CRX/segment/${SEGMENT} 55 | 56 | 57 | 58 | rootObject[1] 59 | xri:@openmdx:org.opencrx.kernel.home1/provider/CRX/segment/${SEGMENT}/userHome/${USER} 60 | 61 | 62 | 63 | rootObject[2] 64 | xri:@openmdx:org.opencrx.kernel.account1/provider/CRX/segment/${SEGMENT} 65 | 66 | ... 67 | ``` 68 | 69 | You can deactivate root objects by simply commenting them out. The following example shows how to deactivate the root object _depot1_: 70 | 71 | ``` 72 | ... 73 | 74 | 75 | 81 | 82 | 83 | rootObject[6] 84 | xri:@openmdx:org.opencrx.kernel.document1/provider/CRX/segment/${SEGMENT} 85 | 86 | 87 | ... 88 | ``` 89 | 90 | __WARNING:__ Please note that you must renumber all the root objects listed after the root object you deactivated so that the numbering does not have any gaps (i.e. the numbering starts at 0 and it must be consecutive). It is also possible to change the order of the active root objects by renumbering them. However, you must still ensure both that the numbering starts at 0 and that the numbering is consecutive. 91 | 92 | __HINT:__ Disabling root objects disables them for all segments and all users, i.e. disabled root objects are not available in the _UserSettings_ wizard. 93 | 94 | ## Custom Layout JSPs ## 95 | openCRX is distributed with two default layout JSPs located in the directory _opencrx-core-CRX/opencrx-core-CRX/WEB-INF/config/layout/en_US_: 96 | 97 | * __show-Default.jsp__: This layout JSP renders all pages that show information (typically an Inspector containing information about the current object and all the grids containing associated information). This layout JSP is generic (it is provided by openMDX/portal) and it can handle any object. 98 | * __edit-Default.jsp__: Similarly, this layout JSP renders all pages that are used to edit objects. 99 | 100 | If you have a need for specialized screens for a particular object in edit and/or show mode, you can write your own layout JSP and deploy it to the above-mentioned directory. The file name of your custom layout JSP determines which objects (or rather: objects of which class) will be handled by your custom layout JSP. 101 | 102 | __Example:__ 103 | Let's assume you want to replace the default edit screen for openCRX Contacts (i.e. class org.opencrx.kernel.account1.Contact) with a custom layout JSP. Name your file _edit-org.opencrx.kernel.account1.Contact.jsp_ and deploy it to the directory _./WEB-INF/config/layout/en_US_. After restarting openCRX your new layout JSP will be active. 104 | 105 | __NOTE:__If you develop localized JSPs you can create new directories for the respective locales and then deploy your localized JSPs there. The fallback algorithms are comparable to those in ui customization. 106 | 107 | ## Media BLOBs on the File System ## 108 | By default, openCRX keeps all media blobs in the database, in the column “content” of the table “oocke1_media”. While this approach guarantees data consistency and transactional integrity (assuming your database supports this), the drawback is that database backups can get very big and backing up and/or restoring the database can take a long time if you have a lot of (large) media attachments in openCRX. 109 | 110 | If you prefer to manage your media blobs on the file system (e.g. to make fast backups with rsync) you can configure openCRX to do just that. 111 | 112 | ### Migrate Media BLOBs from DB to File System ### 113 | You can migrate from “BLOBs in the DB” to “BLOBs on the file system” with the following steps: 114 | 115 | * stop Tomcat 116 | * uncomment and/or configure the Java Option -Dorg.opencrx.mediadir, e.g. -Dorg.opencrx.mediadir.CRX=$CATALINA_BASE/mediadir 117 | * start Tomcat 118 | * login as admin-Root 119 | * start _Wizards > Database schema wizard_ 120 | * note the new buttons: _Validate Media_, _Migrate Media to FS_ and _Migrate Media to DB_ 121 | 122 | ![img](files/Miscellaneous/pic010.png) 123 | 124 | * click the button _Migrate Media to FS_ and wait for the process to finish (note that the time required to complete the migration can be quite long; it depends on various factors, including the number and size of the media attachments). 125 | 126 | ### Validate Media ### 127 | After migrating media BLOBs from the DB to the file system you should validate the media as follows: 128 | 129 | * login as admin-Root 130 | * start _Wizards > Database schema wizard_ 131 | * click the button _Validate Media_ and wait for the process to finish (note that the time required to complete the validation can be quite long; it depends on various factors, including the number and size of the media attachments) 132 | 133 | ![img](files/Miscellaneous/pic020.png) 134 | 135 | You can also validate the media manually. On Linux, for example, you can generate a list of objects with 136 | 137 | ``` 138 | find . -type f | rev | awk -F'/' '{print $1 "_" $3}' | rev 139 | ``` 140 | 141 | With PostgreSQL, for example, you can generate a list of objects with 142 | 143 | ``` 144 | select object_id, 145 | reverse(split_part(reverse(object_id), '/', 2)) || '_' || 146 | reverse(split_part(reverse(object_id), '/', 1)) 147 | from oocke1_media 148 | where not content is null 149 | ``` 150 | 151 | __WARNING:__ Please not that you should NOT DELETE MEDIA BLOBs from your database before making a backup of your database and validating the media you migrated from the database to the filesystem. 152 | 153 | If the validation of the media completed without errors you can delete the media BLOBs from the DB with the following SQL: 154 | 155 | ``` 156 | update oocke1_media set content = null 157 | ``` 158 | 159 | ### Migrate Media BLOBs from File System to DB ### 160 | You can migrate from “BLOBs on the file system” to “BLOBs in the DB” with the following steps: 161 | 162 | * ensure that during the migration process no new media BLOBs are created/changed as they are written to the file system (and not to the database) but might not get migrated to the database with the migration process (because the respective media object was processed by the wizard before the create/update was executed...) 163 | * login as admin-Root 164 | * start _Wizards > Database schema wizard_ 165 | * click the button _Migrate Media to DB_ and wait for the process to finish (note that the time required to complete the migration can be quite long; it depends on various factors, including the number and size of the media attachments) 166 | * stop Tomcat 167 | * remove the Java Option -Dorg.opencrx.mediadir 168 | * start Tomcat 169 | 170 | ## Java Options ## 171 | The following Java Options are set by default by the openCRX Server Installer: 172 | 173 | ``` 174 | export JAVA_OPTS="$JAVA_OPTS -Xmx800M" 175 | export JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=256m" 176 | export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8" 177 | export JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.openmdx.kernel.url.protocol" 178 | export JAVA_OPTS="$JAVA_OPTS -Dorg.opencrx.maildir=$CATALINA_BASE/maildir" 179 | # export JAVA_OPTS="$JAVA_OPTS -Dorg.opencrx.usesendmail.CRX=false" 180 | # export JAVA_OPTS="$JAVA_OPTS -Dorg.opencrx.mediadir=$CATALINA_BASE/mediadir" 181 | # export JAVA_OPTS="$JAVA_OPTS -Dorg.openmdx.persistence.jdbc.useLikeForOidMatching=false" 182 | # export JAVA_OPTS="$JAVA_OPTS -Dorg.opencrx.security.enable=true" 183 | # export JAVA_OPTS="$JAVA_OPTS -Dorg.opencrx.security.realmRefreshRateMillis=120000" 184 | # export JAVA_OPTS="$JAVA_OPTS -Djavax.jdo.option.TransactionIsolationLevel=read-committed" 185 | export CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/openmdx-system.jar 186 | ``` 187 | 188 | ### -Xmx ### 189 | The maximum size, in bytes, of the memory allocation pool – you might have to increase this value if you get out of memory exceptions 800M is fine for testing, but most likely too small for production environments. See also java and Garbage Collector Ergonomics. 190 | 191 | ### -XX:MaxPermSize ### 192 | The maximum PermGen space in bytes – 256m – should be fine in most cases, but you might have to increase this value if you get OutOfMemoryError: PermGen Space. 193 | 194 | ### -Dfile.encoding ### 195 | Default value: UTF-8. Do not change unless you have a good reason to do so. 196 | 197 | ### -Djava.protocol.handler.pkgs ### 198 | Leave this value at org.openmdx.kernel.url.protocol. 199 | 200 | ### -Dorg.opencrx.maildir ### 201 | Base directory that contains all mail directories managed by the IMAP servlet – the default value is $CATALINA_BASE/maildir. 202 | 203 | ### -Dorg.opencrx.usesendmail.{provider} ### 204 | Use sendmail instead of JavaMail. 205 | 206 | ### -Dorg.opencrx.mediadir ### 207 | Base directory that contains all directories managed by the openCRX persistence layer to store media attachments – the default value is $CATALINA_BASE/mediadir. 208 | 209 | ### -Dorg.openmdx.persistence.jdbc.useLikeForOidMatching ### 210 | Default value is true 211 | 212 | As “object ID matching” (OID matching) is a frequent operation it is absolutely crucial that it can be done in a very efficient way, other­wise openCRX will suffer from a heavy performance hit. The openCRX database plugin does OID matching with SQL statements containing comparisons like 213 | 214 | ``` 215 | (object_id > id_pattern_0) and 216 | (object_id < id_pattern_1) 217 | ``` 218 | 219 | Given the issues that exist with PostgreSQL prior to version 9.3 the default configuration of the openCRX database plugin resorts to a comparison based on LIKE. We are aware of the implications – a severe performance hit – as prepared statements with LIKE comparisons typically don't use indices (see openCRX PostgreSQL guide for more information). 220 | 221 | ### -Dorg.opencrx.security.enable ### 222 | Leave this value at true unless you want to turn off access control (which is not recommended). 223 | 224 | ### -Dorg.opencrx.security.realmRefreshRateMillis ### 225 | With the default value of 120000 the security configuration is refreshed every 2 minutes; if you need a higher refresh rate or can live with a lower refresh rate, feel free to adapt the value. 226 | 227 | ### -Djavax.jdo.option.TransactionIsolationLevel ### 228 | Default value: read-committed. Do not change unless you have a good reason to do so. 229 | -------------------------------------------------------------------------------- /Admin/README.md: -------------------------------------------------------------------------------- 1 | # openCRX Administrator's Guides # 2 | 3 | 1. [openCRX Server Installation](InstallerServer.md) 4 | 1. [Install on Docker](InstallOnDocker.md) 5 | 1. [Upgrade Guide](HowToUpgrade.md) 6 | 1. [Database Management Guide](DatabaseManagement.md) 7 | 1. [Managing Security](ManagingSecurity.md) 8 | 1. [Managing Users](ManagingUsers.md) 9 | 1. [Configuring the Groupware Services](GroupwareServices.md) 10 | 1. [Configuring the Automated Workflows](AutomatedWorkflows.md) 11 | 1. [Configuring the E-Mail services](EMailServices.md) 12 | 1. [Miscellaneous Topics](Miscellaneous.md) 13 | -------------------------------------------------------------------------------- /Admin/files/AutomatedWorkflows/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/AutomatedWorkflows/pic010.png -------------------------------------------------------------------------------- /Admin/files/AutomatedWorkflows/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/AutomatedWorkflows/pic020.png -------------------------------------------------------------------------------- /Admin/files/AutomatedWorkflows/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/AutomatedWorkflows/pic030.png -------------------------------------------------------------------------------- /Admin/files/AutomatedWorkflows/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/AutomatedWorkflows/pic040.png -------------------------------------------------------------------------------- /Admin/files/AutomatedWorkflows/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/AutomatedWorkflows/pic050.png -------------------------------------------------------------------------------- /Admin/files/AutomatedWorkflows/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/AutomatedWorkflows/pic060.png -------------------------------------------------------------------------------- /Admin/files/AutomatedWorkflows/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/AutomatedWorkflows/pic070.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic010.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic020.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic030.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic040.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic050.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic060.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic070.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic080.png -------------------------------------------------------------------------------- /Admin/files/DatabaseManagement/pic090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/DatabaseManagement/pic090.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic010.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic020.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic030.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic040.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic050.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic060.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic070.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic080.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic090.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic100.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic110.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic120.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic130.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic140.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic150.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic160.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic170.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic180.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic190.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic200.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic210.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic220.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic230.png -------------------------------------------------------------------------------- /Admin/files/EMailServices/pic240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/EMailServices/pic240.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic010.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic020.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic030.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic040.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic050.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic060.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic070.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic080.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic090.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic100.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic110.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic120.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic130.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic140.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic150.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic160.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic170.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic180.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic190.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic200.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic210.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic220.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic230.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic240.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic250.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic260.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic260.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic270.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic280.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic290.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic290.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic300.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic310.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic320.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic330.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic340.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic340.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic350.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic350.png -------------------------------------------------------------------------------- /Admin/files/GroupwareServices/pic360.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/GroupwareServices/pic360.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic010.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic020.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic030.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic040.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic050.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic060.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic070.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic080.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic090.png -------------------------------------------------------------------------------- /Admin/files/InstallerServer/pic100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/InstallerServer/pic100.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic010.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic020.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic030.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic040.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic050.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic060.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic070.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic080.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic090.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic100.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic110.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic120.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic130.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic140.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic150.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic160.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic170.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic180.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic190.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic200.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic210.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic220.png -------------------------------------------------------------------------------- /Admin/files/ManagingSecurity/pic230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingSecurity/pic230.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic010.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic020.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic030.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic040.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic050.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic060.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic070.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic080.png -------------------------------------------------------------------------------- /Admin/files/ManagingUsers/pic090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/ManagingUsers/pic090.png -------------------------------------------------------------------------------- /Admin/files/Miscellaneous/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/Miscellaneous/pic010.png -------------------------------------------------------------------------------- /Admin/files/Miscellaneous/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Admin/files/Miscellaneous/pic020.png -------------------------------------------------------------------------------- /Customizing/README.md: -------------------------------------------------------------------------------- 1 | # openCRX Customizing Guides # 2 | 3 | 1. [Basic UI Customization](http://www.opencrx.org/opencrx/1.7/BasicCustomization/htmlsingle/openCRX_BasicCustomization.html) 4 | 1. [Customizing Guide](http://www.opencrx.org/opencrx/2.13/customizing/openCRX_customizing.html) 5 | 1. [Localization Guide](http://www.opencrx.org/opencrx/1.5/languageLocalizationGuide/htmlsingle/openCRX_LanguageLocalization.html) 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # openCRX Documentation # 2 | 3 | openCRX is a professional CRM service (customer relationship management) deployable to all major platforms. 4 | openCRX is multi-entity enabled, scalable, a real enterprise-class CRM-solution that runs on Apache TomEE. 5 | 6 | On this wiki you find the latest information about openCRX. You are welcome to add your requests, comments and contributions. 7 | 8 | For more information go to the [openCRX web site](http://www.opencrx.org/). 9 | 10 | I. [Installation and Administration](Admin/README.md) 11 | 12 | 1. [New features and changes](https://github.com/opencrx/opencrx/issues?q=is%3Aissue+is%3Aclosed+milestone%3Aopencrx-v6.0.0) 13 | 1. [openCRX Server Installation](Admin/InstallerServer.md) 14 | 1. [Install on Docker](Admin/InstallOnDocker.md) 15 | 1. [Upgrade Guide](Admin/HowToUpgrade.md) 16 | 1. [Database Management Guide](Admin/DatabaseManagement.md) 17 | 1. [Managing Security](Admin/ManagingSecurity.md) 18 | 1. [Managing Users](Admin/ManagingUsers.md) 19 | 1. [Configuring the Groupware Services](Admin/GroupwareServices.md) 20 | 1. [Configuring the Automated Workflows](Admin/AutomatedWorkflows.md) 21 | 1. [Configuring the E-Mail services](Admin/EMailServices.md) 22 | 1. [Miscellaneous Topics](Admin/Miscellaneous.md) 23 | 24 | II. [Development](Sdk/README.md) 25 | 26 | 1. [openCRX SDK: Build from Source](Sdk/BuildFromSource.md) 27 | 1. [How to create custom projects](Sdk/CustomProject.md) 28 | 1. [Introduction to the openCRX UML model](Sdk/Modeling.md) 29 | 1. [How to use the REST servlet](Sdk/Rest.md) 30 | 1. [How to write an openCRX Polymer client](Sdk/PolymerClient.md) 31 | 1. [How to write a remote openCRX Java client](Sdk/RemoteJavaClient.md) 32 | 1. [How to write a native openCRX Java client](Sdk/NativeJavaClient.md) 33 | 1. [How to write a remote openCRX Android client](Sdk/RemoteAndroidClient.md) 34 | 1. [Workflow Engine Integration](Sdk/WFE.md) 35 | 1. [How to extend the standard GUI using PortalExtension](Sdk/PortalExtension.md) 36 | 37 | III. [User](Users/README.md) 38 | 39 | 1. [openCRX GUI - Getting Started](http://www.opencrx.org/opencrx/2.13/gui/openCRX_gui.pdf) 40 | 1. [Managing User Settings](Users/UserSettings.md) 41 | 1. [How to use the Subscribe / Notify Services](Users/SubscribeNotify.md) 42 | 1. [How to use the Data Import / Export Functions](Users/DataImportExport.md) 43 | 1. [Activity Management](Users/Activities.md) 44 | 1. [Reporting](Users/Reporting.md) 45 | 46 | IV. [Customizing](Customizing/README.md) 47 | 48 | 1. [Basic UI Customization](http://www.opencrx.org/opencrx/1.7/BasicCustomization/htmlsingle/openCRX_BasicCustomization.html) 49 | 1. [Customizing Guide](http://www.opencrx.org/opencrx/2.13/customizing/openCRX_customizing.html) 50 | 1. [Localization Guide](http://www.opencrx.org/opencrx/1.5/languageLocalizationGuide/htmlsingle/openCRX_LanguageLocalization.html) 51 | 52 | V. Reference 53 | 54 | 1. [openCRX/Core UML Class Diagrams](http://www.opencrx.org/opencrx/6.0/uml/opencrx-core/index.html) 55 | 1. [openMDX/Core UML Class Diagrams](http://www.opencrx.org/opencrx/6.0/uml/openmdx-core/index.html) 56 | 1. [openMDX/Portal UML Class Diagrams](http://www.opencrx.org/opencrx/6.0/uml/openmdx-portal/index.html) 57 | -------------------------------------------------------------------------------- /Sdk/BuildFromSource.md: -------------------------------------------------------------------------------- 1 | # Build from source # 2 | 3 | This guide explains how to build _openCRX_ from the sources. 4 | 5 | ## Prerequisites ## 6 | 7 | Make sure that you have the following software installed: 8 | 9 | * [JDK 21](http://www.oracle.com/technetwork/java/javase/downloads/) or [OpenJDK 21](https://openjdk.java.net/projects/jdk/21/) 10 | * [GIT](http://git-scm.com/downloads) 11 | 12 | ## Build ## 13 | 14 | Get the openCRX sources from the GIT repository: 15 | 16 | ``` 17 | git clone https://github.com/opencrx/opencrx.git opencrx 18 | ``` 19 | 20 | And then build the _openCRX_. 21 | 22 | ``` 23 | cd opencrx 24 | git checkout opencrx-v6.0.0 25 | ./gradlew clean 26 | ./gradlew assemble 27 | ``` 28 | 29 | **Note:** If the build fails with a certificate validation exception see [here](https://github.com/opencrx/opencrx-documentation/issues/1) how to solve the issue. 30 | 31 | ## Eclipse project files ## 32 | 33 | Generate the Eclipse project files as follows: 34 | 35 | ``` 36 | ./gradlew eclipse 37 | ``` 38 | 39 | This generates the Eclipse project files _opencrx/core/.project_ and _opencrx/core/.classpath_. Import the project into a new or existing Eclipse workspace. 40 | 41 | ## Congratulations ## 42 | Congratulations! You have successfully built _openCRX SDK_ from the sources. 43 | -------------------------------------------------------------------------------- /Sdk/CustomProject.md: -------------------------------------------------------------------------------- 1 | # How to create a custom project # 2 | 3 | This guide explains how to create a custom project for _openCRX_. A custom project allows to extend the customizing delivered with the standard distribution of _openCRX_ by adding and modifying 4 | 5 | * Headers, footers and logos 6 | * Groovy-based controls 7 | * Code tables 8 | * Wizards 9 | * Reports 10 | * Backend extensions 11 | * Model and database extensions 12 | * Custom WARs 13 | 14 | A custom project allows to separate the directory structure of the _openCRX_ distribution and the custom-specific files. 15 | 16 | This guide assumes that the _openCRX SDK_ is installed (also see [here](Sdk/BuildFromSource.md)). 17 | 18 | ## Checkout and build the sample custom project ## 19 | 20 | _openCRX SDK_ comes with a sample custom project. 21 | 22 | ``` 23 | git clone https://github.com/opencrx/opencrx-custom.git opencrx-custom 24 | cd opencrx-custom 25 | git checkout opencrx-v{version} 26 | cd sample 27 | ./gradlew clean 28 | ./gradlew assemble 29 | ``` 30 | 31 | ## Verify project structure ## 32 | After successfully building the project the directory structure looks as shown below. 33 | 34 | ![img](files/CustomProject/pic150.png) 35 | 36 | * _sample/build/deployment-units_: custom-specific deployment units (e.g. _EAR_, _WAR_) 37 | * _sample/build/lib_: custom-specific _JARs_ 38 | * _sample/etc/deployment-unit_: custom web application. 39 | * _sample/build.properties_: allows to customize project-specific properties 40 | * _sample/build.gradle.kts_: custom-specific Gradle build file 41 | * _sample/src/data/org.opencrx.sample_: contains the custom-specific UI extensions. You have to put the custom-specific files such for ui, codes, reports, wizards, etc. in these directories. They are added to the _WAR_. A very important file is the ./WEB-INF/web.xml which contains the configuration of all servlets. 42 | * _sample/src/java_: custom-specific backend 43 | * _sample/src/ear_: custom-specific deployment descriptors 44 | * _sample/src/model_: custom-specific model extension 45 | 46 | ## Import the Eclipse projects ## 47 | Generate the Eclipse project files as follows: 48 | 49 | ``` 50 | ./gradlew eclipse 51 | ``` 52 | 53 | Then import the project into a new or existing _Eclipse_ workspace. 54 | 55 | ## Store ## 56 | The _Store_ application shows how to build a stand-alone web application which uses _openCRX Server_ as 57 | backend. After running _gradle assemble_ you will find in _sample/build/deployment-units_ the file _opencrx-store-CRX.war_. 58 | Deploy this _WAR_ to any _Java EE Web Profile_ compliant application server. E.g. deploy it to the _webapps_ directory of 59 | your _TomEE_ instance created by the _openCRX Server Installer_. In order to be able to connect to the 60 | _openCRX Server_ instance, check the following entries in _./sample/src/war/opencrx-store-CRX.war/WEB-INF/web.xml_: 61 | 62 | ``` 63 | 64 | url 65 | http://127.0.0.1:8080/opencrx-rest-CRX/ 66 | 67 | 68 | userName 69 | admin-Standard 70 | 71 | 72 | password 73 | admin-Standard 74 | 75 | ``` 76 | 77 | Adapt the parameter values according to your environment and run _gradle assemble_ again after having made modifications. 78 | 79 | The _Store_ application comes with some sample data which you can load with the standard _openCRX GUI_: 80 | 81 | * Login as segment administrator (e.g. _admin-Standard_). 82 | * On the user's home select _File > Import_ and import the file _sample/src/war/opencrx-store-CRX.war/data/uoms.xml_. 83 | * Next import the file _sample/src/war/opencrx-store-CRX.war/data/products.xml_. 84 | * Now launch the _Store_ application with _http://localhost:8080/opencrx-store-CRX/Store.jsp_. Adapt host and 85 | port according to your environment. 86 | 87 | You then get the start screen as shown below: 88 | 89 | ![img](files/CustomProject/pic140.png) 90 | 91 | If you want to build your own web application and use _openCRX Server_ as backend it should be 92 | straight-forward to use the _Store_ application as template and adapt it to your use-cases and 93 | _GUI_ frameworks. 94 | 95 | ## Model extension ## 96 | _openCRX_ follows a _Model Driven Software Development_ (MDSD) approach. Hence, many _openCRX_ artifacts (_API_, 97 | _XML_ schemas, persistence mappings and classes, etc.) are the derived from the model. I.e. they are generated 98 | at build-time by model mapping tools provided by the underlying _MDA_ framework 99 | _openMDX_ (see [here](http://www.opencrx.org) for more information). As a consequence, the _openCRX Core_ model 100 | must be extended in case new attributes or operations are to be added to the _API_, GUI, or database. In order 101 | to get a basic understanding of the _MDSD_ approach it is a good idea to read the following documents: 102 | 103 | * [Introduction to Modeling with openMDX](https://github.com/openmdx/openmdx-documentation/blob/master/Modeling/README.md) 104 | * [openMDX Workshop Project](https://github.com/openmdx/openmdx-documentation/blob/master/Sdk/Workshop.md) 105 | * The source files of the _openCRX Sample_ project 106 | 107 | The _sample_ project comes with a simple model extension. In _Eclipse_ open the _Papyrus_ model by opening 108 | _openCRX 4 Custom ~ Sample (Papyrus)/models.di_. Then select the diagram named _org.opencrx.sample.account1-Main_. It 109 | should look as shown below: 110 | 111 | ![img](files/CustomProject/pic160.png) 112 | 113 | The _sample_ project extends the _openCRX Core_ model by the following elements: 114 | 115 | * Class _org:opencrx:sample:account1:MyContact_: _MyContact_ extends the class _org:opencrx:kernel:account1:Contact_ 116 | from _openCRX/Core_. It adds the and adds the multi-valued attribute _hobby_. 117 | * Class _org:opencrx:sample:account1:Gadget_: _Gadget_ extends the classes _org:opencrx:kernel:base:Note_, 118 | _org:opencrx:kernel:base:SecureObject_, _org:opencrx:kernel:base:Auditee_, and _org:openmdx:base:BasicObject_. 119 | All attributes are inherited. 120 | * Association _org:opencrx:sample:account1:MyContactOwnsGadget_: the composite association allows to add 0..n gadgets 121 | to a _MyContact_. 122 | 123 | ## Next steps ## 124 | * If you want to rename the project _sample_ by your own name, e.g. _myname_ then you have to adapt _build.gradle.kts_, _build.properties_ and the directory name containing the data files in _src/data_ 125 | * If you want to learn more about UI customizing then see [here](http://www.opencrx.org/documents.htm) for more information 126 | 127 | ## Congratulations ## 128 | You have successfully created your first _openCRX_ custom project. 129 | -------------------------------------------------------------------------------- /Sdk/NativeJavaClient.md: -------------------------------------------------------------------------------- 1 | # How to write a native _openCRX_ Java client # 2 | 3 | This guide explains how to write a native _openCRX_ Java client. Unlike with the remote client, 4 | the native client performs a full in-process deployment of _openCRX_ and has direct access 5 | to the _openCRX_ database. 6 | 7 | _SampleNativeClient_ performs the following operations: 8 | 9 | * Setup the _openMDX_ lightweight container. This section must be disabled if the client is deployed in the 10 | context of a J2EE web application 11 | * Setup the persistence manager 12 | * Run a query to retrieve contacts matching a given name pattern and display the result on the console 13 | 14 | __IMPORTANT:__ Use this deployment scenario with caution. Unexpected effects can occur when 15 | multiple instances of _openCRX_ access the same database. 16 | 17 | __HINT:__ For non-_Java_ programming languages, _openCRX_ offers a _REST_ service which allows remote clients to 18 | access the full API of _openCRX_. For more information see [How to use the REST Servlet](Sdk/Rest.md). 19 | For the _Java_ programming language, _openCRX_ offers a client library which allows to access _openCRX_ using 20 | the standard _openCRX_ Java API. 21 | 22 | ## Prepare ## 23 | 24 | Create a working directory (e.g. _~/opencrx-sample-native-client_) with the following layout: 25 | 26 | ``` 27 | opencrx-sample-native-client/ 28 | + src/main/java/org/opencrx/application/client 29 | - SampleNativeClient.java 30 | + lib/ 31 | - geronimo-javamail_1.4_mail-1.9.0-alpha-2.jar 32 | - javaee-api-8.0-4.jar 33 | - opencrx-config-crx.jar 34 | - opencrx-core.jar 35 | - openmdx-base-2.17.10.jar 36 | - openmdx-portal-2.17.10.jar 37 | - openmdx-security-2.17.10.jar 38 | - postgresql-42.2.12.jar 39 | ``` 40 | 41 | * _SampleNativeClient.java_: copy the source from [here](https://github.com/opencrx/opencrx/tree/master/core/src/sample/java/org/opencrx/application/client/). Adapt 42 | the jdbc connection url as required and add the corresponding jdbc driver jar to _./lib_ 43 | * _lib/*.jar_: copy the jars from a running _openCRX_ server installation, e.g. _APP-INF/lib_ and _TOMEE\_HOME/lib_ directories 44 | 45 | ## Compile ## 46 | 47 | Next open a shell and go to the working directory (e.g. e.g. _~/opencrx-sample-native-client_). Compile 48 | _SampleNativeClient.java_: 49 | 50 | ``` 51 | javac -d bin -cp "bin:lib/*" src/main/java/org/opencrx/application/client/SampleNativeClient.java 52 | ``` 53 | 54 | ## Run ## 55 | Next run the client: 56 | 57 | ``` 58 | java -cp "bin:lib/*" org.opencrx.application.client.SampleNativeClient 59 | ``` 60 | 61 | ## Next Steps ## 62 | You are now free to extend the client programming according to your needs. You have access to the 63 | full API of _openCRX_, that is 64 | 65 | * Perform queries 66 | * Create and update objects 67 | * Invoke operations 68 | 69 | ## Congratulations ## 70 | Congratulations! You have successfully built and run your first _openCRX_ Java native client. 71 | -------------------------------------------------------------------------------- /Sdk/PolymerClient.md: -------------------------------------------------------------------------------- 1 | # How to write an _openCRX_ Polymer client # 2 | 3 | This guide explains how to write a [Polymer](https://www.polymer-project.org/) client accessing _openCRX_ using the [RESTful API](Rest.md). 4 | 5 | ## Prepare ## 6 | This guide assumes that 7 | 8 | * the _openCRX Server_ is successfully installed as described in [openCRX Server Installation Guide](/Admin/InstallerServer.md). 9 | * the _openCRX/Sample_ custom project is installed as described in [How to create a custom project](CustomProject.md). 10 | * _Bower_ is installed. See [Bower - A package manager for the web](http://bower.io/) for more information. 11 | 12 | ## Overview ## 13 | _MyContact_ is a sample _Polymer_ app that accesses _openCRX_ using the _RESTful API_. The app is located in the folder _sample/src/war/opencrx-sample-store.war/_ and consists of the following files: 14 | 15 | * __index.html:__ Main page of the _MyContact_ app 16 | * __elements/mycontact-toolbar.html:__ Component for the app toolbar 17 | * __elements/mycontact-contact-list.html:__ Component which allows to display a list of contacts retrieved from the API. The component extends the generic component _mycontact-object-list.html_. 18 | * __elements/mycontact-object-list.html:__ Component which allows to display a list of objects retrieved from the API. The component shows how to implement infinite, incremental scrolling using the _position_ and _size_ parameters of the query API. 19 | * __elements/mycontact-detail.html:__ Component which shows the detail information of a contact including some main attributes and address information. The component demonstrates how to use retrieve, display and update objects. 20 | 21 | The implementation using the _RESTful API_ is straight-forward. Use the _Swagger UI_ to explore the API. See [RESTful API](Rest.md) for more information. 22 | 23 | ## Build ## 24 | Build the _MyContact_ app as follows: 25 | 26 | ``` 27 | cd ./opencrx4-custom/sample/src/war/opencrx-sample-mycontact.war 28 | bower update 29 | cd ../../.. 30 | ant assemble 31 | ``` 32 | 33 | This generates the _opencrx-sample-mycontact.war_ in the directory _../sample/build/deployment-unit/_. 34 | 35 | ## Run ## 36 | Next deploy _opencrx-sample-mycontact.war_. Copy the file to _./opencrxServer/apache-tomee-plus-7.0.5/webapps/_ and restart Tomcat. Then open a browser and enter the URL _http://localhost:8080/opencrx-sample-mycontact/index.html_. 37 | 38 | At startup, the app should display a toolbar and a list of contacts. As a reference see the [demo](http://demo.opencrx.org/opencrx-sample-mycontact/index.html). 39 | 40 | In case of troubles consult the browser's console log and / or use [Firebug](http://getfirebug.com/downloads) to track warnings and errors. 41 | 42 | ## Congratulations ## 43 | Congratulations! You have successfully built and run your first _openCRX_ Polymer client. 44 | -------------------------------------------------------------------------------- /Sdk/PortalExtension.md: -------------------------------------------------------------------------------- 1 | # How to extend the standard GUI using PortalExtension # 2 | 3 | This guide explains how to customize the standard GUI by extending the default portal extension. 4 | 5 | The class _org.opencrx.kernel.portal.PortalExtension_ controls GUI-related functions of 6 | _openCRX_. The standard implementation can be extended for custom projects very easily. Here is how. 7 | 8 | ## Create a custom project ## 9 | First create a custom project. 10 | See [How to create custom projects](Sdk/CustomProject.md) for more info. 11 | 12 | ## Create a custom PortalExtension class ## 13 | Within this custom project create a portal extension class. The class must extend 14 | _org.opencrx.kernel.portal.PortalExtension_. The override one or more methods of 15 | the default implementation. 16 | 17 | ## Register in web.xml ## 18 | Next register _com.mycompany.opencrx.sample.portal.PortalExtension_ in the _web.xml_ of 19 | the custom project. 20 | 21 | ## Build, Test and Deploy ## 22 | If you run under Eclipse set break points in the _isEnabled()_ methods. You will see 23 | how and when Portal calls the _PortalExtension_ methods during the rendering process. 24 | 25 | Run _ant deliverables_ and _ant assemble_ to compile and build the EAR. 26 | -------------------------------------------------------------------------------- /Sdk/README.md: -------------------------------------------------------------------------------- 1 | # openCRX Development Guides # 2 | 3 | 1. [openCRX SDK: Build from Source](BuildFromSource.md) 4 | 1. [How to create custom projects](CustomProject.md) 5 | 1. [Introduction to the openCRX UML model](Modeling.md) 6 | 1. [How to use the REST servlet](Rest.md) 7 | 1. [How to write an openCRX Polymer client](PolymerClient.md) 8 | 1. [How to write a remote openCRX Java client](RemoteJavaClient.md) 9 | 1. [How to write a remote openCRX Android client](RemoteAndroidClient.md) 10 | 1. [Workflow Engine Integration](WFE.md) 11 | 1. [How to extend the standard GUI using PortalExtension](PortalExtension.md) 12 | -------------------------------------------------------------------------------- /Sdk/RemoteAndroidClient.md: -------------------------------------------------------------------------------- 1 | # How to write a remote _openCRX_ Android client # 2 | 3 | This guide explains how to write a remote _Android_ client accessing _openCRX_. 4 | 5 | ## Thanks to ## 6 | Many thanks to [Bruno Studer](https://sourceforge.net/u/brunostuder/profile/) for this contribution. 7 | 8 | ## Prepare ## 9 | This guide assumes that 10 | 11 | * the _openCRX Server_ is successfully installed as described in [openCRX Server Installation Guide](Admin/InstallerServer.md). 12 | * the _openCRX/Sample_ custom project is installed and deployed as described in [How to create a custom project](Sdk/CustomProject.md). 13 | * the _Android SDK_ installed. See [Get the Android SDK](http://developer.android.com/sdk/index.html) for more information. 14 | 15 | ## Overview ## 16 | The sample _Android_ client accesses _openCRX_ by invoking the service _org:opencrx:sample:client1:Segment:queryAccounts_. 17 | This service is part of the _openCRX/Sample_ custom project. This requires that the _openCRX/Sample_ application is up-and-running. 18 | 19 | The custom interface _org:opencrx:sample:client1_ has a very small memory-footprint so the 20 | resulting _Android_ application can easily be loaded by _Android_ devices. The standard interfaces of 21 | _openCRX_ (_org:opencrx:kernel:account1_, _org:opencrx:kernel:activity1_, _org:opencrx:kernel:contract1_, 22 | _org:opencrx:kernel:product1_, etc.) have a much larger memory-footprint so using these interfaces 23 | typically does not work at all or results in very slow application loading times. 24 | 25 | The _openCRX_ client application below performs the following operations: 26 | 27 | * Setup the persistence manager 28 | * Connect to _openCRX_ using the _REST/Http_ transport 29 | * Invoke the service queryAccounts() and display the result 30 | 31 | __AccountLoader.java__ 32 | 33 | ``` 34 | package org.opencrx.sample.android; 35 | 36 | import java.io.CharArrayWriter; 37 | import java.io.PrintWriter; 38 | import java.util.ArrayList; 39 | import java.util.HashMap; 40 | import java.util.List; 41 | import java.util.Map; 42 | 43 | import javax.jdo.PersistenceManager; 44 | import javax.jdo.PersistenceManagerFactory; 45 | 46 | import android.content.AsyncTaskLoader; 47 | import android.content.Context; 48 | import android.content.SharedPreferences; 49 | import android.util.Log; 50 | 51 | import org.opencrx.sample.client1.jmi1.AccountT; 52 | import org.opencrx.sample.client1.jmi1.QueryAccountParams; 53 | import org.opencrx.sample.client1.jmi1.QueryAccountResult; 54 | import org.openmdx.application.rest.http.SimplePort; 55 | import org.openmdx.base.accessor.jmi.spi.EntityManagerFactory_1; 56 | import org.openmdx.base.jmi1.Provider; 57 | import org.openmdx.base.naming.Path; 58 | import org.openmdx.base.persistence.cci.ConfigurableProperty; 59 | import org.openmdx.base.persistence.cci.PersistenceHelper; 60 | import org.openmdx.base.resource.cci.ConnectionFactory; 61 | import org.openmdx.base.rest.connector.EntityManagerProxyFactory_2; 62 | import org.openmdx.base.rest.spi.ConnectionFactoryAdapter; 63 | import org.openmdx.base.transaction.TransactionAttributeType; 64 | import org.openmdx.kernel.jdo.ReducedJDOHelper; 65 | import org.w3c.spi2.Datatypes; 66 | import org.w3c.spi2.Structures; 67 | 68 | public class AccountLoader 69 | extends AsyncTaskLoader> { 70 | 71 | private static final String TAG = AccountLoader.class.getSimpleName(); 72 | private final String queryName; 73 | private final String queryCity; 74 | 75 | public AccountLoader( 76 | Context context, 77 | String queryName, 78 | String queryCity) { 79 | super(context); 80 | this.queryName = queryName; 81 | this.queryCity = queryCity; 82 | } 83 | 84 | @Override 85 | public List loadInBackground() { 86 | Log.d(TAG, 87 | "search name:" + this.queryName + ", city:" + this.queryCity); 88 | 89 | List accountItems = new ArrayList(); 90 | 91 | final SharedPreferences prefs = this.getContext() 92 | .getSharedPreferences(SettingsActivity.PREFERENCES, 93 | Context.MODE_PRIVATE); 94 | final String serverName = prefs.getString(SettingsActivity.SERVERNAME, 95 | null); 96 | final String login = prefs.getString(SettingsActivity.LOGIN, 97 | null); 98 | final String password = prefs.getString(SettingsActivity.PASSWORD, 99 | null); 100 | if (serverName == null || login == null || password == null) { 101 | return accountItems; 102 | } 103 | 104 | try { 105 | final SimplePort port = new SimplePort(); 106 | port.setMimeType("application/vnd.openmdx.wbxml"); 107 | port.setUserName(login); 108 | port.setPassword(password); 109 | port.setConnectionURL("http://" + serverName + "/opencrx-rest-CRX/"); 110 | final ConnectionFactory connectionFactory = new ConnectionFactoryAdapter(port, 111 | true, 112 | TransactionAttributeType.NEVER); 113 | final Map dataManagerProxyConfiguration = new HashMap(); 114 | dataManagerProxyConfiguration.put(ConfigurableProperty.ConnectionFactory.qualifiedName(), 115 | connectionFactory); 116 | dataManagerProxyConfiguration.put(ConfigurableProperty.PersistenceManagerFactoryClass 117 | .qualifiedName(), 118 | EntityManagerProxyFactory_2.class.getName()); 119 | final PersistenceManagerFactory outboundConnectionFactory = ReducedJDOHelper 120 | .getPersistenceManagerFactory(dataManagerProxyConfiguration); 121 | 122 | final Map entityManagerConfiguration = new HashMap(); 123 | entityManagerConfiguration.put(ConfigurableProperty.ConnectionFactory.qualifiedName(), 124 | outboundConnectionFactory); 125 | entityManagerConfiguration.put(ConfigurableProperty.PersistenceManagerFactoryClass 126 | .qualifiedName(), 127 | EntityManagerFactory_1.class.getName()); 128 | final PersistenceManagerFactory pmf = ReducedJDOHelper 129 | .getPersistenceManagerFactory(entityManagerConfiguration); 130 | 131 | final PersistenceManager pm = pmf.getPersistenceManager(login, 132 | password); 133 | PersistenceHelper.currentUnitOfWork(pm).begin(); 134 | 135 | org.opencrx.sample.client1.jmi1.Segment segment; 136 | try { 137 | segment = (org.opencrx.sample.client1.jmi1.Segment) pm 138 | .getObjectById(new Path("xri://@openmdx*org.opencrx.sample.client1/provider/CRX/segment/Standard")); 139 | } catch (Exception e) { 140 | final Provider provider = (Provider) pm 141 | .getObjectById(new Path("xri://@openmdx*org.opencrx.sample.client1/provider/CRX")); 142 | segment = pm.newInstance(org.opencrx.sample.client1.jmi1.Segment.class); 143 | provider.addSegment("Standard", 144 | segment); 145 | Log.i(TAG, 146 | "Segment created"); 147 | } 148 | 149 | final List> members = new ArrayList>(); 150 | if (this.queryName != null) { 151 | members.add(Datatypes.member(QueryAccountParams.Member.name, 152 | this.queryName)); 153 | } 154 | if (this.queryCity != null) { 155 | members.add(Datatypes.member(QueryAccountParams.Member.postalCity, 156 | this.queryCity)); 157 | } 158 | final QueryAccountParams params = Structures.create(QueryAccountParams.class, 159 | members); 160 | final QueryAccountResult result = segment.queryAccounts(params); 161 | 162 | PersistenceHelper.currentUnitOfWork(pm).commit(); 163 | 164 | List accounts = result.getAccounts(); 165 | for (AccountT account : accounts) { 166 | accountItems.add(new AccountItem(account.getFullName(), account.getPostalCity())); 167 | } 168 | 169 | pm.close(); 170 | 171 | } catch (Throwable e) { 172 | log(TAG, 173 | e); 174 | } 175 | Log.d(TAG, 176 | "found " + accountItems.size() + " accounts"); 177 | return accountItems; 178 | } 179 | 180 | public static void log( 181 | String tag, 182 | Throwable e) { 183 | Log.e(TAG, 184 | "Exception " + (e.getMessage() != null ? e.getMessage() : "NULL"), 185 | e); 186 | 187 | final CharArrayWriter w = new CharArrayWriter(); 188 | PrintWriter pw = new PrintWriter(w); 189 | e.printStackTrace(pw); 190 | final String msg = w.toString(); 191 | final int length = msg.length(); 192 | for (int i = 0; i < length; i += 1024) { 193 | if (i + 1024 < length) 194 | Log.w(tag, 195 | msg.substring(i, 196 | i + 1024)); 197 | else 198 | Log.w(tag, 199 | msg.substring(i, 200 | length)); 201 | } 202 | } 203 | 204 | public static final class AccountItem { 205 | 206 | protected AccountItem( 207 | String fullName, 208 | String city) { 209 | super(); 210 | this.fullName = fullName; 211 | this.city = city; 212 | } 213 | 214 | private final String fullName; 215 | private final String city; 216 | 217 | @Override 218 | public String toString() { 219 | if (city != null) { 220 | return fullName + ", " + city; 221 | } else { 222 | return fullName; 223 | } 224 | } 225 | 226 | public String getFullName() { 227 | return fullName; 228 | } 229 | 230 | public String getCity() { 231 | return city; 232 | } 233 | 234 | } 235 | 236 | } 237 | ``` 238 | 239 | ## Compile and Build ## 240 | You can build the _APK_ as follows: 241 | 242 | ``` 243 | cd ./opencrx4-custom/sample/src/apk/opencrx-sample-android 244 | ant release 245 | ``` 246 | 247 | This generates the directories _./gen_ and _./bin_ whereas the .apk is created in _./bin_. The ant script 248 | requires that the environment variable _ANDROID\_HOME_ is set, e.g. _/opt/android-sdk-linux/_. 249 | 250 | ## Run ## 251 | Install _opencrx-sample-android.apk_ on an _Android_ device and start the application. The client 252 | asks you for a server name, user name and password. The server name is of the form _ip address:port_ 253 | (e.g. 10.10.10.20:8080) and must point to a running _openCRX/Sample_ instance. User and password must 254 | be a valid _openCRX_ user (e.g. _admin-Standard_ / _admin-Standard_ or _guest_ / _guest_). The client then 255 | connects with the URL _http://ip address:port/opencrx-core-REST_, invokes the service _queryAccounts()_ 256 | and displays the result on the _Android_ device. 257 | 258 | ## Congratulations ## 259 | Congratulations! You have successfully built and run your first _openCRX_ Android client. 260 | -------------------------------------------------------------------------------- /Sdk/RemoteJavaClient.md: -------------------------------------------------------------------------------- 1 | # How to write a remote _openCRX_ Java client # 2 | 3 | This guide explains how to write a remote Java client accessing _openCRX_. A remote client 4 | accesses a running _openCRX_ server instance via the REST/HTTP protocol. 5 | 6 | _SampleRemoteClient_ performs the following operations: 7 | 8 | * Setup the persistence manager 9 | * Connect to _openCRX_ using the _REST/Http_ transport 10 | * Run a query to retrieve contacts matching a given name pattern and display the result on the console 11 | 12 | __IMPORTANT:__ This guide assumes that _openCRX Server_ is successfully setup as described in 13 | [openCRX Server Installation Guide](/Admin/InstallerServer.md). 14 | 15 | __HINT:__ For non-_Java_ programming languages, openCRX offers a _REST_ service which allows remote clients to 16 | access the full API of _openCRX_. For more information see [How to use the REST Servlet](Rest.md). 17 | For the _Java_ programming language, _openCRX_ offers a client library which allows to access _openCRX_ using 18 | the standard _openCRX_ Java API. 19 | 20 | ## Prepare ## 21 | 22 | Create a working directory (e.g. _~/opencrx-sample-remote-client_) with the following layout: 23 | 24 | ``` 25 | opencrx-sample-remote-client/ 26 | + src/main/java/org/opencrx/kernel/client 27 | - SampleRemoteClient.java 28 | + lib/ 29 | - opencrx-client.jar 30 | - openmdx-client.jar 31 | - javaee-api-8.0-4.jar 32 | ``` 33 | 34 | * _SampleRemoteClient.java_: copy the source from [here](https://github.com/opencrx/opencrx/tree/master/core/src/test/java/org/opencrx/kernel/client/). Adapt 35 | the values for the variables _userName_, _password_ and _connectionUrl_ to your environment. The default values are ok for standard installations. 36 | * _opencrx\_client.jar_: copy from _/opencrx/core/build/lib/_ 37 | * _openmdx\_base.jar_: copy from _/openmdx/build/core/lib_ 38 | * _javaee-api-8.0-4.jar_: copy from _TOMEE\_HOME/lib_ 39 | 40 | ## Compile ## 41 | 42 | Next open a shell and go to the working directory (e.g. e.g. _~/opencrx-sample-remote-client_). Compile 43 | _SampleRemoteClient.java_: 44 | 45 | ``` 46 | javac -d bin -cp "bin:lib/*" src/main/java/org/opencrx/kernel/client/SampleRemoteClient.java 47 | ``` 48 | 49 | ## Run ## 50 | Next run the client: 51 | 52 | ``` 53 | java -cp "bin:lib/*" org.opencrx.kernel.client.SampleRemoteClient 54 | ``` 55 | 56 | ## Next Steps ## 57 | You are now free to extend the client programming according to your needs. You have access to the 58 | full API of _openCRX_, that is 59 | 60 | * Perform queries 61 | * Create and update objects 62 | * Invoke operations 63 | 64 | ## Congratulations ## 65 | Congratulations! You have successfully built and run your first _openCRX_ Java remote client. 66 | -------------------------------------------------------------------------------- /Sdk/Rest.md: -------------------------------------------------------------------------------- 1 | # How to use the REST API # 2 | 3 | openCRX offers a [Swagger 2.0](http://swagger.io/)-enabled RESTful API. The [Swagger UI](https://github.com/swagger-api/swagger-ui) is embedded in the openCRX REST servlet and allows to produce, visualize and consume the openCRX API in an easy and standardized way. The REST API gives access to the full API of openCRX, i.e. objects can be created, retrieved, updated and deleted. In addition, operations can be invoked on all objects. 4 | 5 | ## Explore the API ## 6 | The easiest way to launch the _Swagger UI_ is through the _Wizard > Explore API_ wizard from the _Standard GUI_: 7 | 8 | ![img](files/Rest/pic010.png) 9 | 10 | The wizard launches the _Swagger UI_ for the _current object_, i.e. the API of the object currently displayed in the _Standard GUI_. In our example this is the _Home_ of the user _guest_: 11 | 12 | * __Title__: Guest, (guest) - Home. 13 | * __XRI__: The XRI is displayed in the tab _System_ which is _xri://@openmdx*org.opencrx.kernel.home1/provider/CRX/segment/Standard/userHome/guest_. 14 | 15 | ![img](files/Rest/pic020.png) 16 | 17 | The _Swagger UI_ displays all features of the object type _org:opencrx:kernel:home1:UserHome_. The API corresponds 1:1 to the [UML class](http://www.opencrx.org/opencrx/3.0/uml/opencrx-core/home1/tn/010_Main.png.html) and the [Java class](http://www.opencrx.org/opencrx/3.0/java/org/opencrx/kernel/home1/jmi1/UserHome.html). 18 | 19 | You can navigate to any object in the _Standard GUI_ and launch the _Explore API_ wizard. 20 | 21 | 22 | ## Mime types ## 23 | 24 | The REST servlet supports the mime types _application/xml_ and _application/json_. 25 | 26 | 27 | ## Queries ## 28 | Queries support the following properties which allow to filter, sort and iterate a result set: 29 | 30 | * _position:_ the result set starts from the given position. The default is 0. Increasing the position by a batch size allows to iterate the result set. _hasMore=false_ indicates that there are no more objects to be returned. 31 | * _size:_ specifies the batch size. The default is 25. 32 | * _queryType:_ specifies the type of the objects to be returned. For example the reference XRI _org.opencrx.kernel.account1/provider/CRX/segment/Standard/account_ returns objects which are instanceof _org:opencrx:kernel:account1:Account_, i.e. objects of type _org:opencrx:kernel:account1:Contact_, _org:opencrx:kernel:account1:LegalEntity_, _org:opencrx:kernel:account1:UnspecifiedAccount_, _org:opencrx:kernel:account1:Group_. Setting the _queryType_ to _org:opencrx:kernel:account1:Contact_ restricts the result set to objects which are instanceof _org:opencrx:kernel:account1:Contact_. 33 | * _query:_ a query which is a semicolon-separated list of query verbs. The list of verbs is specified by the methods of the query class. The name of the query class is derived from the _queryType_. E.g. for _org:opencrx:kernel:account1:Contact_ the corresponding query class is _org.opencrx.kernel.account1.cci2.ContactQuery_. 34 | 35 | Here is a list of sample query URLs: 36 | 37 | ``` 38 | http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account 39 | http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=modifiedAt().between(:datetime:20080101T000000.000Z,:datetime:20101001T000000.000Z);orderByFirstName().ascending() 40 | http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsNumberOfChildren().greaterThan(:integer:-1);orderByFirstName().ascending() 41 | http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsNumberOfChildren().lessThan(0);orderByFirstName().ascending() 42 | http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsNumberOfChildren().lessThan(3);orderByFirstName().ascending() 43 | http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsFullName().like(%22.*Test.*%22);orderByFirstName().ascending() 44 | http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsFirstName().equalTo(%22Guest%22);orderByLastName().ascending() 45 | http://localhost:8080/opencrx-rest-CRX/org.opencrx.kernel.account1/provider/CRX/segment/Standard/account?position=0&size=50&queryType=org:opencrx:kernel:account1:Contact&query=thereExistsFirstName().equalTo(%22Guest%22) 46 | ``` 47 | 48 | 49 | ## Unit Of Work handling ## 50 | 51 | By default the REST servlet runs in auto-commit mode, i.e. each invocation runs within its 52 | own unit of work (UOW). However, the REST servlet also allows clients to control the UOW 53 | handling and therefore to group multiple invocations in one unit of work (UOW). In a first 54 | step the REST servlet must be put in non auto-commit mode by starting a virtual connection. 55 | Then a UOW can be controlled with the operations begin, commit and rollback. 56 | 57 | __IMPORTANT__: it is the REST client's responsibility to keep the HTTP session alive across 58 | all invocations (handling of _Set-Cookie_ and _JSESSIONID_). The non auto-commit mode is maintained 59 | per HTTP session. 60 | 61 | ### New connection ### 62 | 63 | __URL__ 64 | A virtual connection must be started to put the REST servlet in non auto-commit mode. It 65 | attaches a persistence manager to the servlet session. This persistence manager is then used 66 | for the UOW handling for the succeeding calls. 67 | 68 | __IMPORTANT__: The value of the parameter UserName must match 69 | the authenticated user's name. The parameter is optional in versions openCRX 2.9.1+. 70 | 71 | ``` 72 | http://localhost:8080/opencrx-rest-CRX/org:openmdx:kernel/connection?UserName=guest 73 | ``` 74 | __Method__ 75 | 76 | ``` 77 | POST 78 | ``` 79 | __Request Body__ 80 | The operation takes a parameter of type _org.openmdx.base.Void_. 81 | 82 | ``` 83 | 84 | 85 | ``` 86 | __Response Body__ 87 | 88 | ``` 89 | ``` 90 | 91 | ### Begin UOW ### 92 | 93 | __URL__ 94 | Start the UOW, i.e. the REST servlet retrieves the persistence manager of the current session 95 | and invokes _pm.currentTransaction().begin()_. The client must keep the transaction-id. 96 | It is required for the commit and rollback operations. 97 | 98 | ``` 99 | http://localhost:8080/opencrx-rest-CRX/org:openmdx:kernel/transaction 100 | ``` 101 | __Method__ 102 | 103 | ``` 104 | POST 105 | ``` 106 | __Request Body__ 107 | The operation takes a parameter of type _org.openmdx.kernel.UnitOfWork_. 108 | 109 | ``` 110 | 111 | 112 | ``` 113 | __Response Body__ 114 | 115 | ``` 116 | 117 | 118 | ``` 119 | 120 | ### Commit UOW ### 121 | __URL__ 122 | Commit the UOW, i.e. the REST servlet retrieves the pm of the current session 123 | and invokes _pm.currentTransaction().commit()_. 124 | 125 | ``` 126 | http://localhost:8080/opencrx-rest-CRX/org:openmdx:kernel/transaction//commit 127 | ``` 128 | __Method__ 129 | 130 | ``` 131 | POST 132 | ``` 133 | __Request Body__ 134 | The operation takes a parameter of type _org.openmdx.base.Void_. 135 | 136 | ``` 137 | 138 | 139 | ``` 140 | __Response Body__ 141 | 142 | ``` 143 | 144 | 145 | ``` 146 | 147 | ### Rollback UOW ### 148 | __URL__ 149 | Rollback the UOW, i.e. the REST servlet retrieves the persistence manager of the current session 150 | and invokes _pm.currentTransaction().rollback()_. 151 | 152 | ``` 153 | http://localhost:8080/opencrx-rest-CRX/org.openmdx.kernel/transaction/ 154 | ``` 155 | __Method__ 156 | 157 | ``` 158 | DELETE 159 | ``` 160 | 161 | ## Debugging 162 | 163 | Putting a proxy between a native openCRX client and server allows you to inspect the REST interactions. The helps in cases where complex REST 164 | request bodies need to be created such as for nested queries. Good proxy servers for debugging purposes are 165 | [Grinder TCPProxy](http://grinder.sourceforge.net/index.html) or [socat on Linux](https://linux.die.net/man/1/socat). 166 | 167 | [How to write a remote openCRX Java client](RemoteJavaClient.md) describes how to create a native, remote Java client. Further examples can also be found 168 | [here](https://github.com/opencrx/opencrx/tree/master/core/src/test/java/org/opencrx/kernel/api). 169 | 170 | Once the remote Java client is working you are ready to work with a proxy. It is expected that the openCRX server is running at 171 | `http://127.0.0.1:8080/opencrx-rest-CRX`. 172 | 173 | Start Grinder as follows: 174 | 175 | ``` 176 | java -cp lib/grinder.jar net.grinder.TCPProxy -console -responsefilter NONE -localhost 127.0.0.1 -localport 7180 -remotehost http://127.0.0.1 -remoteport 8080 177 | ``` 178 | 179 | Start the openCRX client with the following configuration: 180 | 181 | ``` 182 | entityManagerFactory = org.opencrx.kernel.utils.Utils.getPersistenceManagerFactoryProxy( 183 | "http://127.0.0.1:7180/opencrx-rest-CRX/", // local proxy, e.g. Grinder 184 | USER_NAME, 185 | USER_PASSWORD, 186 | "application/json" // or "text/xml" 187 | ); 188 | ``` 189 | 190 | Watch the output of Grinder. The request bodies can be used as templates for native REST clients. 191 | -------------------------------------------------------------------------------- /Sdk/WFE.md: -------------------------------------------------------------------------------- 1 | # Workflow Engine integration Guide # 2 | 3 | This section shows how openCRX can be integrated with a 3rd-party workflow engine (WFE) 4 | on an architectural level. openCRX provides the following functions to automate 5 | tasks: 6 | 7 | * __Programmed tasks__: openCRX can be extended by programmed tasks. Programmed 8 | tasks are Java classes implementing the synchronous or asynchronous workflow interface 9 | which are registered as workflow tasks. Tasks can be used in activity processes. 10 | * __Activity Processes__: Activity processes can be defined with state diagrams. 11 | One or more actions (predefined or programmed tasks) are performed during transitions. 12 | * __Scheduled Workflows__: Scheduled Workflows are (Java) programs which run in the 13 | background and perform (periodically) user-definable actions. Scheduled workflows 14 | can either be registered with openCRX or run as stand-alone task. 15 | * __Extension of Business Logic__: The standard business logic of openCRX can 16 | be customized by extending the openCRX backend classes. 17 | 18 | openCRX does not include a WFE because there are many existing WFEs optimized for 19 | this task and workflows typically span multiple services and applications so openCRX 20 | would only be a sub-system in the bigger system. Instead openCRX allows the easy 21 | integration with existing WFEs either using the openCRX API or the REST interface. 22 | 23 | Three different types of integration are discussed: 24 | 25 | * The WFE invokes openCRX services exposed by the openCRX API. 26 | * openCRX has a sophisticated activity management. The set of allowed 27 | states of an activity and the possible transitions are controlled by user-definable 28 | state machines. Whenever a state transition is performed a 29 | user-definable set of actions can be performed. Such can action can trigger a WFE. 30 | * The GUI of openCRX can be launched by client applications (e.g. the WFE 31 | GUI) and the user can be navigated to open work items. 32 | These three integration scenarios are discussed in the next sections taking as 33 | sample a simplified sales order process as shown below. 34 | 35 | ![img](files/WFE/pic010.png) 36 | 37 | The process is executed by the WFE: 38 | 39 | 1. In a first step, a customer sends a request. 40 | 1. In case of a quote request, a quote is created and sent to the customer for confirmation. 41 | 1. After successful confirmation the quote is forwarded as a sales order. 42 | 1. Processing of the order (e.g. invoicing, payment, etc.). 43 | 1. After successful payment and shipment the order is completed. 44 | 1. The request is closed. 45 | 1. The quote can optionally be canceled. 46 | 47 | We assume that several systems are involved during the execution of the workflow. In this example 48 | we assume that the following steps are handled within openCRX: 49 | 50 | * Step 2: Quote request 51 | * Step 4: Sales order request 52 | * Step 5: Complete sales order 53 | * Step 7: Cancel request 54 | 55 | ## Quote Request ## 56 | When the WFE arrives at the Quote request process it performs the following actions: 57 | 58 | 1. __Via openCRX API__: Create a new quote by invoking the operation createQuote(). 59 | 1. __Via openCRX API__: Fill the created quote with all available information (e.g. customer, 60 | currency, order date, products, prices). 61 | 1. __Via openCRX API__: In order that the ordering process can be tracked within openCRX it 62 | is strongly recommended to create a corresponding 63 | activity. E.g. create the activity Order #123. Attach the WFE work item 64 | number to this activity and link the activity with created quote. Assign 65 | the activity to a sales order manager. 66 | 1. __Manual__: The sales agent now sees the open activity Order #123 in its 67 | open activity list within openCRX. The sales manager selects the 68 | attached quote and completes it (pricing, etc.). 69 | 1. __Manual__: After completing the quote the sales manager performs the 70 | transition Complete quote on the Order #123. 71 | 1. __openCRX__: The transition Complete quote triggers WFE. Any information 72 | which is required by a concrete WFE implementation can be passed to 73 | the WFE system. 74 | 1. The WFE executes the process Send quote. This process is not performed 75 | by openCRX. 76 | 77 | ![img](files/WFE/pic020.png) 78 | 79 | ## Sales Order Request ## 80 | The customer receives the quote and either cancels it or confirms the sales 81 | order. After confirmation the following steps are performed: 82 | 83 | 1. __Via openCRX API__: Look the quote created in the previous step. Activity 84 | number and quote number are known within WFE (they were delivered 85 | by the openCRX callback described in the previous section). Now create a 86 | sales order based on the quote with createSalesOrder(). 87 | 1. __Via openCRX API__: Do a transition Create sales order on the activity 88 | Order #123. Link the activity with the newly created sales order. 89 | 1. __Manual__: The sales agent (which is still assigned to the activity) gets a 90 | follow up alert. He/she opens the sales order and verifies it. After 91 | verification perform the transition Complete sales order on activity Order #123. 92 | 1. __openCRX__: The transition Complete sales order triggers WFE so that it 93 | can proceed to the next step. 94 | 1. WFE executes the next step shipping and payment. This step can retrieve 95 | all required sales order information from openCRX to prepare the 96 | shipment and invoicing. After the payment is received the WFE proceeds 97 | to the next step. 98 | 99 | ![img](files/WFE/pic030.png) 100 | 101 | ## Complete Sales Order ## 102 | The complete sales order process completes all open order and 103 | activity items. The following actions are performed on openCRX: 104 | 105 | 1. __Via openCRX API__: Perform the transition Complete sales order on 106 | activity Order #123. This sets the status of the action to complete and 107 | unassigns the sales agent. 108 | 1. __Via openCRX API__: Optionally apply delivered material bookings. 109 | 1. __Via openCRX API__: Optionally createInvoice() and attach invoice information. 110 | 111 | ![img](files/WFE/pic040.png) 112 | 113 | ## Cancel Request ## 114 | The quote request can be canceled as shown in the figure below. The following actions 115 | are performed on openCRX: 116 | 117 | 1. __Via openCRX API__: Perform transition Cancel order on activity Order 118 | #123. Optionally attach additional cancellation information. 119 | 120 | ![img](files/WFE/pic050.png) 121 | 122 | ## GUI Integration ## 123 | Most WFEs come with a standard GUI which allows users to 124 | 125 | * get a list of all activity work items and perform actions on them 126 | * monitor active workflows, etc. 127 | 128 | However, typically the user works with a custom-tailored GUI. The GUI has 129 | access to all systems, e.g. WFE and openCRX. 130 | 131 | ![img](files/WFE/pic060.png) 132 | 133 | * In the Item List pane the user sees all active work items assigned to him. 134 | Open work items are typically collected from all systems which are involved 135 | in the workflow. E.g. the GUI retrieves all active work items from the WFE, 136 | all open activities from openCRX, etc. In the example described above the 137 | user should see the entry Order #123 and its current state. 138 | * When the user clicks on a work item the GUI of the corresponding app is 139 | launched. In our case this is the standard openCRX GUI or an enhanced, 140 | customer-specific openCRX GUI. Launching of the openCRX GUI is simple. It 141 | is sufficient to open a browser and navigate to the corresponding openCRX 142 | object. If the integration is based on the openCRX activity management this 143 | is typically an activity (in our example Order #123, which holds references 144 | to the quote, sales order and invoice). Creating a proper openCRX URL can 145 | be done with the class _org.openmdx.application.gui.generic.servlet.Action_. 146 | -------------------------------------------------------------------------------- /Sdk/files/CustomProject/pic140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/CustomProject/pic140.png -------------------------------------------------------------------------------- /Sdk/files/CustomProject/pic150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/CustomProject/pic150.png -------------------------------------------------------------------------------- /Sdk/files/CustomProject/pic160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/CustomProject/pic160.png -------------------------------------------------------------------------------- /Sdk/files/RemoteAndroidClient/openCRX+Custom+-+Android+Sample.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/RemoteAndroidClient/openCRX+Custom+-+Android+Sample.apk -------------------------------------------------------------------------------- /Sdk/files/RemoteAndroidClient/opencrx-sample-android.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/RemoteAndroidClient/opencrx-sample-android.zip -------------------------------------------------------------------------------- /Sdk/files/Rest/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/Rest/pic010.png -------------------------------------------------------------------------------- /Sdk/files/Rest/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/Rest/pic020.png -------------------------------------------------------------------------------- /Sdk/files/WFE/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/WFE/pic010.png -------------------------------------------------------------------------------- /Sdk/files/WFE/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/WFE/pic020.png -------------------------------------------------------------------------------- /Sdk/files/WFE/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/WFE/pic030.png -------------------------------------------------------------------------------- /Sdk/files/WFE/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/WFE/pic040.png -------------------------------------------------------------------------------- /Sdk/files/WFE/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/WFE/pic050.png -------------------------------------------------------------------------------- /Sdk/files/WFE/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Sdk/files/WFE/pic060.png -------------------------------------------------------------------------------- /Users/Activities.md: -------------------------------------------------------------------------------- 1 | # Activity Management # 2 | 3 | This guide gives an introduction to the activity management of openCRX. 4 | 5 | ## Introduction ## 6 | The activity management of openCRX supports a wide range of use cases. Starting from a simple issue and bug tracking system it can also be used to track sales activities or help desk tickets. The activity management can be used interactively through its GUI or by programs and workflow engines through its open API. openCRX supports the following types of activities: 7 | 8 | * Incident 9 | * Meeting 10 | * Sales Visit 11 | * Task 12 | * Phone Call 13 | * E-Mail 14 | * SMS 15 | * MMS 16 | * Fax 17 | * Mailing 18 | * Absence 19 | 20 | An activity can be assigned to one or more activity groups. This allows to group and structure activities by user-definable criteria such as projects, milestones, teams, etc. The most important attributes of an activity are: 21 | 22 | * __Name:__ a short description of the activity. 23 | * __Description:__ A more detailed description of the activity. 24 | * __Assigned to:__ contact who is responsible for handling the activity. 25 | * __Reporting contact:__ contact who initially reported / created the activity. 26 | * __Scheduled start, scheduled end, due by date:__ these dates allow to schedule an activity. 27 | 28 | The life cycle of activities is controlled by activity processes. Activity processes define in which states an activity can be and which transitions can be applied to an activity in its current state. Activity processes are user-definable and are typically setup by an administrator or project manager. 29 | 30 | The life cycle of an activity is as follows: 31 | 32 | * __Create:__ an activity is created by a user using a pre-configured activity-creator. The newly created activity is set to the initial state defined by the activity process. 33 | * __Manage:__ an activity is processed according to the states and transitions defined by the activity process. 34 | * __Close:__ the last transition closes the activity, i.e. percent complete of the activity is set to 100% and the activity status is set to closed. 35 | 36 | The next sections describe how to ... 37 | 38 | * ... find existing activities 39 | * ... create a new activity 40 | * ... manage activities (including closing of activities) 41 | 42 | ## How to find an existing activity ## 43 | The easiest way to find an activity is by selecting an activity group (such as an activity tracker, category or milestone) and sort the activities assigned to this group by a criteria such as Creation date, Scheduled start / end, Due by date, Open / close status, etc. Searching for activities requires to perform the following steps: 44 | 45 | * __Step 1:__ Navigate to the activity management 46 | * __Step 2:__ Search for activities using pre-defined and ad-hoc filters 47 | * __Step 3:__ Define default filters (this step is optional) 48 | 49 | ### Step 1: Navigate to the activity management ### 50 | The figure below shows how the activity management is selected. 51 | 52 | ![img](files/Activities/pic010.png) 53 | 54 | The main screen of the activity management shows the activity creators, activity trackers and resources. 55 | 56 | ![img](files/Activities/pic020.png) 57 | 58 | Before you can search for activities you must select either an activity group (one of the tabs Activity Trackers, Categories, Milestones) or select the tab Activities which shows all activities. In the following example we want to search for activities assigned to the activity tracker openCRX:QuickStart. The figure below shows how to select the tracker openCRX:QuickStart. 59 | 60 | ![img](files/Activities/pic030.png) 61 | 62 | The next figure shows the detail screen of the activity tracker openCRX:QuickStart. It shows all activities assigned to this activity tracker. 63 | 64 | ![img](files/Activities/pic040.png) 65 | 66 | ### Step 2: Searching for activities ### 67 | The activities assigned to the selected tracker are shown in the grid Activities. The activities can be sorted by clicking on the sort icon (,,) of the corresponding column. If you want to search for activities by a specific keyword (e.g. publish) you enter the keyword in the search field and then click on the title of the column Name as shown in the figure below. 68 | 69 | ![img](files/Activities/pic050.png) 70 | 71 | If you know the activity number you can enter the activity number in the search field and click on the title of the column # as shown below. 72 | 73 | ![img](files/Activities/pic060.png) 74 | 75 | openCRX offers standard filters which allow to select and sort activities with a single click. The next figure shows the predefined filters. 76 | 77 | * __Select Created at \[chronological order\]__. Activities are sorted by their creation date. 78 | * __Select Created at \[reverse chronological order\]__. Activities are sorted by their creation date in reverse chronological order. 79 | * __Select Modified at \[chronological order\]__. Activities are sorted by their modification date. 80 | * __Select Modified at \[reverse chronological order\]__. Activities are sorted by their modification date in reverse chronological order. 81 | * __Select Open \[Due / Priority\]__. Only open activities (percent complete < 100%) are selected. They are then sorted by their due by date and priority. 82 | * __Select Open \[Modified At / chronological order\]__. Only open activities (percent complete < 100%) are selected. They are then sorted by their modification date in chronological order. 83 | * __Select Open \[Modified At / reverse chronological order\]__. Only open activities (percent complete < 100%) are selected. They are then sorted by their modification date in reverse chronological order. 84 | * __Select Open \[Priority / Due\]__. Only open activities (percent complete < 100%) are selected. They are then sorted by their priority and due by date. 85 | * __Select Open \[Scheduled Start / Due\]__. Only open activities (percent complete < 100%) are selected. They are then sorted by their scheduled start and due by date. 86 | 87 | A default filter is selected as shown below. 88 | 89 | ![img](files/Activities/pic070.png) 90 | 91 | ### Step 3: Define a default filter ### 92 | openCRX allows to set default filters for every tab. Every time you re-enter a detail screen, the sort and filter criteria defined by the default filter are restored. The following example shows how to define a default filter which selects all open activities and sorts them by their scheduled start in reverse chronological order. 93 | 94 | The simplest way is to select in a first step the predefined filter __Select Open \[Scheduled Start / Due\]__ as shown below. This filter shows all open activities sorted by their scheduled start in chronological order. The activities can now be ordered by their scheduled start in reverse chronological order by clicking two times on the order icon of the column __Sched. Start__ as shown below. 95 | 96 | ![img](files/Activities/pic080.png) 97 | 98 | The filter settings can now be saved by clicking on the __Set as Default filter__ icon as shown below. 99 | 100 | ![img](files/Activities/pic090.png) 101 | 102 | If the default filter should be restored the next time you log in to openCRX you must make sure to save the user settings as shown below. 103 | 104 | ![img](files/Activities/pic100.png) 105 | 106 | ## How to create a new activity ## 107 | This section describes how you can report and create new activities. Creating an activity requires the following steps: 108 | 109 | * __Step 1:__ Navigate to the activity management 110 | * __Step 2:__ Select a predefined activity creator 111 | * __Step 3:__ Select the menu item New activity and fill out the new activity form 112 | 113 | ### Step 1: Navigate to the activity management ### 114 | In a first step navigate to the activity management by selecting the item Activities in the root menu. 115 | 116 | ![img](files/Activities/pic110.png) 117 | 118 | ### Step 2: Select an activity creator ### 119 | Unlike other items in openCRX, activities are not created with the New-operation New-->Activity. They are created by activity creators. Activity creators serve as templates and allow easy creation of new activities. Activity creators are typically created by an administrator or project manager. They allow easy creation of new activities. The figure below shows the tab Activity Creators. Activity creators should have names and descriptions which allow the user to easily select the desired creator. In the example, the creator openCRX:QuickStart creates openCRX:QuickStart-guide activities. 120 | 121 | ![img](files/Activities/pic120.png) 122 | 123 | In order to create an activity, select and open the creator as shown below. 124 | 125 | ![img](files/Activities/pic130.png) 126 | 127 | The figure below shows the details of the activity creator. As already mentioned, an activity creator serves as template for newly created activities. A user creating new activities should NOT modify activity creators. Creators are typically managed by administrators or project managers. 128 | 129 | ![img](files/Activities/pic140.png) 130 | 131 | ### Step 3: Create the activity ### 132 | After having selected the activity creator, a new activity is created by selecting Actions-->New Activity as shown below. 133 | 134 | ![img](files/Activities/pic150.png) 135 | 136 | Next you have to fill out the New Activity input form. As shown in the next figure the input form requests the following fields: 137 | 138 | * __Name:__ Name of the newly created activity. The name is not required but it is a good practice to provide an activity name. 139 | * __Description:__ Description of the newly created activity. The field is optional. 140 | * __Detailed description:__ Detailed description of the newly created activity. The field is optional. 141 | * __Scheduled start:__ The scheduled start of the activity. If left empty the scheduled start is set to the current date by default. 142 | * __Scheduled end:__ The scheduled end of the activity. This field is optional. It is set to empty if not specified. 143 | * __Priority:__ Priority of the activity. 144 | * __Due by:__ The due by date of the activity. The field is optional. It is set to a date vary far in the future if not specified (openCRX takes care of this automatically to ensure that sorting based on due dates yields the expected results). 145 | * __Reporting contact:__ Select a contact who should appear as reporter of the new activity. If left empty the reporting contact is set to the logged on user. 146 | 147 | ![img](files/Activities/pic160.png) 148 | 149 | After clicking OK the activity is created and a link to the created activity is displayed as shown below. 150 | 151 | ![img](files/Activities/pic170.png) 152 | 153 | A click on the link displays the activity details as shown below. The fields of the activity are initialized as specified by the activity creator and by the values provided in the New Activity input form. The fields Name, Description, Detailed description, Scheduled start / end, Due by, Reporting contact and Priority contain the values provided in the New Activity input form. The field Activity type and the tabs Assigned Groups and Assigned Resources contain the values defined by the activity creator. Activity state is set to the initial state defined by the activity process. 154 | 155 | ![img](files/Activities/pic180.png) 156 | 157 | ## How to manage activities ## 158 | The most common tasks when managing activities are: 159 | 160 | * Edit activity details 161 | * Perform a follow up / Add a note 162 | * Complete an activity 163 | 164 | ### Edit activity details ### 165 | An existing activity can be modified by putting it into edit mode. Select Edit-->Edit as shown below. 166 | 167 | ![img](files/Activities/pic190.png) 168 | 169 | The edit mode allows to modify all non read-only properties of an activity as shown below. 170 | 171 | ![img](files/Activities/pic200.png) 172 | 173 | The changes are made persistent by clicking the Save button. Clicking Cancel ignores the modifications. 174 | 175 | Properties such as Assigned to, % complete, Actual start, Actual end are set automatically by openCRX. Users are allowed to modify the values, however it is not recommended and normally not necessary. 176 | 177 | ### Perform a follow up ### 178 | An activity is always in a process state. An newly created activity is in the state New. Performing transitions on an activity allows to bring an activity into a new state. This can be done with the operation Actions-->Follow Up. The figure below shows the input form of the Follow Up operation. The drop-down field Transition shows all available transitions. The list of of available transitions is derived from the current state of the activity and the activity process (defined implicitly by the activity type). 179 | 180 | ![img](files/Activities/pic210.png) 181 | 182 | It is a good idea to describe the transition by supplying a title and a descriptive text. After clicking OK, the selected transition (Assign) is applied. The activity is set to the new state (In Progress) and the follow up information is added to the Follow Up grid of the activity as shown below. 183 | 184 | ![img](files/Activities/pic220.png) 185 | 186 | Because the activity is now in state In Progress, a next follow up shows the transitions Add Note and Complete in the drop-downs as shown below. 187 | 188 | ![img](files/Activities/pic230.png) 189 | 190 | The next tables show the states and the transitions of the Bug and feature tracking process available with the standard distribution of openCRX. 191 | 192 | | State | Description | 193 | |---------------------|-----------------------------------------------------------------| 194 | | New | The activity is newly created. | 195 | | In Progress | The activity is complete and can be reopened again if required. | 196 | | Complete | The activity is complete and can be reopened again if required. | 197 | | Closed | The activity is closed and can not be reopened anymore. | 198 | 199 | | Transition | Description | 200 | |---------------------|-----------------------------------------------------------------| 201 | | Create | The activity is created. After creation the activity is in | 202 | | | state New. | 203 | | Create | The activity is created. After creation the activity is in state| 204 | | | New. | 205 | | Assign | The activity is assigned to a person, the assigned-to contact | 206 | | | field of the activity is set to a contact. After assignment the | 207 | | | activity is in state In Progress. | 208 | | Add Note | The progress of an activity can be documented by adding notes to| 209 | | | the activity. This way the reporting contact (and other persons)| 210 | | | are always informed about the progress of an activity. | 211 | | Complete | The assigned-to contact can set the activity state to complete | 212 | | | if he/she has finished the work on this activity and wants to | 213 | | | inform the reporting contact about this fact. After completing | 214 | | | the activity is in the state Complete. | 215 | | Reopen | The reporting contact can reopen a complete activity, i.e. it | 216 | | | can set the activity to the state In Progress. Reopening an | 217 | | | activity is a signal to the assigned-to contact that there is | 218 | | | probably more work to do on the activity before completion. | 219 | | Close | If the reporting contact considers the activity as finished | 220 | | | he/she can mark the activity as closed. | 221 | 222 | The figure below shows the process as defined in openCRX. 223 | 224 | ![img](files/Activities/pic240.png) 225 | -------------------------------------------------------------------------------- /Users/README.md: -------------------------------------------------------------------------------- 1 | # openCRX Users's Guides # 2 | 3 | 1. [Managing User Settings](UserSettings.md) 4 | 1. [How to use the Subscribe / Notify Services](SubscribeNotify.md) 5 | 1. [How to use the Data Import / Export Functions](DataImportExport.md) 6 | 1. [Activity Management](Activities.md) 7 | 1. [Reporting](Reporting.md) 8 | -------------------------------------------------------------------------------- /Users/Reporting.md: -------------------------------------------------------------------------------- 1 | # Reporting # 2 | 3 | openCRX provides various technologies that enable you to create reports of a wide variety, anything from simple ad-hoc reports to large scale bulk reports. 4 | 5 | ## MS Word, LibreOffice Writer, OpenOffice Writer, etc. ## 6 | openCRX supports the JSP-wizard-based generation of RTF documents. You can generate RTF documents from scratch or merge data with existing RTF templates. The RTF documents are generated on the fly and can be opened with any RTF-compatible word processor including OpenOffice Writer and MS Word. 7 | 8 | You can test this feature on our demo server (or on your own installation if you installed the openCRX Server) with the following steps: 9 | 10 | * connect and login as user guest 11 | * navigate to any contact and execute the operation _Tools > Mail Merge --> RTF Document_ 12 | * the wizard will provide a list of suitable templates and then generate the RTF document on the fly: 13 | 14 | ![img](files/Reporting/pic010.png) 15 | 16 | If you installed the openCRX SDK you will find the templates and the JSP wizard in the following locations: 17 | 18 | * _SDK_Install_Dir/opencrx4/core/src/data/org.opencrx/documents_ 19 | * _SDK_Install_Dir/opencrx4/core/src/data/org.opencrx/wizards/en_US/MailMerge.jsp 20 | 21 | With this approach it is quite easy to generate all kinds of documents, including letters, invoices, purchase orders, etc. 22 | 23 | ## Large Scale Reporting ## 24 | If your task is to produce a large number of reports (e.g. monthly reporting for all your clients) or reports based on large amounts of data, spreadsheet-based reporting is probably not the way to go. Maybe you want to generate reports in a format other than XLS. On the one hand, openCRX already includes libraries to generate reports and documents in various formats, on the other hand you can easily add additional libraries to openCRX. 25 | 26 | Format | Library / Additional Information 27 | -------|--------------------------------- 28 | XLS | Apache POI / http://poi.apache.org/ 29 | PDF | iText / http://www.lowagie.com/iText/ 30 | RTF | Simple RTF Writer / org.opencrx.kernel.utils.rtf 31 | 32 | Obviously, there are many more possibilities, like for example exporting data in XML format and then doing some kind of fancy transformation. 33 | 34 | In terms of how to generate your reports, there are also various options available depending on your preferences: 35 | 36 | ### JSP-Based Reporting ### 37 | This approach is typically recommended if you need on-demand reporting and the generation of the report does not put an undue burden on the server. The following screen shot shows an example HTML-report: 38 | 39 | ![img](files/Reporting/pic020.png) 40 | 41 | ### Java Program ### 42 | Large-scale batch reporting can be done with a Java Program (basically an openCRX client programmed in Java that prepares the desired reports). 43 | 44 | ### BI-Reporting Suite ### 45 | If you plan to use a BI-Reporting Suite (e.g. Crystal Reports, Pentaho, BIRT, etc.), you should keep in mind that directly accessing the openCRX database is not a very good idea. We strongly recommend you either retrieve data through the openCRX API (e.g. with REST) or set up a dedicated reporting DB (the process to populate such a reporting DB should retrieve data from the openCRX DB through the openCRX API). The reason for not accessing the openCRX database directly is the following one: while the openCRX API is stable, the OO-to-relational mapping is not and hence the schema of the openCRX DB is subject to change over time. Hence, if you access the openCRX DB directly you will have to adapt your reports if the DB schema changes, a potentially expensive proposition. Furthermore, whenever you access the openCRX DB directly there is no access control. 46 | -------------------------------------------------------------------------------- /Users/SubscribeNotify.md: -------------------------------------------------------------------------------- 1 | # How to use the Subscribe / Notify Services # 2 | 3 | openCRX features a powerful event subscription and notification service: 4 | 5 | ![img](files/SubscribeNotify/pic010.png) 6 | 7 | Once a topic is created, openCRX users can subscribe to it. Users manage their subscriptions individually on their UserHomes (with the Wizard UserSettings or by editing their subscriptions manually). If a topic has subscribed users and a monitored event occurs then the predefined actions are performed. If the action is set to – for example – creating an alert for subscribed users, then each subscribed user will receive an alert on the UserHome. 8 | 9 | __IMPORTANT:__ Please note that event and notification services depend on the Servlet SubscriptionHandler, i.e. you must turn on the openCRX Subscription Handler for the respective segment with the Workflow Controller, otherwise Topic Actions are not executed, i.e. no Alerts will be created and E‑mail Notifications will not be delivered. 10 | 11 | __IMPORTANT:__ Furthermore, outbound E-Mail Services must be configured (see chapter 8.1 Install and Configure Mail Resource and E-Mail Services) and you must activate the Workflow Handler (see chapter 6.5 Servlet WorkflowHandler) to receive E-Mail Notifications. 12 | 13 | The openCRX distribution includes quite a few default topics (see Figure 35: Standard Topics included in the openCRX distribution) to get you started: 14 | 15 | * Topic Account Modifications sends an alert to subscribed users whenever an account is modified. 16 | * Topic Activity Follow Up Modifications sends an alert to subscribed users whenever a Follow Up of an Activity is modified. 17 | * Topic Alert Modifications sends an e-mail notification to subscribed users – assuming outbound e-mail services are configured correctly – whenever an Alert is created/modified. 18 | 19 | __IMPORTANT:__ Please note that newly created Segments do neither contain Workflow Processes nor Topics (i.e. the respective grids are empty). Both Workflow Processes and Topics can be created by the segment administrator with the wizard Segment Setup. 20 | 21 | ![img](files/SubscribeNotify/pic020.png) 22 | 23 | Users can easily custom-tailor their subscriptions with filters and by selecting event types like Object Creation, Object Replacement, and Object Removal. 24 | 25 | ## Example Subscription - Account Modifications ## 26 | In this example we will create a subscription to the standard Topic Account Modifications for the user “guest”. 27 | 28 | * Login as guest, and execute the operation Edit > User Settings to start the respective wizard. Check both “Is Active” and “Creation” as shown below: 29 | 30 | ![img](files/SubscribeNotify/pic030.png) 31 | 32 | * Click the button _Save_ to store your settings. 33 | 34 | __IMPORTANT:__Please note that the Root administrator must start the Subscription Handler – otherwise you will not get any Alerts/Notifications. 35 | 36 | ## Example Subscription – Activity Assignment Changes ## 37 | With the following steps you can create a subscription to activity assignment changes: 38 | 39 | * navigate to your Userhome and create a new Subscription 40 | * populate the fields as follows: 41 | * Name: Activities assigned to me 42 | * Description: (any description you like) 43 | * Active: checked 44 | * Event type: (leave empty) 45 | * Topic: select Activity Modifications 46 | * Name of filter #0: assignedTo 47 | * Value of filter #0: copy the Identity of the respective user's homepage 48 | * save your subscription 49 | 50 | ## Example Subscription with Filtering ## 51 | In combination with openCRX security the subscription filter feature enables you to provide highly specific subscriptions. Imagine the following situation: there are 2 Activity Trackers DivisionA:ProjectX and DivisionA:ProjectY and some of your users are interested in receiving notifications related to activities of ProjectX only, whereas some users want to receive notifications related to activities of ProjectY only. A third group of users wants to receive notifications from both projects. Such a situation could be handled as follows: 52 | 53 | * create a PrincipalGroups DivisionA.ProjectX and DivisionA.ProjectY 54 | * assign PrincipalGroup DivisionA.ProjectX to ActivityTracker DivisionA:ProjectX; like this new activities assigned to this Tracker will also be assigned the PrincipalGroup DivisionA.ProjectX 55 | * assign PrincipalGroup DivisionA.ProjectY to ActivityTracker DivisionA:ProjectY; like this new activities assigned to this Tracker will also be assigned the PrincipalGroup DivisionA.ProjectY 56 | * an Activity Modification subscription of a user wanting notifications related to ProjectX and ProjectY would look as follows: 57 | 58 | ![img](files/SubscribeNotify/pic040.png) 59 | 60 | Enter the name of the attribute (owner in our example) into the name field and then enter the value(s) to match into the value field (in our case Standard:DivisionA.ProjectX and Standard:DivisionA.ProjectY) 61 | 62 | __IMPORTANT:__Multiple values of a named filter are combined with OR. Multiple named filters are combined with AND. 63 | 64 | ## Trouble Shooting Notification Services ## 65 | The following table lists some of the common issues and how to fix them: 66 | 67 | ### The grids Workflow Processes and/or Topics are empty ### 68 | 69 | * verify that the Segment Administrator created Workflow Processes and Topics with the wizard Segment Setup 70 | * click the filter button to see all rows without filtering (maybe you defined a default filter in the past?) 71 | 72 | ### I started the Subscription Handler but I never receive any Alerts / Notifications ### 73 | 74 | * verify that you started the correct Subscription Handler (each segment has its own Subscription Handler) 75 | * in case you upgraded to a new version of openCRX and forgot to delete Workflows and Topics provided by openCRX, stop the Subscription Handler, delete Workflow Processes and Topics, recreate Workflow Processes and Topics with the wizard Segment Setup, and then start the Subscription Handler again 76 | * check the openCRX log files to find out whether bad/corrupt data might be causing problems (e.g. NullPointer Exception during Workflow execution) 77 | 78 | ### I receive Alerts triggered by my Subscriptions but no Notification E‑mails ### 79 | 80 | * verify that JavaMail is properly installed and the mail service properly configured 81 | * verify your e-mail settings (see E-mail Services) 82 | * verify that the Servlet WorkflowHandler of the respective segment is actually turned on 83 | -------------------------------------------------------------------------------- /Users/UserSettings.md: -------------------------------------------------------------------------------- 1 | # Managing User Settings # 2 | 3 | This guide explains the _UserSettings_ wizard. The wizard is launched on the user's home page in menu _Edit > User Settings_. 4 | 5 | ## Enabling/Disabling Root Menu Entries ## 6 | Individual user can enable/disable root menu entries with the wizard User Settings (available on a user's Homage): 7 | 8 | ![img](files/UserSettings/pic010.png) 9 | 10 | Once the wizard has loaded, uncheck entries you don't need (note that the settings can be different for different perspectives): 11 | 12 | ![img](files/UserSettings/pic020.png) 13 | 14 | __NOTE:__ Please note that entries corresponding to packages disabled by the openCRX administrator cannot be enabled with this wizard. Packages disabled in web.xml are not available at all! 15 | 16 | __NOTE:__ Depending on the width of your screen you can adjust the number of items shown as tabs in the top-level navigation in the same wizard by changing the value of Show max items in top navigation (fewer items for narrow screens, more items for wider screens). 17 | 18 | __NOTE:__ If you uncheck Show top navigation sub-levels the top-level tabs will not contain menus for sub-levels. 19 | 20 | -------------------------------------------------------------------------------- /Users/files/Activities/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic010.png -------------------------------------------------------------------------------- /Users/files/Activities/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic020.png -------------------------------------------------------------------------------- /Users/files/Activities/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic030.png -------------------------------------------------------------------------------- /Users/files/Activities/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic040.png -------------------------------------------------------------------------------- /Users/files/Activities/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic050.png -------------------------------------------------------------------------------- /Users/files/Activities/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic060.png -------------------------------------------------------------------------------- /Users/files/Activities/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic070.png -------------------------------------------------------------------------------- /Users/files/Activities/pic080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic080.png -------------------------------------------------------------------------------- /Users/files/Activities/pic090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic090.png -------------------------------------------------------------------------------- /Users/files/Activities/pic100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic100.png -------------------------------------------------------------------------------- /Users/files/Activities/pic110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic110.png -------------------------------------------------------------------------------- /Users/files/Activities/pic120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic120.png -------------------------------------------------------------------------------- /Users/files/Activities/pic130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic130.png -------------------------------------------------------------------------------- /Users/files/Activities/pic140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic140.png -------------------------------------------------------------------------------- /Users/files/Activities/pic150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic150.png -------------------------------------------------------------------------------- /Users/files/Activities/pic160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic160.png -------------------------------------------------------------------------------- /Users/files/Activities/pic170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic170.png -------------------------------------------------------------------------------- /Users/files/Activities/pic180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic180.png -------------------------------------------------------------------------------- /Users/files/Activities/pic190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic190.png -------------------------------------------------------------------------------- /Users/files/Activities/pic200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic200.png -------------------------------------------------------------------------------- /Users/files/Activities/pic210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic210.png -------------------------------------------------------------------------------- /Users/files/Activities/pic220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic220.png -------------------------------------------------------------------------------- /Users/files/Activities/pic230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic230.png -------------------------------------------------------------------------------- /Users/files/Activities/pic240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Activities/pic240.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic010.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic020.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic030.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic040.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic050.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic060.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic070.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic080.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic090.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic100.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic110.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic120.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic130.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic140.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic150.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic160.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic170.png -------------------------------------------------------------------------------- /Users/files/DataImportExport/pic180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/DataImportExport/pic180.png -------------------------------------------------------------------------------- /Users/files/Reporting/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Reporting/pic010.png -------------------------------------------------------------------------------- /Users/files/Reporting/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/Reporting/pic020.png -------------------------------------------------------------------------------- /Users/files/SubscribeNotify/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/SubscribeNotify/pic010.png -------------------------------------------------------------------------------- /Users/files/SubscribeNotify/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/SubscribeNotify/pic020.png -------------------------------------------------------------------------------- /Users/files/SubscribeNotify/pic030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/SubscribeNotify/pic030.png -------------------------------------------------------------------------------- /Users/files/SubscribeNotify/pic040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/SubscribeNotify/pic040.png -------------------------------------------------------------------------------- /Users/files/UserSettings/pic010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/UserSettings/pic010.png -------------------------------------------------------------------------------- /Users/files/UserSettings/pic020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opencrx/opencrx-documentation/c289b0996027fcab2691a86dbecfb42b6ec77e05/Users/files/UserSettings/pic020.png --------------------------------------------------------------------------------