Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0
Stoc

Highlights

Include Page
Serv60:newFeatureHighLightsServ60:
newFeatureHighLights

Servoy Developer

...

The following keyboard shortcuts have been added:

  • Wiki MarkupSend to Back/Bring to Front (resp. Control+\] & Control+\[beta:-)unmigrated-wiki-markup(smile)
  • Send backwards/Bring forward (resp. \ ] and \ [)
  • 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)

...

  • Calls to functions for which the parameters have not been defined at all (the arguments object is used to access the parameters).
  • Calls to functions for which the JSDoc info for the parameters is missing or incomplete
  • Calls to functions for which the return type is not specified through JSDoc
  • Use of scripting API that returns a generic type (for example JSRecord or JSFoundset)
  • Use of dynamically objects like XML, XMLList, Object of JSDataSet
  • Wiki MarkupDynamic object property access (for example forms\['myFormName' + instanceId)

While most scenario's can be solved by providing the right information through JSDoc, some code construct cannot be resolved through JSDoc. In this case dynamic property access can be used to suppress the builder process to generate builder markers:

...

  • 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 mandatory name propertyunmigrated-wiki-markup
    • @param \ {Type} \ [beta:name\] optional name property
    • @private
    • @protected
    • @return {Type}
    • @see
    • @since
    • @SuppressWarnings (warning)
    • @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, including child scopes. Accessing the hidden object from outside the scope in which it is defined will generate a builder marker
  • Support for the @protected 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\[\]}
    • @type {Array<String>}
    • @type {Array<Byte>}
  • Support for types Objects:
    • @type {Object<String>}unmigrated-wiki-markup
    • @type \ {Object<Array<String>>}: equivalent of \ {\[beta:'one', 'two', 'three'\], \ [beta:'four', 'five', 'six'\], \ [beta:'seven', 'eight', 'nine'\]}
  • Support for typing JSFoundsets and JSRecord: 
    • @type {JSFoundset<datasource>}
    • @type {JSRecord<datasource>}
      (a datasource string is build up like this: "db:/{serverName}/{tableName}", for example "db:/udm/contacts")
    • @type {JSFoundset<{column1:String,column2:Number}>}
    • @type {JSRecord<{column1:String,column2:Number}>}
  • Support for typing as a RecordType:
    • @type {JSDataSet<{name:String, age:Number}>}
    • @param { {name:String, age:Number}} person A JavaScript object with a name and age property representing a person
  • Support for optional properties on RecordType. There are two different syntaxes allowed: 
    • Wiki MarkupSquare brackets around the property name: @param \{\{ {{sDocID:String, \ [beta:sTemplateID\]:String}}}} oArg
    • An equal-sign behind the type: @param {{sDocID:String, sTemplateID:String=}} oArg

