Last updated on 08/08/2017

Subject to change without prior notice

Download as Excel 97-2003 Workbook

Starting with version 2.20.1, FoxInCloud versionning follows the SemVer specification

Road map


    VersionReleasedBenefitFeatureModule(s)Contributor(s)

    Future (see history below)

  • 2.25.0
  • 10/01/2017Support extension Bootstrap Support, step 3.1:
    - use Bootstrap date picker instead of jQueryUI datepicker
    awHTML
    aw.vcx!aw*
      Support extension Bootstrap Support, step 3.2:
    - support for Checkbox|Optionbutton.Style = 2 && graphical
    awHTML
    aw.vcx!aw*
      Support extension Bootstrap Support, step 3.3:
    - render VFP menus using Bootstrap Dropdowns instead of jQueryUI menu
    awHTML
    aw.vcx!aw*
      Support extension 'Hyperlink' BaseClass is supportedaw.vcx
    awAJAX
    awHTML
      Support extension Support OLEClass 'MSComctlLib.TreeCtrl.2' [Microsoft TreeView Control V6 (SP4)] using Bootstrap treeviewaw.vcx
    awAJAX
    awHTML
      Support extension .ProgrammaticChange() supported - Automated Adaptation : do not execute .ProgrammaticChange() when .Value is changed by a Web .change() Event
    Add this code at the beginning of .ProgrammaticChange() source code:
    IF m.thisForm.wlInteractiveChange
    return
    ENDIF
    aw.vcx!awFrm
    FAA (awAdapter)
      Enhancement xxxTest|Prod.ini > UserStateWeeks supported
    for more details: modify file aw/app/xxxTest.ini
    awServer
    awConfig
      Enhancement Instantiate the same form multiple timesaw.vcx!awFrm
    awHTML
    awAJAX
    Mr Tuvia Vinitsky
      Productivity When user chooses the aw.vcx sub-ClassLibrary target Folder: default to the first project sub-folder containing the largest number of *.vcx, or *.scx, or *.prg, or root folderFAA (awAdapter)
      Productivity Allow FAA to start without an Internet connexion, in such case warn user that adaptation may not be up to dateFAA (awAdapter)
      Productivity Save current project view filters in user's initialization file (awAdapterStart.xml), and restore when loading projectFAA (awAdapter)
      Licensing awProcess.FoxInCloud_Status(): On-line CAS usage histogramsawProcess
  • 2.26.0
  • 12/01/2017Support extension Bootstrap Support
    Step 4: Finish migration from Prototype.js to jQuery.
    awHTML
    aw.vcx!aw*
      Enhancement In 'copy' (test) mode, copy all files located in folders where some project's source code resides.FAA (awAdapter)Mr Art Bergquist
      Productivity Modified properties identification (aw.vcx!aw???.wcPropSave): identify properties that are modified by other objects or classes
    [automated adaptation]
    FAA (awAdapter)
      Productivity Automated adaptation: replace DELETE FILE by wDeleteFile(file, @result)FAA (awAdapter)
  • 3.0.0
  • 02/01/2018Support extension Upgrade to West-Wind Web Connect 6.x
    Main benefits brought by this migration:
    - easier deployment and upgrade (.net-based webconnectionModule.dll replacing wc.dll)
    - enchanced UTF-8 support
    Anticipated behavior changes:
    - debugmode is evaluated at run time rather than compile time
    - For sending emails, wwIPstuff deprecated in favor of wwSMTP
    aw*.prg
  • 3.1.0
  • 04/01/2018Support extension Support all Locale ID, code page, and FontCharSet supported by VFPaw.vcx!awFrm
    awProcess
    Mr Tuvia Vinitsky
      Enhancement .PropsRestore_DS(): views of views are supported
    Requerying views now takes care of 'from' et 'where' clause dependencies
    awAJAX
      Productivity Code in Form.member.Init():
    warn developer that, this method being executed only once when Form is instantiated, all code depending on user's profile (ID, right, etc.) should be executed either in this.Refresh() (preferably), or thisForm.Init()
    FAA (awAdapter)
      Productivity Automated adaptation: wExist(), wVisible(), etc. :
    replace by awPublic.prg!wwExist(), wwVisible(), etc. ; in wwExist(), wwVisible(), etc., ASSERT in Web mode to warn that this feature is not supported
    FAA (awAdapter)
  • 3.2.0
  • 05/01/2018Enhancement Support thisForm.wcScriptJS*() for grid membersawHTML
      Productivity Automated adaptation: Replace
    _Screen.ActiveForm by wActiveForm(),
    thisForm.ActiveControl by wActiveControl(),
    release thisForm by thisForm.release
    FAA (awAdapter)
      Productivity Issue a warning if 'SUSPEND' is found in code
    (would hang the Web application)
    FAA (awAdapter)
      Productivity Automated adaptation: awOLEPDFxc class or sub-class; replace <this.src = …> by <this.tag = …>FAA (awAdapter)
      Productivity Automated adaptation: Classes and objects based on classes Column and/or Header : redefine as subclass of awPublic.prg!awCol and awPublic.prg!awGrhFAA (awAdapter)
  • 3.3.0
  • 07/01/2018Productivity In source mode, automatically backup project's source files before starting automated adaptations.FAA (awAdapter)
      Productivity grid.RecordSource = xx: warn that if grid.ColumnCount < 1, grid's columns need be reconstructed in grid.RecordSource_Assign()FAA (awAdapter)
      Learning 'Setting Application Environment' how-to Guide: SETs, public variables, sharing environment settings with LAN versionfoxincloud.com
      Learning 'Optimizing data management' how-to Guide: Private vs Default Datasession, tables, views and cursors, grid.recordSourcefoxincloud.com
      Learning 'FoxInCloud under the hood' how-to Guide: reference guide explaining FoxInCloud architecture and how a request gets processed across the various layers of the FoxInCloud stack: Browser, FoxInCloud.js, Web Server, West-Wind Web Connect, FoxInCloud Application Server, third party widgets such as ActiveWidgetsfoxincloud.com
      Licensing Secured FiC License administration page with on-line paymentawProcess
  • 3.4.0
  • 08/01/2018Look and feel wMessageBox(..., ..., 0|1)
    if wMessageBox() has parameter nDialogBoxType = 0 (OK button only) or 1 (OK or Cancel), offer developer an option to use standard javascript window.alert() or window.prompt() instead of xxx.vcx!xxxFrm.wcMessageBoxClass
    (by default aw.vcx!awFrmMB or subclass for application)
    aw.vcx
    awAJAX
    Mr Tuvia Vinitsky
      Productivity Automated adaptation: Error() method: in Web production mode, create an exception object and THROW it to FoxInCloud's main TRY CATCHFAA (awAdapter)
      Localization Localize all ASSERT messages into English*.prg
    aw.vcx
  • 3.5.0
  • 09/01/2018Support extension 'ToolBar' and 'Separator' Base Classes are supportedaw.vcx
    awAJAX
    awHTML
      Productivity Third-party modules: improve identification and segregation between FoxInCloud certified and othersFAA (awAdapter)
      Learning 'Implementing User Authentication' how-to Guide: what FoxInCloud does, what needs be implemented depending on whether security implementation is Application-based or Form -basedfoxincloud.com
      Localization Modules signatures (purpose, parameters descriptions and returned value) : localize into English*.prg
    aw.vcx
  • 3.6.0
  • 10/01/2018Support extension GetColor(): support through wGetColor()/aw.vcx!awFrmGCaw.vcx
    awAJAX
    awHTML
      Optimization Optimize grid state save and conversion into HTML/JavaScript (faster execution)awHTML
    awAJAX
  • 3.7.0
  • 11/01/2018Support extension When restoring datasession, cursor(s) not part of user's dataSession aliases are USED IN.
    Note: cursors part of user's dataSession not currently USED are reCREATEd and populated with user's data (FIC standard behavior)
    awServer
      Learning Hitting F10 launches FoxInCloud Module Explorer which:
    - allows searching among modules by criteria such as name, type, keyword in description,
    - adds modules signature to VFP intellisense (case, parameters and description)
    [formerly 'Abaque Module Explorer']
    abModule
      Learning Present FoxInCloud roadmap as a filterable list, allow user to suggest new entries and/or modification to current entriesfoxincloud.com
  • 3.8.0
  • 12/01/2018Look and feel For controls with Disabled* properties (e.g. Commandbutton), create a .disabled CSS class instead of changing HTML element's style propertiesawAJAX
    awHTML
      Look and feel New protected method in order to decide whether error should be presented to the user or sent to Application Administrator only.awProcess
  • 3.9.0
  • 01/01/2019Support extension Event 'DragDrop' is supported on serverFoxInCloud.js
    awAJAX
      Productivity lLogResponse parameter adds Response XML to the wConnect logawAppConfig
    awServer
      Learning 'Improving application look and feel with CSS and JavaScript' how-to Guide: how FoxInCloud generates default style sheets, at which level graphic appearance can be improved through application style sheet, how JavaScript can process 'surface' events (mouse and/or keyboard)foxincloud.comMr Tuvia Vinitsky
  • 3.10.0
  • 02/01/2019Support extension OLEClass 'MSComctlLib.ListViewCtrl.2' [Microsoft ListView Control V6 (SP4)] is supportedaw.vcx
    awAJAX
    awHTML
      Support extension Event 'Scrolled' is supported on serverFoxInCloud.js
    awAJAX
      Support extension Support form.VisibleawHTML
    awAJAX
      Look and feel Provide a set of standard FoxInCloud error pageswc.ini
      Look and feel Provide a set of standard FoxInCloud CSS style sheets to easily upgrade web application's look and feelawSetup
    awHTML
  • 3.11.0
  • 10/01/2018Support extension OLEClass 'MSComctlLib.ProgCtrl.2' [Microsoft ProgressBar Control 6.0 (SP4)] is supported for asynchronous processesaw.vcx
    awAJAX
    awHTML
  • NONE
  • Support extension 'FormSet' BaseClass is supportedaw.vcx
    awAJAX
    awHTML
  • TBA
  • Support extension Adapt Visual Promatrix to FoxInCloud (FiC Certified)Third party
      Support extension Adapt Visual MaxFrame to FoxInCloud (FiC Certified)Third party
      Support extension Adapt ctl32 to FoxInCloud (FiC Certified)Third party
      Support extension wReportForm() using either FoxyPreviewer, XFRX or FRX2AnyawPublic.prg!wReportForm()
      Enhancement Callback method can be a member of an object stored in either a global variable or a _Screen.property
    So far Callback methods could only be members of form or form members
    awServer
    FoxInCloud.js
    v&u
      Optimization Identify modified properties at runtime instead of design timeaw.vcx
    awAJAX
    M. Gregory Adam
      Look and feel Support the DHTMLx widgets libraryawAJAX
    awHTML
      Look and feel Support the Sencha / ext.js widgets libraryawAJAX
    awHTML
      Productivity Automated adaptation: move call-back code to a call-back method if no variable dependencies is detected within this codeFAA (awAdapter)
      Productivity If an adaptation feature is part of FoxInCloud road map, mention version and scheduled date in adaptation hintsFAA (awAdapter)
      Productivity Member objects referenced by their default name (e.g. COLUMN1) : warn developer that this name may be reset to a different default if member objects are reconstructed (e.g. grid column rebuilt when RecordSource changes)FAA (awAdapter)
      Learning 'Developing a FoxInCloud Application Server' how-to Guide about the whole process of development, from creating the project to deployment on the target machine;
    references other how-to guides
    foxincloud.com
      Learning When adaptation is covered by a how-to guide, provide a link to the on-line how-to guideFAA (awAdapter)

    History

  • 2.24.0
  • 03/01/2017Behavior change xxxServer.cFrmMBclass and xxxServer.cFrmIBclass replace awFrm.wcMessageBoxClass / awFrm.wcInputBoxClass and awPublic*.h constants
    Because compilation constants in awPublic.h / awPublic_override.h can fail because of changes in set('path') at compile time, we define these classes at server level so that they can be accessed from anywhere, either from an independent procedure or a form member method.
    Please make sure to manually add these properties to your xxxServer.prg; you can just copy and paste the corresponding lines from aw\app\progs\xxxServer.prg
    awPublic.*
      Behavior change awPublic_override.h expected in project folder
    File tools\ab\awPublic_override.h replaced by tools\ab\awPublic_override_.h, a template for you to copy and build your awPublic_override.h in project's folder.
    This new design allows project-specific settings such as the messagebox class for the wMessageBox() function.
    Please read comments in tools\ab\awPublic_override_.h for more information.
    awPublic.*
      Support extension Bootstrap Support, Step 2:
    - render VFP form using Bootstrap responsive grid system
    - implement horizontal forms, input groups and button groups
    - replace Prototype Window by Bootstrap modal
    awHTML
    aw.vcx!aw*
  • 2.23.0
  • 12/15/2016Behavior change VFP base classes removed from generated awDefault*.css
    In xxx.css, make sure to replace any .<vfpbaseclass> {} CSS directive by a .aw???{} directive, where ??? is the standard VFP abbreviation for base class;
    eg replace any ".commandbutton" by ".awcmd"
    awHTML.gen
      Productivity Errors are now recap'd at the end of execution log
    (enhancement suggested on https://support.west-wind.com/)
    If any error is encountered during Analysis or Adaptation, these error(s) are now recapitulated at the end of FAA log.
    You can display FAA log by clicking the document icon located between buttons '2-Analyze' and '3-Publish' at the top right of the form.
    FAA (awAdapter)
      Productivity .Analyse_Member() : workaround for *.vcx location error
    If a class library was moved to another location after being subclassed into a *.?cx, .ClassLoc is no longer in sync AND FAA can't find the class library at the specified location.
    The workaround is to search a *.vcx with the same name in the project - if only one file matches, FAA takes it as the parent class library.
    This should minimize execution errors in the .Analyse_Member() method, e.g.:
    [Error #: 1733 / Class definition xxxx is not found]
    FAA (awAdapter)
      Productivity First time user switches to 'production mode' or loads a new project, FAA prompts the user to analyze it.FAA (awAdapter)M. Luc Gilot
      Look and feel Use CSS classes for state changes
    For state changes such as disabled, readonly, hover, active (page), change display by switching CSS classes rather than changing the HTML element's in-line style.
    Hence you can easily change visual display of such states by redefining the corresponding CSS class in xxx.css;
    aw.vcx
    awHTML
    Mr Tuvia Vinitsky
      Enhancement New functions wcIconFA() and wcIconGI()
    Returns a 'font awesome' / 'GlyphIcon' icon (http://fontawesome.io/icons/, http://glyphicons.com/) that you can insert anywhere in some text
    (an empty string in desktop mode).
    Requires that you set at design time or in xxxServer.Init(): xxxServer.lFontAwsomeAdd = .T.
    xxxServer.lBootstrapAdd = .T.
    Documentation and examples: modify command awPublic > wcIconFA()
    awPublic.prg!wcIconFA()
      Enhancement Persist form.DataEnvironment.members.propertiesawServer.prg
    awAJAX
    v&u
      Enhancement When running in 'copy' (test) mode, prompt user to open all source code files as read-onlyFAA (awAdapter)Mr Art Bergquist
      Enhancement Handle DoDefault() instructions
    Whenever a FoxInCloud requires a DoDefault() in user code to execute FoxInCloud code inherited from aw.vcx class:
    - if none exist, FAA adds it automatically,
    - if one exists but not properly located, FAA warns user to move the instruction to the appropriate location
    FAA (awAdapter)
      Support extension wForm() function supports a call-back method as 2nd parameter in Web mode
    Function wForm() displays a form from within an independent procedure or function (modify command awPublic)
    You can now specify a method as second parameter; FoxInCloud considers this method as relative to the control or form where current user action has occurred.
    If no form or control is current, eg. when calling wForm() from a menu element, the method specified is considered as an order to display the form as modal.
    Typical use case for this new option is to refresh the control or any of its parent when child form is closed:
    wForm('Form.scx', 'wFormCallBack')
    procedure wFormCallBack
    lparameters tuUserChoice
    this.parent.refresh()
    awPublic > wForm()M. Vincent Helleboid
      Support extension Support OLEclass 'Shell.Explorer.2' [Microsoft Internet Explorer]
    Supports .Navigate() and .Navigate2(); make sure your code in these methods calls dodefault(m.url).
    Other parameters of these 2 methods are not supported: flags, targetFrameName, postData, headers.
    In Web mode, as navigation to the specified URL doesn't occur, events .*Navigate*() don't fire and status properties don't change: .ReadyState is always READYSTATE_COMPLETE (4), .Busy is always .F. and .locationURL remains empty
    aw.vcx
    awAJAX
    awHTML
      Support extension
    Behavior cha
    Bootstrap Support
    Phase 1
    - new property awFrm.vcx!awFrm.wBSlHTMLgen (that any app form inherits from) to choose between Classic-VFP or Bootstrap HTML rendering; at this stage, absolute positioning remains.
    - new property xxxServer.lBootstrapAdd to load Bootstrap CSS and JS resources into each page
    - state changes (enabled/readonly/checked/active) : replace in-line style modification by class addition / removal (with the corresponding CSS generated) so that it can easily by overloaded by custom `xxx.css`
    - VFP base classes removed from generated awDefault*.css: in xxx.css, make sure to replace any .<vfpbaseclass> {} CSS directive by a .aw???{} directive, where ??? is the standard VFP abbreviation for base class; eg replace .commandbutton{...} by .awcmd{...}
    - start deprecating `Prototype.js` in favor of `jQuery`: as Bootstrap relies on jQuery and Prototype.js is hardly ever updated, we'll progressively deprecate Prototype.js and rely on jQuery only.
    - identify pairs label-control automatically
    - layout in the Bootstrap 'grid' system generated based on the VFP form layout.
    - render embedded child forms using Bootstrap Modal instead of deprecated Prototype Window Class
    awHTML
    aw.vcx!aw*
      Support extension Support for forms defined in foxels (.ScaleMode = 0) as opposed to pixels (.ScaleMode = 3)
    For a demonstration, see http://foxincloud.com/tutotest/foxel.tuto
    aw.vcx
    awHTML
    Mr Lachmayya Siddanmane
  • 2.22.0
  • 10/15/2016Behavior change jQuery is now required; xxxServer.ljQueryAdd is ignoredawServer
      Learning FoxInCloud samples installed automatically
    Other optional installs: SQLserver 2014 express and PDFXViewer 2.5
    FoxInCloud studio
      Fix wForm() accepts .null. as second parameter meaning "define modality based on .WindowType"
    FAA now uses .null. as default for wForm() second parameter when Form does not return any value
    FAA
    aw.vcx!awFrm
      Fix Child grid no longer skips unadvertedly to first rowaw.vcx!awGrd
      Fix Improved support for menu instruction ON SELECTION POPUP name [command]
    FAA continues adapting menu instructions after an error has occurred
    FAA (awAdapter)
      Fix Fixed bug when restoring set('CPTRANS')abDev.prg!abSetsMaintainMr Tuvia Vinitsky
      Fix wForm() returns a reference to modeless forms
    wForm() now returns the following values:
    - failure: .null.,
    - modeless: reference to form object,
    - desktop and callback (thisForm.wForm() only): .callback() result,
    - modal: .show() result
    aw.vcx!awFrm.wForm()
    awPublic.prg!wForm()
    M. Vincent Helleboid
      Productivity Support link in Form title bar:
    prompt user for bug comments and send notification message from server with user's form state table attached
    FoxInCloud.js
    awAJAX
      Productivity When updating production server, save up to 10 dated versions of server executableawServerUpload
      Look and feel Improve image and text position on button according to .PictureMargin, .PictureSpacing and .PicturePositionawHTML
      Enhancement Child form position saved when moved and restored next time user opens itawScripts/*.js
    awProcess
      Enhancement In Web mode, disable grid row change when !grid.Enabledaw.vcx!awGrd
    awHTML
    Mr James Patterson
      Enhancement No longer need to re-set .RowSourceType before assigning .RowSourceaw.vcx!awLst
    aw.vcx!awCbo
    FAA
      Enhancement .RowSourceType = 2 (Alias): Recno(.RowSource) in sync with .ListIndexaw.vcx!awLst/CboM. Vincent Helleboid
      Enhancement Support for dynamic update of list contents with .ColumnCount > 1awServer
    awHTML
      Enhancement Added datasession sets view
    Click on the 'DataSession' word to see the settings for this dataSession.
    FoxInCloud-status.xxx
      Enhancement Added last form used by user, and link to end a user sessionFoxInCloud-status.xxx
      Enhancement Support for form and members resize based on .Anchor.
    Whenever a form has .borderStyle = 3 (resizable) or saves .Width and/or .Height, .resize() is implemented on the browser, server adjusts member controls based on .Anchor and reflects these changes in the browser.
    Server saves each form's dimension in user session so that it displays with the same size next time user opens the same form.
    aw.vcx!awFrm, awCnt, awPgf
      Enhancement xxxSets.Init(): you can now use SET instead of this.set() - plain SETs will be restored when application unloads
    For back compatibility, this.set() is still supported.
    Supported sets are listed in: modify command abDev > abSetsMaintain.init()
    awPublic.prg!awSets
    xxxSets.Init()
      Enhancement Modal form.scx in desktop/LAN mode: private variable created before .Show(1), named as justStem(form.scx), holding a reference to the form (behavior similar to DO FORM)aw.vcx!awFrm.wFormShow()
    awPublic.prg!wFormShow()
    M. Vincent Helleboid
      Enhancement Changing .BorderStyle dynamically supported in Web modeawHTMLM. Vincent Helleboid
      Enhancement Checkbox, Optionbutton labels support being dynamically moved and resized in web mode
    Whenever a Checkbox or Optionbutton is moved and/or resized during a user event, the associated label, if any, is moved and/or resized accordingly.
    (this is another step towards supporting form.resize() in web mode)
    awAJAX
    awHTMLgen
    M. Vincent Helleboid
      Enhancement New sample form with an online signature
    on line acquisition of a user signature, upload to the server and display of the resulting image in a form: http://foxincloud.com/tutotest/signature.tuto
    FoxInCloud TutorialSig. Michele Bosetti
      Enhancement New property in xxxServer.lFormVariableCreate
    lFormVariableCreate = .T. && store a reference to each form(.scx) into a public variable named as the variable that DO FORM creates by default.
    awServer
    xxxServer
    M. Vincent Helleboid
      Enhancement Dynamic PageFrame.resize() supportedawServer
    FoxInCloud.js
    M. Vincent Helleboid
      Enhancement In case of multiple chained errors during the same transaction, send a single error email when the first error occurs.awServer
    awProcess
      Enhancement Administration form to easily analyse production application errors.
    This form allows you to easily review the errors encountered by your production application, either locally, in your VFP IDE, or on-line, by clicking the link in your 'FoxInCloud Application Server dashboard' available at .../foxincloud-status.xxx
    aw.vcx!aw???LogError
      Enhancement To easely debug a production server, replay the same user requests in your VFP IDE.
    If you face a bug on your production server that you can hardly figure out, just download the request log using xxx*.requestLogGet.prg, and run the new xxx.requestLogReplay.prg
    You need several VFP IDE open simultaneously:
    - 2 or more where you run your FoxInCloud Application Server (FAS). If your production server runs several COM objects, running at least 2 instances of FAS is recommended.
    - 1 where you run xxx.requestLogReplay.prg.
    For your server to stop when an error occurs, you need to compile your project in development mode (using atPJcompileDebugMode.prg) before running your FAS instances.
    awStart.prg > awRequestLogRreplay()
    aw/app/progs/xxx.requestLogReplay.prg
      Support extension Upgrade to the latest versions of JS libs
    Prototype 1.7.3, jQuery 3.1, jQueryUI 1.12
    This drops support for IE8
    awScripts/*.js
    awProcess
  • 2.21.1
  • 07/01/2016Fix Wait until Windows has actually erased the old form state files before renaming the new ones as old
    Seemingly, ERASE files.* can take some time before Windows has completed the job, in what seems to be an asynchronous process.
    awServer.prg!awAJAX.propsReplace() now catches the rename error and sleeps until the file name is really available to avoid the error 1705 "file access is denied" when renaming.
    awServer.prg!awAJAX.propsReplace()
      Fix Saving collections that are form membersawAJAXMr Donald McLeod
      Fix Adapted tastrade sample to the current version of FoxinCloud.Samples\Tastrade
      Enhancement Setting logRepData = On in xxxTest|Prod.ini adds server response data to wwRequestLog
    This setting should be used for debugging purpose only, as it'll increase the size of wwRequestLog.fpt very rapidly.
    awServer
    xxxTest|Prod.ini
      Enhancement Production Application update improved
    awServerUpload() now updates automatically:
    - the whole site if a new version of FoxInCloud iw detected,
    - the default style sheet (awDefaultAll.css) if any of the application's class library has changed since last generation.
    awStart.prg
    xxx*.Update.prg
      Enhancement In Web mode, set/get a persistant user variable from inside the form code using thisForm.wSessionVarSet/Get()aw.vcx!awFrm
      Enhancement Workaround error "List Index received (xx) should range between 0 and yy".
    This error occurs in a multi-criteria selection scenario, when user selects a value in a child combo before its list is refreshed be a previous selection in the parent combo list
    This case not being a real error, the workaround consists in 'canceling' the user selection without raising an error
    aw.vcx!awCbo
    aw.vcx!awLst
      Enhancement Form state tables attached to Application Error email.
    The Form state tables are an valuable resource to evaluate the cause of the application error
    awAJAX.lSuccessM. Gilles Lajot-Sarthou
      Enhancement If a production Application Server fails to start, system sends a notification email to Administrator and message is more user-friendly.
    Make sure all data are populated in xxxProd.ini!
    awAppHostMr Tuvia Vinitsky
      Enhancement Recover from fatal application errors
    If for some (very rare) reason a form gets corrupted (eg a grid loosing its member columns because .recordSource was USEd IN), FoxInCloud Application Server (FAS) catches the error, re-instantiates the form and retry the user request. FAS silently logs the error for further reference.
    User only feels a slightly longer response time due to the form re-instantiation.
    In case the second attempt also fails, an error notification email is sent to app administrator with cc to FoxInCloud support.
    awServer.prg
    aw.vcx!awFrm
    M. Gilles Lajot-Sarthou
      Enhancement Request Log and FoxInCloud Application Server status page (dashboard) now mention the Internet and browser response times, and the AJAX response size.
    Thanks to the tight integration of client (FoxInCloud.js) and server, each user request (AJAX) provides to the server the response times of browser and Internet of previous request together with its ID, data that server stores into the request log (wwRequestLog).
    Knowing the amount of data returned by the server can be useful clue to optimize response times, especially when mitigated with Internet response time.
    awProcess
    awAJAX
    FoxInCloud.js
    aw.prg
      Enhancement New 'FoxInCloud' menu item in FoxInCloud`Web Application Studio for Development
    You can now start sample apps right from the FoxInCloud menu Item.
    Splash screen is modernized, an no longer requires a click (trial version)
    aw.prg
      Enhancement New sample form with a Google Map
    For more information, please see this blog post: <a href="http://foxincloud.com/blog/2016/04/21/Adding-Google-Map-to-a-FiC-Form.html">Adding a Google Map to a FoxInCloud Form</a>
    FoxInCloud TutorialM. Gilles Lajot-Sarthou
      Enhancement New signature for awProcess.cawJSinc() & .cawCSSinc()
    2 parameters were added to these 2 methods; If you've implemented them in your xxxProcess class, make sure to replace the lparameters intruction as follows:
    LPARAMETERS ;
    tcJSAdd; && [''] {en} Application, current form[, and custom]
    , toForm as awFrm of aw.vcx; && {en} Reference to form && 2016-04-20 thn -- {FiC V 2.21.1} added parameter
    , tcForm; && {en} .Name of form && 2016-04-20 thn -- {FiC V 2.21.1} added parameter
    awServer.prg!awProcess.cawJSinc & .cawCSSincM. Gilles Lajot-Sarthou
      Enhancement FWAS startup supports default directory stored in the registry by using the 'set as default' button of the VFP 'tools > options > File location' menu.
    The FoxInCloud Web Application Studio now works around this default directory and sets the standard current directory to home(1) + "tools\ab\wc" instead.
    aw*.fpw
    awStart.prg
    aw.prg
    Mr Donald McLeod
      Enhancement Custom date separator supported
    You can now specify a custom date separator character by adding this line in xxx.js:
    dateSeparator: '.',
    // or '-' or ...
    Make sure the character you specify == what you have in Set('Date') and/or Set('Mark')
    FoxInCloud.js
    xxx.js
    Sig. Michele Bosetti
      Enhancement Support for random alias names for permanent record sets.
    Though not advisable, you can use sys(3) or sys(2015) to build your aliases names for static cursors that live longer than a user event.
    Before making this decision, think that when running with several servers, the FoxInCloud status page (foxincloud-status.xxx) will display different aliases according to the server where the page was built. This maybe somewhat confusing and complicate debugging.
    Of course temporary cursors that live no longer than the user event where the were born are not concerned.
    awServer.prg
    awAJAX
    Sig. Michele Bosetti
      Enhancement Licensed users: the FoxInCloud Application Studio shortcut no longer needs to 'run as an administrator'
    Thanks to InstallShield pro features, all users now have full rights on home(1) + 'tools\ab\*'; Windows no longer stores user-modified files in this directory tree into C:\Users\"user"\AppData\Local\VirtualStore
    Installation
      Enhancement Maintenance URLs changed from 'bin/wc.dll' to 'wc.wc'
    This prepares the future migration to WC5/6 and complies with IIS default settings.
    PRODUCTION SITE - IMPORTANT:
    BEFORE updating your app with this version using xxxProd.update.prg, you need to do this on on your development and production machines:
    - add a script-mapped extension for '*.wc' pointing to your wc.dll, with exactly the same settings as the '*.xxx' scriptmap of your application; see:
    <img src="ftp://foxincloud.com/screenshots/ScriptMapApp.png">
    <img src="ftp://foxincloud.com/screenshots/ScriptMapWC.png">
    - In your *.ini files, replace 'bin/wc.dll' by 'wc.wc'
    - replace your site/admin/admin.asp file by ab\aw\app\site\admin\admin.asp
    This modification is upward compatible with a previous version of FAS.
    admin.asp
  • 2.21.0
  • 04/01/2016Fix Error "Uniqueness of index wwSession is violated" (Error 1884) fixedawServer.prg!wwSession
      Fix .RowSourceType = 7 (File list): sort order is the same as in VFP .List
    Selecting a file or folder in the list now gets the right .Value on server side.
    Problem occurred mainly when some file or folder names in the list began with '_'.
    Test area : http://foxincloud.com/tutotest/RowSourceType.tuto, .RowSourceType = 7, File list: Selecting a file or folder in the list now displays the right value in the textbox below.
    aw.vcx!awCbo
    aw.vcx!awLst
      Fix When changing a inheritable grid property such as .ReadOnly, columns keep their proper setting
    When setting grid.ReadOnly to .F., columns which are .ReadOnly remain so (these columns previously inherited from the grid.ReadOnly change regardless of their proper setting).
    To experience this, http://foxincloud.com/tutotest/dataUpdate.tuto, choose 'RView'; grid is .ReadOnly because not CursorGetProp("FetchIsComplete", .RecordSource). When you reach the very last row in the grid, CursorGetProp("FetchIsComplete", .RecordSource) is .T. and, while Grid.ReadOnly turns to .F., the first column holding customerID remains .ReadOnly.
    Application code is:
    procedure grid.Refresh_()
    this.ReadOnly = !thisForm.FetchIsComplete()
    this.columns(1).ReadOnly = .T. && customer_ID should remain .ReadOnly
    aw.vcx!awPDF*
      Enhancement Discourage user from reloading the page (using eg F5) during an event AJAX request
    If user reloads the page holding a form where a user event (such as .Click) has occurred and is being processed by the server, server can in certains cases execute the page reload before the user event, causing instability in form state on server side.
    To avoid this behavior, the 'F5' key is disabled in browser when a user event starts and enabled back when browser receives a response from the server.
    This enhancement eliminates almost all runtine errors on multi-server, high-load FoxInCloud Applications; for example, a FiC application with 6 production COM servers for 150 named users serves 25,000 events request a day on 35 forms with no more than 5 errors (over 99.9% availability).
    FoxInCloud.jsM. Gilles Lajot-Sarthou
      Enhancement New config setting nTableExclusiveMS (modifiable on line)
    Between(nTableExclusiveMS, 200, 5000)
    Delay (ms) for a server to wait until it can USE a table EXCLUSIVE.
    Applicable to production applications with several servers (file or COM modes).
    Adjust in xxxProd.ini if users frequently get messages such as "Another Server is processing your previous request ..."
    Minimum value: maximum duration of a user action on an application's form.
    However, server stops waiting as soon as it can gain exclusive access to the table.
    awServer
    xxxProd.ini
      Enhancement Hook methods awFrm.wUserAction_Ante() and awFrm.wUserAction_Post() to validate user action in web mode
    Implement these methods whenever you need to either:
    - do something before or after any user action on the form,
    - check that user is entitled to this action;
    if .wUserAction_Ante() returns:
    - .T. (default): user action executes normally
    - .null.: user action does not execute silently (you should decide what to do next, such by as calling .wNavigate())
    - a not empty value: user action does not execute and an error is raised with the value as message
    - anything else (such as .F.): user action does not execute and an error is raised
    if .wUserAction_Post() returns:
    - .T. (default): user action executes normally
    - .null.: user action is canceled silently (you should decide what to do next, such as by calling .wNavigate())
    - a not empty value: user action is ignored and an error is raised with the value as message
    - anything else (such as .F.): user action is canceled and an error is raised
    Eg. If your main form is also your login form (.wlAnonymousAllowed), you can deny anonymous user actions on certain areas of the form:
    PROCEDURE wUserAction_Ante
    lparameters tcVFPhandler, tlPropAssign, tuValue
    if this.pgf.activePage > 1 and eof('userAlias') && user is not identified
    this.wNavigate(.T.) && return to home page with an identification warning (.T.)
    return .null. && prevent user action without an error message
    endif
    Live test: http://foxincloud.com/tutotest/Modal.tuto > do form > click button 'session expired'
    aw.vcx!awFrmSig. Michele Bosetti
      Enhancement In case of error in menu definition, especially if a different menu has been set (eg initial menu), application moves back to home page for user to log back in.awServer.prgM. Gilles Lajot-Sarthou
      Enhancement New grid setting: gridRowChangeDelayClicked
    When user navigates rows using mouse, delay in seconds before sending row change event to the server -- <= 0 to send right away. Default Value is 0 for back-compatibility with previous behavior.
    For more information:
    modify file Home(1) + '\tools\ab\aw\app\site\xxx.js '
    FoxInCloud.js
    xxx.js
    Mr Tuvia Vinitsky
      Enhancement Option to send .wFileSaveAs() into a browser's new window
    For scenarios where users use a dual monitor configuration, you can display downloaded files such as PDFs into a separate browser window that user can dimension and move around as she/he sees fit.
    Whenever user closes this extra window, server stores its dimensions and position into the user's session for later reuse.
    Note: for this feature to operate, browser must not display in full screen mode.
    aw.vcx!awFrm.wFileSaveAs()
    FoxInCloud.js
    STI
      Enhancement xxxTest|Prod.update.prg (based on awStart.prg!awServerUpload()) updates production Web App's executable, site and shared resources.
    awStart.prg!awServerUpload() now fully updates, based on GMT file date-times:
    - your production app: whenever your compiled executable weighs less than the VFP maximum size for variables (16 MB, we'll work around this limitation in a future release *), awServerUpload() uploads it to whatever location is defined in wc.ini!UpdateFile (Make sure to set wc.ini's 'UpdateFile' key to a valid address) ; 'Traditional' FTP upload occurs whenever this feature fails - see below.
    - your application site: mainly awDefaultAll.css, xxx.js, xxx.css, and the Images\ folder; make sure that the 'ImagePathPhysical' key is properly set in your xxxTest|Prod.ini files.
    - FoxInCloud Web resources: /awScripts from local (Home(1) + 'Tools\AB\AW\Scripts'): any new file coming with a new FoxInCloud Version (eg FoxInCloud.js) automatically uploads to your production server; make sure that the 'ScriptPathPhysical' key is properly set in your xxxTest|Prod.ini files
    * until this 16MB limitation is removed, if your exe weighs more than this limit, you need a FTP access to the wc.ini!UpdateFile folder (standard name is 'Upload'):
    - FTP server software: you can either use Windows standard installed with IIS (make sure to check in Windows features), or a free software such as FileZilla server
    - Security: a simple way to secure your 'Upload' FTP folder: install it in a private zone, define 'write' access only, restrict to Windows account defined below and/or your office's IP
    - Make sure to set wc.ini's 'UpdateFile' key to the full physical address of your exe in this folder
    - Make sure that the account under which the 'FoxInCloud' Application Pool runs has read-access to this folder
    awStart.prg
    xxxTest.update.prg
      Enhancement AJAX request wait pictogram appears when executing a call-back method after closing a modal form opened by a control member of a grid columnFoxInCloud.js.MethExec()STI
      Enhancement FoxInCloud Application Server status page: CPU load addedawServer.prgSTI
      Enhancement Support for child form intantiation in Form.Init() code
    You can now display a child form such as a message box while opening a new form, and get user's response into a call back method of this form or any of its member.
    Please note that support is limited to:
    - child forms called by wForm(); support for wFormMaster(), please see roadmap.
    - !thisForm.wlInitFirst, IOW when form.init() executes for a 'real' user.
    aw.vcx!awFrm
    awAppHost
      Enhancement In web mode, messageBox height adapts to the message content
    Just like using the system messageBox in desktop/LAN mode, Web messageBox height adapts to the number of lines in Textbox message (taking into account word wrap by browser).
    For FoxInCloud, .Height set at design time is taken as the minimum.
    aw.vcx!awFrmMB
    acTxt.prg
    STI
      Enhancement In web mode, remote views with CursorGetProp("FetchSize") > 0 should be CursorGetProp("FetchAsNeeded")
    When CursorGetProp("FetchSize") > 0 without CursorGetProp("FetchAsNeeded"), as VFP fetches records during idle time, the cursor state can be unstable when requery() executes.
    In this case, aw.vcx!awColView.wSave() issues a warning to either set:
    - if total view reccount is limited (say less than a 1,000, or if view can be filtered: DBsetProp("FetchSize", -1) to load all records at ounce;
    - otherwise, DBsetProp("FetchAsNeeded", .T.).
    In the VFP IDE, when the view designer is open, you can set these properties by either using the menu > query > advanced settings dialog, or by editing the SQL (click 'view SQL' in the view designer).
    You can also set the default values for these remote view settings using tools > options > remote data, and click 'set as default'
    aw.vcx!awColViewMr Tuvia Vinitsky
      Enhancement Store form state tables in a user-specific sub-folder of the .\Temp folder
    This enhancements provides the following benefits:
    - reduce the number of files in the app temp root and the VFP temp folder, hence less time spent finding files and no longer need to purge temp folders;
    - some additional state data such as grid contents can be stored as tables, hence a possible recycling across user requests and access to some commands not working with cursors such as COPY TO.
    /!\ Updating Production Applications require that ALL USERS ARE DISCONNECTED. URL foxincloud-status.xxx tells you that.
    Purging the temp\ folder after stopping server and before updating app is recommended
    awAJAX
      Enhancement Grid and grid members: .ReadOnly and .Enabled dynamic changes better supported
    Changing grid.*.ReadOnly|Enabled could be not reflected on the client browser in some specific cases like non-inheritence forced at design time.
    Inhibiting a inheritence optimization algorithm in these 2 specific cases solved them.
    Hint: you can change .ReadOnly or .Enabled, avoid changing both.
    awHTMLgenM. Gilles Lajot-Sarthou
      Enhancement Easier keyboard navigation within paged grid
    When browsing rows in a paged grid using the keyboard:
    - pressing the 'up' key on the first visible row loads the previous page if any
    - pressing the 'down' key on the last visible row loads the next page if any
    - pressing 'ctrl+home' on any row moves to the first row in grid.recordSource
    - pressing 'ctrl+end' on any row moves to the last row in grid.recordSource
    aw.vcx!awCntGrdPage
    awHTML
      Enhancement New Web grid setting: "gridColChangeDelay" delays execution of column change event, and transmission to server.
    gridColChangeDelay has a behavior similar to pre-existing gridRowChangeDelay setting.
    Note: this setting has no effect when cell .MouseDown and/or .MouseUp() events are implemented; for more information:
    modify file Home(1) + '\tools\ab\aw\app\site\xxx.js'
    awHTML.prg
    FoxInCloud.js
    xxx.js
      Enhancement Clearing awOLEPEF*.tag releases the PDF file currently displayed
    In LAN/desktop mode, you may need to manipulate the PDF file right after user has displayed it; to do so, set:
    .tag='' && or any string that is not a valid PDF file address
    aw.vcx!awOLEPDF*M. Gilles Lajot-Sarthou
      Enhancement In menu definition (mnx), Prompt and/or Message with language tags automatically localize at run time
    By adding language tags such as {en}, {es}, {fr}, etc., awGenMenu.prg, wMenu() and awMenu automatically pick up the right language at run time in both desktop/LAN and Web versions of the application, based respectively on user's OS and preferred language set in user's browser. {en} is the default when user's language can't be found in the string and/or is empty.
    See sample localized captions in:
    MODIFY MENU Home(1) + "tools\ab\aw\samples\fic\fictuto\progs\menus\tuto"
    eg.:
    {en} Home {fr} Accueil {es} Inicio.
    See also the menu program generated by awGenMenu :
    MODIFY COMMAND Home(1) + "tools\ab\aw\samples\fic\fictuto\progs\menus\tuto.mpr"
    awGenMenu
    awMenu
      Enhancement Remote view progressive fetch support
    (A) REMOTE VIEWS
    Remote views fall into 3 categories:
    (1) without progressive fetching [using CursorSetProp(xx, "VIEW", "FetchSize", -1)]
    (2) triggered progressive fetching [using CursorSetProp(xx, "VIEW", "FetchSize", >0) and CursorSetProp(xx, "VIEW", "FetchAsNeeded", .T.)]
    (3) automatic progressive fetching [using CursorSetProp(xx, "VIEW", "FetchSize", >0) and CursorSetProp(xx, "VIEW", "FetchAsNeeded", .F.)]
    - (1) was supported before this release
    - (2) supported by this release
    - (3) bears the risk that the view keeps fetching more and more data along user action: if this ever happens, the view requery delay may exceed the acceptable response time; however, this might still be acceptable if the view's CursorSetProp("MaxRecords") or the base table record count is reasonable. However, in such case, FoxinCloud forces CursorSetProp("FetchAsNeeded", .T.) and issues a warning in development
    (B) LOCAL VIEWS AND CURSORADAPTER CURSORS
    We take advantage of this evolution on remote views to expand support of other kind of views:
    - (a) persist all read-write CursorGetProp() properties -- whenever a user event method changes any of the writable CursorGetProp() properties, FoxInCloud Application Server (FAS) restores these properties at next user action
    - (b) persist Used(view) -- whenever a user event method USE IN (some view), FAS USE it back for other users, IOW maintains whether this view should be used or not for each user.
    - (c) keep views used in the same order -- So far FAS kept view definitions in an empty object; it'll swith to a Collection to ensure views are always saved and restored in the same original order. This will provide a better support of inter-dependent views such as views of views and view parameters set as a field of another view. A collection will also provide a faster, direct access to a given view definition (the lower case view alias being the collection's key)
    aw.vcx!awFrm
    aw.vcx!awColView
    awHTML
    awAJAX
    Mr Tuvia Vinitsky
      Enhancement Constant to compile in either current or previous major/minor version
    When minor version changes (2nd figure), if ever you face problems in production, you can now downgrade to previous version using a compilation constant.
    Typically:
    #ifdef PREVIOUS_FIC_VERSION
    previous code
    #else
    current code
    #endif
    To step back to previous version, you just need to overload the definition of the 'PREVIOUS_FIC_VERSION' constant in your include file:
    modify file home(1) + 'tools\ab\awPublic_override.h'
    Detailed procedure is explained in:
    modify file home(1) + 'tools\ab\awPublic.h'
    Notes:
    - This feature only applies to users with a full production license;
    - As some evolution may have not been propertly bracketed by this compilation constant, we recommend you keep the previous version's installation side by side with this one.
    awPublic.h
    aw*.*
      Enhancement If form runs a private datasession, regional settings auto-adjust to user's preferred language.
    This is similar to using in VFP SET SYSFORMATS ON
    aw.vcx!awFrm.wcLangUser_assign()
  • 2.20.3
  • 11/15/2015Fix Fixed error message "no action specified on target form"
    Reminder: if you need to pass parameters to form.init(), make sure to pass a coma-delimited string of VFP literals as FoxInCloud.FormDisplay() third parameter; eg for 3 parameters (integer, string, date):
    FoxInCloud.FormDisplay(event, 'form.scx', '1,"String", {^2014/11/16}')
    FoxInCloud.js!FormDisplay()
    awAJAX.FormDisplay()
    Mr Tuvia Vinitsky
      Fix No more 'data type mismatch' when repeatedly calling wMenu('SET SYSMENU SAVE').awMenuM. Gilles Lajot-Sarthou
      Fix When closing a modal form, focus is set back to the control responsible for opening this form only if focus is on another control and the call-back method (if any) has not set it.
    Previously, the 'auto-focus' feature could prevent the callback method from executing because of the pending 'GotFocus' AJAX request.
    FoxInCloud.jsM. Gilles Lajot-Sarthou
      Fix In development mode, oConfigApp.cScriptPathPhysical is no longer set automatically to the _source\ directory.
    This confirms that this setting is in use by the FoxInCloud Application Server (we once wondered if it should be deprecated) - namely by: modify class awImgGetFile of aw.vcx method wcGetFileSWFimageURLget
    awServer.prg > awAppConfig.cScriptPathPhysical_Assign()M. Gilles Lajot-Sarthou
      Fix CommanButton in Grid Column with back ground image:
    JavaScript generation fixed (string literal delimiters mismatch)
    awHTMLSig. Michele Bosetti
      Enhancement Generates an EXTERNAL FILE instruction for valid PICTURE clauses
    This EXTERNAL FILE instruction ensures that the project manager pulls in the picture file (necessary for later web image generation)
    awGenMenu
      Enhancement New form 'valuesDelayed' demonstrating the ability to collect some control values on client side and delay submittal of this set of values to the server
    This feature can save time (less server round trips) in scenarios where users has to select/enter numerous values before any valid action can occur -- eg. a search area on a form.
    FICtuto
      Enhancement Y' $ .inputMask mimiced for grid.column.textBox: a logical .ControlSource (with .T./.F.) shows Y/N instead of true/false
    http://www.west-wind.com/wwThreads/Message4HW07Z7D6.wwt
    awHTMLMr Tuvia Vinitsky
      Enhancement Production server unable to reach foxincloud.com at startup: clearer explanation and trouble shooting instructions
    As of the FoxInCloud license, your production server needs be able to send an HTTP request to the foxincloud.com server at startup. Whenever this fails, the server control forms displays clearer troubleshooting instructions that you can later retrieve at this URL: FoxInCloud-Status.xxx, where is the script-mapped extension of your application.
    awAppHostMr Tuvia Vinitsky
      Enhancement Date-time when an adaptation was ignored is now recordedFAA (awAdapter)Quarzo
      Enhancement Adaptation unit time can be customized per project.
    To adapt the unit time for a given type of adaptation, just click on the unit time label appearing at the bottom right of the main adaptation form. This'll bring up a child form where you cant change the time. If you do so, the project's statistics will get updated when you close the form.
    FAA (awAdapter)
      Enhancement A containing class can easily be ignored when pointing on one of its member.
    When you review an adaptation on an object member of a composite class and you realize that this composite class will not be used in your web application, the ignore popup menu now offers an option to ignore the containing class.
    FAA (awAdapter)
      Enhancement Support for RETURN object in .Valid() and call-back method.
    Whenever application returns a reference to an object and no .setFocus() instruction was executed, FoxInCloud Application Server sets focus on the corresponding element.
    awAJAXM. Gilles Lajot-Sarthou
  • 2.20.2
  • 11/01/2015Fix When tabbing fast on a form, focus no longer toggles between controls
    To test this fix, go to http://foxincloud.com/tutotest/event.tuto
    awServer.prg
    awAJAX
    M. Gilles Lajot-Sarthou
      Fix index.htm file missing in distribution caused project form index page to be no longer generated.
    To (re)generate this file, make sure to create an empty file named <path to VFP9>\tools\ab\aw\app\site\index.htm and re-run FAA step 3-Publish
    aw\app\site
    FAA (awAdapter)
    FiC '15 training
      Enhancement FoxInCloud status page: more details on the number of hits and users per form response time
    Sample data you now get:
    Form response times since 10/26/2015 05:22:47 (1 week ago) : 108 user actions from 25 unique users
    awServer.prg
    awProcess
    M. Gilles Lajot-Sarthou
      Enhancement Support prototype.js version 1.7.2
    Make sure to upload Prototype1.7.2.js to your production site(s)' awScripts directory!
    awProcess
  • 2.20.1
  • 10/01/2015Fix grid sort column better recognized when some columns have an expression as controlSourceawHTML
      Fix 'debugger;' instruction removed from grid onCellClick*() generated code.
    This instruction would cause JavaScript program to stop when clicking a grid cell while browser dev tool is open
    awHTML
      Fix Error 1573: cannot change modality of a visible formawAppHostMr Tuvia Vinitsky
  • 2.20
  • Behavior Change First time a form gets instantiated upon a user request, .Init() executes without parameters only once (used to be twice)
    Since awFrm.Load() sets thisForm.wlWeb, thisForm.wlWeb is properly set when form.Init() executes.
    ThisForm.wlWeb used to be set from outside, hence the second execution to make sure .Init() knew whether form was running in desktop or web mode.
    Thus thisForm.wlInitFirst is fully meaningful.
    Another consequence is that form.members.Init() can also safely rely on thisForm.wlWeb.
    Just make sure to call dodefault() in you form subclasses' .Load(), after all views and cursoradapters are opened (used).
    awAppHost
    aw.vcx!awFrm
    Mr Ryan Rindlisbacher
      Behavior Change Starting FoxInCloud Application Server in production mode requires valid customer and license IDs
    Make sure to fill your FoxInCloud and wConnect IDs in xxxTest|Prod.ini before starting your FAS in production mode (as a .exe, either in File or COM mode).
    For more information on where you can find these IDs, check out VFP9\tools\ab\aw\app\xxxTest.ini
    Reminder: if, for whatever reason, your FAS could not start, http://.../FoxInCloud-status.xxx tells you the reason why.
    awAppHost
      Fix grid: when column.currentControl changes, the event methods of the new .currentControl replace those of previous one.
    Previously, events of the previous .currentControl would have remained active.
    awHTML.prg!awHTMLgen
      Fix grid.column.checkbox : .click() et .valid() fire a single event on the server.
    Previously, as .valid() is implemented by default, 2 .click() events were sent to the server.
    awHTML.prg!awHTMLgen
      Fix When clicking twice on a window close button, or clicking a messageBox's close button after time out event has fired, URL no longer returns to previous or home pageFoxInCloud.js
    window.js
      Fix In a 'true' combobox, changing the textbox value does trigger .InteractiveChange() on the server
    Due a change in event processing, this feature a ceased working during the lifetime of V2.20 betas; it's now restored
    aw.vcx!awCbo
      Fix Grid: settings are no longer lost when moving to another record after another user has modified (.recordSource)
    Previously, after running the scenario below, grid display would be affected; eg. magnifier icons would appear in column headers. This no longer occurs.
    browser1 (eg firefox): http://foxincloud.com/demos.php
    browser2 (eg chrome): http://foxincloud.com/demos.php
    browser1:
    - click 'add'
    - add a client, click 'save', click 'OK'
    browser2: move to another row
    awHTMLMr James Patterson
      Fix Grid: solve conflict between inherited value and default value.
    If a grid member property is set to a value different from its parent's, ignore the ActiveWidget default value to apply the value found.
    awHTML
      Fix Native datepicker in browser such as Google Chrome no longer fires on textbox with date .Value and/or .Format
    So far awHTML would add [type="date"] to <input> rendering a textbox having a date .Value and/or .Format.
    In some browsers like Google Chrome, <input type="date"> triggers the native datepicker which conflicts with the jQueryUI datepicker added by FoxInCloud when textbox.wlDatePicker. To avoid this conflict, awHTML renders type="text" when the jQueryUI datepicker is rendered.
    awHTMLMr Ryan Rindlisbacher
      Fix Shortcut menu (popup) support improved
    Improved: popup menu location near mouse, popup menu closes when clicking anywhere else in the page, related functions such as bar() and prmBar() solidified. More to come in future releases whenever users submit issues and use cases (complex feature requiring real-life code to experiment and improve).
    Real-life demo and source code on FoxInCloud Live Tutorial: http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=RowSourceType.scx; right-click in the form surface - this URL is temporary as we'll later spread shortcut menus with various use cases all around the FoxInCloud Live Tutorial.
    awMenuMr Ryan Rindlisbacher
      Fix Objects derived from a VFP base class (such as custom) are propertly restored.
    Because of misusing the .resetToDefault() method, Objects derived from a VFP base class such as custom were restored with all properties reset to the VFP default, .F. typically.
    abOOP.prg!objectOfXML() now resets to the class value if different (object properties and collections being suported), and then applies the value previously saved as XML.
    More information on http://www.west-wind.com/wwThreads/default_frames.asp?Thread=4B00KYJP3
    abOOP.prg!objectOfXML()Mr Tuvia Vinitsky
      Fix .Click(), .MiddleClick() and .RightClick() no longer confused in grid control
    See the similar previous fix on grid column header and cells.
    awHTMLM. Gilles Lajot-Sarthou
      Fix Modal child form no longer center in page if larger than browser viewport.
    Form sits in the top left corner of viewport.
    FoxInCloud.js
      Fix Menu no longer disappears when user session expiresawMenuSig. Michele Bosetti
      Fix nButton provided to .Mouse*() events
    Previously the 'nButton' 1st parameter to .Mouse*() event methods was always set to -1.
    Reminder: only.MouseDown() and .MouseUp() are eligible to be processed on server. Other mouse events should be processed by the browser using JavaScript
    awHTML
    FoxInCloud.js
    M. Gilles Lajot-Sarthou
      Fix .Click(), .MiddleClick() and .RightClick() no longer confused in grid column headers and cells
    Previously, .Click() implemented in a grid cell or the grid itself would fire when user did a .middleClick() or a .rightClick().
    As ActiveWidgets implements .Click(), .MiddleClick() and .RightClick() with the single method .onCellClicked() [similarly to the HTML using a single event .click()], the JavaScript that awHTML generates for .onCellClicked() now tests the button actuated on the HTML event object before processing the event.
    awHTMLM. Gilles Lajot-Sarthou
      Fix "File '...\awfrmmb_ini.dbf' does not exist" error fixed.
    This error used to occur when calling awPublic.prg!wMessageBox() in production Web mode.
    Tested successfully on http://ctb.wanagain.net
    awAppHost.prgM. Gilles Lajot-Sarthou
      Fix Mouse and keyboard events won't fire in lists rendered by HTML <select>
    issue fixed
    FoxInCloud.js
      Fix Objects based on awOLEPDF*, rendered with the Acrobat Reader activeX object in the browser (mainly using IE) might be erroneously visible
    issue fixed
    aw.vcx!awOLEPDF*Mr Andy Swartz
      Fix Support issues for IE8 fixed
    - JS error when closing modal dialog (member not found)
    - <select><option> empty after AJAX update
    FoxInCloud.js
    aw.vcx!awFrm
      Optimization Automatically Paged Grid
    Whenever you have a grid with a large number of records, just drop an instance of 'awCntGrdPage' class into your form, cut and paste your grid inside this container, you'll get a paged grid in Web mode with optimized response times.
    Supports all kinds of .recordSource; will later support in-grid edition with any .RecordSource's buffering.
    Your grid's behavior remains unchanged in desktop mode, with exactly the same code. This is automatic for grids that are members of form.scx. If grid is a member of a class, you need to manually give the container the same name as the grid (in this case, as VFP makes the .Name property read-only, code can't change it).
    aw.vcx
      Optimization New property .wcPropSaveNot: list of custom properties that should NOT be saved.
    By default, FoxInCloud saves any custom property added to an object, either at design time or at runtime using VFP addProperty() function or method. This makes it easier for the developer to add properties without taking care whether it'll be saved or not; note: this applies to objects only, not to classes - you need to explicitely list the class properties to be saved in .wcPropSave.
    If the value of some properties never change in the course of user's action, add them to the .wcPropSaveNot list.
    You can easily edit the .wcPropSaveNot list of a given object using awPublic.prg!.wcPropSaveNotEdit()
    aw.vcx
      Enhancement In production mode, form.refresh() executes after form.Init() and form.show()awAppHost
      Enhancement FoxInCloud server status page now displays form's response time broken down into request phasesawProcess.FoxInCloud_status()
      Enhancement In listbox and combobox, items initially disabled by prefixing by '\' are rendered disabled="disabled" at initial HTML generation
    Previously, disabled list items were disabled on the client browser dynamically only, not at inital HTML generation
    awHTML.prg!awHTMLgen
    aw.vcx
    Mr Tuvia Vinitsky
      Enhancement When cycling between controls using the tab key, focus remains within the current form
    Previously, due to the native browser behavior, focus moved out of the form when the maximum tabindex was reached; awHTML now adds a script that manages focus() à la VFP.
    awHTML.prg!awHTMLgenMr Tuvia Vinitsky
      Enhancement Grid: added a sample showing how you can dynamically freeze the current grid row
    Useful whenever user should not be able to move to another grid's row, this feature is demo'd here: http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=report.scx
    Checking the 'freeeze row' check box prevents user from moving to another row in the orders grid.
    see also server source code at http://foxincloud.com/tutotest/fileDisplay.tuto?tutoServer.prg
    awHTML
    FiCtuto
    Mr James Patterson
      Enhancement Grid: column events code generation faster and more effective
    The algorithm and programming style of method awHTMLgen.getHTML_grd_AW_cScript_Events_Cols() has been completely refactored to be faster (30 % less instructions executed) and more effective (e.g. better isolation of all flavors of .Click() events.).
    You can see this live at http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=Event.scx, 'grid' page
    awHTMLMr Ryan Rindlisbacher
      Enhancement xxxSets.Init(): list of forms to be launched at startup available
    If some of your forms require some condition to be met to instantiate standalone (such as used aliases), you can test whether this form is listed in m.toAppHost.uFormsLaunchAtStartup and code accordingly.
    See sample of such code in: modify command <path to VFP9>\Tools\AB\AW\App\Progs\xxxSets.prg
    awAppHost
    xxxSets.prg
    Mr Tuvia Vinitsky
      Enhancement Graphical CheckBox or Optionbutton labels rendered CSS height conforms to VFP's .HeightawHTML
      Enhancement Linked labels style defined in default style sheet
    CSS styles of labels linked to a checkbox (<input type="checkbox" ...>) or option button (… type="radio"...) are now stored into awDefault*.css;
    these styles used to be defined inline in the HTML tag, preventing from custom override in xxx.css.
    awHTML
      Enhancement awPgf.wlPagesRefresh supported in both desktop and Web mode
    By default, VFP9 pageFrame.Refresh() only .Refresh() the active page.
    When setting .wlPagesRefresh to .T., FoxInCloud executes .Refresh() on all pages.
    You may find this feature useful in cases like:
    - in both desktop and web modes, to refresh the pages caption upon navigating a main grid, eg. this code:
    this.Caption = cRefAppend(this.Caption, Reccount('awAdapter_awCustomer'), .T., .T.) && cRefAppend(): modify command abTxt
    - in web mode if you don't want to request the server each time a user activates a page.
    This property might have been supported in the past - some change in the awPgf.Refresh?() methods might have broken this support.
    aw.vcx!awPgf
      Enhancement New method FoxInCloud.RequestSend_ante()
    Executes just before sending a request to the server. You can use this method to add parameters to the post envelope; to do so, add code such as:
    this.parameters['someKey'] = someValue;
    on server side, your VFP code can read these parameters anywhere using:
    local oRequest as wwRequest of wwRequest.prg
    someValue = iif(wlRequest(@m.oRequest), Cast(m.oRequest.Form('someKey') as <destination type>), .null.)
    /!\ dates require a prior conversion to a VFP date literal:
    this.parameters['someKey'] = this.RequestSend_sDate(someJavaScriptDate);
    you could also (with extreme caution) override a parameter set by FoxInCloud; eg:
    this.parameters['vpw'] = document.documentElement.clientWidth * 1.5; // ViewPortWidth // fakes a larger display area
    FoxInCloud.js
    xxx.js
    Mr James Patterson
      Enhancement New methods: Response.add|getCookie(), awFrm.wCookieAdd|Get()
    You can now add a custom cookie anywhere in your application using either m.response.addCookie() or thisForm.wCookieAdd(), according where you need this functionality.
    You can later retrieve this cookie using m.request.getCookie() or thisForm.wCookieGet().
    Response.addCookie()
    aw.vcx!awFrm
    Mr Ryan Rindlisbacher
      Enhancement ComboBox with .BoundColumn > 1 supported in grid column.
    If you have a lookup ComboBox in grid column, such as country code pointing to a countries table, it's now supported.
    On-line demo and code: http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=dataUpdate.scx
    awHTMLM. Gilles Lajot-Sarthou
      Enhancement The FoxInCloud Application Server Status Page now displays Aliases' save and restore times.
    This feature can be of a great help to optimize data access such as choosing between a view or a cursor.
    On-line demo: http://foxincloud.com/tutotest/foxincloud-status.tuto
    awProcess.FoxInCloud_status()Mr Tuvia Vinitsky
      Enhancement FoxInCloud Live Tutorial improved!
    FoxInCloud Live Tutorial is the cornerstone where you can see FoxInCloud in action:
    - controls and events supported
    - response times
    - main cases of adaptation
    - source code dynamically extracted from source *.?cx and colorized
    - real-time event log
    - FoxInCloud Application Server source code
    - FoxInCloud Application Server Administration tools
    - custom CSS and JS files
    - and much more
    Make sure to bookmark http://foxincloud.com/tutotest/! It's a place you'll play often visit to ...
    Samples\ficTutoM. Gilles Lajot-Sarthou
      Enhancement grid.column.Dynamic* properties are supported in Web mode even if grid.RecordSource row buffer is dirty.
    So far, when Inlist(CursorGetProp("Buffering", grid.RecordSource), 2, 3) and buffer was dirty, grid.column.Dynamic* properties were not evaluated in Web mode.
    awHTML.prg!awHTMLgen.getHTML_grd_AW_cScript_DynProps() uses the new abRowBufferSave (modify command abData) which, similarly to abSet or abSelect classes, saves the Row Buffer in .Init(), temporarily turns into Table buffering, and restores the Row buffer in .Destroy()
    awHTML
      Enhancement Dynamic Grid.RecordSource and Grid.columns.ControlSource are supported.
    You can now change Grid.RecordSource and Grid.columns.ControlSource during the course of a user event: FoxInCloud Application Server will take care of saving these data for each user (in a disk file), and restore them upon the next request of the same user.
    awHTML
      Enhancement New properties .wuEffectShow and .wuEffectHide: sets the visual effect when object's visibility changes in Web mode.
    .T. by default, these properties allow you to fine tune the graphical effects applied to an object when its visibility changes in Web mode.
    Setting either of these properties to .F. inhibits the appear and/or fade transition when object turns to visible or hidden. Setting them to .null. applies the default behavior defined in FoxInCloud.js and xxx.js.
    Other options will be later supported such as:
    - the parameters you want the effect to apply, eg. '{duration: 4}' to set the effect duration to 4 seconds,
    - the effect you want to use, eg. 'Effect.Squish[({options})]' to use the 'Squish' effect rather than the default appear/fade.
    Will be supported by all objects including forms and pages in pageframes.
    aw.vcx
      Enhancement Listbox: .Mouse*() events fire the same as in VFP on all browsers.
    Previously, on all browsers except IE, when mouse flew over <options> inside <select>, mouseOver and mouseOut events would have fired at the <select> element level, and mouseMove() would not fire on <option>.
    FoxInCloud.js
      Enhancement On Master Forms, awCmdOK.Click() returns to previous Web page or, on older browsers, to Application Home page
    On Child forms, awCmdOK.Click() closes the form and executes the call-back method if any.
    aw.vcx!awFrm
      Enhancement In Web mode, awGrd.AutoFit() makes columns 15% wider than in VFP
    As characters are slightly wider in the browser, even using the same font, this 15% allowance avoids ellipsis when part of the column is hidden
    aw.vcx!awGrd
      Enhancement Column.resize() supported on the serverawHTML
    awAJAX
      Enhancement grid.RecordSource ordered with an index : index collation sequence is respected
    So far awHTML would always assume index collation sequence was 'Machine': e.g., using a 'General' collation sequence, upper-case letters were sorted before lower-case letters.
    Now the grid's rows are sorted with the proper collation sequence like in desktop mode.
    awHTML
      Enhancement When implemented, .RightClick() no longer fires the default browser context menu
    When Right-Clicking controls, objects and grid, browser context menu no longer appears when your code implements .RightClick(), on either client/browser or server/app side.
    awHTML
      Enhancement Render close button in modal forms title bar with call-back.
    So far modal forms called with call-back did not have a close button in the title bar: because only the 'OK' command button could close the modal child form and fire the call-back method on the parent form.
    The close button now appears on modal forms and, when clicked, fires the following methods (if implemented):
    - child_form.QueryUnload()
    - child_form.QueryUnloadCallBack()
    - if child_form.QueryUnload() or child_form.QueryUnloadCallBack() return .T., parent_Form.wFormCallBack*().
    Implemented and tested successfully on FiC tutorial:
    modify form (home(1) + "tools\ab\aw\samples\fic\fictuto\progs\forms\userchoice.scx")
    awServer.prg
    awHTML.prg
    Sig. Michele Bosetti
      Enhancement PEMeditor no longer crashes (buffer overrun) when opening classes of aw.vcx, or derived from aw.vcx, or based on aw.vcx
    In a *.?cx, LPARAMETERS statements longer than 255 characters (including spaces and comments) crash aMembers() with buffer overrun (see https://vfpx.codeplex.com/wikipage?title=Thor%20TWEeT%2023 for more information).
    All LPARAMETERS statements longer than 255 characters in aw.vcx shortened to less than 255 characters.
    Tip: To see aw*.Method documentation from within your application, just click 'View Parent Code' in form or class designer code window.
    aw.vcxMr Tore Bleken
    Mr Jim Nelson
      Enhancement Support for display:inline-block on menu and form containers
    In order to avoid spacing and/or line breaks when using display:inline-block, xxxProcess.wFormStandardPage*() no longer adds HTML 'white space' (space, tabulation, carriage return, line feed characters) between </nav> and <div class="awForm-container">
    Note: the css directive "white-space: nowrap;" provides the same result.
    Sig. Michele Bosetti
      Enhancement Like aw.vcx!awFrm.wForm(), awPublic.prg!wForm() supports classes and delayed .noShow()/Show()
    You can now pass a class name as First parameter of wForm(), and get a reference to the form using wFormNoShow(), interact with form's PEMs as you see fit, and later call wFormShow() to show the form in either desktop or web mode.
    awPublic.prg!wForm()Sig. Michele Bosetti
      Enhancement Menu separator pads are more visible
    if you add a separator pad in a menu bar (prompt = '\-'), it'll be clearly visible in HTML rendering
    awMenu
      Enhancement New folder …\tools\ab\aw\App\Sample\
    Check this folder for sample elements that you can adapt to your application's specifics
    aw\App
      Enhancement Color CSS attribute no longer generated for Baseclass
    As in HTML5 color initial value should be black, color attribute is no longer generated to black for base class so that custom themes such jQueryUI's better apply
    awHTMLgen
      Enhancement Sample Index form
    Any new app built with FoxInCloud inherits a Sample Index form that developer can mimic to build its own.
    Tip: sample code files for your application are located in:
    [path to VFP9]\tools\ab\aw\app\sample\
    SampleIndex.scxMr André Tauté
      Enhancement you can override Grid.SelectedRow colors in xxx.css
    From awDefault*.css, removed the '!important' directive and added form ID in the selector so that it can be overridden by any other custom directive
    awHTML.prgMr Tuvia Vinitsky
      Enhancement Restoration times (ms) are detailed in form-user state tables, at the property, datasession and alias levels
    form-user state tables are stored in your application's temp folder;
    You can easily USE and BROWSE these tables; datasession restore times are detailed at the alias level in the corresponding record, column 'PV' (memo).
    These figures can greatly help you optimize your Web application.
    When your application is in production, you can at any time download a specific form-user state table by running awServer.prg!awUserPropsTableGet() - see also this template program: <path to VFP9>\Tools\AB\AW\App\Progs\xxxTest.UserPropsTableGet.prg
    awServer.prg
    awAJAX
      Enhancement xxxFrm.wViewPortWidth|Height provides view port dimensions in both desktop and Web modes
    Use these properties, you can adjust your forms' dimensions and position anywhere in your code, eg in .Init(), .Refresh(), etc.
    FoxInCloud.js
    awAppHost
    awAJAX
    aw.vcx!awFrm
      Support extension Grid: .BeforeRowchange() supported
    Occurs when the user changes the active row or column before the new cell gets the focus. It also occurs before the Valid event of the current object in the grid column and any rules in the database. To prevent the active row and column in the grid from changing, use NODEFAULT in desktop mode, and return .F. in Web mode
    aw.vcx!awFrm
      Support extension form.ScrollBars > 0 supported
    When form.ScrollBars > 0, FoxInCloud Application Server automatically generates the corresponding 'overflow' CSS directive.
    awHTML.prgSig. Michele Bosetti
  • 2.10
  • 09/18/2014Behavior Change awFrm.wViewRequery_post() signature upgraded
    Added 2 parameters to awFrm.wViewRequery_post(), make sure your sub-class accept the following parameters:
    tcView && View just requery()'d
    , success && success of requery() (.T./.F.)
    , nError && if !m.success, @error that occurred
    , cMessage && if !m.success, @error message
    aw.vcx!awFrm
      Behavior Change cImageWeb() signature changed
    This is a simple warning as your code probably never calls the cImageWeb() function; however,
    Parameters used to be:
    (1) tcImgVFPaddr,; && {en} VFP Image (name or address)
    (2) tcSiteImageFolder,; && {en} Web site's image folder PHYSICAL address
    (3) tnImgW,; && @ {en} Image width in pixels
    (4) tnImgH,; && @ {en} Image height in pixels
    (5) toGDIplus as gpImage of ffc\_GDIplus.vcx && [NewObject('gpImage', '_GDIplus.vcx')]
    Parameters are now:
    (1) tcImgVFPaddr,; && {en} VFP Image (name or address)
    (2) tcSiteImageFolder,; && {en} Web site's image folder PHYSICAL address
    (3) toGDIplus as gpImage of ffc\_GDIplus.vcx,; && [NewObject('gpImage', '_GDIplus.vcx')]
    (4) tnImgW,; && [none] @ {en} Image width in pixels
    (5) tnImgH && @ [none] {en} Image height in pixels
    aw.prg
      Behavior Change awCnt: .Width_Assign() and .Height_Assign() removed.
    If your container objects rely on .Width_Assign() and .Height_Assign(), make sure you add these methods in any of your subclass of aw.vcx
    aw.vcx
      Learning Sample demo app(s) included
    Browse these applications and find code samples that you can apply to your own application:
    - <VFP9>\Tools\AB\AW\Samples\FIC\FICtuto - Main FoxInCloud features and code samples
    - <VFP9>\Tools\AB\AW\Samples\FIC\FICdemo - On-line messaging application optimized for smartphone
    - <VFP9>\Tools\AB\AW\Samples\Tastrade - Typical business application
    awSetup
      Fix Dynamic CSS properly assigned when opening a child form including some dynamic containerawServerSig. Michele Bosetti
      Fix Dynamic menu updates such as add|remove pad|bar|popup ...
    Menu elements and attached ON KEY events are properly added|removed|modified
    awMenu.prg
      Fix
    Behavior change
    PageFrame tabs no longer justify if not justified in VFP
    Make sure to match FoxInCloud.js and FAS to version 2.10+
    FoxInCloud.js
    awHTML.prg
      Fix .Click(), .MiddleClick() and .RightClick() no longer confused
    Any of the above .*Click() event now properly fires in Web mode.
    awHTML.prg
    FoxInCloud.js
      Fix Events no longer bubble to parent container
    When an event (e.g. .Click()) is implemented in a parent container and not in one of its member, triggering this event in the member no longer fires the event in the parent container.
    Example:
    - thisform.container.click() implemented
    - thisform.container.button.click() not implemented
    clicking the button no longer fires thisform.container.click()
    FoxInCloud.js
      Fix .memberClass properly redirected to application sub-classes
    So far, you could have experienced some issues (like caption reverted to default) in members of container classes having the .memberClass[Library] property (such as PageFrame, OptionGroup, etc.), especially in case of heavy sub-classing, and / or adding instances of such class to composite classes.
    Fixing this issue has been quite a hard project, as it involved all the concept of VFP OOP such as composite classes, additional instances of members in subclasses or instances of sub-classes.
    Please note this fix applies to .vcx and .scx only; as supporting classes defined in .prg will requires complex code parsing, this is under way.
    FAA (awAdapter)v&u
      Fix wMessageBox() no longer throws an error and fails to display when first used after server restart
    awAJAX now checks form initial state exists on disk to consider form is already instantiated.
    awAJAXM. Gilles Lajot-Sarthou
      Fix In production mode, form and contained controls now .Refresh() successfully after .Init() and .Show() like in usual desktop VFP behaviorawAppHost
      Optimization HTML generation up to 3 times faster
    In case the objects and controls in your forms have a heavy class inheritence, HTML generation is up to 3 times faster
    awHTML.prg
      Optimization Faster grid JS generation
    For form having many grids and/or grid(s) having a large number of columns, generating JS for changes is 40-60% faster
    awHTML.prg
      Enhancement New config setting .lSupportLinkInFormCaption
    When your application runs in production, turning this configuration option to .T. ('On' in 'Edit config files' on line) adds a support link to form caption bar; this support link helps user report issues about your Web Application.
    Note: support link appears only when user is identified, IOW has logged into your (Web) application.
    awAppConfig
    xxxTest|Prod.ini
      Enhancement New awSets environment class
    awPublic.prg!awSets is a no-brainer environment class that the LAN (desktop) and Web versions of your application can share to conveniently set the application VFP environment.
    awSets automatically restores settings when your application unloads, very convenient during your development journey.
    For more details, see the modules listed above.
    awPublic.prg
    xxxSets.prg
      Enhancement awProcess.oCoverage() deprecated in favor of function abDev.prg!oCoverage()
    To start a coverage logging anywhere in your application, just issue this:
    oCoverage = oCoverage([<condition>[, <additive>[, <evenInProduction>]]])
    For more details and options, modify command abDev
    abDev.prg
    awServer.prg
      Enhancement New FoxInCloud.js configuration options
    see these new options in <VFP9>\tools\ab\aw\app\site\xxx.js
    (tagged by version)
    FoxInCloud.js
    xxx.js
      Enhancement pageFrame tabs layout improved
    1- In development mode, when CSS is generated dynamically, tabs are better arranged when form displays for the first time (in production mode, using global style sheet awDefaultAll.css, this issue does not occur).
    2- the initial tabs order respects page.pageOrder
    FoxInCloud.js
    awHTML.prg
      Enhancement Themed Commandbutton supported
    Whenever these conditions are met:
    Sys(2700) = '1' and _screen.themes and form.Themes and commandbutton.themes and empty(commandbutton.picture),
    CommandButton is rendered with default browser style (depending on the browser settings)
    awHTML.prg
      Enhancement _Screen.ActiveForm - aka wActiveForm() - available for requests outside of forms
    Whenever user hit a request outside of a form (eg on a menu item), wActiveForm() returns a reference to the form on which user has made his/her latest action.
    For instance, you can call wActiveForm() in a menu on pad or bar pad|bar ... command even if it calls a program.
    This feature requires:
    xxxServer.lAppUserEnvSave = .T.
    awAppHost.prg
    awUserAppEnv.prg
      Enhancement By default, Web images are generated from Application images in .png format
    Former default format was 'gif'
    aw.prg
      Enhancement new method awFrm.wNavigate()
    Call this method as follows:
    local success as Boolean, result as String
    success = thisForm.wNavigate(@m.result, '<URL or form>'[, parameters...])
    if !m.success, m.result contains the reason why .wNavigate() failed
    aw.vcx!awFrmv&u
      Enhancement Form.Deactivate() no longer fires in Web mode when page unloads
    This avoids a 'network error' message to appear when the .deactivate() event fires from the browser and server response can't be processed because the HTML page is no longer loaded.
    FoxInCloud.jsv&u
      Enhancement HTML5 attributes for <input>
    - Textbox with date or datetime values automatically map to an <input type="date[time]" …/> tag
    - you can define any other HTML5 type in xxxTxt.wcHTML5type (or in any sub-class or instance of)
    - Textbox.ToolTip maps to the HTML5 placeholder="" attribute if xxxTxt.wlHTML5placeHolder = .T. (default)
    - you can remove HTML5 attributes by setting to .F. xxxServer.lHTML5type and/or xxxServer.lHTML5placeHolder (default is .T.)
    awHTML
    aw.vcx!awTxt
    awServer
      Enhancement HTML5 AJAX file upload using jQuery File Upload
    So far, FoxInCloud supported AJAX-style file upload using an Adobe Flash component named 'SWFupload'.
    Now FoxInCloud generates a JavaScript that automatically detects if client browser supports 'real' AJAX file upload, and implements consequently.
    This feature requires jQuery to be loaded with your application by settin xxxServer.ljQueryAdd = .T.
    Please let us know if you need to implement more of the options that jQuery File Upload provides (https://github.com/blueimp/jQuery-File-Upload/wiki/Options); we will implement these additional options as aw.vcx!awImgGetFile.properties
    aw.vcx!awImgGetFile
      Enhancement User receives an alert() when his|her session has expired
    So far, when a user session has expired, browser was sent back to home page without notice.
    Now user receives an alert() message telling him what's going on:
    "Your session has expired, site will now return to home page for you to log back in"
    awServer
      Enhancement awFrm.wViewParmSet() / .wViewsRequery()
    When 4th parameter is set to .T. (requery), .wViewParmSet() returns the same result as Requery() : 1 if the data is successfully retrieved; otherwise 0.
    aw.vcx!awFrm
      Enhancement awFrm.wViewParmSet() / .wViewsRequery()
    .wViewsRequery() restores Set("Deleted"), Set("ANSI") and Set("SQLbuffering") as it was at .wViewParmSet()
    aw.vcx!awFrm
      Enhancement awFrm.wViewsSetup()
    All view parameters are now detected:
    - this[form[set]].xxx[...xxx] property references
    - _Screen|_VFP.xxx[...xxx] property references
    - alias.field or alias->field
    - expressions involving operators such as IN (?parm1, ?m.parm2, ...), LIKE, etc.
    aw.vcx!awFrm
      Enhancement Carousel for LAN and Web modes
    Carousel is a very popular feature in Web applications, i.e. to display a collection of images.
    Just drop aw.vcx!awCntCarousel or a sub-class on your form and visually add within the elements you want to slide on: images, buttons, checkboxes or anything else.
    This carousel will work the same in both modes.
    You can test this carousel here: http://foxincloud.com/demotest/ (just provide your email)
    aw.vcx!awCntCarousel
      Enhancement Support for form.Width|Height|Left|Top changes in Web modeawServerM. Gilles Lajot-Sarthou
      Enhancement Animation Timer
    Drop this timer or a subclass to your form surface and call the .start() method to animate the movement of any form member from one location to another.
    More information in aw.vcx!awTmrAnimation.Start() source code
    aw.vcx!awTmrAnimation
      Enhancement Code .Refresh() in .Refresh_()
    Formerly, developer had to test for thisform.wlPropsRestore at the beginning of .Refresh() code.
    Now, code can simply be written in .Refresh_() without taking care of anything special.
    Calls to .Refresh() should remain unchanged: FoxInCloud dispatches to .Refresh_() automatically.
    .Refresh_() supports parameters, bindevent() and returned value.
    Code written the previous way remains supported.
    aw.vcx
      Enhancement JavaScript DatePicker support
    If, at design time, (Vartype(awTxt.Value) = 'D' or 'D' $ awTxt.format) and awTxt.wlDatePicker and xxxServer.wljQueryUIAdd, FAS automatically assigns a jQueryUI datePicker to the textbox.
    By default, FAS sets language and date formats according to the browser first preferred language, English if this language is not provided or supported.
    You can customize your datePicker's behavior using the following properties:
    - .woDatePickerOptions: set as either a VFP empty object with properties matching those expected by datepicker.setDefaults() [assigned in this.Init()], or a JavaScript object litteral such as {option1:value1, option2:value2, ...} [assigned at design time or in this.Init()]
    - .wdFrom, .wdTo: set dynamically in your code to limit the date range user can select.
    You can also customize datePicker appearence using jQueryUI global theme (xxxServer.cjQueryUItheme), or additional CSS directives in xxx.css
    (all details on jQueryUI datePicker API - such as options, methods and event - at http://api.jqueryui.com/datepicker/)
    aw.vcx!awTxt
    awHTML
      Enhancement form.wFormMaster() & wFormMaster() accept a form name as parameter
    thisform.wFormMaster() and awPublic.prg!wFormMaster() now accept any 'form.scx' as first parameter even if no xxxProcess.form() method exists
    awAJAX
    aw.vcx!awFrm
      Support extension Changing pageFrame.Width|Height supportedawServerSig. Michele Bosetti
      Support extension Support for label.alignment changing during the course of a user requestawProps.dbf
      Support extension awGrc.DynamicToolTipText provides row-dependent ToolTip Text in Web mode
    FoxInCloud introduces this web-specific property that produces dynamic ToolTip Texts in Web mode - implement in a similar fashion as other .Dynamic properties such as .DynamicFontName ...
    Important! you need to use the awPublic.prg!awGrc (or a sub-class) as you grid column class by setting your grid's .MemberClass and .MemberClassLibrary accordingly.
    aw.vcx!awGrd
    awHTML
      Support extension Support for Column.DynamicCurrentControl
    .DynamicCurrentControl is now supported automatically; be aware that this feature requires more browser-side processings, so you should make sure that the number of rows in the grid is reasonable, say below 200.
    aw.vcx!awGrd
    awHTML
      Support extension Relations in|into grid.RecordSource supported
    - Relation into grid.RecordSource: records are filtered accordingly
    - Relation in grid.RecordSource into alias: fields in related alias(es) that are .controlSource of a column are read
    awHTML.prg
      Support extension crtl+tab cycles between forms open in browser
    When several modeless forms are open in the browser, pressing ctrl[+shift]+tab cycle between forms just like in the VFP GUI.
    FoxInCloud.js
      Support extension Customizable client-side error messages
    You can now customize the messages user sees in case of an error on either client or server;
    please see implementation details in <VFP9>\tools\ab\aw\app\site\xxx.js
    FoxInCloud.js
    xxx.js
    Mr Tuvia Vinitsky
      Support extension 'Cursoradapter' BaseClass, including data update, is supported
    Make sure your code calls dodefault() at the end of these methods:
    - at the end of .BeforeCursorFill():
    dodefault(m.luseCursorSchema, m.lNoDataOnLoad, m.cSelectCmd)
    - at the end .BeforeCursorRefresh():
    dodefault(m.cSelectCmd)
    aw.vcx
    awAJAX
      Support extension form.QueryUnload() event supported
    Whenever user clicks the 'red X' button in the form's header bar, and form.QueryUnload() is implemented in that form, it executes on server side.
    If form.QueryUnload() expects a decision from the user through a modal dialog form (eg wMessageBox(,, 4)), exclusively use form.QueryUnloadCallback() as Callback method to this form.
    Make sure form.QueryUnload() / form.QueryUnloadCallback() return .T. when form should close, .F. otherwise.
    Make sure form.QueryUnload() always returns .F. whenever form.QueryUnloadCallback() is involved.
    In form.QueryUnload(), you can use form.ReleaseTypeWeb to know whether a Web user triggered the action:
    if thisForm.wlWeb and thisForm.ReleaseTypeWeb = 1 && web user clicked the close box
    FoxInCloud.js
    aw.vcx!awFrm
    awAJAX
      Support extension Changing Grid.ColumnCount at runtime in Web mode is supported
    Formerly, changing Grid.ColumnCount resulted in blank columns in the browser grid
    awHTML.prg
      Support extension Optionbutton.Style=1 and Checkbox.Style=1 (graphical) with .Picture are supported.
    Requires jQueryUI; see these xxxServer.properties:
    xxxServer.ljQueryAdd, xxxServer.ljQueryUIadd, xxxServer.cjQueryUItheme
    awAJAX
    awHTML
      Support extension ActiveWidget version 2.6.4
    Provides support for Windows 8 and IE 11
    aw.js
  • 2.0
  • 12/01/2013Learning Sample applications
    After installing FoxInCloud Application Server (FAA step 3-Publish), you'll find sample applications in <path to VFP9>\tools\ab\aw\samples\.
    You can review code provided.
    In next version, sample applications will install automatically so that you can let them run on http://localhost/
    \tools\ab\aw\Samples\*.*
    FAA
      Learning aw.vcx!aw*.EventMethods() documentation improved and clarified
    To view documentation from within your classes or objects Event Method code snippets, simply click the native VFP button 'View parent code'
    aw.vcx
    FAA
      Learning awProcess.cawJSinc() documented to explain how to workaround the deprecation of foxincloud.*.incawProcessMr Tuvia Vinitsky
      Learning Created aw.vcx!aw???.wReadMe() for class documentationaw.vcx
    FAA
      Fix FoxInCloud 's $() function compatible with Prototype and jQuery deprecated!
    $() is given back to Prototype.js by jQuery.noConflict()
    You need to call jQuery() or wrap $() calls in a self-executing function.
    FoxInCloud.js warns you if ever your code mistakenly calls $() the jQuery way.
    Please note that the following properties were moved from xxxProcess to xxxServer: .ljQueryAdd, . ljQueryUIadd, . cjQueryUItheme
    FoxInCloud.js
    awProcess
    awServer
      Productivity awDefaultAll.css is dynamic in development
    forms and objects CSS directives (based on ids, not classes) are updated whenever a form instantiates in IDE, development mode; this avoids running xxxTest|Prod.css.prg before uploading a set of minor modifications to form(s).
    However,
    - as new delimiters are required in awDefaultAll.css for this feature to work, you need to run xxxTest|Prod.css.prg before hand.
    - running xxxTest|Prod.css.prg is still required whenever your modify the visual aspect of any class involved in the application
    awHTML
    awDefaultAll.css
    Mr Tuvia Vinitsky
      Productivity Warn user that FAA needs be run as administratorFAA (awAdapter)
      Optimization More details on user form state save and restore
    Form-user state save tables (.\Temp\_<user ID>_<Form Name>_*.*) : added 2 new fields holding save and restore time for each property: nSms and nRms.
    awProcess.FoxInCloud_Status() will later use these data for FAS server performance diagnostic and optimization recommendations.
    awServerM. Gilles Lajot-Sarthou
      Optimization More details on response time
    wwRequestLog: added new columns storing execution duration of each step of a FoxInCloud request:
    . nInit: request initialization
    . nRestore: user state restoration
    . nApp: application
    . nSave: user state save
    . nChange: inventory of changes in the form
    . nHTML: mapping changes into HTML
    . nXML: mapping changes into XML
    . nTotal: FoxInCloud Application Server total
    Note: for requests that do not hit FoxInCloud Application Server, these fields are .NULL.
    awProcess.FoxInCloud_Status() will later use these data for performance diagnostic and optimization recommendations.
    awServerM. Gilles Lajot-Sarthou
      Optimization FoxInCloud Application Server status page awProcess.FoxInCloud_Status(), added:
    . Temp folders addresses and contents
    . List of Forms and aliases used
    This provides a detailed view of your FoxInCloud Application Server performance; later you'll be able to share or send it to FoxInCloud support for optimization coaching.
    URL of this page (wc.ini secured): http://localhost/xxxTest/FoxInCloud-Status.xxx where 'xxx' is your application code.
    awProcessM. Gilles Lajot-Sarthou
      Enhancement List of connected users in FoxInCloud status page
    .../FoxInCloud-Status.xxx: added the list of users currently connected to application;
    To know how to replace users ID by full name, please review sample xxxProcess implementation in awServer.prg!awProcess.wUserName()
    awProcessSig. Michele Bosetti
      Enhancement awDefault*.css: Form members are sorted by IDawHTMLMr Tuvia Vinitsky
      Enhancement Improved number formatting based on .InputMaskawHTMLSig. Michele Bosetti
      Support extension Support for nXcoord, nYcoord
    *.MouseDown() et *.MouseUp() parameters are passed in Web mode.
    awServer
    FoxInCloud.js
    Sig. Michele Bosetti
      Support extension Support for page.deactivate()
    page.deactivate() now fires in Web mode
    awServer
    FoxInCloud.js
    Sr. David Acuña Guzmán
      Support extension VFP system and shortcut menu support
    *.mnx/*.mpr and menu code are now supported.
    To take advantage of this new feature, you need to:
    1/ include your *.mnx menu files in your project, and add their path to SET('PATH') in xxxSets.prg
    2/ (re)adapt your project so that *.mnx get adapted - after adaptation, in your ON SELECTION procedure code snippets you'll see any DO FORM command adapted as wForm(). Any menu code elsewhere in your application being adapted as wMenu(...). For forms that you want to display in a full HTML page, replace wForm() by wFormMaster() [wForm(), wFormMaster() and wMenu() are in awPublic.prg].
    3/ (re)generate your menus - as FoxInCloud VFP ini file (aw*.fpw) has changed your menu generator into ab\awMenuGen.prg, generating your menu will produce wMenu() instructions instead of the regular menu commands.
    4/ add you DO yourMenu.mpr anywhere needed, especially in xxxSets.prg.
    FoxInCloud menu system is dynamic just like VFP menu system, in other words re-evaluate the SKIP FOR and SET MARK clauses after each user action on the application.
    Whenever you want to see the (very few) support limitations, please BROWSE aw\awMenu*.dbf. You can also get a feedback on non-supported features by passing a second parameter by reference to wMenu: wMenu([menu command or function], @m.result); for more information, review documentation in awPublic.prg!wMenu().
    FoxInCloud menu implementation relies on jQuery & jQueryUI; to make sure your FoxInCloud Web application incorporates jQuery & jQueryUI, review these xxxServer properties: .ljQueryAdd, .ljQueryUIadd, .cjQueryUItheme.
    awAppHost
    awMenu
    FAA (awAdapter)
      Support extension All comboBox.RowSourceType and ListBox.RowSourceType are supported
    (so far dynamic lists were limited to .RowSourceType = 5 && array).
    Make sure that, before you reassign .rowSource or call .requery(), you reset .rowSourceType to whatever value you use;
    eg:
    myCombo.rowSource = ''
    SELECT ... INTO CURSOR myCursor
    myCombo.rowSourceType = 2 && Alias
    myCombo.rowSource = 'myCursor'.
    myCombo.rowSourceType = 3 && SQL query
    myCombo.Requery()
    Also, if you implement the .requery() method, make sure to call dodefault() at the end of your code.
    Here is a live demo of this feature: http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=RowSourceType.scx
    aw.vcx
    awAJAX
    awHTML
    FAA
      Support extension PUBLIC variables , _Screen.properties, _VFP.properties are saved and restored for each user on each request.
    Impact on response time: saving 1000 public vars + public Array[2000] took us 10 ms in the IDE (at least 2 times slower that COM mode).
    This feature needs be optimized through the following xxxServer.properties: .lAppUserEnvSave, .lPublicVariablesAllAtStartup, . cPublicVariablesObjectSave, ._ScreenPropertiesSave, ._ScreenPropertiesSaveNot, ._VFPpropertiesSave, ._VFPpropertiesSaveNot.
    You can also filter out pages (methods) and users that require saving the application environment by implementing xxxProcess.lAppUserEnvSave()
    Please read documentation about these new properties and methods in <VFP9>\Tools\AB\AW\App\Progs\xxxServer.prg.
    awAppHost
    awAppUserEnv
    FAA
      Support extension Optionbutton.Style=1 and Checkbox.Style=1 (graphical) are supported.
    Requires jQueryUI; see these xxxServer.properties:
    xxxServer.ljQueryAdd, xxxServer.ljQueryUIadd, xxxServer.cjQueryUItheme
    awAJAX
    awHTML
      Support extension Display a form from a standalone procedure or function
    awPublic.prg!wForm() and wFormMaster() to allow you display a form in LAN and Web mode from an independent procedure or function, or a method of an object that is not a member of a form (from a form member method, use thisForm.wForm() and thisForm.wFormMaster() instead).
    In web mode:
    - wForm() displays the form in a separate window in the current HTML page
    - wFormMaster() displays the form in new HTML page.
    These functions accept the same parameters as awFrm.wForm() and awFrm.wFormMaster(), except that, as modal states are not supported, the second parameter is limited to .T. for modal and .F. for modeless.
    By default, FoxInCloud Adaptation Assistant replaces DO FORM in independent procedures and functions by wForm(); you may change that into wFormMaster() whenever you see fit.
    awPublic.prg
    FAA
      Support extension GetFile() and GetPict() support
    Added 4 classes to support GetFile() and GetPict() in LAN and Web modes:
    - aw.vcx!awImgGetFile: GetFile()
    - aw.vcx!awCntGetFile: GetFile() with upload progress bar
    - aw.vcx!awImgGetPict: GetPict()
    - aw.vcx!awCntGetPict: GetPict() with upload progress bar
    As Web file upload is pretty complicated, please take about 1 hour for an in-depth review of documentation in aw.vcx!awImgGetFile::wReadMe()
    aw.vcx!aw???GetFile|Pict
    awProcess
    Scripts\FoxInCloud.js
    Scripts\SWFupload\*
    FAA
  • 1.30
  • 05/01/2013Learning 'Adapting PUBLIC variables' - detailed explanations and code samples on how to choose a strategy to adapt PUBLIC variables to web operations, according to the kind of data these variables contain:
    - Identify PUBLIC variables whose contents depend on the user:
    . either on user identity and/or security rights and priviledges (user profile),
    . or on user actions through interaction with application (user actions);
    - Choose an adaptaton strategy for each of these kind of variable
    FAA (awAdapter)Sr. Fernando Espinoza
      Learning Modal Dialog, move code processing user response into another method' - detailed explanations and code samples on how to move code processing user's response to a modal situation to a call-back method.FAA (awAdapter)
      Learning Revise adaptation hints that appear on the bottom part of the Adaptation Assistant form;
    additional code samples
    FAA (awAdapter)
      Learning FoxInCloud Adaptation Assistant : User guide on http://foxincloud.com/how-to.phpFAA (awAdapter)
      Fix "tabindex=" attribute better assigned based on containers and multiple formsawHTML
      Fix Redefining Class of members with parent.MemberClass / parent.MemberClassLibrary to Application class Library derived from aw.vcx!aw*FAA (awAdapter)
      Fix .AddObject()/.NewObject()/.RemoveObject() automated adaptation within WITH … ENDWITH block(s)FAA (awAdapter)
      Fix Events mistakenly reported as non supported:
    - Form.keyPress()
    - Toolbar.RightClick()
    - Timer.*
    FAA (awAdapter)
      Fix Fixed an issue when grid.column.controlSource can't be found in grid.RecordSourceawHTML
      Fix Fixed container.borderWidth > 1 not showing up in CSSawHTMLMr Tuvia Vinitsky
      Fix Removed useless and offending instruction in awFrm.lostFocusInet()aw.vcx!awFrmMr Tuvia Vinitsky
      Fix Fixed issue: grid.font* properties do not show up in CSSawHTML
    awGrd.dbf
    Sig. Michele Bosetti
      Fix Support for pageframe.Tabs = .F.FoxInCloud.jsSig. Michele Bosetti
      Fix Support for AutoIncrement integer fields in grid.RecordSourceawHTMLSig. Michele Bosetti
      Fix awSpn.Valid() is processed in Web modeaw.vcx!awSpnM. Gilles Lajot-Sarthou
      Look and feel Improved support for pageframe.Page.Enabled = .F.:
    - added attribute "disabled" to page and tab
    - added CSS rule that you can override:
    #xxxpagf *[disabled="disabled"], #xxxpagf *[disabled="disabled"] * {color:grey;}
    FoxInCloud.js
    awHTML
      Enhancement Support for hover picture in both LAN and Web modes:
    To implement this support, just define the hover picture in .wHoverPicture; make sure you define a file name that can be found in Set('Path')
    aw.vcx!awImg
    awHTML
    M. Jean-Pïerre Bataille
      Enhancement Support for jQuery and jQueryUI, included in distribution.
    You can know process client-side events with the most popular javaScript library, jQuery, and/or use any of the widgets included in jQueryUI.
    FoxInCloud.js includes a function that allows using $() in either the context of Prototype.js or the context of jQuery; you can just use $() just like in any jQuery or Prototype project.
    For more information about jQuery, and full documentation, please visit http://jquery.com/
    awServer
      Enhancement Support for grid.Column[.Text1].format having '$ZR'awHTMLSig. Michele Bosetti
      Enhancement Support ActiveWidgets V 2.6.1 included in distribution - provides support for any type of touch deviceaw.js
      Enhancement Support form.lostFocus()aw.vcx
    awServer
      Enhancement Support Form.Activate()aw.vcx
    awAppHost
      Enhancement Support Form.Show()aw.vcx
    awAppHost
      Enhancement Session.set/getSessionVar() supports variables of all types, including objects of any baseClass (including Collection), and nested objects; syntax:
    Session.setSessionVar(<varName>, <value>) && wConnect standard
    Session.getSessionVar(<varName>, <in table>, <type>) :
    - set <in table> to .T. if you need to read in the table instead of the current session;
    - <type> can be either:
    * a Vartype() value such as 'L', 'N', etc.
    * a variable you want the result to be a clone of; e.g. an object of the proper class you need, a variable initialized to the proper type expected.
    Not supported:
    - Object array elements,
    - Member objects.
    awServer
    abOOP
    Mr Tuvia Vinitsky
      Support extension Support for shape.CurvatureawHTML
      Support extension Support for timeout in wMessageBox() and other similar formsaw.vcx!awFrm*Mr Garth Groft
      Support extension Support for inputBox() with thisForm.wInputBox()aw.vcx!awFrmIBM. Gilles Lajot-Sarthou
  • 1.26
  • 10/01/2012Fix Release form (javascript window) that is not currently focusedaw.vcx!awFrm
    FoxInCloud.js
      Fix DOMelement.focus() works in IE < 9awServer.prg
    FoxInCloud.js
    Mr Andy Swartz
      Fix awAJAX.PropsRestore_DS_Alias_oGrids(): fixed a bug causing grids to loose .RecordSource if cursor READONLY and/or have structure changes between 2 requests or usersawServer.prg
      Fix awAJAX.PropsRestore_Array(): ".BoundColumn property is not found" error fixedawServer.prg
      Fix Listbox & Combobox: no longer add an empty <option> when .Value can't be found in .List, add a .selectedIndex = -1; javascript instruction instead.
    This fixes the "index is out of bounds" error when selecting this 'extra' <option>
    awAJAX
    awHTML
      Fix With due respect to VFP object and classes naming conventions, class 'awCol' is renamed 'awGrc'.
    Please adapt the 'AS' clause of your subclass(es) accordingly.
    awPublic.prg
      Look and feel PageFrame page tabs, extensible display:
    - Default styles in CSS file instead of in-line as of now
    - Add default CSS class(es) based on page class hierarchy + 'tab'
    aw.vcx
    awHTML
    Mr Tuvia Vinitsky
      Enhancement New property .wlContentDynamic [.F.]
    Set to .T. if either grid or column or column member or their respective properties can change at run time during the course of user events.
    You get better performance with .F.
    aw.vcx!awGrd
    awPublic.prg!awGrc
      Enhancement 4 New Methods:
    - awFrm.wcScriptEventServerClient(<javascript>, <data>, <sync>) / awHTMLgen.cScriptEventServerClient(<javascript>, <data>, <sync>)
    - awFrm.wcScriptEventClientServer(<javascript>, <data>, <sync>) / awHTMLgen.cScriptEventClientServer(<javascript>, <data>, <sync>)
    Allows an event to be sent to the server, then processed by client browser javascript or the other way round;
    Code your event method as follows:
    IF m.thisForm.wlHTMLGen && added par FoxInCloud Adaptation Assistant
    RETURN thisForm.wcScriptEventServerClient(<javascript>)
    ELSE && added par FoxInCloud Adaptation Assistant
    … <<your existing code>> …
    ENDIF && added par FoxInCloud Adaptation Assistant
    aw.vcx!awFrm
    awHML.prg
      Enhancement All Classes now have 10 .wFormCallBack*() methods: .wFormCallBack(), .wFormCallBack1(), …, .wFormCallBack9()aw.vcx!*
      Enhancement PROCEDURE wUserConnected(): IDs of users currently connected to the applicationaw.vcx!awFrm
      Support extension Save and restore Deleted() records in cursors and viewsawAJAX
      Support extension Support double-byte character code pages (cn, jp, etc.)FAA (awAdapter)
      Support extension READONLY cursors are supportedawAJAX
      Support extension 'Timer' BaseClass is supportedaw.vcx
    awAJAX
    awHTML
  • 1.25
  • 07/01/2012Fix wAddObject() with "OLEcontrol" class: first parameter contains OLEclass, fixed by replacing 't01' variable by an equivalent litteral and macro-substituting parametersawPublic.prg
    wAddObject()
      Fix Text can be selected with mouse (fix in .MouseDown())aw.vcx!awTxt
      Fix Form Call-Back method can return value of any type (fix in awFrm.wFormShow())aw.vcx!awFrm
      Fix awFrm.wFormMaster() : second parameter no longer missingaw.vcx!awFrm
      Fix Member of a Column dynamically added when Grid.RecordSource is assigned (typically Text1 AS Textbox): no more warning if not a subclass of aw.vcx!aw???awHTML
      Look and feel Child forms: set close, minimize and maximize buttons, and autocenter according to original VFP form settingsawHTML
    awAJAX
      Enhancement aw.vcx!awFrm.Unload() supports RETURN of an object of any base class except Collection et Control.
    awPublic.prg!cLitteralJS() checks object's base class and awPublic.prg!cLitteralJS_lSupport() checks if si awPublic.prg!cLitteralJS() supports the type of data to be converted into a JavaScript litteral.
    awPublic.prg
    aw.vcx!awFrm
      Enhancement New method awFrm.wTableSwap(dbf,alias) allowing to open another table under an existing alias.
    This method can be used if your application requires different free tables according to the user; for example user of a client 'A' uses free tables located in folder 'A' while users of client 'B' uses free tables located in folder 'B'.
    awFrm.wTableSwap(dbf,alias) restores alias in the same state as before and takes care of grids that alias could be .RecordSource of.
    aw.vcx!awFrmMr Garth Groft
      Enhancement awAJAX.PVofObject() supports all base classes except Control et Collection
    (Collection to be supported in a future version)
    awAJAX.PVofObject
      Enhancement Properties added to a form at design time are saved automaticallyawHTML
      Enhancement New property aw.vcx!awFrm.wcWindowTheme: window theme for form rendering in browser;
    back-compatible default: 'mac_os_x'
    See available themes in <VFP9>\Tools\AB\AW\Scripts\Window*\Themes
    aw.vcx!awFrm
      Enhancement When Grid.RecordSource changes, columns are rebuilt automatically
    (see aw.vcx!awGrd.RecordSource_Assign())
    aw.vcx!awGrd
      Enhancement Pageframe page tabs support the same events as the page itself (same behavior as VFP)awHTML
      Enhancement ToolTip generation now obbeys to Form.showtips; no more default tooltipsawHTML
      Support extension grid.Column.ControlSource with long field names (> 10 characters) and/or expressionsawHTML
      Support extension Are now supported:
    - buffered VFP tables and cursors (in addition to views previously supported)
    - All alias properties: SET KEY/ORDER/FILTER/FIELDS/RELATION.
    These properties may be static (defined at design time) or dynamic (changed in the course of user actions)
    awAJAXMr Garth Groft
      Support extension Dynamic SET RELATION: save and restore aliases RELATION() and TARGET()awAJAX
      Support extension PROTECTED or HIDDEN properties can be saved and restored.
    See aw.vcx!aw*.wPropGet(), .wPropSet(), .wPropArray() and awServer.prg!awAJAX.PropsSave_Init_Obj() and .PropsRestore()
    aw.vcx
    awServer
  • 1.20
  • 05/01/2012Fix Child Forms working in multiple parent form's datasession (default) : datasession is correctly saved and restoredawAJAX
      Fix Combobox in grid cell(s) : InteractiveChange accepts character valueaw.vcx!awCbo
      Fix aw_override.h renamed as "awPublic_override.h" and moved up from AB\AW\ to AB\ folder.
    Users of trial version can now override any FiC constant in awPublic_override.h
    awPublic.h
    aw.h
      Fix As awAppHost.prg source code is not distributed, all ASSERT are replaced by Warning() for easier debuggingawAppHost
      Fix Non-updateable views (Empty(CursorGetProp("KeyFieldList"))) are better saved and restoredawAJAX
      Fix Combobox & Listbox with .RowSource : if .Value can't be found in .RowSource, no value in list is selectedawAJAX
      Productivity Form.init() with parameters:
    condition code by:
    IF Pcount() > 0
    <existing code>
    ENDIF
    [automated adaptation]
    FAA (awAdapter)
      Productivity Move aw.vcx!aw*.Init() code to awAJAX to eliminate the need for a DoDefault()aw.vcx
    awAJAX
      Productivity Step 3 - Publish: automatically installs a new Application Server and setups IIS accordinglyFAA (awAdapter)
      Productivity *_assign(): add at the beginning of method
    IF Type("thisForm.wlPropsRestore") = "L" and ThisForm.wlPropsRestore
    This.<Property> = m.tNewValue
    RETURN
    ENDIF
    <existing code>
    [automated adaptation]
    FAA (awAdapter)
      Optimization Views with row buffering: only current record is saved and restoredawAJAX
      Enhancement AJAX requests are script-mapped to avoid hitting /bin directory which is a "hidden segment" by default under IIS 7+.
    See FoxinCloud.js!FoxInCloud.CGI
    FoxInCloud.js
      Enhancement Restore Set("Path"), Set("Procedure") and Set("Classlib") if ever application SETs without an ADDITIVE clause, issues a warning in this case.awAppHost
      Enhancement wcFormParms() builds a String of parameters ('t01,t02, ...') for macro-substitution when calling a form method; Simplified code (fewer lines)awPublic.prg
      Enhancement aw.vcx!awFrm::wForm() broken down into 2 sub-methods: .wFormNoShow() and .wFormShow().
    If your form needs additional settings before .Show() you can either implement youForm.wForm_shell() or execute your setup code between .wFormNoShow() and .wFormShow() calls.
    See aw.vcx!awFrm::wForm() source code for details and code samples.
    aw.vcx!awFrm
      Support extension awFrm.wFormMaster() accepts up to 20 parameters to be passed to form.Init()aw.vcx
    awAJAX
    awProcess
  • 1.10
  • 02/28/2012Fix GDIplus error 'GDI+ object not created or associated' no longer occurs when Picture file can't be foundaw.prg!
    cImageWeb()
      Fix Request ID unicity is better enforcedawServer
      Productivity Application ini key to avoid sending a message to administrator when a Process Method is not supported (hack attempts)awProcess
      Productivity Application ini key to avoid sending a message to administrator when a Process Method is not supported (hack attempts)awProcess
      Productivity After adapted project is opened, QUIT FoxInCloud Adaptation AssistantFAA (awAdapter)
      Productivity Deprecated PEMs removedaw.vcx
      Productivity Warn developer that if any javascript error occurs, execution stops and further code is not executed, resulting in incomplete request processingFoxInCloud.js
      Optimization Grid: in development mode, warn developer if extracting contents and/or evaluating Column.Dynamic* properties seems too lengthy and can/should be optimized.awHTMLgen
      Optimization Instantiate awFrmMB and/or sub-classes once and recycle instance on each useaw.vcx!awFrmMB
      Enhancement In development mode, warning if unexpected alteration of Set("ClassLib") and Set("Procedure") during application setup and user event processing.
    Make sure to perform all your application's SET PROCEDURE|CLASSLIB in xxxSets with the ADDITIVE clause
    awAppHost
      Enhancement By default visual files *.?cx are NOT compiled to avoid changing version unnecessarily. VFP automatically compiles *.?cx when closing.
    Pass .T. as first parameter if you want to compile *.?cx as well.
    atPJcompile.prg
      Support extension Complete events mapping between VFP and HTML DOM (including When()) and more accurate definition of event support scope per VFP base classaw.vcx
    awAJAX
    awHTML
      Support extension Grid, full support of:
    - .Highlight, .HightlightStyle, .HightlightBackColor, .HightlightForeColor
    - .GridLines, .GridLineWidth, .GridLineColor
    awHTML
  • 1.6
  • 12/15/2011Localization PEM descriptions are localized in Englishaw.vcx
      Fix As of VFP standard behavior, pageframe refreshes current page only; in Web mode, FoxInCloud refreshes all pages so that controls properly reflect their controlSource.aw.vcx!awPgf
      Fix wViewsRequery() method restores Recno('view') after Requery()aw.vcx!awFrm
      Fix Recently edited grid cells are updated when grid.RecordSource content changesawHTML
      Fix Cursors created by CREATE CURSOR are now correctly saved under Windows 2000 serverawAJAX
      Fix Arrays whose size has decreased since last request are properly restored.awAJAX
      Fix Grids in a form under default dataSession no longer loose their recordSource/ControlSourceawAppHost
    awAJAX
      Productivity When running FoxInCloud Server in VFP IDE (development mode) awHTML generates application default CSS (awDefault.css) dynamically with a sys(2015) stem prefix as a browser cache workaround; awProcess and awAJAX updates this CSS in the page accordingly.
    In production mode, awDefaultAll.css remains to allow multi-server support. Testing with multiple browsers is supported.
    Please note that, when displaying a child form for the first time after FoxInCloud server restart, because of the javaScript-driven CSS update in the browser, elements appear unstyled for a blink. This is a normal behavior occurring only once per child form, and in development mode only.
    awProcess
    awAJAX
    awHTML
      Productivity awFrm.wFormTopLevel()
    renamed as wFormMaster() for the sake of consistency.
    If you used this method in your subclass(es), please save your code and move it to this new method.
    aw.vcx!awFrmMr Tuvia Vinitsky
      Productivity DO FORM: automatic replacement by thisForm.wForm() when called in a form member methodFAA (awAdapter)
      Look and Feel Main form pages generated by awProcess::wFormStandardPage(): 2 additional <div> as wide as the form just before form title bar and below form bottom bar (CSS classes ".awForm-top" and ".awForm-bottom"), empty by default.
    In your process class, implement wFormHTML_cFormTop() and wFormHTML_cFormBottom() methods to fill in content
    awProcess
      Look and Feel Support for Grid Column automatic alignment (.Alignment = 3) based on ControlSource typeawHTML
      Look and Feel Grid Column Header with .Alignment = 3 (automatic) are now properly alignedawHTML
  • 1.5
  • 11/24/2011Fix ASSERT … MESSAGE longer than 120 chars display on Windows 64-bit platform, though truncated to 120 charsall
      Fix wForm(): safer detection of control where event originates fromaw.vcx!awFrm
      Fix wMessageBox(): 'this.method' syntax supported as tuFormCallBack parameteraw.vcx!awFrm
      Fix Better detection of cursors built by querying a remote databaseawAJAX
      Fix Cursors with a varying structure and recordSource of one or several grid(s) are properly restored when user changesawAJAX
      Productivity In forms title bar (build with xxxProcess.wFormStandardForm()), added a link sending an email to application support manager in case of troubleawProcess
    awAJAX
      Productivity No more ASSERT when an optional path is missing or invalidawAppConfig
      Look and Feel You can now override xxxProcess.wFormHTML_cCaption() to customize form captionawProcess
      Enhancement Changing Textbox.passwordChar from empty() to !emtpy() is supported in browser ('*' is browser default)awAJAX
  • 1.4
  • 11/07/2011Fix Checkbox.Enabled = .F. mapped to disabled="disabled" as <input type="checkbox"> does not support readonly the same way as VFP (user can still change control's value)awHTML
      Fix Improved CSS declarations
    Combobox rendering improved
    awHTML
      Productivity Property awServer::cFormsLaunchAtStartup is renamed uFormsLaunchAtStartup and accepts the value .T. to launch all application's forms at startup (in excess to passing .T. as first parameter to main program).
    Please make sure you rename this property in your awServer subclass(es)
    awServer
    awAppHost
      Productivity ASSERT on invalid folder pathes in FoxInCloud Application Server .ini fileawAppConfig
      Productivity Linked resources such as images and xml are relative to site virtual for independence to site configurationawHTML
      Look and Feel BackHome() method added.
    Returns to site root virtual directory; requires a default page in root virtual directory
    awProcess
      Look and Feel When user authentication expires, site moves directly to home page without displaying an error messageawAJAX
    awProcess
      Look and Feel Grid processing optimization: about 30% fasterawHTML
      Look and Feel Object styles are all in CSS, no longer in HTML page. Form HTML pages load faster and CSS override can be done object per object.
    REGENERATE your awDefaultAll.css by:
    DO <myFoxInCloudServer> WITH .T.
    awHTML
    awAppHost
  • 1.3
  • 09/21/2011Security wlUserAnonymous() function indicating if current web user is anonymousawPublic.prg
      Learning User authentication methods documented: wUserSet() and wUserGet()aw.vcx!awFrm
    xxxProcess
      Fix Added missing
    SET PROCEDURE TO awAppHost.fxp ADDITIVE
    aw.prg
      Fix Missing graphics now included in Trial distributionaw.vcx!awFrm
      Look and Feel System menu support with xxxProcess::wFormHTML_cMenu() and xxxMenu.xlsawProcess
      Look and Feel awProcess::wFormStandardPage(): form title bar and close button respect VFP form settingsawProcess
      Support extension Defining callback method as second parameter of awFrm::wForm(): supports syntax 'this.wFormCallBack'aw.vcx!awFrm
      Support extension wActiveForm(), wActiveControl() and wThisFormActiveControl() in replacement, resp., of _Screen.ActiveForm, _Screen.ActiveControl and thisForm.ActiveControlawPublic.prg
  • 1.2
  • 09/08/2011Security 'Update code on line' <a> and <form> commented because too difficult to use manually; ALWAYS use standard awStart.prg!awServerUpload() procedure instead.
    Retrofit: in all your sites, manually replace "admin.asp" file by this version.
    admin.asp
      Fix In development mode, current form is no longer activated in IDE to avoid lostFocus() and or valid() events to triggerawServer
      Fix Protection against duplicate entries in list of properties to save (.wcPropSave) causing exponential growth when savingawServer
      Fix Better CRLF handling in EditBox (<textarea>)awAJAX
      Fix Compile installed <VFP9>\Tools\AB\*.prg to keep *.fxp in sync as VFP rarely does that correctly, even with SET DEVELOPMENT ON;
    Screen = OFF
    Resource = OFF
    FICstart.exe
      Productivity Form name added in the 'cFormReq' field to ease AJAX requests debuggingawServer
    wwRequestLog
      Look and Feel awServer.wUserDemo may open several sessions simultaneouslyawServer
  • 1.1
  • 08/24/2011Security Complete COM server protection against modal statesawAppHost awAJAX
      Localization Improved localization in EnglishAll
      Fix Session table created at first runawSession
      Productivity Improved data formatting in _screen-based Request tracking tableawAppHost
      Support extension Alias() is saved and restored between user eventsawAJAX