Last updated on 11-30-22

Subject to change without prior notice

Download as Excel 97-2003 Workbook

Starting with version 2.20.1, FoxInCloud follows the SemVer specification

Road map


    Future (see history below)

     3.0.1TBA Support for URLs "about:..."Support extensionawAJAXM. Vincent Helleboid
       .sel* properties supported Read/WriteSupport extensionaw.vcxM. Vincent Helleboid
       e-mails sent by FoxInCloud have a 'message-ID' header (required by gMail)Support extensionoIPstuff_access
       FoxInCloud Web Application Dashboard: errors due to hack attempts are no longer accounted forEnhancementawProcess
       Bootstrap mode: xxxFrm.wBSsize='FS' displays form fullscreen, either as a master or a child formEnhancementawProcessM. Vincent Helleboid
       Bootstrap: sub-menus close on .click()FixFoxInCloud.jsM. Vincent Helleboid
       Holding one session per browser tab is neutralized on mobile devices where firing the window.unload() when page unloads is too unpredictableFixFoxInCloud.jsM. Vincent Helleboid
     3.1.0TBA Set xxxGrd.memberClass to xxxGrc of xxx.prg (as awGrc of awPublic.prg)
    . support Events on Column and Header without BindEvent() -- reuse your original event code
    . FoxInCloud standard methods (eg. .wFormCallBack*()
    . FoxInCloud standard properties such as .wlContentDynamic (members altered at run-time) and .wcPropSave*
    REQUIRES to RE-ADAPT the project using FAA.
    1- re-adapt your desktop project using FAA;
    2- If your project already has a project Hook (prj), make sure to execute in prj.Init() : SET PATH TO (JustPath(_VFP.ActiveProject.Files('xxx.prg'))) ADDITIVE; otherwise re-adapting the project using FAA assigns xxxPrj of xxx.vcx (as awPrj of aw.vcx) as project Hook to the project
    Support extensionFAA (awAdapter)Sr. Arcadio Bianco
       objectOfXML(): restore array properties to class valuesEnhancementabOOP.prgMr. Paul Elliot
       Log errors occurred while instantiating formsEnhancementawAppHost.formLaunchSr. Arcadio Bianco
       Ignore errors occurred in awFrmLogErrorEnhancementFoxInCloud-status
       Modified properties identification (aw.vcx!aw???.wcPropSave): identify native properties that are modified by other objects or classes
    [automated adaptation]
    ProductivityFAA (awAdapter)
       Automated adaptation: replace DELETE FILE by wDeleteFile(file, @result)ProductivityFAA (awAdapter)
     4.0.0TBA Upgrade to current West-Wind Web Connect version
    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
    - Send administrative emails using wwSMTP instead of deprecated wwIPstuff
    Support extensionaw*.prg
     4.1.0TBA Support all Locale ID, code page, and FontCharSet supported by VFPSupport extensionaw.vcx!awFrm
    Mr Tuvia Vinitsky
       Multiple instances of the same formEnhancementaw.vcx!awFrm
    Mr Tuvia Vinitsky
       .PropsRestore_DS(): views of views are supported
    Requerying views now takes care of 'from' et 'where' clause dependencies
       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()
    ProductivityFAA (awAdapter)
       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
    ProductivityFAA (awAdapter)
     4.2.0TBA Install a FoxInCloud Live Tutorial instance using VFP Advanced 64 bitSupport extensionLive Tutorial
       property .wlFullScreen to resize master forms to full browser screen in Web classic modeEnhancementawFrm
       FoxInCloud Web Application Dashboard (http://…/ improve link to form errorEnhancementawServer.prg
       FoxInCloud Web Application Dashboard (http://…/ detailed response time per form member object, event, userEnhancementawServer.prg
       FoxInCloud Web Application Dashboard (http://…/ additional hints to improve response timeEnhancementawServer.prg
       Automatically archive the request log at server startupEnhancementawServer.prg
       Support thisForm.wcScriptJS*() for grid membersEnhancementawHTML
       Automated adaptation: Replace
    . '_Screen.ActiveForm' by 'wActiveForm()',
    . 'thisForm.ActiveControl' by 'wActiveControl()'
    ProductivityFAA (awAdapter)
       Issue a warning if 'SUSPEND' is found in code
    (would hang the Web application)
    ProductivityFAA (awAdapter)
       Automated adaptation: awOLEPDFxc class or sub-class; replace <this.src = …> by <this.tag = …>ProductivityFAA (awAdapter)
     4.3.0TBA In source mode, automatically backup project's source files before starting automated adaptations.ProductivityFAA (awAdapter)
       'Optimizing data management' how-to Guide: Private vs Default Datasession, tables, views and cursors,
       'Setting Application Environment' how-to Guide: SETs, public variables, sharing environment settings with LAN
       '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
     4.4.0TBA 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)
    Look and feelaw.vcx
    Mr Tuvia Vinitsky
       Automated adaptation: Error() method: in Web production mode, create an exception object and THROW it to FoxInCloud's main TRY CATCHProductivityFAA (awAdapter)
       Secured FiC License administration page with on-line paymentLicensingawProcess
       Localize all ASSERT messages into EnglishLocalization*.prg
     4.5.0TBA 'ToolBar' and 'Separator' Base Classes are supportedSupport extensionaw.vcx
       Third-party modules: improve identification and segregation between FoxInCloud certified and othersProductivityFAA (awAdapter)
       'Implementing User Authentication' how-to Guide: what FoxInCloud does, what needs be implemented depending on whether security implementation is Application-based or Form
       Modules signatures (purpose, parameters descriptions and returned value) : localize into EnglishLocalization*.prg
     4.6.0TBA GetColor(): support through wGetColor()/aw.vcx!awFrmGCSupport extensionaw.vcx
       Optimize grid state save and conversion into HTML/JavaScript (faster execution)OptimizationawHTML
     4.7.0TBA 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)
    Support extensionawServer
       Form.resize() support in classic mode: use CSS relative measurements (%);
    controls resizes while form is resized, all resizing happens on client using CSS, server no is longer involved: faster and smoother.
    [12 Jul. 2018] postponed until all browsers support CSS3 directive {width|height: available;}
       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']
       Present FoxInCloud roadmap as a filterable list, allow user to suggest new entries and/or modification to current
     4.8.0TBA For controls with Disabled* properties (e.g. Commandbutton), create a .disabled CSS class instead of changing HTML element's style propertiesLook and feelawHTML
       New protected method in order to decide whether error should be presented to the user or sent to Application Administrator only.Look and feelawProcess
     4.9.0TBA Event 'DragDrop' is supported on serverSupport extensionFoxInCloud.js
     4.10.0TBA OLEClass 'MSComctlLib.ListViewCtrl.2' [Microsoft ListView Control V6 (SP4)] is supportedSupport extensionaw.vcx
       Event 'Scrolled' is supported on serverSupport extensionFoxInCloud.js
       Support form.VisibleSupport extensionawHTML
       Provide a set of standard FoxInCloud error pagesLook and feelwc.ini
       Provide a set of standard FoxInCloud CSS style sheets to easily upgrade web application's look and feelLook and feelawSetup
     4.11.0TBA OLEClass 'MSComctlLib.ProgCtrl.2' [Microsoft ProgressBar Control 6.0 (SP4)] is supported for asynchronous processesSupport extensionaw.vcx
     NONETBA 'FormSet' BaseClass is supportedSupport extensionaw.vcx
     TBATBA 'Hyperlink' BaseClass is supportedSupport extensionaw.vcx
       Adapt Visual Promatrix to FoxInCloud (FiC Certified)Support extensionThird party
       Adapt Visual MaxFrame to FoxInCloud (FiC Certified)Support extensionThird party
       Adapt ctl32 to FoxInCloud (FiC Certified)Support extensionThird party
       wReportForm() using either FoxyPreviewer, XFRX or FRX2AnySupport extensionawPublic.prg!wReportForm()
       Callback method can be a member of an object stored in either a global variable or a
    So far Callback methods could only be members of form or form members
       Identify modified properties at runtime instead of design timeOptimizationaw.vcx
       Support the DHTMLx widgets libraryLook and feelawAJAX
       Support the Sencha / ext.js widgets libraryLook and feelawAJAX
       Automated adaptation: move call-back code to a call-back method if no variable dependencies is detected within this codeProductivityFAA (awAdapter)
       If an adaptation feature is part of FoxInCloud road map, mention version and scheduled date in adaptation hintsProductivityFAA (awAdapter)
       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)ProductivityFAA (awAdapter)
       '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
       When adaptation is covered by a how-to guide, provide a link to the on-line how-to guideLearningFAA (awAdapter)


     3.0.003-01-22 Fixed toggling the display of a clickable labelFixFoxIncloud.jsM. Vincent Helleboid
       FoxInCloud Web Application Dashboard: fixed various CSS issues related to Bootstrap V 5FixawServer.prg
       User no longer gets disconnected when hitting app. for the first time through a direct log-in URLFixawAJAXM. Vincent Helleboid
       In case of error in awMenu, make sure an error message is provided to the user.EnhancementawMenu.prgM. Vincent Helleboid
       Improved .mouse* surface event bubbling across containersEnhancementawHTML.prg
       Implemented pageframe events
    - and pgf.pag.Click() when clicking in a page tab
    - pgf.mouseDown|Up()
    M. Vincent Helleboid
       Fixed decimal point / separator mismatch between browser and app datasession settingsSupport extensionaw.vcxSig. Michele Bosetti
       Added support for separator line in Listbox and Combobox (\-)Support extensionawHTML.prgM. Vincent Helleboid
       Support for Bootstrap 5
    Bootstrap 5 replaces the previous version 3 shipping with FoxInCloud.
    If your application only relies on the HTML/CSS/JS code that FoxIncloud generates from your VFP forms, you're ready to go without any adaptation.
    Conversely, if your app. generates specific HTML (eg. using the .wcHTMLgen() method), you need to take into account the evolutions imposed by the migration:
    - from V.3 to V.4 :,
    - from V.4 to V.5 :
    Though not exhaustive, the most notable evolutions are:
    - new HTML for checkbox and optionButton,
    - class '.btn-default' renamed '.btn-secondary'
    - new standard classes: primary, secondary, warning, success, etc.
    - new classes for form controls: .form-label, form-check, .mb-* instead of .form-group, etc.
    - .input-group-* classes simplified
    - popover : initialisation must be explicit (no more jQuery extension)
    - HTML alerts is modified (
    - the date-time picker control is now "Tempus Dominus Bootstrap 4" ( for compatibility with BS 4/5 (from the same author as previous control "Tempus Dominus is the successor to the very popular Eonasdan/bootstrap-datetimepicker")
    - the "remarkable-bootstrap-notify" module plays bad with BS 5 (the HTML it generates is deprecated) ; you can use a 'toast' instead
    - compatibility with other Bootstrap-dependent components is satisfactory : bootstrap3-typeahead et bootstrap-treeview.
    Support extensionawHTML.prgM. Vincent Helleboid (sponsor)
       Web MDI : each browser tab opens a distinct session on server
    - enable by setting xxxServer.lBrowserTabSession = .T.
    - Not supported on Safari
    In different tabs of the same browser instance user can:
    - use the same app. with different credentials (requires xxxServer.wUserSharable = .T.)
    - using the same crendential, see the same form in different states (eg. use the same 'client form' for different customers)
    Support extensionFoxInCloud.js
    M. Vincent Helleboid (sponsor)
     2.31.108-01-21 Open session when user gets identified through an URLFixawSessionM. Vincent Helleboid
       awFrm.wFileSaveAs(): added tlFileKeep parameter to keep temp file on disk (standard behavior deletes temp files after delivering to user)Support extensionawFrm.wFileSaveAs()M. Vincent Helleboid
       In FoxInCloud Web App. Dashboard, ignore errors occurred during search engine crawling (eg. wrong URL)Support extensionawServer
       Support DOS/Windows file & folder pathes in Javascript StringsSupport extensionuValue_JSM. Vincent Helleboid
     2.31.002-01-21 .w*RowChange() no longer calls this.refresh()
    If behavior changes, add this.refresh() to your class or object code
    Behavior ChangeawGrdM. Vincent Helleboid
       Fixed syntax of url() directive according to Michele Bosetti
       Bootstrap mode: fixed error "Variable Ngmember can't be found" when generating label HTMLFixawHTMLgenM. Vincent Helleboid
       Generate form's HTML, CSS and JS only once per Web Application Server release.
    Generate only if the target files don't exist or are older than the Web Application Server file (xxx*.exe).
    OptimizationawAppHost, awAJAXM. Gilles Lajot-Sarthou
       In production mode, if form's initial state table exists and is more recent than executable, do not save initial state again.
    This avoids conflictual accesses to the initial state table between different servers
    OptimizationawAJAXM. Gilles Lajot-Sarthou
       Use in the form's previous state table (old) just before user action on the form, re-open it afterwards to compare form state before/after user action.
    Reason: if a server chokes while processing a user action, and user no longer wants to wait and reloads the page, another server needs exclusive access to the form state table to overwrite it.
       No more 'HTTP protocol error' message when sending a user event to the server while the page (master form) is unloading.EnhancementFoxInCloud.jsM. Gilles Lajot-Sarthou
       Boostrap date-time picker flies over parent containerEnhancementawHTMLM. Gilles Lajot-Sarthou
       textbox.InteractiveChange() no longer overwrites user's typingEnhancementawAJAXM. Gilles Lajot-Sarthou
       Support for native date[-time] picker on mobile devicesEnhancementawHTML
    Sig. Michele Bosetti
       .wFileSaveAs(): Added 4th parameter to force temporary fileEnhancementwFileSaveAs()M. Vincent Helleboid
       Support for getting textbox.selStart() in some event code, such as
    FLT sample:
    EnhancementFoxInCloud.jsM. Vincent Helleboid
       xxxTxt.wlAlwaysBlur sends .blur() to server even if .value is unchangedEnhancementaw.vcx
       Support for multiple files uploadEnhancementawImgGetPictSig. Michele Bosetti
       Bootstrap: scrolling support improved for multiple child formsEnhancementFoxInCloud.jsSig. Michele Bosetti
       Ignore AJAX requests from major search engines bots.
    These requests generate meaningless errors.
    To ignore more search engine bots request, add a 'robots.txt' file at your site root.
       xxxServer.lBSnotifyAdd adds the 'Bootstrap Notify JS' and 'animate CSS' librariesEnhancementawServerSr. Arcadio Bianco
       Asynchronous report sample in FoxInCloud Live Tutorial
    EnhancementFLTSr. Arcadio Bianco
       Fixed error "the initial properties table can't be found or used: '…\_Ini.dbf'"EnhancementawServer
       Better handle the 'invalid form specification' errors due to novice hackers trying to cheat FoxInCloudEnhancementawAppHost
       HotFix mode modification
    Please BEWARE that xxxServer.lHotFixMode REPLACES xxx.ini!hotFixMode
    EnhancementawServerM. Vincent Helleboid
       Bootstrap: rounded corner on first/last button visible in button group.
    .wuEffect* not compatible: set to .F. at design time or in .Init()
    M. Vincent Helleboid
       Test version indicator
    If testVersion is on in xxxTest|Prod.ini, standard form pages display "Test Version" in the upper left corner
       HotFix mode
    If xxxServer.lHotFixMode = .T., when production server restarts after an update, restore previous user's application environment: users continue working seamlessly.
    Set xxxServer.lHotFixMode = .F. only if the new version alters application's environment: public variables,, menus, etc., and/or you use the VFP menu designer and have not named all your menu pads (in which case VFP assigns random names)
    EnhancementawServerM. Vincent Helleboid
       xxxProcess.UserEnvTableGet() downloads an app. Environment state table for analysis and optimization.
    Copy and adapt xxxTest.userEnvTableGet.prg for your own application
    EnhancementawServerSr. Arcadio Bianco
       Added support for diacritics in auto completionSupport extensionawCboAutoCompM. Vincent Helleboid
       Support for slanted single quotes in JavaScript literalsSupport extensionabTxtSig. Michele Bosetti
       Support for treeview nodes drag-and-drop
    FLT sample:
    Support extensionawBCevent
    M. Vincent Helleboid
     2.30.004-16-20 awTxt.backColor_assign() removed
    This code was removed:
    lparameters tBackColor
    IF Vartype(m.tBackColor) == 'N' AND Between(m.tBackColor, 0, Rgb(255,255,255)) && sometimes, VFP assigns RGB(255,255,255) * 4!
    this.BackColor = m.tBackColor
    FixawTxtMr. Paul Elliot
       page.Enabled changes in Bootstrap mode fixedFixawServer, awHTMLM. Vincent Helleboid
       Fix unterminated comment issueFixFAA
    Sr. Arcadio Bianco
       grid: fix 'Z' format supportFixawHTML.prgSig. Michele Bosetti
       Bootstrap datetime picker: show time picker when .Value is of type 'T'
    FixawHTML.prgM. Vincent Helleboid
       In classic mode, grid re-position correctly when resizing form or parent containerFixawHTML.prg
    Mr. Paul Elliot
       Hot Fix Mode
    New setting in xxxTest|Prod.ini : 'HotFixMode'; if set to 'on', after a server update, previous app environment is restored for user.
    User continues working seamlessly.
    Use only if new server version changes nothing in: public variables, _screen and _vfp custom properties, menu definition.
    M. Vincent Helleboid
       awOLEIE: load initial src URL in generated HTMLEnhancementawHTMLM. Vincent Helleboid
       Better protect production server startup against FoxInCloud server failureEnhancementawAppHostSig. Michele Bosetti
       In Web mode, Label.Caption supports more than 254 chars (VFP limitation)EnhancementawServer.prgM. Vincent Helleboid
       uValue(): support date with year < 100
    Determine the date using Set("Century", 1) and Set("Century", 2)
    EnhancementabDev.prgM. Vincent Helleboid
       When no custom code implemented in .click() of Optiongroup/Commandgroup member, execute *
    (as of VFP native behavior)
    Support extensionawopt, awcmdMr. Paul Elliot
     2.29.006-06-19 grid.scrollBars no longer adjusts to the number of rows and cols in the gridFixawGridMr. Paul Elliot
       Support wMenu() while server unloadsFixawAppHost
    M. Vincent Helleboid
       Escape critical characters in treeView.node.textFixawRPM. Vincent Helleboid
       Properly log object type request valueFixawServerM. Vincent Helleboid
       Added missing program at.prgFixat.prgM. Vincent Helleboid
       Support DEACTIVATE POPUP in Bootstrap modeFixawMenuM. Vincent Helleboid
       Support repeated DEFINE MENU | POPUP without prior RELEASE
    Demo: > rightClick on form surface
       Implement .click() by default when commandButton is a member of a commandGroup, to trigger commandGroup.InteractiveChange()Fixaw.vcx!awCmdM. Vincent Helleboid
       Added missing ENDPROC when adapting event methods
    (required by foxBin2Prg)
    FixFAA (awAdapter)M. Vincent Helleboid
       Statistics based on all files instead of only those with adaptationsFixFAA (awAdapter)
       Fixed C00005 error: CLEAR parent CLASS before child classFixFAA (awAdapter)
       File upload: support for drag and drop from file explorer
    - If awImgGetFile is a member of awCntGetFile, drop zone is the awCntGetFile surface
    - else file can be dropped anywhere in the document
    M. Vincent Helleboid
       Properly remove deprecated columns when grid.columnCount decreases
    Workaround a VFP bug: when decreasing .columnCount, VFP does not properly discard the excess columns; awHTML.grdRestore() now .removeObject() these 'ghost' columns.
    FixawHTMLMr. Paul Elliot
       wMenu(): response time improved by about 15%OptimizationawMenu
       New option 'posDimEffect' controls animations upon position and/or dimension changesEnhancementxxx.jsMr. Paul Elliot
       Boostrap menu: support line separatorsEnhancementawMenuM. Vincent Helleboid
       awBSicon: replace image address only if it has changed.
    Previously awHTMLgen.awBSiconUpdate() always updated awBSicon.addr, hence an obese awBSicon.fpt
    Reminder: pack awBSicon.fpt, it should no longer get bloated:
    use awBSicon exclusive
    pack memo
       To improve privacy, add user's sessionID to stem of files just generated for downloadEnhancementawServerM. Vincent Helleboid
       Bootstrap HTML generation time reduced by about 25%EnhancementawHTMLM. Vincent Helleboid
       Fixed generation error in Bootstrap Responsive modeEnhancementawHTML
       Boostrap: .wBScolAlign forces alignement of containing Boostrap colum;
    - parent (container, page, form, etc.) has precedence
    - members must agree on alignment or abstain ('')
    EnhancementawHTMLM. Vincent Helleboid
       Improved restorationEnhancementawPublic.prg
       Set, save and restore _Screen.Width and _Screen.Height as browser's view port width and height
    (in development, awSets.Destroy() restores _Screen.Width and _Screen.Height when application unloads)
    Mr. Paul Elliot
       Support for .SelStart and .SelLength
    selection changes in browser are notified to server
    M. Vincent Helleboid
       Shortcut: F4 ignores (or recall) current adaptationEnhancementFAA (awAdapter)
       Icon size set by default according to original image size
    Clear icon button
       Updated bower\*.* to the latest versionEnhancementawScripts
       awImg.wBSiconNo prevents .*Picture from being added to awBSicon tableEnhancementawImg
    M. Vincent Helleboid
       Dynamic grid sample
    Grid has 0 column at form.Init(), use can dynamically choose the .columncount and .columns.controlSource
    EnhancementFoxInCloud Live TutorialMr. Paul Elliot
       wFormMaster() supports form classesEnhancementawPublic.prgMr. Paul Elliot
       XMLofObject() and public objects based on a FoxInCloudf class: save custom properties automaticallyEnhancementabOOP.prgMr. Paul Elliot
       form.Init() : support comments before [L]parameters instructionEnhancementacTxt.prg!acRegExpMr. Paul Elliot
       wNavigate(): do not override previous redirection.
    Make sure to call the indended redirection first; eg.
    Behavior change
    awServer.prgMr. Paul Elliot
       Support for drag & drop
    Support for the main OLE drag and drop events, OLEstartDrag and OLEdragOver being supported on client only.
    Data set in browser's event.dataTransfer are sent automatically to à .OLEdragDrop() on server as a VFP dataObject.
    Only data of type 'text' are supported.
    Demo and code sample:
    Support extensionawHTML
    M. Vincent Helleboid
       Auto-Complete combo box
    Drop an instance of aw.vcx!awCboAutoComp on your form and set its .rowSource; when user types characters in the text portion, the matching entries in (.rowSource) pop in the dropped down list.
    1. Supports (.rowSourceType = 2 && Alias) only
    2. (.rowSource) is a local table, a non-parameterized view or an immutable cursor (contents does not change across user actions); to seek the mtching records, FoxInCloud takes the alias as-is, without restoring it.
    3. If data are strings (most likely), (.rowSource) must have a candidate index built on the search expression with collate "general".
    4. by default search occurs on the beginning of text; a property sets search in the whole text using the 'atcc()' function. As this function is not rushmore optimized, this search mode is slower.
    Supported in Bootstrap mode only using
    Support extensionawHTML
    M. Vincent Helleboid
     2.28.012-01-18 .wFormShow() returns modal child form's (.wModalChoiceProp) even without a call-back method defined.Fixaw.vcx!awFrm
       Pageframe tabs no longer cycle when clicking them fastFixawServer.prgSr. Arcadio Bianco
       Scrolling in grids when swiping on touch devicesFixFoxInCloud.cssSig. Michele Bosetti
       Support deletion of several records in views or cursorAdapters in table buffering mode
    . open in 2 browsers
    . navigates down the grid to the test customers ("z Company...")
    . delete different records in both browser
    . check deleted records are persistent across the 2 browsers
    FixawServerSr. Arcadio Bianco
       Restore state of a grid.recordSource CAD or cursor in a private datasession form being opened by a member of a form having grid member(s) with CAD or cursor as .recordSource.
    - open in 2 browsers:
    (the customers grid had a CAD as .recordSource)
    - Click 'update' to open the dataUpdate form; by default the grid also has a CAD as .recordSource
    - use the 2 browsers alternatively
    FixawServerSr. Arcadio Bianco
       Close HTML child form if .QueryUnload() returns .T.FixFoxInCloud.jsM. Gilles Lajot-Sarthou
       Tabindex of objects located in nested containers
    FixawHTMLM. Vincent Helleboid
       Property xxxServer.wUserSharable
    Indicates that several users can log into the application using the same ID [.wUserLogin(ID)]
    EnhancementawServerM. Vincent Helleboid
       Improved and updated home(1) + "Tools\AB\AW\Samples\Tastrade\Adapted" to be more reliable; all grids have an adapted .memberClass and grid columns have .headerClassEnhancementSamples
       Tabbing between controls and forms mimics the VFP behavior
    - when form opens, focus goes to the control with lowest tabindex (in classic mode only, Bootstrap seems to somehow contradict this behavior)
    - hitting the Tab or Enter key moves focus to the next control in tab order, and circles around the visible controls in the form (done on client side)
    - on server side, if .Valid() does not return .T. or 1, server sends a focus order to whatever controls that .Valid() wants focused
    - when closing a child form by any mean (button, cross or escape key), in classic and Bootstrap mode, focus returns to the control from which form opened
    . if tabbing out of a control opens a dialog (eg. a lookup dialog), focus moves to next control only after dialog is closed
    THANKS FOR TESTING CAUTIOUSLY on your application and, in case of an issue, post it WITH A VIDEO SHOT on the support forum
    Sr. Arcadio Bianco, M. Vincent Helleboid
       FoxInCloud Web Application Dashboard (http://…/ CAS and request history graphs update automatically when changing scope
       FoxInCloud Web Application Dashboard (http://…/ history of number of user requests on application
    M. Gilles Lajot-Sarthou
       More details in case of error "Table could not be opened under alias..."EnhancementawServerM. Gilles Lajot-Sarthou
       In case of startup error, add name of Application Admin to notification emailEnhancementawAppHostSig. Michele Bosetti
       New property FoxInCloud.inputAlwaysBlur
    [default value false for back compat]
    If set to true, input (textbox and editbox) send .LostFocus() and/or .Valid() event to server even if .value has not changed since .focus()
       Support [textbox|editbox|spinner].InteractiveChange() on client side using HTML5 DOM event oninput().
    - return .T. (behavior change): execute on server twice (instead of once previously), at first and last .Value modification (not upon intermediate changes)
    - return .F.: execute on server at last .Value modification, just before .Valid(); use this option to have the same behaviour as (return .T.) previously
    - return <javaScript> : execute on client at EACH .Value modification
    Behavior Change
    FAA (awAdapter)
       Fine tune the events where dodefault() is neededEnhancementFAA (awAdapter)Sr. Alejandro Sosa
       Support for form.TitleBar = 0
    demo: > event log
    Support extensionawHTMLM. Gilles Lajot-Sarthou
     2.27.008-01-18 [Bootstrap] columns containing a single control spread across the whole row.
    If you have sub-classed the awHTMLgen class, you may need to revise xxxHTMLgen.getHTML_BS_ColSpec_User()
    Behavior changeawHTML
       Remove deprecated SWFupload.jsDeprecationFoxInCloud.js
       Last dependencies on Prototype.js removed
    You can now run your server with:
    xxxServer[Test|Prod].lPrototypeAdd = .F.
    Prior to making this change, make sure to read and follow the documentation in: modify command home(1) + 'tools\ab\aw\app\progs\xxxServer.prg'
       Surface Events tutorial
    Learn how to implement fast surface events such as .MouseEnter(), .MouseMove(), .MouseLeave() in JavaScript and/or CSS
    LearningLive Tutorial
    Mr Tuvia Vinitsky
       Render file upload image using a button
    LearningLive Tutorial
       "" type specification not supportedFixaw.vcx!awCntGrdPage
       Support characters UTF-8 encoded on more than 2 bytes
    eg. "€"
    FixawServer.prgSig. Michele Bosetti
       Fix "grid was emptied" error
    Workaround CursorToXML() unexpected, 'random' errors where "<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?><VFPData</VFPData>" is returned
       cSrceCodeOfObject(): fixed properties longer than 255 charsFixawTxt.prg
       Upload file with diacritics in nameFixawServer.prgM. Vincent Helleboid
       Diacritics in log reports
    Make sure to do atPJcompile at least once on a FoxInCloud project
       Opening a form with a grid from a menuFixawServer.prgSig. Michele Bosetti
       Form.resize() support in classic mode: use CSS relative measurements (%);
    Postponed until all browsers support CSS3 directive {width|height: available;}
       In production mode, remove inline comments from form generated JavaScript (form_scx.js)EnhancementabDev
    M. Vincent Helleboid
       Paged Grid Container: updateable grid and faster refresh
    set .wlCntGrcCSpageCursor = .F. to execute the new logic: grid.columns.controlSource are no longer redirected on the paged cursor
       2 new parameters to control the scope of requests to D/L
    tdReqMin: minimum Date[-time] of requests to D/L
    tdReqMax: maximum Date[-time] of requests to D/L
       Request log form loads quicker
       Support deleted() on non-buffered cursorsEnhancementawServer.prgSig. Michele Bosetti
       Issue a single log record for a request with AJAX error(s)EnhancementawHTML
     2.26.204-15-18 Improve the responsive (Bootstrap) version of Samples\FIC\FICdemo
    Bootstrap users please make sure the inline form rendering is OK
       form.activate() triggers in Web mode on child forms, with or without JavaScript and/or server requestFixawHTML.prg
    M. Vincent Helleboid
       CSScustomAdd(): mispelled CSS rule fixedFixawHTML.prg
       Fixed column width in grid.column.resize() event web mode handlerFixFoxInCloud.js
       Fixed error "Menu 'xyz' has not been defined with DEFINE POPUP"FixawAppEnvUserM. Gilles Lajot-Sarthou
       Fixed an issue when commandButton in a grid column has a non-reachable .PictureFixawHTMLSig. Michele Bosetti
       Grid properly rendered when starting application from FoxInCloud Adaptation Assistant, at the end of step 3- PublishFixFAA (awAdapter)
       In FoxInCloud Adaptation Assistant, step 3- Publish, Install Files, Error message does display when a file copy fails.FixFAA (awAdapter)
       Bootstrap: fixed drop-down menu invisible on child formFixawMenu.prgM. Vincent Helleboid
       Member object names no longer mistakenly added to .wcPropSave (store value to this*.container.*)FixFAA (awAdapter)M. Gilles Lajot-Sarthou
       xxxTest.pjx.prg better (re)generate the web projects, with less files missingFixFAA (awAdapter)M. Gilles Lajot-Sarthou
       Nested parentheses in function or method parameters are now supportedFixFAA (awAdapter)M. Gilles Lajot-Sarthou
       Fixed error 'Method or procedure uValue_td() : erreur # 11 ("Function argument value, type, or count is invalid") at line # 4,020; Value : "01/020/2018"'FixabDev!uValue()M. Gilles Lajot-Sarthou
       Fixed a bug in supporting the FROM clause in command DEFINE POPUP ... SHORTCUT RELATIVE FROM MROW(), MCOL()
    Test:, right click in the form surface
    FixawMenu.prgM. Vincent Helleboid
       Boostrap menu: support replacing picture by a font icon such as 'font awesome'
    demo: > 'Source code' menu
       First time Server saves properties, it identifies custom properties (added at design time or by *.Init()/Form.Load()) in all objects and parent classes and adds to .wcPropSave.
    At design time, you only need to add:
    - in .wcPropSave: native properties that code changes (such as .Visible, .Enabled, etc.)
    - in .wcPropsSaveNot: custom properties that you don't want/need to save as they remain unchanged across users (eg. heavy objects)
    Behavior Change
     2.26.102-15-18 When Form is displayed in the VFP IDE (development and/or Trial mode), add cover to prevent user from interacting with the form.LearningawAppHostSr. Gustavo Colmenares
       Responsive (Bootstrap) version of AW\Samples\TastradersLearningSamples
       Provide a responsive (Bootstrap) version of Samples\FIC\FICdemoLearningSamples
       .RightClick() fixed
    demo:, right click in the form surface to show a context menu
       Fix random file access error
    "File access is denied c:\...\temp\4y60jvv3v\_4y60jvv3v_form_scx_old.cdx"
    FixawSessionM. Gilles Lajot-Sarthou
       Fixed resize issue with base class containerFixawPublic.prg!wAnchorResize*()
       Fix random error when saving session:
    Error: 1884
    Message: Uniqueness of index WWSESSION is violated
    Program: save
    FixawSessionM. Gilles Lajot-Sarthou
       Get adir() from the server instead of polling each file's last modification date-time
    By sending only one request per folder instead of one request per file, updating the site is 5 to 10 times faster.
       FoxInCloud Web Application Dashboard (http://…/
    List all forms found in the log, even if not instantiated in the current server
       aw.vcx!aw*.wBSgroup: controls Bootstrap Group membershipEnhancementaw.vcx!aw*
       Version queryString added to *.js and *.css URLs
    Browser reloads *.js and *.css after a FoxInCloud version change, avoiding the 'version mismatched' message box introduced in V 2.26.0, at the expense of a growing browser cache space.
       Support thisForm.wFormMaster('', ...)
    Assuming that xxxProcess.form() displays a standard page for 'form.scx'; in LAN mode, '' is automatically translated to 'form.scx'
       Protection and error message in case of a form call (eg. message box) during application startupEnhancementawAppHost
       Bootstrap: right justify inline forms (
       When a modal form has .QueryUnload() or a callback method, disable closing form by pressing the escape key or by clicking in the modal backdrop (Bootstrap)EnhancementFoxInCloud.jsSr. Arcadio Bianco
       Grid: fix title (Tooltiptext) inheritence from grid to cell through column.
    Like in VFP, if Tooltiptext is defined at grid or column level and empty at cell level, upper level displays
       Bootstrap: render labels overlapping the top of a shape or line as a HTML fieldset legend: ('State')EnhancementawHTML
       objectOfXML(): avoid running .Init() when restoring an object based on a class other than EmptyEnhancementabOOPMr Tuvia Vinitsky
       Persist client-side grid column sorting when updating the dataEnhancementawHTML.prgSr. Arcadio Bianco
       Bootstrap: support contextual menu
    demo:, right click in the form surface to show a contextual menu
    Support extensionFoxInCloud.jsM. Vincent Helleboid
     2.26.001-01-18 FoxInCloud Web Application Dashboard (http://…/
    on-line CAS usage histograms; test:
    LicensingawProcessSig. Michele Bosetti
       When displaying a child form and a messagebox (or similar), make sure messagebox always displays last regardless of the call order
    This case occurs when dialog is issued for or form.refresh()
    FixawAJAXM. Vincent Helleboid
       CAS history: new parameters:
    - max / avg
    - this app / all app on this server
    - this server / all servers
       FoxInCloud Web Application Dashboard (http://…/
    re-designed using Bootstrap: responsive and more modern; test:
       Error report and email include the exe date and versionEnhancementawProcessSig. Michele Bosetti
       Various fixes and enhancements:
    - fixed adaptation issue when function call (eg. messageBox()) is part of an expression and/or on several lines of code
    - added a form where user can select ignored and / or excluded files for analysis
    Server and Site installation (step 3):
    - enhanced the log messages
    - raise error if app code or program folder are empty
    - rebuild files whenever user changes app code
    - better visual feedback when files installation completes
    - compile classlibraries in reverse order of dependencies
    EnhancementFAA (awAdapter)Mr. Paul Elliott
       In 'copy' (test) mode, copy all files located in folders where some project source code resides.EnhancementFAA (awAdapter)Mr Art Bergquist
       FAA no longer stops when closing a class or form containing an OLE control such as MSComctlLib.TreeCtrl.2 or RichText.RichTextCtrl.1EnhancementFAA (awAdapter)
       New method awHTMLgen.CSScustomAdd()
    Allows adding specific CSS rules to the generated awDefault*.css
       Do not log this request!
    If you don't want a request to appear in the server log, call xxxProcess.logRequestNo() anywhere duting the request
       Support OLEClass 'MSComctlLib.TreeCtrl.2' [Microsoft TreeView Control V6 (SP4)] using Bootstrap treeview
    - support node.*image.
    Support extensionaw.vcx
       New server properties
    xxxServer.ljQueryUIdialog = .T. && use jQueryUI dialog instead of legacy 'Prototype Window Class'
    xxxServer.lPrototypeAdd = .T. && load Prototype.js ( and dependent scripts: Scriptaculous, PrototypeWindowClass, event.simulate, etc.
    As PrototypeJS will get deprecated, make sure to test these settings in your application! You may want to first set these properties in xxxTestServer.
    Support extensionawHTML
       Bootstrap Support
    Step 4: Complete migration from Prototype.js to jQuery.
    Support extensionawHTML
       Support OLEClass 'MSComctlLib.TreeCtrl.2' [Microsoft TreeView Control V6 (SP4)] using Bootstrap treeview
    - support programmatic changes such as node addition, removal or modification
    Support extensionaw.vcx
     2.25.010-01-17 bug fix "filedir.dbf does not exist"FixFAA (awAdapter)
       Improved xxxSets code recycled from desktop application's main program. Added warning in case xxxSets.prg does not compile OK; prompt user to revise xxxSets code manually.ProductivityFAA (awAdapter)
       Allow FAA to start without an Internet connexion, in such case warn user that adaptation may not be up to date and some features won't be availableProductivityFAA (awAdapter)
       Save current project view filters in projet's initialization file (<project>-awAdapter.xml), and restore when loading projectProductivityFAA (awAdapter)
       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 folderProductivityFAA (awAdapter)
       xxxTest|Prod.ini > UserStateWeeks supported
    for more details: modify file aw/app/xxxTest.ini
       Support OLEClass 'MSComctlLib.TreeCtrl.2' [Microsoft TreeView Control V6 (SP4)] using Bootstrap treeview
    - supported now: HTML/CSS/JS generation and all events
    - not supported yet: programmatic changes such as node addition, removal or modification, node.*image.
    Support extensionaw.vcx
       .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
    Support extensionaw.vcx!awFrm
    FAA (awAdapter)
       Bootstrap Support, step 3.3:
    - render VFP menus using Bootstrap navbar, nav and dropdown instead of jQueryUI menu
    Support extensionawHTML
       Bootstrap Support, step 3.2:
    - support for Checkbox|Optionbutton.Style = 2 && graphical
    Support extensionawHTML
       Bootstrap Support, step 3.1:
    - use Bootstrap date picker instead of jQueryUI datepicker
    Support extensionawHTML
     2.24.003-01-17 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
    Behavior changeawPublic.*
       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.
    Behavior changeawPublic.*
       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
    Support extensionawHTML
     2.23.012-15-16 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"
    Behavior changeawHTML.gen
       Errors are now recap'd at the end of execution log
    (enhancement suggested on
    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.
    ProductivityFAA (awAdapter)
       .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]
    ProductivityFAA (awAdapter)
       First time user switches to 'production mode' or loads a new project, FAA prompts the user to analyze it.ProductivityFAA (awAdapter)M. Luc Gilot
       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;
    Look and feelaw.vcx
    Mr Tuvia Vinitsky
       New functions wcIconFA() and wcIconGI()
    Returns a 'font awesome' / 'GlyphIcon' icon (, 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()
       Persist form.DataEnvironment.members.propertiesEnhancementawServer.prg
       When running in 'copy' (test) mode, prompt user to open all source code files as read-onlyEnhancementFAA (awAdapter)Mr Art Bergquist
       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
    EnhancementFAA (awAdapter)
       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
    Support extensionawPublic > wForm()M. Vincent Helleboid
       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
    Support extensionaw.vcx
       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
    Support extension
    Behavior cha
       Support for forms defined in foxels (.ScaleMode = 0) as opposed to pixels (.ScaleMode = 3)
    For a demonstration, see
    Support extensionaw.vcx
    Mr Lachmayya Siddanmane
     2.22.010-15-16 jQuery is now required; xxxServer.ljQueryAdd is forced to .T.Behavior changeawServer
       FoxInCloud samples installed automatically
    Other optional installs: SQLserver 2014 express and PDFXViewer 2.5
    LearningFoxInCloud studio
       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
       Child grid no longer skips unadvertedly to first rowFixaw.vcx!awGrd
       Improved support for menu instruction ON SELECTION POPUP name [command]
    FAA continues adapting menu instructions after an error has occurred
    FixFAA (awAdapter)
       Fixed bug when restoring set('CPTRANS')FixabDev.prg!abSetsMaintainMr Tuvia Vinitsky
       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
    M. Vincent Helleboid
       Support link in Form title bar:
    prompt user for bug comments and send notification message from server with user's form state table attached
       When updating production server, save up to 10 dated versions of server executableProductivityawServerUpload
       Improve image and text position on button according to .PictureMargin, .PictureSpacing and .PicturePositionLook and feelawHTML
       Child form position saved when moved and restored next time user opens itEnhancementawScripts/*.js
       In Web mode, disable grid row change when !grid.EnabledEnhancementaw.vcx!awGrd
    Mr James Patterson
       No longer need to re-set .RowSourceType before assigning .RowSourceEnhancementaw.vcx!awLst
       .RowSourceType = 2 (Alias): Recno(.RowSource) in sync with .ListIndexEnhancementaw.vcx!awLst/CboM. Vincent Helleboid
       Support for dynamic update of list contents with .ColumnCount > 1EnhancementawServer
       Added datasession sets view
    Click on the 'DataSession' word to see the settings for this dataSession.
       Added last form used by user, and link to end a user
       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.
    Enhancementaw.vcx!awFrm, awCnt, awPgf
       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()
       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)Enhancementaw.vcx!awFrm.wFormShow()
    M. Vincent Helleboid
       Changing .BorderStyle dynamically supported in Web modeEnhancementawHTMLM. Vincent Helleboid
       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)
    M. Vincent Helleboid
       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:
    EnhancementFoxInCloud TutorialSig. Michele Bosetti
       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.
    M. Vincent Helleboid
       Dynamic PageFrame.resize() supportedEnhancementawServer
    M. Vincent Helleboid
       In case of multiple chained errors during the same transaction, send a single error email when the first error occurs.EnhancementawServer
       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 .../
       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.
    EnhancementawStart.prg > awRequestLogRreplay()
       Upgrade to the latest versions of JS libs
    Prototype 1.7.3, jQuery 3.1, jQueryUI 1.12
    This drops support for IE8
    Support extensionawScripts/*.js
     2.21.107-01-16 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.
       Saving collections that are form membersFixawAJAXMr Donald McLeod
       Adapted tastrade sample to the current version of FoxinCloud.FixSamples\Tastrade
       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.
       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.
       In Web mode, set/get a persistant user variable from inside the form code using thisForm.wSessionVarSet/Get()Enhancementaw.vcx!awFrm
       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
       Form state tables attached to Application Error email.
    The Form state tables are an valuable resource to evaluate the cause of the application error
    EnhancementawAJAX.lSuccessM. Gilles Lajot-Sarthou
       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!
    EnhancementawAppHostMr Tuvia Vinitsky
       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.
    M. Gilles Lajot-Sarthou
       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.
       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)
       New sample form with a Google Map
    For more information, please see this blog post: <a href="">Adding a Google Map to a FoxInCloud Form</a>
    EnhancementFoxInCloud TutorialM. Gilles Lajot-Sarthou
       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:
    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
    EnhancementawServer.prg!awProcess.cawJSinc & .cawCSSincM. Gilles Lajot-Sarthou
       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.
    Mr Donald McLeod
       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')
    Sig. Michele Bosetti
       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 ( 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.
    Sig. Michele Bosetti
       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
       Maintenance URLs changed from 'bin/wc.dll' to 'wc.wc'
    This prepares the future migration to WC5/6 and complies with IIS default settings.
    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="">
    <img src="">
    - 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.
     2.21.004-01-16 Error "Uniqueness of index wwSession is violated" (Error 1884) fixedFixawServer.prg!wwSession
       .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 :, .RowSourceType = 7, File list: Selecting a file or folder in the list now displays the right value in the textbox below.
       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,, 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
       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).
    EnhancementFoxInCloud.jsM. Gilles Lajot-Sarthou
       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.
       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
    Live test: > do form > click button 'session expired'
    Enhancementaw.vcx!awFrmSig. Michele Bosetti
       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.EnhancementawServer.prgM. Gilles Lajot-Sarthou
       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 '
    Mr Tuvia Vinitsky
       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.
       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
       AJAX request wait pictogram appears when executing a call-back method after closing a modal form opened by a control member of a grid columnEnhancementFoxInCloud.js.MethExec()STI
       FoxInCloud Application Server status page: CPU load addedEnhancementawServer.prgSTI
       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.
       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.
       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'
    Enhancementaw.vcx!awColViewMr Tuvia Vinitsky
       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 tells you that.
    Purging the temp\ folder after stopping server and before updating app is recommended
       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.
    EnhancementawHTMLgenM. Gilles Lajot-Sarthou
       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
       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'
       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
    Enhancementaw.vcx!awOLEPDF*M. Gilles Lajot-Sarthou
       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"
    {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"
       Remote view progressive fetch support
    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
    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)
    Mr Tuvia Vinitsky
       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.
    previous code
    current code
    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'
    - 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.
       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
     2.20.311-15-15 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}')
    Mr Tuvia Vinitsky
       No more 'data type mismatch' when repeatedly calling wMenu('SET SYSMENU SAVE').FixawMenuM. Gilles Lajot-Sarthou
       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.
    FixFoxInCloud.jsM. Gilles Lajot-Sarthou
       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
    FixawServer.prg > awAppConfig.cScriptPathPhysical_Assign()M. Gilles Lajot-Sarthou
       CommanButton in Grid Column with back ground image:
    JavaScript generation fixed (string literal delimiters mismatch)
    FixawHTMLSig. Michele Bosetti
       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)
       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.
       Y' $ .inputMask mimiced for grid.column.textBox: a logical .ControlSource (with .T./.F.) shows Y/N instead of true/false
    EnhancementawHTMLMr Tuvia Vinitsky
       Production server unable to reach 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 server at startup. Whenever this fails, the server control forms displays clearer troubleshooting instructions that you can later retrieve at this URL:, where is the script-mapped extension of your application.
    EnhancementawAppHostMr Tuvia Vinitsky
       Date-time when an adaptation was ignored is now recordedEnhancementFAA (awAdapter)Quarzo
       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.
    EnhancementFAA (awAdapter)
       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.
    EnhancementFAA (awAdapter)
       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.
    EnhancementawAJAXM. Gilles Lajot-Sarthou
     2.20.211-01-15 When tabbing fast on a form, focus no longer toggles between controls
    To test this fix, go to
    M. Gilles Lajot-Sarthou
       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
    FAA (awAdapter)
    FiC '15 training
       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
    M. Gilles Lajot-Sarthou
       Support prototype.js version 1.7.2
    Make sure to upload Prototype1.7.2.js to your production site(s)' awScripts directory!
     2.20.110-01-15 grid sort column better recognized when some columns have an expression as controlSourceFixawHTML
       '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
       Error 1573: cannot change modality of a visible formFixawAppHostMr Tuvia Vinitsky
     2.20.008-07-15 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).
    Behavior ChangeawAppHost
    Mr Ryan Rindlisbacher
       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://.../ tells you the reason why.
    Behavior ChangeawAppHost
       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.
       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.
       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 pageFixFoxInCloud.js
       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
       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):
    browser2 (eg chrome):
    - click 'add'
    - add a client, click 'save', click 'OK'
    browser2: move to another row
    FixawHTMLMr James Patterson
       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.
       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.
    FixawHTMLMr Ryan Rindlisbacher
       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:; 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.
    FixawMenuMr Ryan Rindlisbacher
       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
    FixabOOP.prg!objectOfXML()Mr Tuvia Vinitsky
       .Click(), .MiddleClick() and .RightClick() no longer confused in grid control
    See the similar previous fix on grid column header and cells.
    FixawHTMLM. Gilles Lajot-Sarthou
       Modal child form no longer center in page if larger than browser viewport.
    Form sits in the top left corner of viewport.
       Menu no longer disappears when user session expiresFixawMenuSig. Michele Bosetti
       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
    M. Gilles Lajot-Sarthou
       .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.
    FixawHTMLM. Gilles Lajot-Sarthou
       "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
    FixawAppHost.prgM. Gilles Lajot-Sarthou
       Mouse and keyboard events won't fire in lists rendered by HTML <select>
    issue fixed
       Objects based on awOLEPDF*, rendered with the Acrobat Reader activeX object in the browser (mainly using IE) might be erroneously visible
    issue fixed
    Fixaw.vcx!awOLEPDF*Mr Andy Swartz
       Support issues for IE8 fixed
    - JS error when closing modal dialog (member not found)
    - <select><option> empty after AJAX update
       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).
       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()
       In production mode, form.refresh() executes after form.Init() and
       FoxInCloud server status page now displays form's response time broken down into request phasesEnhancementawProcess.FoxInCloud_status()
       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
    Mr Tuvia Vinitsky
       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.
    EnhancementawHTML.prg!awHTMLgenMr Tuvia Vinitsky
       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:
    Checking the 'freeeze row' check box prevents user from moving to another row in the orders grid.
    see also server source code at
    Mr James Patterson
       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, 'grid' page
    EnhancementawHTMLMr Ryan Rindlisbacher
       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
    Mr Tuvia Vinitsky
       Graphical CheckBox or Optionbutton labels rendered CSS height conforms to VFP's .HeightEnhancementawHTML
       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.
       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.
       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
    Mr James Patterson
       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().
    Mr Ryan Rindlisbacher
       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:
    EnhancementawHTMLM. Gilles Lajot-Sarthou
       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:
    EnhancementawProcess.FoxInCloud_status()Mr Tuvia Vinitsky
       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! It's a place you'll play often visit to ...
    EnhancementSamples\ficTutoM. Gilles Lajot-Sarthou
       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()
       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.
       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.
       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>.
       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.
       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
       Column.resize() supported on the serverEnhancementawHTML
       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.
       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.
       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")
    Sig. Michele Bosetti
       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 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.
    Enhancementaw.vcxMr Tore Bleken
    Mr Jim Nelson
       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.
    EnhancementSig. Michele Bosetti
       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.
    EnhancementawPublic.prg!wForm()Sig. Michele Bosetti
       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
       New folder …\tools\ab\aw\App\Sample\
    Check this folder for sample elements that you can adapt to your application's specifics
       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
       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\
    EnhancementSampleIndex.scxMr André Tauté
       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
    EnhancementawHTML.prgMr Tuvia Vinitsky
       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
       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.
       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
    Support extensionaw.vcx!awFrm
       form.ScrollBars > 0 supported
    When form.ScrollBars > 0, FoxInCloud Application Server automatically generates the corresponding 'overflow' CSS directive.
    Support extensionawHTML.prgSig. Michele Bosetti
     2.1009-18-14 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
    Behavior Changeaw.vcx!awFrm
       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
    Behavior Changeaw.prg
       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
    Behavior Changeaw.vcx
       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
       Dynamic CSS properly assigned when opening a child form including some dynamic containerFixawServerSig. Michele Bosetti
       Dynamic menu updates such as add|remove pad|bar|popup ...
    Menu elements and attached ON KEY events are properly added|removed|modified
       PageFrame tabs no longer justify if not justified in VFP
    Make sure to match FoxInCloud.js and FAS to version 2.10+
    Behavior change
       .Click(), .MiddleClick() and .RightClick() no longer confused
    Any of the above .*Click() event now properly fires in Web mode.
       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.
    - implemented
    - not implemented
    clicking the button no longer fires
       .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.
    FixFAA (awAdapter)v&u
       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.
    FixawAJAXM. Gilles Lajot-Sarthou
       In production mode, form and contained controls now .Refresh() successfully after .Init() and .Show() like in usual desktop VFP behaviorFixawAppHost
       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
       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
       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.
       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.
       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
       New FoxInCloud.js configuration options
    see these new options in <VFP9>\tools\ab\aw\app\site\xxx.js
    (tagged by version)
       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
       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)
       _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.
       By default, Web images are generated from Application images in .png format
    Former default format was 'gif'
       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
       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.
       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.)
       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 (; we will implement these additional options as aw.vcx!
       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"
       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.
       awFrm.wViewParmSet() / .wViewsRequery()
    .wViewsRequery() restores Set("Deleted"), Set("ANSI") and Set("SQLbuffering") as it was at .wViewParmSet()
    All view parameters are now detected:
    - this[form[set]].xxx[] property references
    - _Screen|[] property references
    - alias.field or alias->field
    - expressions involving operators such as IN (?parm1, ?m.parm2, ...), LIKE, etc.
       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: (just provide your email)
       Support for form.Width|Height|Left|Top changes in Web modeEnhancementawServerM. Gilles Lajot-Sarthou
       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
       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.
       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
       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
       Changing pageFrame.Width|Height supportedSupport extensionawServerSig. Michele Bosetti
       Support for label.alignment changing during the course of a user requestSupport extensionawProps.dbf
       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.
    Support extensionaw.vcx!awGrd
       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.
    Support extensionaw.vcx!awGrd
       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
    Support extensionawHTML.prg
       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.
    Support extensionFoxInCloud.js
       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
    Support extensionFoxInCloud.js
    Mr Tuvia Vinitsky
       '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():
    Support extensionaw.vcx
       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
    Support extensionFoxInCloud.js
       Changing Grid.ColumnCount at runtime in Web mode is supported
    Formerly, changing Grid.ColumnCount resulted in blank columns in the browser grid
    Support extensionawHTML.prg
       Optionbutton.Style=1 and Checkbox.Style=1 (graphical) with .Picture are supported.
    Requires jQueryUI; see these
    xxxServer.ljQueryAdd, xxxServer.ljQueryUIadd, xxxServer.cjQueryUItheme
    Support extensionawAJAX
       ActiveWidget version 2.6.4
    Provides support for Windows 8 and IE 11
    Support extensionaw.js
     2.012-01-13 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/
       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'
       awProcess.cawJSinc() documented to explain how to workaround the deprecation of foxincloud.*.incLearningawProcessMr Tuvia Vinitsky
       Created aw.vcx!aw???.wReadMe() for class documentationLearningaw.vcx
       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
       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).
    - 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
    Mr Tuvia Vinitsky
       Warn user that FAA needs be run as administratorProductivityFAA (awAdapter)
       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.
    OptimizationawServerM. Gilles Lajot-Sarthou
       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.
    OptimizationawServerM. Gilles Lajot-Sarthou
       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://.../ where 'xxx' is your application code.
    OptimizationawProcessM. Gilles Lajot-Sarthou
       List of connected users in FoxInCloud status page
    .../ 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()
    EnhancementawProcessSig. Michele Bosetti
       awDefault*.css: Form members are sorted by IDEnhancementawHTMLMr Tuvia Vinitsky
       Improved number formatting based on .InputMaskEnhancementawHTMLSig. Michele Bosetti
       Support for nXcoord, nYcoord
    *.MouseDown() et *.MouseUp() parameters are passed in Web mode.
    Support extensionawServer
    Sig. Michele Bosetti
       Support for page.deactivate()
    page.deactivate() now fires in Web mode
    Support extensionawServer
    Sr. David Acuña Guzmán
       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.
    Support extensionawAppHost
    FAA (awAdapter)
       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;
    myCombo.rowSource = ''
    SELECT ... INTO CURSOR myCursor
    myCombo.rowSourceType = 2 && Alias
    myCombo.rowSource = 'myCursor'.
    myCombo.rowSourceType = 3 && SQL query
    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:
    Support extensionaw.vcx
       PUBLIC variables ,, 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 .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.
    Support extensionawAppHost
       Optionbutton.Style=1 and Checkbox.Style=1 (graphical) are supported.
    Requires jQueryUI; see these
    xxxServer.ljQueryAdd, xxxServer.ljQueryUIadd, xxxServer.cjQueryUItheme
    Support extensionawAJAX
       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.
    Support extensionawPublic.prg
       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()
    Support extensionaw.vcx!aw???GetFile|Pict
     1.3005-01-13 '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
    LearningFAA (awAdapter)Sr. Fernando Espinoza
       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.LearningFAA (awAdapter)
       Revise adaptation hints that appear on the bottom part of the Adaptation Assistant form;
    additional code samples
    LearningFAA (awAdapter)
       FoxInCloud Adaptation Assistant : User guide on (awAdapter)
       "tabindex=" attribute better assigned based on containers and multiple formsFixawHTML
       Redefining Class of members with parent.MemberClass / parent.MemberClassLibrary to Application class Library derived from aw.vcx!aw*FixFAA (awAdapter)
       .AddObject()/.NewObject()/.RemoveObject() automated adaptation within WITH … ENDWITH block(s)FixFAA (awAdapter)
       Events mistakenly reported as non supported:
    - Form.keyPress()
    - Toolbar.RightClick()
    - Timer.*
    FixFAA (awAdapter)
       Fixed an issue when grid.column.controlSource can't be found in grid.RecordSourceFixawHTML
       Fixed container.borderWidth > 1 not showing up in CSSFixawHTMLMr Tuvia Vinitsky
       Removed useless and offending instruction in awFrm.lostFocusInet()Fixaw.vcx!awFrmMr Tuvia Vinitsky
       Fixed issue: grid.font* properties do not show up in CSSFixawHTML
    Sig. Michele Bosetti
       Support for pageframe.Tabs = .F.FixFoxInCloud.jsSig. Michele Bosetti
       Support for AutoIncrement integer fields in grid.RecordSourceFixawHTMLSig. Michele Bosetti
       awSpn.Valid() is processed in Web modeFixaw.vcx!awSpnM. Gilles Lajot-Sarthou
       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;}
    Look and feelFoxInCloud.js
       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')
    M. Jean-Pïerre Bataille
       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
       Support for grid.Column[.Text1].format having '$ZR'EnhancementawHTMLSig. Michele Bosetti
       Support ActiveWidgets V 2.6.1 included in distribution - provides support for any type of touch deviceEnhancementaw.js
       Support form.lostFocus()Enhancementaw.vcx
       Support Form.Activate()Enhancementaw.vcx
       Support Form.Show()Enhancementaw.vcx
       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.
    Mr Tuvia Vinitsky
       Support for shape.CurvatureSupport extensionawHTML
       Support for timeout in wMessageBox() and other similar formsSupport extensionaw.vcx!awFrm*Mr Garth Groft
       Support for inputBox() with thisForm.wInputBox()Support extensionaw.vcx!awFrmIBM. Gilles Lajot-Sarthou
     1.2610-01-12 Release form (javascript window) that is not currently focusedFixaw.vcx!awFrm
       DOMelement.focus() works in IE < 9FixawServer.prg
    Mr Andy Swartz
       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 usersFixawServer.prg
       awAJAX.PropsRestore_Array(): ".BoundColumn property is not found" error fixedFixawServer.prg
       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>
       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.
       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'
    Look and feelaw.vcx
    Mr Tuvia Vinitsky
       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.
       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
       All Classes now have 10 .wFormCallBack*() methods: .wFormCallBack(), .wFormCallBack1(), …, .wFormCallBack9()Enhancementaw.vcx!*
       PROCEDURE wUserConnected(): IDs of users currently connected to the applicationEnhancementaw.vcx!awFrm
       Save and restore Deleted() records in cursors and viewsSupport extensionawAJAX
       Support double-byte character code pages (cn, jp, etc.)Support extensionFAA (awAdapter)
       READONLY cursors are supportedSupport extensionawAJAX
       'Timer' BaseClass is supportedSupport extensionaw.vcx
     1.2507-01-12 wAddObject() with "OLEcontrol" class: first parameter contains OLEclass, fixed by replacing 't01' variable by an equivalent litteral and macro-substituting parametersFixawPublic.prg
       Text can be selected with mouse (fix in .MouseDown())Fixaw.vcx!awTxt
       Form Call-Back method can return value of any type (fix in awFrm.wFormShow())Fixaw.vcx!awFrm
       awFrm.wFormMaster() : second parameter no longer missingFixaw.vcx!awFrm
       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???FixawHTML
       Child forms: set close, minimize and maximize buttons, and autocenter according to original VFP form settingsLook and feelawHTML
       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.
       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.
    Enhancementaw.vcx!awFrmMr Garth Groft
       awAJAX.PVofObject() supports all base classes except Control et Collection
    (Collection to be supported in a future version)
       Properties added to a form at design time are saved automaticallyEnhancementawHTML
       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
       When Grid.RecordSource changes, columns are rebuilt automatically
    (see aw.vcx!awGrd.RecordSource_Assign())
       Pageframe page tabs support the same events as the page itself (same behavior as VFP)EnhancementawHTML
       ToolTip generation now obbeys to Form.showtips; no more default tooltipsEnhancementawHTML
       grid.Column.ControlSource with long field names (> 10 characters) and/or expressionsSupport extensionawHTML
       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)
    Support extensionawAJAXMr Garth Groft
       Dynamic SET RELATION: save and restore aliases RELATION() and TARGET()Support extensionawAJAX
       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()
    Support extensionaw.vcx
     1.2005-01-12 Child Forms working in multiple parent form's datasession (default) : datasession is correctly saved and restoredFixawAJAX
       Combobox in grid cell(s) : InteractiveChange accepts character valueFixaw.vcx!awCbo
       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
       As awAppHost.prg source code is not distributed, all ASSERT are replaced by Warning() for easier debuggingFixawAppHost
       Non-updateable views (Empty(CursorGetProp("KeyFieldList"))) are better saved and restoredFixawAJAX
       Combobox & Listbox with .RowSource : if .Value can't be found in .RowSource, no value in list is selectedFixawAJAX
       Form.init() with parameters:
    condition code by:
    IF Pcount() > 0
    <existing code>
    [automated adaptation]
    ProductivityFAA (awAdapter)
       Move aw.vcx!aw*.Init() code to awAJAX to eliminate the need for a DoDefault()Productivityaw.vcx
       Step 3 - Publish: automatically installs a new Application Server and setups IIS accordinglyProductivityFAA (awAdapter)
       *_assign(): add at the beginning of method
    IF Type("thisForm.wlPropsRestore") = "L" and ThisForm.wlPropsRestore
    This.<Property> = m.tNewValue
    <existing code>
    [automated adaptation]
    ProductivityFAA (awAdapter)
       Views with row buffering: only current record is saved and restoredOptimizationawAJAX
       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
       Restore Set("Path"), Set("Procedure") and Set("Classlib") if ever application SETs without an ADDITIVE clause, issues a warning in this case.EnhancementawAppHost
       wcFormParms() builds a String of parameters ('t01,t02, ...') for macro-substitution when calling a form method; Simplified code (fewer lines)EnhancementawPublic.prg
       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.
       awFrm.wFormMaster() accepts up to 20 parameters to be passed to form.Init()Support extensionaw.vcx
     1.1002-28-12 GDIplus error 'GDI+ object not created or associated' no longer occurs when Picture file can't be foundFixaw.prg!
       Request ID unicity is better enforcedFixawServer
       Application ini key to avoid sending a message to administrator when a Process Method is not supported (hack attempts)ProductivityawProcess
       Application ini key to avoid sending a message to administrator when a Process Method is not supported (hack attempts)ProductivityawProcess
       After adapted project is opened, QUIT FoxInCloud Adaptation AssistantProductivityFAA (awAdapter)
       Deprecated PEMs removedProductivityaw.vcx
       Warn developer that if any javascript error occurs, execution stops and further code is not executed, resulting in incomplete request processingProductivityFoxInCloud.js
       Grid: in development mode, warn developer if extracting contents and/or evaluating Column.Dynamic* properties seems too lengthy and can/should be optimized.OptimizationawHTMLgen
       Instantiate awFrmMB and/or sub-classes once and recycle instance on each useOptimizationaw.vcx!awFrmMB
       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
       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.
       Complete events mapping between VFP and HTML DOM (including When()) and more accurate definition of event support scope per VFP base classSupport extensionaw.vcx
       Grid, full support of:
    - .Highlight, .HightlightStyle, .HightlightBackColor, .HightlightForeColor
    - .GridLines, .GridLineWidth, .GridLineColor
    Support extensionawHTML
     1.612-15-11 PEM descriptions are localized in EnglishLocalizationaw.vcx
       As of VFP standard behavior, pageframe refreshes current page only; in Web mode, FoxInCloud refreshes all pages so that controls properly reflect their controlSource.Fixaw.vcx!awPgf
       wViewsRequery() method restores Recno('view') after Requery()Fixaw.vcx!awFrm
       Recently edited grid cells are updated when grid.RecordSource content changesFixawHTML
       Cursors created by CREATE CURSOR are now correctly saved under Windows 2000 serverFixawAJAX
       Arrays whose size has decreased since last request are properly restored.FixawAJAX
       Grids in a form under default dataSession no longer loose their recordSource/ControlSourceFixawAppHost
       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.
    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.
    Productivityaw.vcx!awFrmMr Tuvia Vinitsky
       DO FORM: automatic replacement by thisForm.wForm() when called in a form member methodProductivityFAA (awAdapter)
       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
    Look and FeelawProcess
       Support for Grid Column automatic alignment (.Alignment = 3) based on ControlSource typeLook and FeelawHTML
       Grid Column Header with .Alignment = 3 (automatic) are now properly alignedLook and FeelawHTML
     1.511-24-11 ASSERT … MESSAGE longer than 120 chars display on Windows 64-bit platform, though truncated to 120 charsFixall
       wForm(): safer detection of control where event originates fromFixaw.vcx!awFrm
       wMessageBox(): 'this.method' syntax supported as tuFormCallBack parameterFixaw.vcx!awFrm
       Better detection of cursors built by querying a remote databaseFixawAJAX
       Cursors with a varying structure and recordSource of one or several grid(s) are properly restored when user changesFixawAJAX
       In forms title bar (build with xxxProcess.wFormStandardForm()), added a link sending an email to application support manager in case of troubleProductivityawProcess
       No more ASSERT when an optional path is missing or invalidProductivityawAppConfig
       You can now override xxxProcess.wFormHTML_cCaption() to customize form captionLook and FeelawProcess
       Changing Textbox.passwordChar from empty() to !emtpy() is supported in browser ('*' is browser default)EnhancementawAJAX
     1.411-07-11 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)FixawHTML
       Improved CSS declarations
    Combobox rendering improved
       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)
       ASSERT on invalid folder pathes in FoxInCloud Application Server .ini fileProductivityawAppConfig
       Linked resources such as images and xml are relative to site virtual for independence to site configurationProductivityawHTML
       BackHome() method added.
    Returns to site root virtual directory; requires a default page in root virtual directory
    Look and FeelawProcess
       When user authentication expires, site moves directly to home page without displaying an error messageLook and FeelawAJAX
       Grid processing optimization: about 30% fasterLook and FeelawHTML
       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.
    Look and FeelawHTML
     1.309-21-11 wlUserAnonymous() function indicating if current web user is anonymousSecurityawPublic.prg
       User authentication methods documented: wUserSet() and wUserGet()Learningaw.vcx!awFrm
       Added missing
       Missing graphics now included in Trial distributionFixaw.vcx!awFrm
       System menu support with xxxProcess::wFormHTML_cMenu() and xxxMenu.xlsLook and FeelawProcess
       awProcess::wFormStandardPage(): form title bar and close button respect VFP form settingsLook and FeelawProcess
       Defining callback method as second parameter of awFrm::wForm(): supports syntax 'this.wFormCallBack'Support extensionaw.vcx!awFrm
       wActiveForm(), wActiveControl() and wThisFormActiveControl() in replacement, resp., of _Screen.ActiveForm, _Screen.ActiveControl and thisForm.ActiveControlSupport extensionawPublic.prg
     1.209-08-11 '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.
       In development mode, current form is no longer activated in IDE to avoid lostFocus() and or valid() events to triggerFixawServer
       Protection against duplicate entries in list of properties to save (.wcPropSave) causing exponential growth when savingFixawServer
       Better CRLF handling in EditBox (<textarea>)FixawAJAX
       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
       Form name added in the 'cFormReq' field to ease AJAX requests debuggingProductivityawServer
       awServer.wUserDemo may open several sessions simultaneouslyLook and FeelawServer
     1.108-24-11 Complete COM server protection against modal statesSecurityawAppHost awAJAX
       Improved localization in EnglishLocalizationAll
       Session table created at first runFixawSession
       Improved data formatting in _screen-based Request tracking tableProductivityawAppHost
       Alias() is saved and restored between user eventsSupport extensionawAJAX