...

  • Added a Servoy Active Solution Working set: the workset functionality of Eclipse allows to limit the scope of operations like searching or display of builder markers. The Servoy Active Solution workset is a pre-defined workset that contains the Active Solution and all it's modules. The Servoy Active Solution working set can be used in:
    • Problems view: The contents of the Problems view can be filtered to only show the builder markers for the active solution. Click "View menu" > Configure Contents > Select "Servoy Active Solution Filter"
    • Searching: In the Search dialog, the scope of the Search can also be restricted to the Servoy Active Solution workset:
  • Servoy MarketPlace integration: Servoy MarketPlace can be opened in Servoy Developer, through Help > Servoy MarketPlace
  • Added Servoy Admin page shortcut in the Help menu of Servoy Developer
  • Added option to show the firstForm of the solution that is being activated (see Window > Preferences > Servoy > Form Editor) 
  • First form created in a Solution is automatically set as the Main form in the Solution propertiesunmigrated-wiki-markup
  • Improved output to console of Javascript objects: \ {name: someValue}&nbsp;instead of \ instead of [beta:object Object\]
  • Added predefined update url for JSDoc plugin (https://www.servoyforge.net/projects/jsdoc)
  • Updated Servoy Developer to Eclipse Helios (3.6)
    • Option to export/import Preferences via generic export/import mechanism 
  • Reduced memory footprint of solutions in Servoy Developer by about 40% 
  • Added command line Solution Exporter (more info will follow)
  • Added JUnit testclass for running JSUnit tests contained in a solution within the JUnit framework (more info will follow)
  • Made update of Calculations and Aggregates in the Replace Table action optional
  • In the Debug Smart Client, a call to application.showUrl(...) will open the URL in a browser within Servoy Developer
  • In Table Editor, when creating a new column containing the text "email" or "url" in the columnName, automatically set the type to "Text" and the length to resp. 254 or 2048 (based on the specifications for email addresses and urls)
  • Added Copy action in columns rows in Table Editor, to quickly get the column name into the clipboard
  • Added "Maximum prepared statements idle" property in Database Server Editor (was already exposed on the Admin page)
  • Made "Link with Editor" work for Styles, Tables and Database Servers as well
  • Added "FoxPro DBF" New server template
  • Included the FoxPro DBF JDBC driver into the distrubution
  • Added ability to to also externalize hard-coded Strings inside JavaScript code (See Externalize Messages dialog)
  • Moved all Database Server management into Servoy Developer and disabled the functionality on the Servoy Admin page when running Servoy Developer
  • Removed option to turn off Enhanced Security from the UI. enhanced Security is now the default mode. Can only be turned on by manually adding the relevant property to the servoy.properties file (see #Deployment )  
  • Images in the Media library are now opened with the Viewer which is registered for the image type. By default this will be the Image viewer Servoy supplies, but can now be overruled by the user, for example by installing another Image Viewer plugin, for example the QuickImage plugin for Eclipse: [http://psnet.nu/eclipse/|http://psnet.nu/eclipse/]
  • Table Editor: support Control-Click to deselect the selected row and hide the Column Details
  • Database Server Editor: Highlighted the JDBC Driver ClassName if it cannot be resolved, meaning that the specified class cannot be found in the available JDBC Drivers
  • Added more options to synchronize I18N keys between the workspace and database in Servoy Developer
    • Read from DB: Option to sync the keys in the workspace (target) with the keys in the I18N table in the database (source)
    • Write to DB:  Option to sync the keys in the I18N table (target) in the database with the keys in the workspace (source)
    • Both option provide the option to remove keys that are in the target, but not in the source
    • Both options are available through the context menu of the Resources > I18N files node of the Solution Explorer

...

The CSS grid row styling is applied to all elements in the grid rows. The deprecated rowBGColorCalculation property supported individual cell styling as well: this functionality is replaced conditional formatting functionality though a new onRender event on form and Element level. See "Conditional formatting" below for more information.

Conditional formatting

Starting from Servoy 6 there is a new onRender event added to Forms, Portals and Elements. The aim of this event is to allow changing display properties of supporting components just before they are shown or updated. As such it can be used for conditional formatting for example and it complements the static styling options (setting properties on elements of through StyleSheets, semi conditional Styling (Row styling, see previous item) and the runtime API of all elements.

On Form and Portals the event is fired not only for the Form/Portal itself, but also for all the standard Servoy Elements on the Form/Portal, if the element does not have its own onRender event handler. The Form/Portal level onRedner event will not fire for beans.

...

  • getFailedRecords: optional JSFoundset parameter
  • getEditedRecords: optional JSFoundset parameter
  • New addTrackingInfo(...)
  • New databaseManager.dataSourceExists()unmigrated-wiki-markup
  • New createDataSourceByQuery(String name, String server_name, String sql_query, Object\[\] arguments, int max_returned_rows): Creates a datasource directly from an SQL statement, instead of having to create a JSDataSet based on SQL and then create the DataSource based on the JSDataSet
  • Wiki MarkupDeprecated&nbsp;getFoundSetDataProviderAsArrayDeprecated getFoundSetDataProviderAsArray() in favor of databaseManager.convertToDataSet(foundset, \ [beta:'columnName'\]).getColumnAsArray()

Miscellaneous

  • Deprecated rowBGColorCalculation property on Forms, in favor of CSS support for odd/even/selected styling and onRender event for finegrained stylinging control
  • Deprecated application.getStartupArguments(): the deeplink arguments are now also applied to the onOpen method of the login solution (were already applied to the onOpen method of the main solution), which makes the getStartupArguments() method obsolete
  • Deprecated i18n.setDefaultTimezone() in favor of i18n.setTimezone()
  • 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)unmigrated-wiki-markup
  • New JSFoundset.sort(Function, \ [beta:defer\])
  • New setRollOverImageURL(...) on Labels and Buttons
  • New getImageURL() on Labels
  • Deprecated .getTitleText() on fields in favor of a titleText property that also allows setting the titleText at runtime
  • 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
  • Newi18n.getCountries()
  • New i18n.setDefaulttimeZone()
  • Add support to utils.stringReplaceTags() to accept as input not only a JSFoundset or JSRecord but a RuntimeForm as well
  • New application.removeClientInfo()
  • Added UIConstant that determines whether readOnly fields remain readOnly in findMode or not:  APP_UI_PROPERTY.LEAVE_FIELDS_READONLY_IN_FIND_MODE
  • 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();
    }

...

  • Added plugins.textxport.textExport(...) to script the export
  • Added plugins.excelxport.excelExport(...)  to script the export
  • New plugins.mail.isValidEmailAddress(...)
  • The preferred size of Beans is now honored when placing beans onto a form in the Form Editor 
  • Added anchoring support for non-servoy-aware beans in the Web Client
  • Added setting on the Admin page to store the StyleClass name set on an element as a UIProperty on the element. The setting on the Admin page, "servoy.smartclient.componentStyleClassDelegatePropertyKey" allows to specify the name for the UIProperty. This information can then be read and used by, for example, Look and Feels.
  • For Beans that supply an Icon through a BeanInfo class, the Icon is now used in the display of the bean in the Form Editor Palette
  • Wiki MarkupSupport for multi-value property editors on beans (see Servoy 6 Public Java API for more details:&nbsp;<span style="color: #d3620d">[</span><span style="color: #d3620d"><a href=" [http://www.servoy.com/docs/public-api/6xx/com/servoy/j2db/dataui/PropertyEditorHint.html">http://www.servoy.com/docs/public-api/6xx/com/servoy/j2db/dataui/PropertyEditorHint.html</a></span>\|http://www.servoy.com/docs/public-api/6xx/com/servoy/j2db/dataui/PropertyEditorHint.html\]&nbsp;and&nbsp;\] and [http://www.servoy.com/docs/public-api/6xx/com/servoy/j2db/dataui/PropertyEditorOption.html\|http://www.servoy.com/docs/public-api/6xx/com/servoy/j2db/dataui/PropertyEditorOption.html\]
Miscellaneous
  • 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

...