Child pages
  • New in 7.0

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Wiki Markup
    Send to Back/Bring to Front (resp. Control+\] & Control+\[)
  • Group/Ungroup (resp. Control+G & Control+U)
  • Same Height/Same Width (resp. Shift+H & Shift+W)
  • Anchoring Top - Right - Bottom - Left (resp. Shift+-, Shift+*, Shift++ & Shift+/)
  • Big step move (Control+Alt+Arrow keys)
  • Big step resize (Shift+Alt+Arrow keys)

New Form wizard

  • Previously used template will be remembered
  • The Templates list will be filtered on Templates that contain form definitions (thus Templates created based on only a selection of Elements will be excluded)
  • If a Template is selected and the StyleSheet property of the Form on which the Template was based is set, the StyleSheet property will be set

Misc.

  • Improved visual feedback while resizing/moving elements using the keyboard 
  • When placing fields through the "Place field..." button in the Toolbar of the Form Editor, the fields are placed in the order in which the dataproviders were selected in the "Select Data Providers" dialog 
  • Better placement of horizontally placed fields through the "Place field..." button in the Toolbar of the Form Editor
  • The value of the Alignment Guide > Small Offset preference is used for the distance between the elements in the "Leftward" and "Upward" distribution actions
  • Added option to toggle the display of the Rulers (default: on)
  • Added option to toggle the display of "Page break" lines (default: off)
  • Added option to toggle the visibility of inherited elements that don't have any overridden properties (default: show)
  • Added the drawing of the Form border
  • Offset the Form inside the editor viewport, for drawing the Form Border
  • Visual feedback of Forms being transparent
  • Elements marked as invisible are displayed semi-transparent
  • Elements marked as invisible do not generate an "Element in form "...." is outside the bounds of form." builder marker when placed horizontally outside the bounds of the form
  • Added "Snapping mode" shortcut on the toolbar to quickly toggle the Alignment mechanism to use:
    • None
    • Grid
    • Alignment (default)
  • Added "Toggle Feedback options" shortcut on the Toolbar to toggle the Form Editor feedback preferences:
    • Show anchoring feedback (default = true)
    • Show alignment feedback (default = true)
    • Show same size indicators (default = true)
    • Show Grid (default = false)
  • Added support for quick pan of viewport using SpaceBar+MouseDown+MouseMove (allows for quick scrolling the viewport if the Form is larger than the Form Editor area)
  • Added forced lasso select for layered elements through Shift modifier when starting the select using the mouse 
  • Form part height can be set by double-clicking the part label 
  • Form parts can be resized using the keyboard
  • When resizing Form parts using the mouse, if the Control modifier is pressed while the resize takes place, anchored elements also are resized based on their anchoring settings
  • Form (parts) can be resized using the mouse by dragging their edges 
  • Form and Form Part can be resized in both dimensions at the intersection of the Form's right edge and the Form part bottom edge
  • While hovering over the Form part label, a vertical resize cursor is shown 
  • Added location & size feedback in the status bar of Servoy Developer for the selected element 
  • Added "Revert Form" option to Context menu of the Form Editor, to undo all changes since the last Save at once (No undo possible!)
  • Added "Preferences" option in the Context menu of the Form Editor
  • When pressing the Tab key while focus is on an element in the Form Editor, the next element in the tab sequence is selected
  • The preferred size of beans is used when placing beans on a Form
  • When placing a new Tabpanel through the new Tabpanel button on the toolbar, the Tabpanel is dimensioned to the dimensions of the largest form, also taking into account the Form's border and navigator settings
  • Splitpane elements get a name prefixed with split_ when placed on a form
  • Splitpane elements render like a Splitpane in the Form Editor, instead of like a Tabpanel
  • Tabless panel elements get a name prefixed with tabless_ when placed on a form
  • Tabless panel element renders like a empty container element, instead of like a Tabpanel
  • Visual appearance of elements representing Tabs on a Tabpanel changed to let the element better resemble a tab, especially on transparent Tabpanels 
  • Drag & Dropping a method from the Solution Explorer onto a field in the Form Editor sets the method as the field's onAction event handler
  • Improved inline editing of Labels & Buttons in the Form Editor. Proper support added for Control-X/C/V keyboard shortcuts

