Release Name: openCRX/Core 2.13.0 Release Date: 2014-07-23 --------------------------------------------------------------------- Notes: This software is published under the BSD license as listed below. Copyright (c) 2004-2014, CRIXP Corp., Switzerland All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of CRIXP Corp. nor the names of the contributors to openCRX may be used to endorse or promote products derived from this software without specific prior written permission THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------ This product includes software developed by the Apache Software Foundation (http://www.apache.org/). This product includes software developed by contributors to openMDX (http://www.openmdx.org/) --------------------------------------------------------------------- 0. SUMMARY * Many new features (see detailed list below) * Many bug fixes For more information see below and http://www.opencrx.org/opencrx/2.13/new.htm ============================================================================== Version 2.13.0 2014-07-23 ============================================================================== 1. NEW FEATURES CR10012252 Portal: User-defined ordering of grid columns. Based on an existing UI customization, the user is be able to re-order grid columns (columns defined up to maxMember). The grid menu 'View' offers the column order operators. The ordering is stored in the user settings per grid. CR10012239 Load tester. Add sample load tester to test-core. Simple, Selenium-based (http://docs.seleniumhq.org/) load tester which performs the following actions: * Logon * Get root objects 1-5 * Three times page next on first grid. On the accounts grid filter accounts with e-mail address '.com'. On the products grid filter products with name like 'test. * Logoff The load tester can be configured to launch T threads and perform R runs. CR10012238 Portal: Search field definitions. Allow to customize the behaviour of search fields, e.g. show pre-defined drop down values for code fields. The method PortalExtension_1_0.getSearchFieldDef() returns a SearchFieldDef for a given search field. In defined, an auto-completer is rendered for this field. When triggered, the action FindSearchFieldValuesAction is invoked which finally calls the method SearchFieldDef.findFieldValues(). By default, code fields are handled by CodeSearchFieldDef and Account-type fields are handled by AccountSearchFieldDef. CR10012210 MailWorkflow supports sendmail. MailWorkflow supports external sendmail command in addition to JavaMail. sendmail has several advantages over JavaMail in high-end environments. sendmail is used by the MailWorkflow if the system property -Dorg.opencrx.usesendmail.{provider.name} is set to true, e.g. -Dorg.opencrx.usesendmail.CRX=true In this case JavaMail resources must not be configured anymore in web.xml and the application.server. mail.jar must still be deployed. It is required to construct RFC822-compliant MimeMessages. CR10012169 DocumentExporter: The DocumentExporter workflow allows to export document folders to the file system. A document folder is subject for export if a DocumentFolderShare exists for this folder. The operations DocumentFolder::createDefaultShare() and DocumentFolder::removeDefaultShare() allow to add and remove shares. They can also be managed manually with the standard GUI. The DocumentExporter is configured as follows: In the web.xml of opencrx-core-CRX.war add the init-param for the servlet WorkflowController: path[6] /DocumentExporterServlet Add the servlet DocumentExporter: DocumentExporterServlet org.opencrx.application.document.DocumentExporterServlet DocumentExporterServlet /DocumentExporterServlet/* Activate the DocumentExporter as admin-Root with the WorkflowController wizard. The following component configuration is created by default when the DocumentExporter runs the first time: CRX.Standard.baseDir ./docdir CRX.Standard.syncKey 0 The DocumentExporter supports the following hooks: * pre-export: invoked before the export of a document share begins * post-export: invoked after the export of a document share has been completed * pre-export-subdir: invoked before the export of a document sub-folder * post-export-subdir: invoked after the export of a document sub-folder has been completed hooks are located in {basedir}/hooks and must be executable. Example for pre-export: #!/bin/sh # Enable for remote repos # /usr/bin/git pull Example for post-export: #!/bin/sh /usr/bin/git add --all /usr/bin/git commit -aqm "Sync @ `date`" # Enable for dumb servers, e.g. Apache (WebDAV) # /usr/bin/git update-server-info # Enable for remote repos # /usr/bin/git push CR10012178 Media_1 plug-in. The Media_1 plug-in allows to store the content of objects of type org:opencrx:kernel:document1:Media on the file system. The option is activated with the system property -Dorg.opencrx.mediadir.{provider.name}={mediadir.name}. The DbSchemaWizard supports the following new functions to manage and migrate existing media objects in case the option -Dorg.opencrx.mediadir is turned on: * Validate Media: lists all media objects which do not have a corresponding media file on the file system. These media objects are subject to migration. * Migrate Media to FS: migrate media objects from database to file system, i.e. media objects stored in OOCKE1_MEDIA.content are exported to the file system. The location of the media file corresponds to the media object's XRI. This operation is idempotent, i.e. can be run multiple times (typically in combination with Validate Media). After successful migration the column OOCKE1_MEDIA.content can be cleared with the SQL statement UPDATE OOCKE1_MEDIA set content = null; * Migrate Media to DB: Reads all media files on mediadir and stores the content in the corresponding media object (column OOCKE1_MEDIA.content). CR10012183 Note has user-defined fields. org:opencrx:kernel:generic:Note inherits from org:opencrx:kernel:generic:UserDefined. CR10012050 LocalizedFieldDataBinding. The databinding allows display and manage LocalizedField objects attached as standard fields. The databinding selects the localized field matching the current user's locale and displays the localizedValue. The LocalizedFieldDataBinding allows to localize field values in an easy way. E.g. the field 'Name:' of an ActivityGroup can be localized with the following ui configuration: <_object> org:w3c:string 0..1 true <_content/> ... <_object> org.opencrx.kernel.portal.LocalizedFieldDataBinding[?usage=n] true <_item>Name (localized) <_item>0 <_item>0 <_item>15 <_content/> CR20021077 DataSource Selection. Multiple JDBC datasources can now be configured. This allows a custom-specific persistence plug-in to use multiple datasources according to some custom selection criteria (e.g. segment name). E.g. in Kernel.properties PERSISTENCE/datasourceName[0]=java:comp/env/jdbc_opencrx_CRX_DEFAULT PERSISTENCE/datasourceName[1]=java:comp/env/jdbc_opencrx_CRX_S1 PERSISTENCE/datasourceName[2]=java:comp/env/jdbc_opencrx_CRX_S2 PERSISTENCE/datasourceName[3]=java:comp/env/jdbc_opencrx_CRX_S3 And method getDataSource() of custom-specific persistence plug-in: @Override protected DataSource getDataSource( DataproviderRequest request ) throws ServiceException { String segmentName = request.path().get(4); if("S1".equals(segmentName)) { return this.dataSources.get(1); } else if("S2".equals(segmentName)) { return this.dataSources.get(2); } else if("S3".equals(segmentName)) { return this.dataSources.get(3); } else { return super.getDataSource(request); } } CR10011964 Allow to define a workflow's execute() method as (Janino) script. This way segment-specific business-logic can be added without build / deploy. Here is an example workflow script: //
      public static void execute(
        org.opencrx.kernel.base.jmi1.WorkflowTarget wfTarget,
        org.openmdx.base.jmi1.ContextCapable targetObject,
        org.opencrx.kernel.home1.jmi1.WfProcessInstance wfProcessInstance
      ) throws org.openmdx.base.exception.ServiceException {
        java.util.logging.Logger logger = java.util.logging.Logger.getLogger("PrintConsole");
        logger.log(java.util.logging.Level.INFO, "executing workflow " + wfProcessInstance.getProcess().getName());
        logger.log(java.util.logging.Level.INFO, "target=" + targetObject);
        logger.log(java.util.logging.Level.INFO, "wfProcessInstance=" + wfProcessInstance);
        java.util.Map params = org.opencrx.kernel.utils.WorkflowHelper.getWorkflowParameters(wfProcessInstance);
        logger.log(java.util.logging.Level.INFO, "params=" + params);
      }
      // 
CR10011954 Auto-update of addresses. If authority is set, postal and e-mail addresses are updated automtically in case the matching authority's addresses changes. The operation checkForAutoUpdate() allows to check whether a given address qualifies for auto-update. CR10011837 ActivityRelationship. ActivityRelationship combines current ActivityLinkFrom (distance=-1), ActivityLinkTo (distance=+1). Also allows to handle "deep" memberships. CR10011930 CrxObject::enableCrxObject, disableCrxObject. Add operations CrxObject::enableCrxObject and disableCrxObject and remove corresponding wizard. CR10011897 Portal: Next / Prev. Next / Prev allows to iterate the content of a grid at inspector-level. 2. CHANGES 2.0. CHANGED FEATURES CR10012253 WorkReportEntry:activity, resource. The derived features activity, resource is calculated by the persistence layer. CR10012249 User management. The ManagerUsers wizard is deprecated and replaced by standard GUI extensions: * Add grid for 'All Users', 'Users (enabled)', 'Users (disabled)' * Add columns E-Mail, Principal, Groups, Roles, Disabled, Last login at to grid :userHome. These new fields allows easy navigation from a user's home to its assigned principal where roles and groups can be added and removed. * Add grid action InitUserHomes to grid :userHome. This action allows to inititialize the selected user homes. * Searching in the grid :userHome now covers the fields principal name, contact full name and e-mail account. * Add tab 'Security' to UserHome which shows principal, groups, roles. * Default user settings: The method UserHomes.getDefaultUserSettings() returns the default settings for a given user. The default settings are retrieved from documents with name 'UserSettings.{role.name}.properties'. The content of the document must be text/plain and be in the standard Java properties format. For security reasons it must be created / modified by the segment administrator. The assigned roles of the user are iterated in the order returned by principal.getGrantedRole() and override properties with the same key (defaultSettings.putAll(settings)). The UserSettings wizard and the InitUserHomeAction use this method in order to get an initial set of user settings. CR20021828 Portal: Deprecate grid template and edit rows. Replace grid template and edit rows by custom grid actions. CR20021827 Portal: Deprecate MOBILE mode. Replace MOBILE mode by bootstrap fluid grid system. CR10008606 Resource:standardRate/overtimeRate. The new class ResourceRate replaces the attributes Resource::standardRate and overtimeRate. This solves the issue where only 2 default rates per Resource can be managed: standardRate and overtimeRate - as the recordType is code-based it should be possible to manage default rates on a code-basis as well so that additional default rates per resource can be added if needed CR10011888 GenericContract is not abstract. Change class org:opencrx:kernel:contract1:GenericContract to be non-abstract. CR10011878 CalDAV, CardDAV: improve performance. Changes made: * Rendering of ALARMs is based on tag X-OPENCRX-RENDER-ALARMS. This flag is true only if an activity has assigned timers. The flag controls how ICalendar.printAlarms() queries and renders alarms. * No more buffering in DAV XMLWriter and HTMLWriter * Optional validation of UID / externalLink in ICalendar.printCalendar() 2.1. FIXED BUGS CR10012030 WebDAV: Support for 'Range' header field. This solves WebDAV issues with Mac OS 10.8 / 10.9. CR10011994 Depots.hasBookings(). Booking query can not be executed and throws exception. 2.2 REMOVED FEATURES none ---