com.whitestein.lsps.vaadin.widgets.WidgetSet
. Update your code accordingly. (LSPS-10641) com.whitestein.lsps.vaadin.widgets.WidgetSet
. Update your code accordingly. (LSPS-10641) recalculateColumnWidths()
method has been added to the Grid component: the method forces recalculation of column width in situations when the Grid fails to recalculate them automatically. (LSPS-10582) java -jar lsps-cli-<VERSION>-full.jar
. (LSPS-10494) getErrorCode
and getErrorMessage()
functions. (LSPS-10139) lsps-tools-<VERSION>.zip file. The command line console has been rename from
lsps-mconsole-cl-<VERSION>-full.jarto
lsps-cli-<VERSION>.zip`. (LSPS-10502) Unlock
button was enabled on accomplished To-dos and clicking it caused an exception. The button is now no longer available for such To-dos. (LSPS-10416) setNavigation()
method call on a link or the Navigation property set to null
caused that the form returned a java.lang.RuntimeException
. (LSPS-10418) setFieldStyle()
method of the FileUpload component to set the property. (LSPS-10086) openNewTab
property of a Navigation object. (LSPS-10355) { e -> Forms.submit(new UrlNavigation(openNewTab -> true, url -> "http://www.whitestein.com")) }
, the navigation now happens always in the same tab so that no tabs that contains todos or documents in invalid states are left open. (LSPS-10366) lsps-sdk-<VERSION>-zip
with resources for the Maven repository has been renamed to lsps-repo-<VERSION>.zip
to reflect the content more accurately. (LSPS-10430) simulate-click-on-session-close
has been added for the Button and Action Link components: when the hint is set to true the button is clicked right before the session expires. This allows you to define a hook before the expiration and, for example, save the form. (LSPS-10285) openNewTab
parameter of navigation is ignored so that no stale form remains displayed. (LSPS-10356) terminateModelInstance()
which terminates the given model instance so it becomes finished
immediately has been added. (LSPS-10369) findByAttributeValue()
and findAllByAttributeValue()
methods have been added to the testing framework of forms so you can now get components of your forms by their HTML attributes in your automatic tests. (LSPS-10336) Flyway has been upgraded to Flyway 4.2.0 to prepare for migration to higher Flyway version. The intermediate update had to be put in place due to backward-incompatible changes introduced in Flyway which are not taken into consideration in migration to higher versions.
Important: When migrating your database from a version prior to 3.3.2077, migrate first to 3.3.2077 or 3.3.2078. Only then migrate your database to version 3.3.2080 or later.
(LSPS-10343)
openNewTab
property of a navigation to set the behavior. (LSPS-10326) getHeaderCell(int rowIndex, int colIndex)
to the LspsGriddoubleClick()
to all componentslsps-
prefix to the fields and button style classes in number filter popup (LSPS-10322) showDataErrorMessages()
on a Grid, previously the operation performed purely on large Grids. (LSPS-10305) setCaseSensitive()
method has been added to the Search Combo-Box component so the options can be searched in case sensitive mode. (LSPS-10074) modelList
command of the Command-Line Console now returns the same data that is available in the Module Management view of the PDS Management perspective, that is, the module name and version, executable flag value, upload date, number of unfinished instances and hash code. (LSPS-10250) setAppCloseListener()
call was performed on tab close. Now, all the calls are performed as expected. (LSPS-10275) getComponents()
method has been added to the Grid component: the method returns the list of the components currently rendered in the grid. (LSPS-10221) getComponentInRow(rowObject)
method has been added to the GridColumn component. (LSPS-10215) setParseErrorMessage()
method. Also to retain consistency, the method has been added to the Date and Local Date Fields so the message can be set with both the setCustomErrorMessage()
and setParseErrorMessage()
methods. (LSPS-10235) Settings:Manage
security right, the Settings menu item in the avatar menu is now disabled. (LSPS-10207) lsps-ws
part of the server path. (LSPS-10225) setAppCloseListener()
method has been added to form components: the method allows you to define the action, which is performed when the browser window with the form is closed, reloaded, or has its URL changed. (LSPS-10174) closeButton
property, which allow the user to identify whether the event was produced by clicking the "x" button of the Popup component. (LSPS-10087) The caption of a Label was rendered incorrectly as a button when placed in a dashboard Widget.
(LSPS-10144)
Previously, it was recommended to use LSPS database in MySQL with the deprecated utf8_general_ci
encoding. The recommended encoding is has been changed to utf8mb4
and the migration scripts have been updated. For further information, refer to Frequently Asked Questions.
(LSPS-10152)
NotSerializableException
: Caused by: an exception which occurred: in field com.whitestein.lsps.vaadin.util.LspsUIBase.navigateToThreadLocal(LSPS-10150)
NotSerializableException
: Caused by: an exception which occurred: in field com.whitestein.lsps.vaadin.util.LspsUIBase.navigateToThreadLocal(LSPS-10150)
dashoardIsPublic
parameter when the user tried to create a new dashboard. (LSPS-10122) setCellStyleGenerator()
method, for example c.setCellStyleGenerator({ myRowObject:String -> "columnclass" })
. (LSPS-10067) setStartIndex()
, getStartIndex()
and page size setPageSize()
and getPageSize()
have been added to the forms::Repeater component to allow implementation of paging features. (LSPS-10112) When an editable Grid contained a button that deleted the underlying value object and the user clicked the button multiple times quickly, the Grid interpreted the clicking as a double-click, which was considered a request for row editing. However, since the value object was deleted already, the action resulted in an exception. Now once a button click is accepted, the Grid ignores any double-click edit request.
(LSPS-10118)
Previously, a style sheet added with the addStyleSheet()
method, did not behave correctly:
(LSPS-10123)
!important
directive. (LSPS-10064) addStyleName()
method contained the sequence \f
, it was escaped so the sequence was not recognized as a font character. (LSPS-10069) null
, the newly entered value could have been deleted. (LSPS-10011) setCaption()
method. (LSPS-10046) onLoad()
method has been added to forms::Form
: The method is called when a form is restored after it had been saved. (LSPS-10001) select
parameter set to a value caused the following exception: addStyleSheet()
method, for example, c.addStyleSheet(toString(getResource(#"mod", #"my.css").content, #"UTF-8"))
, some special characters were converted to HTML entities when the file with the style used CR-LF ends of line. (LSPS-10025) <YOUR_APP>-tester
project now by default use Chrome and pass in the default LSPS Application as expected (you still need to provide the chromedriver for your Chrome and run the server in debug mode before running the tests). (LSPS-9606) VAADIN_APP_CONTEXT_ROOT
variable in the tester SampleUIIT was populated incorrectly and caused the test to fail. (LSPS-9952) downloadFile(FileResource resource*)
function, which downloads a file, has been added. (LSPS-9951) select()
method has been added to the forms::TreeTable component so a node can be selected programatically. (LSPS-9537) null
, it was incorrectly converted to a parameter with value "null"
. Now the parameter value is ignored as expected. (LSPS-9992) NamedScreenshotOnFailure()
JUnit rule has been added so it is now possible to take screenshots of multiple browsers on test failure. (LSPS-9953) addStyleSheet(String sheet)
and remove such rules with the removeStyleSheet(String id)
method. The methods allow style-sheet changes in cases when the user works exclusively with a model without the LSPS Application. The style rules as applied and removed as the given component is attached and removed respectively: it is therefore recommended to define the rules on the uppermost form component. The feature is intended for prototyping and testing of style rules. Once you are happy with the styles, add them to your LSPS Application. executeSqlFile()
function: to do so, insert a line with -- MULTILINE
before such statements. To switch back to single-line statements, insert a line with -- SINGLELINE
. (LSPS-9580) N/A
values instead. (LSPS-9898) info
command, which prints the details and status information about the migrations. (LSPS-9882) Client side returned an error: Invalid or corrupted PDF file.
when the resource is not displayed since it is not a PDF format. (LSPS-9830) Log:Read
security right, accessing logs of model instances in the Management Console caused an error. Now the message on insufficient access right appears. (LSPS-9878) If the user that is used to establish the connection to the LSPS Server from PDS does not have the Management:Login
security right, all management views in PDS now display the "Missing rights." message.
(LSPS-9808)
ui::ValueChangeEvent
) now has the oldValue
property with the value that was stored in the binding prior to the given value change event. Therefore, if the user is changing the value, it returns the last valid value. If the binding value was set programmatically, it returns the value from binding even if the value is incorrect. (LSPS-9863) openTabById(String id)
of LspsAccordion has been improved. (LSPS-9833) findByTextContent()
searched the entire form, not the subtree of the given component. (LSPS-9866) null
option values when defined. (LSPS-9819) Merging of model instance failed
could have occurred when a record proxy was created over a record type, that is, without a proxied record and was later deleted. (LSPS-9836) setSortListener()
and setFilterChangedListener()
methods. (LSPS-9793) <componentWIthBinding>.setBinding(null as ObjectBinding)
has been added. (LSPS-9798) addValidator()
), custom messages (setCustomErrorMessage()
), the infer validation feature (inferValidator()
), or showing constraint violations (showConstraintViolations()
and showDataErrorMessages
). Previously, only one set of the error messages was displayed resulting in missing error messages. (LSPS-9691) null
, the server returned an NPE. With this update, a non-editable row is rendered. (LSPS-9794) addColumn()
method. (LSPS-8953) setFiltrable(false)
method did not work correctly and resulted in, the filter was displayed on all columns, even if you set it to disabled on a column. (LSPS-9582) setSorted()
, isSorted()
and isSortAscending()
have been added. (LSPS-9770) setColumnReorderingAllowed()
method. To allow the user to check if the feature is active, the isColumnReorderingAllowed()
methods have been added. The getColumns()
method has been adjusted to return column in the current order with the possible changes introduced by dragging-and-droppping of columns and to include any hidden columns; (LSPS-9771) setSelectAllCheckBoxVisible(Boolean)
method. When you use the select-all feature, all items in the datasource are loaded into memory therefore make sure not to use the feature on large data sources. (LSPS-9776) createV7Factory(connector)
and createV8Factory(connector)
methods to allow easier factory customization. (LSPS-9777) The db-migration tool used an outdated SQL Server driver. Since the driver was no longer maintained, hibernate errors could have occurred. The Microsoft JDBC driver for SQL Server driver is now used.
(LSPS-9732)
group by
do not work correctly. (LSPS-9727) getComponentFactory()
method so it returns the required UI factory implementation:UIComponentFactoryV7Impl
to retain the current implementation, originally called UIComponentFactoryImpl
.UIComponentFactoryV8Impl
to use Vaadin 8 implementation.
With this factory, component implementations in Vaadin 8 will be used if available (The implementations will be provided gradually). Note that new implementations will not be backwards compatible and your forms will require thorough and full testing.
@ Override public UIComponentFactory getComponentFactory() { //original content: //return new UIComponentFactoryImpl(this); return new UIComponentFactoryV7Impl(this); }
(LSPS-9756)
The db-migration tool used an outdated SQL Server driver. Since the driver was no longer maintained, hibernate errors could have occurred. The Microsoft JDBC driver for SQL Server driver is now used.
(LSPS-9732)
keyname1=keyvalue1,keyname2=keyvalue2
. To use the key value in your SQL script, use the syntax ${keyname}
. (LSPS-9720) isCollapsed()
no longer requires parameter. If you used the method with a parameter in your models, make sure to adjust the calls. (LSPS-9717) findByFormId
method that returns the components created by the reused form has been added to the test bench. (LSPS-9682) setSorted
: sorts the column in the ascending or descending order and deactivates sortingisSorted
: returns whether the table is sorted by the specified columnisSortAscending
: returns true if the sorted column is sorted in ascending order (LSPS-9688) getId()
on components with no ID defined now returns null
and no longer fails with an exception. (LSPS-9697) Log:Read
, that governs access to Logs created by the Log
task and log()
function has been added. (LSPS-9657) -Dmaven.legacyLocalRepo=true
which restores the original behavior. (LSPS-9609) setOnValidValue()
method has been added to input components. The method runs after the value has changed and the isValid()
call has returned true
. (LSPS-9629) getUserText()
method, which returns the content of the input field even if the input does not meet the requirements of validators. Also, the setNumberFormats(List<String>)
method has been added to the DecimalField so that you can now define multiple input format. (LSPS-9635) myTextField.setBinding(null as Reference)
. (LSPS-9584) selectBySubstring()
method has been added to the combo-box components so you can select an option that contains a substring. (LSPS-9586) DataSeriesItem.itemColor
that defines the color of the given data item has been added. Also, the DataSerieItem.color
property, which has never been applied on the data item, is now deprecated. (LSPS-9671) 1024*1024 //evaluates to 1048576
. The BLOB expression must return an Integer and cannot access any constructs or variables from higher contexts. (LSPS-9541) ?.
, for example, &person?.name
(LSPS-9654) schemas
parameter that defines, which schemas are managed by Flyway, has been added to the db-migration script. (LSPS-9631) setClickShortcut
method has been added to the Button component. If the end-user presses the shortcut defined by the method, the button click action is performed. (LSPS-9623) setParseErrorMessage(String message)
method. (LSPS-9624) setRestorePdfStateOnLoad()
method. (LSPS-9626) isConvertible()
method of components that hold a value has been deprecated. Equivalent functionality is provided by the isValid()
and getErrorMessages()
methods. (LSPS-9634) .
) operator is now validated as a warning when preceded by the safe-dot (?.
) operator since the safe-dot access is rendered ineffective. For example, person?.address.street
is considered invalid since the street access could return a NullParameterError. (LSPS-9632) violated - child record found
. This occurred due to incorrect order when deleting the model data. (LSPS-9617) hide()
method on a popup, the popup lost the path to the global exception handler and the exception failed to be handled. (LSPS-9612) <home>/.m2/repository
by default. (LSPS-9594) flyway:clean
, flyway:repair
, flyway:migrate
options have been added to the migration tool for LSPS database initialization and migration tool to allow to define the flyway run (the migration is run by the migration.sh and migration.bat script). (LSPS-9605) forms::setModelingId()
method, the model compilation, which is performed either right after model upload or when a model is first requested, failed with a ModelUploadException. This caused backwards incompatibility of models. Models with such standard libraries are now compiled without calling the setModelingId() method and the models are compiled successfully. (LSPS-9601) tabChangeListener()
value of a TabSheet component was lost during the save and restore of a todo or document. (LSPS-9593) restoreState()
call of a table failed with a NullPointerException. (LSPS-9591) Form.save()
call failed with an exception on forms with an input field with a validator. This occurred due a recursion in an internal call referencing the input field itself. (LSPS-9592) setModelingId()
and getModelingId()
, have been added to all form components. (LSPS-9575) setModelingId()
and getModelingId()
, have been added to all form components. (LSPS-9575) setMinFiles(Integer numberOfFiles)
and setMaxFiles(Integer numberOfFiles)
methods. (LSPS-8751) setCaptionMode()
method to enable or disable the feature. (LSPS-9410) TableColumn.getComponentInRow()
method has been added to allow you to obtain the content of a table cell easily. (LSPS-9523) TableColumn.getComponentInRow()
method has been added to allow you to obtain the content of a table cell easily. (LSPS-9523) findByPrefixIId()
method has been added. (LSPS-9559) getCellComponent
method has been added to the table cell of the testing framework. Also the openUrl(String url, By anyElementId)
method has been added to app tester as a convenience method for easier ad-hoc testing. (LSPS-9562) LspsCaption
class that represents a form component caption and methods isRequired()
, getCaption()
, inputComponent()
, hasClassName()
, and getClassNames
have been added to the form components testing framework. (LSPS-9565) setOptions()
on a combo box, single select list, etc. failed to set the option caption correctly. (LSPS-9532) @include lsps-extensions-at-root;
statement in your styles.scss. Failure to do so will result in missing font-awesome icons. @import "../../../VAADIN/themes/<my_theme>/wtpdfviewer.scss"; @include lsps-extensions-at-root;(LSPS-9574)
RecordOption.maxRecursionDepth
property for a Record on a scaffolding component was ignored. This happened when the property was defined also on a nested component. (LSPS-9427) setCloseable()
and isCloseable
have been added to the dashboard widget: the methods allow to hide and display the close button. (LSPS-8786) setExpandable(true)
to activate the feature. (LSPS-9226) refreshBadges()
method, which sets the numbers in the badges of navigation items, now calls the getBadge() method. This makes customizing the calculation of badge values simpler. (LSPS-9484) flushAndRefresh(<sharedRecords>)
function that reloads shared records from the database has been added to the standard library. This function serves to fetch the shared records from the database in cases when they might have been modified by custom objects or third-party systems. (LSPS-8577) The LSPS_SETTINGS.VALUE column with database LSPS settings has been changed to VARCHAR(2000) to accommodate longer parameter values.
(LSPS-9461)
showContextMenu()
method which displays a context menu has been added to forms components. Also the ClickEvent now contains data on the coordinates of the click. This allows you to display the context menu at the clicked position, for example, { e:ClickEvent -> panel.showContextMenu(e.x, e.y)}
. (LSPS-9270) setAcceptedMimeTypes()
method of the forms::Upload button failed to set the accepted mime types. (LSPS-9434) setAcceptedMimeTypes()
method of the forms::Upload button failed to set the accepted mime types. (LSPS-9434) ExecutableTask.terminate(TaskContext, TerminationReason)
: The call now contains the error code from TerminationReason for errors, and escalation code and payload for escalations. (LSPS-9406) A model instance created by the createModelInstance()
function called from a process now has the parent model instance set correctly.
(LSPS-9409)
Validation now detects a problem on form variables, that are never read and on form variables that are never assigned a value.
(LSPS-9367)
ISPN000299: Unable to acquire lock after 15 seconds
due to a failed Vaadin heartbeat attempt. To fix this problem, the following has been done:The heartbeat interval has been increased to prevent such situations. To increase the interval in your application, adjust the Application User Interface as follows:
In the web.xml
file, set heartbeatInterval
to 300s
<param-name>heartbeatInterval</param-name>
<param-value>300</param-value>
(LSPS-9358)
TypeValue.getType()
, TypeValue.getCompiledType()
methods returned incorrect types. The method implementation has been fixed. (LSPS-9344) java.time.LocalDate
, has been added. Note that related functions have been added to the Standard Library as well. (LSPS-9299) vaadinIicon()
function to do so. Also, to get a list of the available icons, you can use the allVaadinIconNames()
function. (LSPS-9227) @Disabled
annotation into a method definition file before the record name to exclude all the methods from validation. (LSPS-9182) super
. (LSPS-9234) distinct
in its select, the query failed with a com.whitestein.lsps.lang.exception.ValidationException error. (LSPS-9271) with
clause and the query failed with an org.hibernate.hql.internal.ast.ErrorCounter error. (LSPS-9274) \n
into the evaluated expression. The key combination now send the expression for evaluation as is as expected. (LSPS-9302) The change proxy mechanism has been reworked to provide a more flexible and safer way of working with shared records.
old()
call, the update could have failed with a NullPointerException on the call. (LSPS-9191) notifyModelInstance()
function that allows you to invoke a model instance has been added to the Standard Library. (LSPS-9095) getProperty()
has been added: it takes a Record and a String name parameters and returns the property of the Record with the name or null
if such a property does not exist. (LSPS-9211) sortByKey()
has been added: it takes a collection of objects to be sorted, the keyExtractor closure that retrieves the keys to use for sorting and returns a list of elements sorted by the keys produced by the given keyExtractor. (LSPS-9214) groupBy()
function, which aggregates a collection of items into groups with particular classifiers, has been added. (LSPS-9224) The getRecordSupertype()
function has been added: it takes a record type and returns its supertype.
(LSPS-9241)
toInteger(String string, Integer radix)
that allows the user to parse numbers with different bases has been added. (LSPS-9255) isReadOnly(PropertyPath)
and its extension method have been added. (LSPS-9265) isPrimaryKey(Property property)
, isAutogenerated(Property property)
, isVersion(Property property)
have been added. (LSPS-9266) <YOUR_APP>-embedded
project so they can be easily shared and version-controlled as part of the application. (LSPS-9223) foreach
loop was changed via its reference from the loop, write access was successful. Such write access now causes an error on runtime. (LSPS-9159) executionContext field
and the listener was executed in the top level context. (LSPS-9136) makeCopy()
method of model instances and the synchronize(ModelInstance original, ModelInstance toBeSynchronized)
of EvaluationLevelUtils. The calls now return objects with correct context. (LSPS-9174) executionContext field
and the listener was executed in the top level context. (LSPS-9136) getAllSubGoals(Goal goal)
and getSubGoals(Goal goal)
functions and their extension methods that return the immediate and all sub-goals of a goal have been added. (LSPS-9103) If an implementation Java class of a task was not available on the server, the system failed to detect the problem. The system now logs the full stack trace in such cases so it is easier to identify the problem.
In addition, you can now upload models created in LSPS 3.0 and older and check whether a task implementations is missing. This was previously not possible because the HumanInteractionTask
was removed in LSPS 3.1. On execution, the task throws an exception. (LSPS-8929)