...

  • Make it possible to drag Forms from the Solution Explorer directly onto existing Tabpanels/TablessPanels/SplitPanels in the Form Editor 
  • Size feedback in the status bar for the Form itself
  • Fix the show/hide/reorder behavior of the Toolbars of the Form Editor
Script Editor

For Servoy 6 the goal was to introduce automated refactoring support for JavaScript. In order to be able to do automated refactoring, the refactoring mechanism needs to be able to analyse all the JavaScript code and determine exactly what every bit of code is, what it's scope is and how it is related to other parts of the code.

...

  • Code completion inside JSDoc for supported JSDoc tags and on Types (type '@' first, then Control-Space). Supported tags:
    • @AllowToRunInFind
    • @author {userName}
    • @constructor
    • @deprecated
    • @example
    • @param {Type} name
    • @private
    • @return {Type}
    • @see
    • @since
    • @throws {Type}
    • @type Type
    • @version
  • Support for automatically creating the basic JSDoc tags for an existing function: See context menu of the Script Editor > Source > Generate Element Comment (Alt-Shift-J) 
  • Support for inline JSDoc to provide type information for objects: 
    Code Block
    function demo(){
       /** @type {JSFoundSet<db:/udm/contacts>}*/
       var x = databaseManager.getFoundset('udm', 'contacts');
       x. //Code-completion here will know that x is a FoundSet on table Contacts in the UDM database, thus will include all columns, calculations and aggregates
    }
  • Support for the @deprecated tag: When a variable or function is marked as deprecated any reference to the object will generate a builder marker
  • Support for the @private tag: Hides the object for access from outside the current scope. Accessing the hidden object from outside the scope in which it is defined will generate a builder marker 
  • Support for typed Arrays: 
    • Wiki Markup
      @type String\[\]&nbsp;
    • @type Array<String>
  • Support for typing JSFoundSets and JSRecord to be of a specific datasource: 
    • @type JSFoundset<datasource>
    • @type JSRecord<datasource>
      (a datasource string is build up like this: "db:/{serverName}/{tableName}", for example "db:/udm/contacts")
  • Support for OR typing of parameters: "@param {String|Number} name description" 
  • Support for typing parameters as Objects with certain properties:
  • Code Block
    /**
     * @param {Object} person
     * @param {String} person.name
     * @param {String} person.email
     * @param {Number} person.age
     */
    function processPerson(person) {
      application.output(person.name);
      application.output(person.email);
    }
  • Support for rest parameters: Allows to indicate through JSDoc that a function can take unlimited trailing arguments of the specified type:
    Code Block
    /**
      * @param {...String} someExtraStrings One or more additional String can be send into this function
      */
    function methodWithRestParams(someExtraString){}
    
    
    function test() {
       methodWithRestParams('one', 'two', 'three', 'four');
    }
  • Support for @AllowToRunInFind on functions to indicate that the the function should be executed on event handlers while in FindMode:
    Eliminates the //controller.search() workaround. Note that that running JavaScript while in FindMode has it's limitations and not all behavior is 100% defined. More details will follow.
  • Support for @constructor tag, to indicate that a function declaration is to be used as a Constructor. Functions marked as Constructor also display differently in the Script Outline view 
  • Automatic JSDoc @type setting on global and Form variables
  • Ability to update the type of a variable by updating the JSdoc @type tag value AND the default value
  • Added specific JSDoc context for Templates (Window > Preferences > JavaScript > Editor > Templates), besides the already existing JavaScript context.

...

  • Investigate if the "Run as ..." and "Debug as ..." options in the Context menu of the Script Editor can be removed or made to work
  • Bring back support for the old way to type a foundset or records to belong to a certain database and table
  • Full support in JSDoc for typing as a specific type of Form: "@type Form<myformName>". Current support does not include Form variables and Form methods  
  • Introduce the option to suppress individual markers
  • Properly enable/disable the Refactor options based on the context and selection  
  • Extend the tags yielded by code-completion inside JSDoc
Search support
Search support

JavaScript source code only

