Child pages
  • New in 7.4

Versions Compared

Key

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

...

  • SVY-4448 Added support for related find/search
  • SVY-4989 Enhanced the debug mode of the Mobile Client to read the Solution design live from Servoy Developer
    Since Servoy 7.3 code changes made while debugging are synced between the debug client and Servoy Developer. However, if the debug session would end and then restarted, the debug client would not have the latests latest code. In Servoy 7.4 the debug client reads the latest code from developer when launched, so it will always have the latest code, instead of having to do a full export if there was a codechange code change made since the last export
  • SVY-5336SVY-5164 Improved Mobile Export Wizard
    The Mobile Solution Export Wizard has been improved by remembering all settings of the previous export and allowing to press the Finish button on the first page of the Wizard if there was a previously successful export that can be repeated based on the stored settings. 
  • Switched to JQuery Mobile virtual click events to work around the standard 300ms delay for click events on mobile browsers
  • Improvements to ListView performance
  • SVY-5406 Added option to configure the order of inclusion for additional JS & CSS resources 
    See  the Mobile Solution Export Wizard
  • SVY-5528 Added option to not auto-sync on first login
    If the first form of the Mobile solution is not bound to a datasource, then the Mobile Client will not automatically perform a sync if the Solution is started for the first time. It is then up to the developer to call the sync method before accessing data. This way, the developer has control over how and when to perform synchronization and error handling in case of issues during the sync.
     

...

  • SVY-5210 Improved display of Excepted vs. Actual in case of failing UnitTests run inside Servoy Developer
  • SVY-3630 Support exporting to .servoy files from both the Export wizard in Servoy Developer as well as the command-line exporter, based on the .dbi files in the workspace, ignoring the actual database structure
    This feature is especially helpful when doing automated exports through the command-line, for example in a software factory setup
  • SVY-5195 Fixed initialization of Solution when relaunching Debug Smart Client
    Prior to this fix, in certain scenarios not all variables in scopes were initialized again in the newly launched Debug Smart Client
  • SVY-5613 Support for debugging self-executing functions (IIFE) assigned to variables
    Self-executing functions (or IIFE's) are functions that immediatly immediately execute themselves. This can be used to do initialization when a scope loads for example. Previously breakpoints inside such functions would never get hit.

    Code Block
    var init = (function(){
       //your code here
    }())

    Note that the outer parenthesis are not needed, but are considered a proper code convention for IIFE's 

Build system/JSDoc enhancements

  • SVY-5532SVY-5523SVY-5531SVY-5527 Improved support for JavaScript prototype inside code
    Servoy's Script Editor and Build system now have good support for JavaScript prototyping. This allows creating JavaScript objects using prototyping and having proper code


    TODO 

    completion and builder markers.
    Assignment directly to the prototype
    Assigning an object as prototype
    Deprecated members
    Protected members
    @extends for public/protected members that are added through by the constructor
    IIFE's for setting up the prototype

    Code Block
    /**
     * @constructor
     * @param {String} name
     */
    function BaseEntity(name) {
    	/* 
    	 * Storing name as a protected instance variable
    	 * @protected
    	 */
    	this.name = name
    }
     
    var initBaseEntity = (function(){
    	//Setting the prototype of BaseEntity to an object with a set of methods
    	BaseEntity.prototype = {
            publicMethod: function(){},
    		/*@protected*/
    		protectedMethod: function(){},
    		/*@deprecated*/
    		deprecatedMethod: function(){}
     }
     
    	//Extending the previously set prototype object with another method
    	BaseEntity.prototype.getName = function(){
    		return this.name
    	}
    }())
     
    /**
     * @extends tag signals the build system that public & protected members added through super constructor are known to code completion and the build system
     * 
     * @constructor
     * @extends {BaseEntity}
     * @param {String} name
     * @param {Number} type
     */
    function ExtendedEntity(name, type) {
        //Fail-save for when the ExtendedEntity gets called without the 'new' keyword 
        if (!(this instanceof ExtendedEntity)) {
    		return new ExtendedEntity(name, type)
    	}
     
    	//Calling the BaseEntity constructor, so that the logic defined in the constructor is invoked
    	BaseEntity.call(this, name)
     
    	/*@protected*/
    	this.type = type
    }
     
    var initExtendedEntity = (function(){
    	/* Setting the prototype of ExtendedEntity to an object that has BaseEntity.prototype as prototype
         * BaseEntity.prototype is not used directly as prototype for ExtendedEntity, as this would mean that any additions made to 
         * the prototype of ExtendedEntity would actually be made on the prototype of BaseEntity
    	 */
        ExtendedEntity.prototype = Object.create(BaseEntity.prototype)
        
    	//Properly set the constructor 
    	ExtendedEntity.prototype.constructor = SubConstructor
     
    	ExtendedEntity.prototype.getType = function(){
    		return this.type
        }
    }())
     
    function test() {
    	var x = new ExtendedEntity('Servoy', 'company')
     
    	application.output(x.getName()) //Yields 'Servoy'
    	application.output(x.getType()) //Yields 'company'
     
    	//These bits of code will result in warnings
    	x.deprecatedMethod
    	x.protectedMethod
    	x.name
    	x.type
    }
     
     
  • SVY-5615 Improved build system to handle special JavaScript methods like function.call, function.apply, function.bind and Object.create
    For .apply/call/bind, the build system will recognize that the .apply/call/bind method will return the same type as the function on which it is called, for example:

    Code Block
    var x = Object.prototype.toString.call(object) //Build system will know that .call will return a String, as it is called on the .toString() method of Object, which returns a String value
     
    function test() {
        var y = Array.prototype.slice.call(arguments) //Build system will know that y is an Array, as .slice() of Array returns an Array
    }

    For Object.create(object, properties) the build system will know that what Object.create returns has the same type as the value of the object parameter, enhanced with the (optional) properties (See Object.create for more info)

  • SVY-5827 support function types with rest parameters in typedefs

    Code Block
    /**
     * @typedef {{
     * 	name: String,
     *  handler: function(String, Number|*...)
     * }}
     */
    var MyType
  • SVY-5114 Improved support for Union Types in JSDoc
    TODO 
  • SVY-5113 Support builder markers when supplying a reference to a function object as value to another functions parameter, but the signature does not match
    TODO 
  • SVY-3555 Enabled the strike-through of deprecated member declarations in the Script Editor
  • SVY-5524 Exposed Error.stack property in scripting
    Allows getting the stacktrace of JavaScript Error objects 
  • SVY-5371 Support returning an instance of itself inside Constructor functions without warnings being generated
    This allows building in a fail-save for Constructor function not being called with the new keyword

    Code Block
    /**
     * @public
     * @constructor
     */
    function MyConstructor(name) {
    	if (!(this instanceof MyConstructor)) { //constructor is not called with the 'new' keyword
    		return new MyConstructor(name)
    	}
    	//rest of the constructor logic
    };
  • SVY-3049 Made the preference to initially fold the Header comment work (Preferences > JavaScript > Editor > Folding)
  • SVY-4876 Fixed the generation of JSDocs through the "Generate Element Comment" option to not insert an @return tag if the function does not return anything 
  • SVY-4226 Improved "move code" option of the Solution Explorer to not insert the scope prefix if inserting into the same scope

...