Improvements, including:
FieldGroup now supports AUTO for fields width.Bug fixes, including:
BackgroundTask timer does not send events to server in BackgroundWorkProgressWindow.ComponentsHelper.getComponent() method doesn't search components in all inner containers.StackOverflowError is possible when changing parent in Access Group.Improvements and bug fixes, including:
cuba.email.smtpSslEnabled application property enables SSL connection to SMTP servers.CubaWarBuilding task does not add widgetset folder to WAR file if web-toolkit module is used.OnDeleteInverse=UNLINK.BigDecimal datatype are formatted with a wrong locale if it is set via user properties.cuba.web.ExternalAuthentication property from cuba-web-app.properties.LookupField does not conform to order of items in enum.GanttChart: GraphItemClickListener does not work; and others.Improvements and bug fixes, including:
CubaWarBuilding task:
webXmlPath is the path to single-WAR web.xml relative to the project root. Use it instead of absolute path in the deprecated webXml property.coreContextXmlPath is the path to context.xml of the core module relative to the project root. Use it instead of absolute path in the deprecated coreContextXml property.UUID type are not converted to valid strings without dashes in JPQL queries for MySQL.Embedded component does not show images from FileDataProvider.This is the first public release of platform version 6.1. All significant changes from version 6.0 are listed below.
build.gradle, for example:
maven {
url 'https://repo.cuba-platform.com/content/groups/premium'
credentials {
username(System.getProperty('CUBA_PREMIUM_USER'))
password(System.getProperty('CUBA_PREMIUM_PASSWORD'))
}
cuba.reporting.* => reporting.*
cuba.fts.* => fts.*
cuba.charts.* => charts.*
cuba.amazon.s3.* => cuba.amazonS3.*
cuba.security.EntityLog.enabled => cuba.entityLog.enabled
cuba.web.ExternalAuthentication => cuba.web.externalAuthentication
cuba.clusterMessageSendingThreadPoolSize => cuba.cluster.messageSendingThreadPoolSize
cuba.reporting.entityTreeModelMaxDeep => reporting.entityTreeModelMaxDepth
cuba.client.maxUploadSizeMb => cuba.maxUploadSizeMb
cuba.systemInfoScriptsEnabled => cuba.gui.systemInfoScriptsEnabled
cuba.manualScreenSettingsSaving => cuba.gui.manualScreenSettingsSaving
cuba.showIconsForPopupMenuActions => cuba.gui.showIconsForPopupMenuActions
cuba.gui.tableInsertShortcut => cuba.gui.tableShortcut.insert
cuba.gui.tableAddShortcut => cuba.gui.tableShortcut.add
cuba.gui.tableRemoveShortcut => cuba.gui.tableShortcut.remove
cuba.gui.tableEditShortcut => cuba.gui.tableShortcut.edit
cuba.reporting.parameterPrototype.queryLimit => reporting.parameterPrototypeQueryLimit
cuba.schedulingActive, fts.*, charts.*, cuba.amazonS3.*. You don't have to change anything in your existing projects, because your values set in app.properties files have priority over database-stored values.
app.properties files can be overridden by Java system properties with the same name. For example, this server command line option will ensure that automatic database update is on, regardless of what is set in app.properties:
-Dcuba.automaticDatabaseUpdate=true
web-dispatcher-spring.xml:
<context:component-scan base-package="com.haulmont.cuba.restapi"/>
If you use classes from the com.haulmont.cuba.portal.restapi package, change imports to com.haulmont.cuba.restapi. For example:
import com.haulmont.cuba.restapi.Authentication;
DataManager now checks user permissions only on the client tier. If you want to check permissions on middleware, you have the following options:
DataServiceBean does this):
dataManager.secure().load(context)
boolean saved = AppContext.getSecurityContext().isAuthorizationRequired();
AppContext.getSecurityContext().setAuthorizationRequired(true);
try {
// all calls to DataManagers will apply security restrictions
} finally {
AppContext.getSecurityContext().setAuthorizationRequired(saved);
}
Please note that DataManager obtained inside EntityListeners does not checks permissions even if earlier in the call chain there was a secure DataManager invocation by using this or previous method. So if you want a secure DataManager inside EntityListeners, always use dataManager.secure() or wrap your code.
cuba.dataManagerChecksSecurityOnMiddleware application property for the whole application.
cuba.serialization.impl = com.haulmont.cuba.core.sys.serialization.StandardSerialization
AbstractFrame.getDialogParams() and DialogParams are deprecated. Recommended methods:
openEditor(entity, OpenType.DIALOG.width(480).height(320));
@Override
public void init(Map<String, Object> params) {
getDialogOptions().setWidth(480).setHeight(320);
}
The same in XML descriptor:
<dsContext/>
<dialogMode width="480" height="320"/>
<layout/>
@Override
public void init(Map<String, Object> params) {
getDialogOptions().setForceDialog(true);
}
The same in XML descriptor:
<dsContext/>
<dialogMode forceDialog="true"/>
<layout/>
OptionsList visual component presents a list of options as a vertical scrollable list.Accordion visual component is a tab sheet with vertical placement of tabs.LookupField and all other implementors of the OptionsField interface can take the list of options from an enum, even if not connected to an entity property. See the OptionsField.setOptionsEnum() method.Table attributes: columnHeaderVisible, showSelection.reversePosition attribute of SplitPanel allows you to specify a position from the opposite side.CloseWithCommitListener is notified when the screen is closed with commit action.Persistence.callInTransaction() and Persistence.runInTransaction() methods can be used to run a piece of code as a lambda-expression in a new transaction with or without return value.LockManagerAPI.lock(Entity), LockManagerAPI.unlock(Entity) methods.CustomCollectionDatasource, CustomGroupDatasource and CustomHierarchicalDatasource base classes should be used for creating custom datasource implementations.KeyValueEntity can be used to show arbitrary sets of named values in CUBA Generic UI. See also KeyValueCollectionDatasourceImpl, KeyValueGroupDatasourceImpl and KeyValueHierarchicalDatasourceImpl.CubaJelasticDeploy Gradle task can be used for deployment to the Jelastic cloud.uuid-ossp extension is not used for PostgreSQL, so superuser privileges are not needed anymore when creating the database.connectionParams property. The value of this property is added to the database URL as is. For example:
task createDb(dependsOn: assembleDbScripts, description: 'Creates local database', type: CubaDbCreation) {
dbms = 'mssql'
host = 'localhost'
dbName = 'demo'
connectionParams = ';instance=myinstance'
zipProject Gradle task is added to application projects by default. So now you can quickly make an archive of a demo project to attach to a topic on support forum or send by email.EntityImportExportService interface.query method can be invoked through HTTP POST too.logback.xml file to your server (for example, when deploying to the cloud), the console output will contain the reasonable level of details.DataProvider and DataItem interfaces have been refactored.SimpleDataItem class.updateDb Gradle task.