...

  • Added rollOverImageMedia support in TableViews 
  • Right-click support on Tableview headers through label linked to field using labelFor relation
  • Support for number length formatting on number fields
  • Support to hide the Form title from the Title bar in the Smart Client or the Tab name of the browser in case of the Web Client, by specifying "none" as value for the forms titleText property 
  • Added support for displaying HTML contained in the titleText property of non-editable HTMLArea's. Useful to show (multiple) href links in the UI. Same functionality was already available through Labels, but on Labels the entire label acts as click-able area (showing a HAND cursor), whereas when done with an HTMLArea only the links are click-able. The "displayTags" property on the HTMLArea needs to be set to true in order to process the titleText property.
  • Added encapsulation support on Forms: the ability to mark Forms as Private, Module Private and/or to prevent access to the Form's elements, controller, foundset and/or dataproviders
  • Improved support for separators within Combobox dropdowns:
    • Better styling
    • Non-selectable
    • Web Client support
  • Added support for single RadioButtons:
    • Fields of type Radio with a ValueList attached containing only 1 value now render a single RadioButton
    • Multiple single Radio button type of fields can act as a RadioButton group, by sharing the same dataprovider

Still to be done

  • Finalize Form encapsulation support

...

  • Added API to interact with existing Calculations or create new Calculations:
    Calculations added through the SolutionModel at runtime automatically become stored calculations if created with the same name as one of the dataproviders in the datasource on which the calculation is created
  • Added API to interact with existing Beans and add new Beans to Forms:
    In order to add new beans to a Form using the Solution Model, the full class name of the bean is required. The bean vendor needs to supply this.
  • Added factory methods to create the border, font and pageformat strings required in the solutionModel
  • Added method on all objects to retrieve the object's UUID
Client Design mode
  • Added the ability to specify on element level which resize handles are enabled: See CLIENTDESIGN.HANDLES constant under Application in the Solution Explorer
  • Added the ability to specify on element level if the element can be designed: See CLIENTDESIGN.SELECTABLE constant under Application in the Solution Explorer 

...

  • New enabled & visible property on all JSComponent instances
  • New getUUID() method on all relevant Solution Model objects
  • New onRender event access on all objects that implement the onRender event
  • New solutionModel.wrapMethodWithArguments(...)
  • New solutionModel.newCalculation(...)
  • New solutionModel.getCalculations(...)
  • New solutionModel.getCalculation(...)
  • New solutionModel.createTitledBorder(...)
  • New solutionModel.createSpecialMatteBorder(...)
  • New solutionModel.createPageFormat(...)
  • New solutionModel.createMatteBorder(...)
  • New solutionModel.createLineBorder(...)
  • New solutionModel.createFont(...)
  • New solutionModel.createEtchedBorder(...)
  • New solutionModel.createEmptyBorder(...)
  • New solutionModel.createBevelBorder(...)
  • New solutionModel.newForm(String, JSForm)
  • New class JSCalculation(...)
  • New class JSBean(...)
  • New JSTabPanel.removeTab(...)
  • Deprecated JSTabPanel.onTabChange
  • New JSTabPanel.onChange
  • Deprecated JSPortal.resizeble
  • New JSPortal.resizable
  • New JSPortal.onDragEnd
  • New JSRelation.removeRelationItem(...)
  • New JSMethod.getArguments(...)
  • New JSForm.getBeans(...)
  • New JSForm.getBean(...)
  • New JSForm.removeBean(...)
  • New JSForm.newBean(...)
  • New JSForm.onDragEnd
  • New JSForm.encapsulation
  • JSFormgetBeans/getButtons/getComponents/getFields/getFormMethods/getFormVariables/getLabels/getParts/getPortals/getTabPanels: new optional parameter "returnInheritedElements"
  • New constant classes
    • UNITS
    • TITLEPOSITION
    • TITLEJUSTIFICATION
    • PAGEORIENTATION
    • FONTSTYLE
    • BEVELTYPE

...

  • New class JSRenderEvent: eventType passed to onRender event handler methods 
  • New class Renderable: used by the JSRenderEvent
  • New class JSWindow; see Windowing API
  • New class JSDNDEvent: eventType passed to Drag 'n' Drop event handlers
  • New class CLIENTDESIGN containing constants for ClientDesign
  • New constants
    • UICONSTANTS.USE_SYSTEM_PRINT_DIALOG
    • ELEMENT_TYPES.TYPE_AHEAD
    • ELEMENT_TYPES.SPLITPANE
    • ELEMENT_TYPES.RTF_AREA
    • ELEMENT_TYPES.RECTANGLE
    • ELEMENT_TYPES.HTML_AREA
    • ELEMENT_TYPES.COMBOBOX
    • DRAGNDROP.MIME_TYPE_SERVOY_RECORD
    • DRAGNDROP.MIME_TYPE_SERVOY
    • JSEvent.ONDRAGEND
    • SQL_ACTION_TYPES.UPDATE_ACTION
    • SQL_ACTION_TYPES.SELECT_ACTION
    • SQL_ACTION_TYPES.NO_ACTION
    • SQL_ACTION_TYPES.INSERT_ACTION
    • SQL_ACTION_TYPES.DELETE_ACTION
  • New security.isUserMemberOfGroup(...)
  • New JSTable.getDataSource(...)
  • New JSRecord.getDataSource(...)
  • New JSDataSet.sort(Function)
  • Wiki Markup
    New JSFoundSet.sort(Function, \[defer\])
  • New setRollOverImageURL(...) on Labels and Buttons
  • Made Date.setYear deprecated (is deprecated in ECMAScript)
  • Made relation parameter optional for setLeft/RightForm(...) functions for Splitpane instances
  • Added support for multiple fallback filter values in i18n.setI18NMessagefilter, by supplying an Array of Strings for the value parameter
  • Wiki Markup
    Added support for multiple values in application.getStartupArguments():
    For the following deeplink "http://localhost:8080/servoy-webclient/ss/s/bug_formBuilder/a/bla/a/bla1/a/bla2" application.getStartupArguments will not return \[\['bla', 'bla1', 'bla2'\], {a: \['bla', 'bla1', 'bla2'\]\]
  • Support for IN operator support in scripted Find/Search. The advantage over the OR ('||') option are:
    • Unlimited size: the Or statement is limited to what the database supports
    • The values don't need to concatenated into a String value, making it easier to work with values containing '||' or working with Dates
  • Code Block
    if (foundset.find()) {
       foundset.name = ['John', 'Paul', 'Ringo', 'George'];
       foundset.search();
    }

...

  • Drag 'n' Drop support
  • CSS Styling Support
  • Support for HTML as text for nodes of the tree in Web Client
  •  

RESTful Web Services plugin

  • Added support to ws_read & ws_create method to optionally return an XML object instead of a JavaScript Object. (see JS Lib > XML)

PDF plugin

  • Added support for working with XFA forms

...

  • Dedicated SolutionType values for pre and post import hooks, instead of relying on a naming convention
  • Ability to use a global method as PK generator, through selecting a global method under Auto Enter > Lookup Value on the Column in the Table editor
  • Support for using variables of type Boolean inside relations, mapping on integer columns
  • Added ability to use separators in ValueLists
  • Made "Left Outer Join" the default value for new relations
  • Ability to use global variables of type Boolean in Relations. Can map to integer columns containing 0 or 1 in the database
  • Support i18n filter fallbacks for i18n.setI18NMessagesFilter (see samplecode)
  • Support to mark functions through the JSDoc @AllowToRunInFind tag to be executed as event handlers while in FindMode:
    Previously methods attached to event handlers would only execute in FindMode if the contained the code the execute a search (controller.search() or foundset.search()). As of Servoy 6 any method that contains the @AllowToRunInFind tag in it's JSDoc will be executed in FindMode when attached to an event. Note that there are limitations to what is possible in scritping while in FindMode and that certain behavior is not well defined. More information on this will follow.
  • Support to mark variables and functions as private through JSdoc using the @deprecated JSDoc tag
  • Support for dependent ValueLists when in FindMode
  • Added extra parameter to globals method ValueList that indicated if the FoundSet is in FindMode  
  • Optimized databaseManager.recalculate() to only trigger the recalculation of stored calculations
  • Added weeknumber to Date Field calendar popup in Smart Client, to bring it inline with the Web Client

Still to be done

...

  • Extend HTTP plugin with support for all HTTP operations

...