Last updated on 10/10/2017

Subject to change without prior notice

Download as Excel 97-2003 Workbook

Starting with version 2.20.1, FoxInCloud versionning follows the SemVer specification

Road map


    VersionReleasedFeatureBenefitModule(s)Contributor(s)

    Future (see history below)

  • 2.26.0
  • 12/01/2017 Bootstrap Support
    Step 4: Complete migration from Prototype.js to jQuery.
    Support extension awHTML
    aw.vcx!aw*
       Support OLEClass 'MSComctlLib.TreeCtrl.2' [Microsoft TreeView Control V6 (SP4)] using Bootstrap treeview
    (https://github.com/jonmiles/bootstrap-treeview)
    - support programmatic changes such as node addition, removal or modification
    - support node.*image.
    Demo: http://foxincloud.com/tutotest/bs/treeview.tuto
    Support extension aw.vcx
    awAJAX
    awHTML
       In 'copy' (test) mode, copy all files located in folders where some project's source code resides.Enhancement FAA (awAdapter) Mr Art Bergquist
       Modified properties identification (aw.vcx!aw???.wcPropSave): identify properties that are modified by other objects or classes
    [automated adaptation]
    Productivity FAA (awAdapter)
       Automated adaptation: replace DELETE FILE by wDeleteFile(file, @result)Productivity FAA (awAdapter)
  • 3.0.0
  • 02/01/2018 Upgrade to West-Wind Web Connect 6.x
    Main benefits brought by this migration:
    - easier deployment and upgrade (.net-based webconnectionModule.dll replacing wc.dll)
    - enchanced UTF-8 support
    Anticipated behavior changes:
    - debugmode is evaluated at run time rather than compile time
    - For sending emails, wwIPstuff deprecated in favor of wwSMTP
    Support extension aw*.prg
  • 3.1.0
  • 04/01/2018 Support all Locale ID, code page, and FontCharSet supported by VFPSupport extension aw.vcx!awFrm
    awProcess
    Mr Tuvia Vinitsky
       Multiple instances of the same formEnhancement aw.vcx!awFrm
    awHTML
    awAJAX
    Mr Tuvia Vinitsky
       .PropsRestore_DS(): views of views are supported
    Requerying views now takes care of 'from' et 'where' clause dependencies
    Enhancement awAJAX
       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()
    Productivity FAA (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
    Productivity FAA (awAdapter)
       awProcess.FoxInCloud_Status(): On-line CAS usage histogramsLicensing awProcess
  • 3.2.0
  • 05/01/2018 Support thisForm.wcScriptJS*() for grid membersEnhancement awHTML
       Automated adaptation: Replace
    _Screen.ActiveForm by wActiveForm(),
    thisForm.ActiveControl by wActiveControl(),
    release thisForm by thisForm.release
    Productivity FAA (awAdapter)
       Issue a warning if 'SUSPEND' is found in code
    (would hang the Web application)
    Productivity FAA (awAdapter)
       Automated adaptation: awOLEPDFxc class or sub-class; replace <this.src = …> by <this.tag = …>Productivity FAA (awAdapter)
       Automated adaptation: Classes and objects based on classes Column and/or Header : redefine as subclass of awPublic.prg!awCol and awPublic.prg!awGrhProductivity FAA (awAdapter)
  • 3.3.0
  • 07/01/2018 In source mode, automatically backup project's source files before starting automated adaptations.Productivity FAA (awAdapter)
       grid.RecordSource = xx: warn that if grid.ColumnCount < 1, grid's columns need be reconstructed in grid.RecordSource_Assign()Productivity FAA (awAdapter)
       'Setting Application Environment' how-to Guide: SETs, public variables, sharing environment settings with LAN versionLearning foxincloud.com
       'Optimizing data management' how-to Guide: Private vs Default Datasession, tables, views and cursors, grid.recordSourceLearning foxincloud.com
       '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 ActiveWidgetsLearning foxincloud.com
       Secured FiC License administration page with on-line paymentLicensing awProcess
  • 3.4.0
  • 08/01/2018 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 feel aw.vcx
    awAJAX
    Mr Tuvia Vinitsky
       Automated adaptation: Error() method: in Web production mode, create an exception object and THROW it to FoxInCloud's main TRY CATCHProductivity FAA (awAdapter)
       Localize all ASSERT messages into EnglishLocalization *.prg
    aw.vcx
  • 3.5.0
  • 09/01/2018 'ToolBar' and 'Separator' Base Classes are supportedSupport extension aw.vcx
    awAJAX
    awHTML
       Third-party modules: improve identification and segregation between FoxInCloud certified and othersProductivity FAA (awAdapter)
       'Implementing User Authentication' how-to Guide: what FoxInCloud does, what needs be implemented depending on whether security implementation is Application-based or Form -basedLearning foxincloud.com
       Modules signatures (purpose, parameters descriptions and returned value) : localize into EnglishLocalization *.prg
    aw.vcx
  • 3.6.0
  • 10/01/2018 GetColor(): support through wGetColor()/aw.vcx!awFrmGCSupport extension aw.vcx
    awAJAX
    awHTML
       Optimize grid state save and conversion into HTML/JavaScript (faster execution)Optimization awHTML
    awAJAX
  • 3.7.0
  • 11/01/2018 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 extension awServer
       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']
    Learning abModule
       Present FoxInCloud roadmap as a filterable list, allow user to suggest new entries and/or modification to current entriesLearning foxincloud.com
  • 3.8.0
  • 12/01/2018 For controls with Disabled* properties (e.g. Commandbutton), create a .disabled CSS class instead of changing HTML element's style propertiesLook and feel awAJAX
    awHTML
       New protected method in order to decide whether error should be presented to the user or sent to Application Administrator only.Look and feel awProcess
  • 3.9.0
  • 01/01/2019 Event 'DragDrop' is supported on serverSupport extension FoxInCloud.js
    awAJAX
       lLogResponse parameter adds Response XML to the wConnect logProductivity awAppConfig
    awServer
       'Improving application look and feel with CSS and JavaScript' how-to Guide: how FoxInCloud generates default style sheets, at which level graphic appearance can be improved through application style sheet, how JavaScript can process 'surface' events (mouse and/or keyboard)Learning foxincloud.com Mr Tuvia Vinitsky
  • 3.10.0
  • 02/01/2019 OLEClass 'MSComctlLib.ListViewCtrl.2' [Microsoft ListView Control V6 (SP4)] is supportedSupport extension aw.vcx
    awAJAX
    awHTML
       Event 'Scrolled' is supported on serverSupport extension FoxInCloud.js
    awAJAX
       Support form.VisibleSupport extension awHTML
    awAJAX
       Provide a set of standard FoxInCloud error pagesLook and feel wc.ini
       Provide a set of standard FoxInCloud CSS style sheets to easily upgrade web application's look and feelLook and feel awSetup
    awHTML
  • 3.11.0
  • 10/01/2018 OLEClass 'MSComctlLib.ProgCtrl.2' [Microsoft ProgressBar Control 6.0 (SP4)] is supported for asynchronous processesSupport extension aw.vcx
    awAJAX
    awHTML
  • NONE
  • 'FormSet' BaseClass is supportedSupport extension aw.vcx
    awAJAX
    awHTML
  • TBA
  • 'Hyperlink' BaseClass is supportedSupport extension aw.vcx
    awAJAX
    awHTML
       Adapt Visual Promatrix to FoxInCloud (FiC Certified)Support extension Third party
       Adapt Visual MaxFrame to FoxInCloud (FiC Certified)Support extension Third party
       Adapt ctl32 to FoxInCloud (FiC Certified)Support extension Third party
       wReportForm() using either FoxyPreviewer, XFRX or FRX2AnySupport extension awPublic.prg!wReportForm()
       Callback method can be a member of an object stored in either a global variable or a _Screen.property
    So far Callback methods could only be members of form or form members
    Enhancement awServer
    FoxInCloud.js
    v&u
       Identify modified properties at runtime instead of design timeOptimization aw.vcx
    awAJAX
    M. Gregory Adam
       Support the DHTMLx widgets libraryLook and feel awAJAX
    awHTML
       Support the Sencha / ext.js widgets libraryLook and feel awAJAX
    awHTML
       Automated adaptation: move call-back code to a call-back method if no variable dependencies is detected within this codeProductivity FAA (awAdapter)
       If an adaptation feature is part of FoxInCloud road map, mention version and scheduled date in adaptation hintsProductivity FAA (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)Productivity FAA (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
    Learning foxincloud.com
       When adaptation is covered by a how-to guide, provide a link to the on-line how-to guideLearning FAA (awAdapter)

    History

  • 2.25.0
  • 10/01/2017 bug fix "filedir.dbf does not exist"Fix FAA (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.Productivity FAA (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 availableProductivity FAA (awAdapter)
       Save current project view filters in projet's initialization file (<project>-awAdapter.xml), and restore when loading projectProductivity FAA (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 folderProductivity FAA (awAdapter)
       xxxTest|Prod.ini > UserStateWeeks supported
    for more details: modify file aw/app/xxxTest.ini
    Enhancement awServer
    awConfig
       Support OLEClass 'MSComctlLib.TreeCtrl.2' [Microsoft TreeView Control V6 (SP4)] using Bootstrap treeview
    (https://github.com/jonmiles/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.
    Demo: http://foxincloud.com/tutotest/bs/treeview.tuto
    Support extension aw.vcx
    awAJAX
    awHTML
       .ProgrammaticChange() supported - Automated Adaptation : do not execute .ProgrammaticChange() when .Value is changed by a Web .change() Event
    Add this code at the beginning of .ProgrammaticChange() source code:
    IF m.thisForm.wlInteractiveChange
    return
    ENDIF
    Support extension aw.vcx!awFrm
    FAA (awAdapter)
       Bootstrap Support, step 3.3:
    - render VFP menus using Bootstrap navbar, nav and dropdown instead of jQueryUI menu
    Support extension awHTML
    aw.vcx!aw*
       Bootstrap Support, step 3.2:
    - support for Checkbox|Optionbutton.Style = 2 && graphical
    Support extension awHTML
    aw.vcx!aw*
       Bootstrap Support, step 3.1:
    - use Bootstrap date picker instead of jQueryUI datepicker
    Support extension awHTML
    aw.vcx!aw*
  • 2.24.0
  • 03/01/2017 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 change awPublic.*
       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 change awPublic.*
       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 extension awHTML
    aw.vcx!aw*
  • 2.23.0
  • 12/15/2016 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 change awHTML.gen
       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
    awHTML
    aw.vcx!aw*
       Errors are now recap'd at the end of execution log
    (enhancement suggested on https://support.west-wind.com/)
    If any error is encountered during Analysis or Adaptation, these error(s) are now recapitulated at the end of FAA log.
    You can display FAA log by clicking the document icon located between buttons '2-Analyze' and '3-Publish' at the top right of the form.
    Productivity FAA (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]
    Productivity FAA (awAdapter)
       First time user switches to 'production mode' or loads a new project, FAA prompts the user to analyze it.Productivity FAA (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 feel aw.vcx
    awHTML
    Mr Tuvia Vinitsky
       New functions wcIconFA() and wcIconGI()
    Returns a 'font awesome' / 'GlyphIcon' icon (http://fontawesome.io/icons/, http://glyphicons.com/) that you can insert anywhere in some text
    (an empty string in desktop mode).
    Requires that you set at design time or in xxxServer.Init(): xxxServer.lFontAwsomeAdd = .T.
    xxxServer.lBootstrapAdd = .T.
    Documentation and examples: modify command awPublic > wcIconFA()
    Enhancement awPublic.prg!wcIconFA()
       Persist form.DataEnvironment.members.propertiesEnhancement awServer.prg
    awAJAX
    v&u
       When running in 'copy' (test) mode, prompt user to open all source code files as read-onlyEnhancement FAA (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
    Enhancement FAA (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
    this.parent.refresh()
    Support extension awPublic > 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 extension aw.vcx
    awAJAX
    awHTML
       Support for forms defined in foxels (.ScaleMode = 0) as opposed to pixels (.ScaleMode = 3)
    For a demonstration, see http://foxincloud.com/tutotest/foxel.tuto
    Support extension aw.vcx
    awHTML
    Mr Lachmayya Siddanmane
  • 2.22.0
  • 10/15/2016 jQuery is now required; xxxServer.ljQueryAdd is ignoredBehavior change awServer
       FoxInCloud samples installed automatically
    Other optional installs: SQLserver 2014 express and PDFXViewer 2.5
    Learning FoxInCloud 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
    Fix FAA
    aw.vcx!awFrm
       Child grid no longer skips unadvertedly to first rowFix aw.vcx!awGrd
       Improved support for menu instruction ON SELECTION POPUP name [command]
    FAA continues adapting menu instructions after an error has occurred
    Fix FAA (awAdapter)
       Fixed bug when restoring set('CPTRANS')Fix abDev.prg!abSetsMaintain Mr 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
    Fix aw.vcx!awFrm.wForm()
    awPublic.prg!wForm()
    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
    Productivity FoxInCloud.js
    awAJAX
       When updating production server, save up to 10 dated versions of server executableProductivity awServerUpload
       Improve image and text position on button according to .PictureMargin, .PictureSpacing and .PicturePositionLook and feel awHTML
       Child form position saved when moved and restored next time user opens itEnhancement awScripts/*.js
    awProcess
       In Web mode, disable grid row change when !grid.EnabledEnhancement aw.vcx!awGrd
    awHTML
    Mr James Patterson
       No longer need to re-set .RowSourceType before assigning .RowSourceEnhancement aw.vcx!awLst
    aw.vcx!awCbo
    FAA
       .RowSourceType = 2 (Alias): Recno(.RowSource) in sync with .ListIndexEnhancement aw.vcx!awLst/Cbo M. Vincent Helleboid
       Support for dynamic update of list contents with .ColumnCount > 1Enhancement awServer
    awHTML
       Added datasession sets view
    Click on the 'DataSession' word to see the settings for this dataSession.
    Enhancement FoxInCloud-status.xxx
       Added last form used by user, and link to end a user sessionEnhancement FoxInCloud-status.xxx
       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.
    Enhancement aw.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()
    Enhancement awPublic.prg!awSets
    xxxSets.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)Enhancement aw.vcx!awFrm.wFormShow()
    awPublic.prg!wFormShow()
    M. Vincent Helleboid
       Changing .BorderStyle dynamically supported in Web modeEnhancement awHTML M. 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)
    Enhancement awAJAX
    awHTMLgen
    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: http://foxincloud.com/tutotest/signature.tuto
    Enhancement FoxInCloud Tutorial Sig. 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.
    Enhancement awServer
    xxxServer
    M. Vincent Helleboid
       Dynamic PageFrame.resize() supportedEnhancement awServer
    FoxInCloud.js
    M. Vincent Helleboid
       In case of multiple chained errors during the same transaction, send a single error email when the first error occurs.Enhancement awServer
    awProcess
       Administration form to easily analyse production application errors.
    This form allows you to easily review the errors encountered by your production application, either locally, in your VFP IDE, or on-line, by clicking the link in your 'FoxInCloud Application Server dashboard' available at .../foxincloud-status.xxx
    Enhancement aw.vcx!aw???LogError
       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.
    Enhancement awStart.prg > awRequestLogRreplay()
    aw/app/progs/xxx.requestLogReplay.prg
       Upgrade to the latest versions of JS libs
    Prototype 1.7.3, jQuery 3.1, jQueryUI 1.12
    This drops support for IE8
    Support extension awScripts/*.js
    awProcess
  • 2.21.1
  • 07/01/2016 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.
    Fix awServer.prg!awAJAX.propsReplace()
       Saving collections that are form membersFix awAJAX Mr Donald McLeod
       Adapted tastrade sample to the current version of FoxinCloud.Fix Samples\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.
    Enhancement awServer
    xxxTest|Prod.ini
       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.
    Enhancement awStart.prg
    xxx*.Update.prg
       In Web mode, set/get a persistant user variable from inside the form code using thisForm.wSessionVarSet/Get()Enhancement aw.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
    Enhancement aw.vcx!awCbo
    aw.vcx!awLst
       Form state tables attached to Application Error email.
    The Form state tables are an valuable resource to evaluate the cause of the application error
    Enhancement awAJAX.lSuccess M. 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!
    Enhancement awAppHost Mr 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.
    Enhancement awServer.prg
    aw.vcx!awFrm
    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.
    Enhancement awProcess
    awAJAX
    FoxInCloud.js
    aw.prg
       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)
    Enhancement aw.prg
       New sample form with a Google Map
    For more information, please see this blog post: <a href="http://foxincloud.com/blog/2016/04/21/Adding-Google-Map-to-a-FiC-Form.html">Adding a Google Map to a FoxInCloud Form</a>
    Enhancement FoxInCloud Tutorial M. 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:
    LPARAMETERS ;
    tcJSAdd; && [''] {en} Application, current form[, and custom]
    , toForm as awFrm of aw.vcx; && {en} Reference to form && 2016-04-20 thn -- {FiC V 2.21.1} added parameter
    , tcForm; && {en} .Name of form && 2016-04-20 thn -- {FiC V 2.21.1} added parameter
    Enhancement awServer.prg!awProcess.cawJSinc & .cawCSSinc M. 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.
    Enhancement aw*.fpw
    awStart.prg
    aw.prg
    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')
    Enhancement FoxInCloud.js
    xxx.js
    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 (foxincloud-status.xxx) will display different aliases according to the server where the page was built. This maybe somewhat confusing and complicate debugging.
    Of course temporary cursors that live no longer than the user event where the were born are not concerned.
    Enhancement awServer.prg
    awAJAX
    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
    Enhancement Installation
       Maintenance URLs changed from 'bin/wc.dll' to 'wc.wc'
    This prepares the future migration to WC5/6 and complies with IIS default settings.
    PRODUCTION SITE - IMPORTANT:
    BEFORE updating your app with this version using xxxProd.update.prg, you need to do this on on your development and production machines:
    - add a script-mapped extension for '*.wc' pointing to your wc.dll, with exactly the same settings as the '*.xxx' scriptmap of your application; see:
    <img src="ftp://foxincloud.com/screenshots/ScriptMapApp.png">
    <img src="ftp://foxincloud.com/screenshots/ScriptMapWC.png">
    - In your *.ini files, replace 'bin/wc.dll' by 'wc.wc'
    - replace your site/admin/admin.asp file by ab\aw\app\site\admin\admin.asp
    This modification is upward compatible with a previous version of FAS.
    Enhancement admin.asp
  • 2.21.0
  • 04/01/2016 Error "Uniqueness of index wwSession is violated" (Error 1884) fixedFix awServer.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 : http://foxincloud.com/tutotest/RowSourceType.tuto, .RowSourceType = 7, File list: Selecting a file or folder in the list now displays the right value in the textbox below.
    Fix aw.vcx!awCbo
    aw.vcx!awLst
       When changing a inheritable grid property such as .ReadOnly, columns keep their proper setting
    When setting grid.ReadOnly to .F., columns which are .ReadOnly remain so (these columns previously inherited from the grid.ReadOnly change regardless of their proper setting).
    To experience this, http://foxincloud.com/tutotest/dataUpdate.tuto, choose 'RView'; grid is .ReadOnly because not CursorGetProp("FetchIsComplete", .RecordSource). When you reach the very last row in the grid, CursorGetProp("FetchIsComplete", .RecordSource) is .T. and, while Grid.ReadOnly turns to .F., the first column holding customerID remains .ReadOnly.
    Application code is:
    procedure grid.Refresh_()
    this.ReadOnly = !thisForm.FetchIsComplete()
    this.columns(1).ReadOnly = .T. && customer_ID should remain .ReadOnly
    Fix aw.vcx!awPDF*
       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).
    Enhancement FoxInCloud.js M. 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.
    Enhancement awServer
    xxxProd.ini
       Hook methods awFrm.wUserAction_Ante() and awFrm.wUserAction_Post() to validate user action in web mode
    Implement these methods whenever you need to either:
    - do something before or after any user action on the form,
    - check that user is entitled to this action;
    if .wUserAction_Ante() returns:
    - .T. (default): user action executes normally
    - .null.: user action does not execute silently (you should decide what to do next, such by as calling .wNavigate())
    - a not empty value: user action does not execute and an error is raised with the value as message
    - anything else (such as .F.): user action does not execute and an error is raised
    if .wUserAction_Post() returns:
    - .T. (default): user action executes normally
    - .null.: user action is canceled silently (you should decide what to do next, such as by calling .wNavigate())
    - a not empty value: user action is ignored and an error is raised with the value as message
    - anything else (such as .F.): user action is canceled and an error is raised
    Eg. If your main form is also your login form (.wlAnonymousAllowed), you can deny anonymous user actions on certain areas of the form:
    PROCEDURE wUserAction_Ante
    lparameters tcVFPhandler, tlPropAssign, tuValue
    if this.pgf.activePage > 1 and eof('userAlias') && user is not identified
    this.wNavigate(.T.) && return to home page with an identification warning (.T.)
    return .null. && prevent user action without an error message
    endif
    Live test: http://foxincloud.com/tutotest/Modal.tuto > do form > click button 'session expired'
    Enhancement aw.vcx!awFrm Sig. 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.Enhancement awServer.prg M. 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 '
    Enhancement FoxInCloud.js
    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.
    Enhancement aw.vcx!awFrm.wFileSaveAs()
    FoxInCloud.js
    STI
       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
    Enhancement awStart.prg
    xxxTest.update.prg
       AJAX request wait pictogram appears when executing a call-back method after closing a modal form opened by a control member of a grid columnEnhancement FoxInCloud.js.MethExec() STI
       FoxInCloud Application Server status page: CPU load addedEnhancement awServer.prg STI
       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.
    Enhancement aw.vcx!awFrm
    awAppHost
       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.
    Enhancement aw.vcx!awFrmMB
    acTxt.prg
    STI
       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'
    Enhancement aw.vcx!awColView Mr 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 foxincloud-status.xxx tells you that.
    Purging the temp\ folder after stopping server and before updating app is recommended
    Enhancement awAJAX
       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.
    Enhancement awHTMLgen M. 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
    Enhancement aw.vcx!awCntGrdPage
    awHTML
       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'
    Enhancement awHTML.prg
    FoxInCloud.js
    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
    Enhancement aw.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"
    eg.:
    {en} Home {fr} Accueil {es} Inicio.
    See also the menu program generated by awGenMenu :
    MODIFY COMMAND Home(1) + "tools\ab\aw\samples\fic\fictuto\progs\menus\tuto.mpr"
    Enhancement awGenMenu
    awMenu
       Remote view progressive fetch support
    (A) REMOTE VIEWS
    Remote views fall into 3 categories:
    (1) without progressive fetching [using CursorSetProp(xx, "VIEW", "FetchSize", -1)]
    (2) triggered progressive fetching [using CursorSetProp(xx, "VIEW", "FetchSize", >0) and CursorSetProp(xx, "VIEW", "FetchAsNeeded", .T.)]
    (3) automatic progressive fetching [using CursorSetProp(xx, "VIEW", "FetchSize", >0) and CursorSetProp(xx, "VIEW", "FetchAsNeeded", .F.)]
    - (1) was supported before this release
    - (2) supported by this release
    - (3) bears the risk that the view keeps fetching more and more data along user action: if this ever happens, the view requery delay may exceed the acceptable response time; however, this might still be acceptable if the view's CursorSetProp("MaxRecords") or the base table record count is reasonable. However, in such case, FoxinCloud forces CursorSetProp("FetchAsNeeded", .T.) and issues a warning in development
    (B) LOCAL VIEWS AND CURSORADAPTER CURSORS
    We take advantage of this evolution on remote views to expand support of other kind of views:
    - (a) persist all read-write CursorGetProp() properties -- whenever a user event method changes any of the writable CursorGetProp() properties, FoxInCloud Application Server (FAS) restores these properties at next user action
    - (b) persist Used(view) -- whenever a user event method USE IN (some view), FAS USE it back for other users, IOW maintains whether this view should be used or not for each user.
    - (c) keep views used in the same order -- So far FAS kept view definitions in an empty object; it'll swith to a Collection to ensure views are always saved and restored in the same original order. This will provide a better support of inter-dependent views such as views of views and view parameters set as a field of another view. A collection will also provide a faster, direct access to a given view definition (the lower case view alias being the collection's key)
    Enhancement aw.vcx!awFrm
    aw.vcx!awColView
    awHTML
    awAJAX
    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.
    Typically:
    #ifdef PREVIOUS_FIC_VERSION
    previous code
    #else
    current code
    #endif
    To step back to previous version, you just need to overload the definition of the 'PREVIOUS_FIC_VERSION' constant in your include file:
    modify file home(1) + 'tools\ab\awPublic_override.h'
    Detailed procedure is explained in:
    modify file home(1) + 'tools\ab\awPublic.h'
    Notes:
    - This feature only applies to users with a full production license;
    - As some evolution may have not been propertly bracketed by this compilation constant, we recommend you keep the previous version's installation side by side with this one.
    Enhancement awPublic.h
    aw*.*
       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
    Enhancement aw.vcx!awFrm.wcLangUser_assign()
  • 2.20.3
  • 11/15/2015 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}')
    Fix FoxInCloud.js!FormDisplay()
    awAJAX.FormDisplay()
    Mr Tuvia Vinitsky
       No more 'data type mismatch' when repeatedly calling wMenu('SET SYSMENU SAVE').Fix awMenu M. 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.
    Fix FoxInCloud.js M. 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
    Fix awServer.prg > awAppConfig.cScriptPathPhysical_Assign() M. Gilles Lajot-Sarthou
       CommanButton in Grid Column with back ground image:
    JavaScript generation fixed (string literal delimiters mismatch)
    Fix awHTML Sig. 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)
    Enhancement awGenMenu
       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.
    Enhancement FICtuto
       Y' $ .inputMask mimiced for grid.column.textBox: a logical .ControlSource (with .T./.F.) shows Y/N instead of true/false
    http://www.west-wind.com/wwThreads/Message4HW07Z7D6.wwt
    Enhancement awHTML Mr Tuvia Vinitsky
       Production server unable to reach foxincloud.com at startup: clearer explanation and trouble shooting instructions
    As of the FoxInCloud license, your production server needs be able to send an HTTP request to the foxincloud.com server at startup. Whenever this fails, the server control forms displays clearer troubleshooting instructions that you can later retrieve at this URL: FoxInCloud-Status.xxx, where is the script-mapped extension of your application.
    Enhancement awAppHost Mr Tuvia Vinitsky
       Date-time when an adaptation was ignored is now recordedEnhancement FAA (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.
    Enhancement FAA (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.
    Enhancement FAA (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.
    Enhancement awAJAX M. Gilles Lajot-Sarthou
  • 2.20.2
  • 11/01/2015 When tabbing fast on a form, focus no longer toggles between controls
    To test this fix, go to http://foxincloud.com/tutotest/event.tuto
    Fix awServer.prg
    awAJAX
    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
    Fix aw\app\site
    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
    Enhancement awServer.prg
    awProcess
    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!
    Enhancement awProcess
  • 2.20.1
  • 10/01/2015 grid sort column better recognized when some columns have an expression as controlSourceFix awHTML
       '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
    Fix awHTML
       Error 1573: cannot change modality of a visible formFix awAppHost Mr Tuvia Vinitsky
  • 2.20
  • 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 Change awAppHost
    aw.vcx!awFrm
    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://.../FoxInCloud-status.xxx tells you the reason why.
    Behavior Change awAppHost
       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.
    Fix awHTML.prg!awHTMLgen
       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.
    Fix awHTML.prg!awHTMLgen
       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 pageFix FoxInCloud.js
    window.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
    Fix aw.vcx!awCbo
       Grid: settings are no longer lost when moving to another record after another user has modified (.recordSource)
    Previously, after running the scenario below, grid display would be affected; eg. magnifier icons would appear in column headers. This no longer occurs.
    browser1 (eg firefox): http://foxincloud.com/demos.php
    browser2 (eg chrome): http://foxincloud.com/demos.php
    browser1:
    - click 'add'
    - add a client, click 'save', click 'OK'
    browser2: move to another row
    Fix awHTML Mr 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.
    Fix awHTML
       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.
    Fix awHTML Mr 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: http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=RowSourceType.scx; right-click in the form surface - this URL is temporary as we'll later spread shortcut menus with various use cases all around the FoxInCloud Live Tutorial.
    Fix awMenu Mr 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 http://www.west-wind.com/wwThreads/default_frames.asp?Thread=4B00KYJP3
    Fix abOOP.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.
    Fix awHTML M. 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.
    Fix FoxInCloud.js
       Menu no longer disappears when user session expiresFix awMenu Sig. 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
    Fix awHTML
    FoxInCloud.js
    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.
    Fix awHTML M. 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 http://ctb.wanagain.net
    Fix awAppHost.prg M. Gilles Lajot-Sarthou
       Mouse and keyboard events won't fire in lists rendered by HTML <select>
    issue fixed
    Fix FoxInCloud.js
       Objects based on awOLEPDF*, rendered with the Acrobat Reader activeX object in the browser (mainly using IE) might be erroneously visible
    issue fixed
    Fix aw.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
    Fix FoxInCloud.js
    aw.vcx!awFrm
       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).
    Optimization aw.vcx
       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()
    Optimization aw.vcx
       In production mode, form.refresh() executes after form.Init() and form.show()Enhancement awAppHost
       FoxInCloud server status page now displays form's response time broken down into request phasesEnhancement awProcess.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
    Enhancement awHTML.prg!awHTMLgen
    aw.vcx
    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.
    Enhancement awHTML.prg!awHTMLgen Mr 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: http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=report.scx
    Checking the 'freeeze row' check box prevents user from moving to another row in the orders grid.
    see also server source code at http://foxincloud.com/tutotest/fileDisplay.tuto?tutoServer.prg
    Enhancement awHTML
    FiCtuto
    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 http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=Event.scx, 'grid' page
    Enhancement awHTML Mr 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
    Enhancement awAppHost
    xxxSets.prg
    Mr Tuvia Vinitsky
       Graphical CheckBox or Optionbutton labels rendered CSS height conforms to VFP's .HeightEnhancement awHTML
       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.
    Enhancement awHTML
       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.
    Enhancement aw.vcx!awPgf
       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
    Enhancement FoxInCloud.js
    xxx.js
    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().
    Enhancement Response.addCookie()
    aw.vcx!awFrm
    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: http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=dataUpdate.scx
    Enhancement awHTML M. 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: http://foxincloud.com/tutotest/foxincloud-status.tuto
    Enhancement awProcess.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 http://foxincloud.com/tutotest/! It's a place you'll play often visit to ...
    Enhancement Samples\ficTuto M. 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()
    Enhancement awHTML
       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.
    Enhancement awHTML
       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.
    Enhancement aw.vcx
       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>.
    Enhancement FoxInCloud.js
       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.
    Enhancement aw.vcx!awFrm
       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
    Enhancement aw.vcx!awGrd
       Column.resize() supported on the serverEnhancement awHTML
    awAJAX
       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.
    Enhancement awHTML
       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.
    Enhancement awHTML
       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")
    Enhancement awServer.prg
    awHTML.prg
    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 https://vfpx.codeplex.com/wikipage?title=Thor%20TWEeT%2023 for more information).
    All LPARAMETERS statements longer than 255 characters in aw.vcx shortened to less than 255 characters.
    Tip: To see aw*.Method documentation from within your application, just click 'View Parent Code' in form or class designer code window.
    Enhancement aw.vcx Mr 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.
    Enhancement Sig. 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.
    Enhancement awPublic.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
    Enhancement awMenu
       New folder …\tools\ab\aw\App\Sample\
    Check this folder for sample elements that you can adapt to your application's specifics
    Enhancement aw\App
       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
    Enhancement awHTMLgen
       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\
    Enhancement SampleIndex.scx Mr 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
    Enhancement awHTML.prg Mr 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
    Enhancement awServer.prg
    awAJAX
       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.
    Enhancement FoxInCloud.js
    awAppHost
    awAJAX
    aw.vcx!awFrm
       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 extension aw.vcx!awFrm
       form.ScrollBars > 0 supported
    When form.ScrollBars > 0, FoxInCloud Application Server automatically generates the corresponding 'overflow' CSS directive.
    Support extension awHTML.prg Sig. Michele Bosetti
  • 2.10
  • 09/18/2014 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 Change aw.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 Change aw.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 Change aw.vcx
       PageFrame tabs no longer justify if not justified in VFP
    Make sure to match FoxInCloud.js and FAS to version 2.10+
    Fix
    Behavior change
    FoxInCloud.js
    awHTML.prg
       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
    Learning awSetup
       Dynamic CSS properly assigned when opening a child form including some dynamic containerFix awServer Sig. Michele Bosetti
       Dynamic menu updates such as add|remove pad|bar|popup ...
    Menu elements and attached ON KEY events are properly added|removed|modified
    Fix awMenu.prg
       .Click(), .MiddleClick() and .RightClick() no longer confused
    Any of the above .*Click() event now properly fires in Web mode.
    Fix awHTML.prg
    FoxInCloud.js
       Events no longer bubble to parent container
    When an event (e.g. .Click()) is implemented in a parent container and not in one of its member, triggering this event in the member no longer fires the event in the parent container.
    Example:
    - thisform.container.click() implemented
    - thisform.container.button.click() not implemented
    clicking the button no longer fires thisform.container.click()
    Fix FoxInCloud.js
       .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.
    Fix FAA (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.
    Fix awAJAX M. Gilles Lajot-Sarthou
       In production mode, form and contained controls now .Refresh() successfully after .Init() and .Show() like in usual desktop VFP behaviorFix awAppHost
       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
    Optimization awHTML.prg
       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
    Optimization awHTML.prg
       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.
    Enhancement awAppConfig
    xxxTest|Prod.ini
       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.
    Enhancement awPublic.prg
    xxxSets.prg
       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
    Enhancement abDev.prg
    awServer.prg
       New FoxInCloud.js configuration options
    see these new options in <VFP9>\tools\ab\aw\app\site\xxx.js
    (tagged by version)
    Enhancement FoxInCloud.js
    xxx.js
       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
    Enhancement FoxInCloud.js
    awHTML.prg
       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)
    Enhancement awHTML.prg
       _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.
    Enhancement awAppHost.prg
    awUserAppEnv.prg
       By default, Web images are generated from Application images in .png format
    Former default format was 'gif'
    Enhancement aw.prg
       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
    Enhancement aw.vcx!awFrm v&u
       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.
    Enhancement FoxInCloud.js v&u
       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.)
    Enhancement awHTML
    aw.vcx!awTxt
    awServer
       HTML5 AJAX file upload using jQuery File Upload
    So far, FoxInCloud supported AJAX-style file upload using an Adobe Flash component named 'SWFupload'.
    Now FoxInCloud generates a JavaScript that automatically detects if client browser supports 'real' AJAX file upload, and implements consequently.
    This feature requires jQuery to be loaded with your application by settin xxxServer.ljQueryAdd = .T.
    Please let us know if you need to implement more of the options that jQuery File Upload provides (https://github.com/blueimp/jQuery-File-Upload/wiki/Options); we will implement these additional options as aw.vcx!awImgGetFile.properties
    Enhancement aw.vcx!awImgGetFile
       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"
    Enhancement awServer
       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.
    Enhancement aw.vcx!awFrm
       awFrm.wViewParmSet() / .wViewsRequery()
    .wViewsRequery() restores Set("Deleted"), Set("ANSI") and Set("SQLbuffering") as it was at .wViewParmSet()
    Enhancement aw.vcx!awFrm
       awFrm.wViewsSetup()
    All view parameters are now detected:
    - this[form[set]].xxx[...xxx] property references
    - _Screen|_VFP.xxx[...xxx] property references
    - alias.field or alias->field
    - expressions involving operators such as IN (?parm1, ?m.parm2, ...), LIKE, etc.
    Enhancement aw.vcx!awFrm
       Carousel for LAN and Web modes
    Carousel is a very popular feature in Web applications, i.e. to display a collection of images.
    Just drop aw.vcx!awCntCarousel or a sub-class on your form and visually add within the elements you want to slide on: images, buttons, checkboxes or anything else.
    This carousel will work the same in both modes.
    You can test this carousel here: http://foxincloud.com/demotest/ (just provide your email)
    Enhancement aw.vcx!awCntCarousel
       Support for form.Width|Height|Left|Top changes in Web modeEnhancement awServer M. 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
    Enhancement aw.vcx!awTmrAnimation
       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.
    Enhancement aw.vcx
       JavaScript DatePicker support
    If, at design time, (Vartype(awTxt.Value) = 'D' or 'D' $ awTxt.format) and awTxt.wlDatePicker and xxxServer.wljQueryUIAdd, FAS automatically assigns a jQueryUI datePicker to the textbox.
    By default, FAS sets language and date formats according to the browser first preferred language, English if this language is not provided or supported.
    You can customize your datePicker's behavior using the following properties:
    - .woDatePickerOptions: set as either a VFP empty object with properties matching those expected by datepicker.setDefaults() [assigned in this.Init()], or a JavaScript object litteral such as {option1:value1, option2:value2, ...} [assigned at design time or in this.Init()]
    - .wdFrom, .wdTo: set dynamically in your code to limit the date range user can select.
    You can also customize datePicker appearence using jQueryUI global theme (xxxServer.cjQueryUItheme), or additional CSS directives in xxx.css
    (all details on jQueryUI datePicker API - such as options, methods and event - at http://api.jqueryui.com/datepicker/)
    Enhancement aw.vcx!awTxt
    awHTML
       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
    Enhancement awAJAX
    aw.vcx!awFrm
       Changing pageFrame.Width|Height supportedSupport extension awServer Sig. Michele Bosetti
       Support for label.alignment changing during the course of a user requestSupport extension awProps.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 extension aw.vcx!awGrd
    awHTML
       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 extension aw.vcx!awGrd
    awHTML
       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 extension awHTML.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 extension FoxInCloud.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 extension FoxInCloud.js
    xxx.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():
    dodefault(m.cSelectCmd)
    Support extension aw.vcx
    awAJAX
       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 extension FoxInCloud.js
    aw.vcx!awFrm
    awAJAX
       Changing Grid.ColumnCount at runtime in Web mode is supported
    Formerly, changing Grid.ColumnCount resulted in blank columns in the browser grid
    Support extension awHTML.prg
       Optionbutton.Style=1 and Checkbox.Style=1 (graphical) with .Picture are supported.
    Requires jQueryUI; see these xxxServer.properties:
    xxxServer.ljQueryAdd, xxxServer.ljQueryUIadd, xxxServer.cjQueryUItheme
    Support extension awAJAX
    awHTML
       ActiveWidget version 2.6.4
    Provides support for Windows 8 and IE 11
    Support extension aw.js
  • 2.0
  • 12/01/2013 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/
    Learning \tools\ab\aw\Samples\*.*
    FAA
       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'
    Learning aw.vcx
    FAA
       awProcess.cawJSinc() documented to explain how to workaround the deprecation of foxincloud.*.incLearning awProcess Mr Tuvia Vinitsky
       Created aw.vcx!aw???.wReadMe() for class documentationLearning aw.vcx
    FAA
       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
    Fix FoxInCloud.js
    awProcess
    awServer
       awDefaultAll.css is dynamic in development
    forms and objects CSS directives (based on ids, not classes) are updated whenever a form instantiates in IDE, development mode; this avoids running xxxTest|Prod.css.prg before uploading a set of minor modifications to form(s).
    However,
    - as new delimiters are required in awDefaultAll.css for this feature to work, you need to run xxxTest|Prod.css.prg before hand.
    - running xxxTest|Prod.css.prg is still required whenever your modify the visual aspect of any class involved in the application
    Productivity awHTML
    awDefaultAll.css
    Mr Tuvia Vinitsky
       Warn user that FAA needs be run as administratorProductivity FAA (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.
    Optimization awServer M. 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.
    Optimization awServer M. 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://localhost/xxxTest/FoxInCloud-Status.xxx where 'xxx' is your application code.
    Optimization awProcess M. Gilles Lajot-Sarthou
       List of connected users in FoxInCloud status page
    .../FoxInCloud-Status.xxx: added the list of users currently connected to application;
    To know how to replace users ID by full name, please review sample xxxProcess implementation in awServer.prg!awProcess.wUserName()
    Enhancement awProcess Sig. Michele Bosetti
       awDefault*.css: Form members are sorted by IDEnhancement awHTML Mr Tuvia Vinitsky
       Improved number formatting based on .InputMaskEnhancement awHTML Sig. Michele Bosetti
       Support for nXcoord, nYcoord
    *.MouseDown() et *.MouseUp() parameters are passed in Web mode.
    Support extension awServer
    FoxInCloud.js
    Sig. Michele Bosetti
       Support for page.deactivate()
    page.deactivate() now fires in Web mode
    Support extension awServer
    FoxInCloud.js
    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 extension awAppHost
    awMenu
    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;
    eg:
    myCombo.rowSource = ''
    SELECT ... INTO CURSOR myCursor
    myCombo.rowSourceType = 2 && Alias
    myCombo.rowSource = 'myCursor'.
    myCombo.rowSourceType = 3 && SQL query
    myCombo.Requery()
    Also, if you implement the .requery() method, make sure to call dodefault() at the end of your code.
    Here is a live demo of this feature: http://foxincloud.com/tutotest/wFormStandardPage.tuto?awForm=RowSourceType.scx
    Support extension aw.vcx
    awAJAX
    awHTML
    FAA
       PUBLIC variables , _Screen.properties, _VFP.properties are saved and restored for each user on each request.
    Impact on response time: saving 1000 public vars + public Array[2000] took us 10 ms in the IDE (at least 2 times slower that COM mode).
    This feature needs be optimized through the following xxxServer.properties: .lAppUserEnvSave, .lPublicVariablesAllAtStartup, . cPublicVariablesObjectSave, ._ScreenPropertiesSave, ._ScreenPropertiesSaveNot, ._VFPpropertiesSave, ._VFPpropertiesSaveNot.
    You can also filter out pages (methods) and users that require saving the application environment by implementing xxxProcess.lAppUserEnvSave()
    Please read documentation about these new properties and methods in <VFP9>\Tools\AB\AW\App\Progs\xxxServer.prg.
    Support extension awAppHost
    awAppUserEnv
    FAA
       Optionbutton.Style=1 and Checkbox.Style=1 (graphical) are supported.
    Requires jQueryUI; see these xxxServer.properties:
    xxxServer.ljQueryAdd, xxxServer.ljQueryUIadd, xxxServer.cjQueryUItheme
    Support extension awAJAX
    awHTML
       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 extension awPublic.prg
    FAA
       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 extension aw.vcx!aw???GetFile|Pict
    awProcess
    Scripts\FoxInCloud.js
    Scripts\SWFupload\*
    FAA
  • 1.30
  • 05/01/2013 '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
    Learning FAA (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.Learning FAA (awAdapter)
       Revise adaptation hints that appear on the bottom part of the Adaptation Assistant form;
    additional code samples
    Learning FAA (awAdapter)
       FoxInCloud Adaptation Assistant : User guide on http://foxincloud.com/how-to.phpLearning FAA (awAdapter)
       "tabindex=" attribute better assigned based on containers and multiple formsFix awHTML
       Redefining Class of members with parent.MemberClass / parent.MemberClassLibrary to Application class Library derived from aw.vcx!aw*Fix FAA (awAdapter)
       .AddObject()/.NewObject()/.RemoveObject() automated adaptation within WITH … ENDWITH block(s)Fix FAA (awAdapter)
       Events mistakenly reported as non supported:
    - Form.keyPress()
    - Toolbar.RightClick()
    - Timer.*
    Fix FAA (awAdapter)
       Fixed an issue when grid.column.controlSource can't be found in grid.RecordSourceFix awHTML
       Fixed container.borderWidth > 1 not showing up in CSSFix awHTML Mr Tuvia Vinitsky
       Removed useless and offending instruction in awFrm.lostFocusInet()Fix aw.vcx!awFrm Mr Tuvia Vinitsky
       Fixed issue: grid.font* properties do not show up in CSSFix awHTML
    awGrd.dbf
    Sig. Michele Bosetti
       Support for pageframe.Tabs = .F.Fix FoxInCloud.js Sig. Michele Bosetti
       Support for AutoIncrement integer fields in grid.RecordSourceFix awHTML Sig. Michele Bosetti
       awSpn.Valid() is processed in Web modeFix aw.vcx!awSpn M. 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 feel FoxInCloud.js
    awHTML
       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')
    Enhancement aw.vcx!awImg
    awHTML
    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 http://jquery.com/
    Enhancement awServer
       Support for grid.Column[.Text1].format having '$ZR'Enhancement awHTML Sig. Michele Bosetti
       Support ActiveWidgets V 2.6.1 included in distribution - provides support for any type of touch deviceEnhancement aw.js
       Support form.lostFocus()Enhancement aw.vcx
    awServer
       Support Form.Activate()Enhancement aw.vcx
    awAppHost
       Support Form.Show()Enhancement aw.vcx
    awAppHost
       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.
    Enhancement awServer
    abOOP
    Mr Tuvia Vinitsky
       Support for shape.CurvatureSupport extension awHTML
       Support for timeout in wMessageBox() and other similar formsSupport extension aw.vcx!awFrm* Mr Garth Groft
       Support for inputBox() with thisForm.wInputBox()Support extension aw.vcx!awFrmIB M. Gilles Lajot-Sarthou
  • 1.26
  • 10/01/2012 Release form (javascript window) that is not currently focusedFix aw.vcx!awFrm
    FoxInCloud.js
       DOMelement.focus() works in IE < 9Fix awServer.prg
    FoxInCloud.js
    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 usersFix awServer.prg
       awAJAX.PropsRestore_Array(): ".BoundColumn property is not found" error fixedFix awServer.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>
    Fix awAJAX
    awHTML
       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.
    Fix awPublic.prg
       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 feel aw.vcx
    awHTML
    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.
    Enhancement aw.vcx!awGrd
    awPublic.prg!awGrc
       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
    Enhancement aw.vcx!awFrm
    awHML.prg
       All Classes now have 10 .wFormCallBack*() methods: .wFormCallBack(), .wFormCallBack1(), …, .wFormCallBack9()Enhancement aw.vcx!*
       PROCEDURE wUserConnected(): IDs of users currently connected to the applicationEnhancement aw.vcx!awFrm
       Save and restore Deleted() records in cursors and viewsSupport extension awAJAX
       Support double-byte character code pages (cn, jp, etc.)Support extension FAA (awAdapter)
       READONLY cursors are supportedSupport extension awAJAX
       'Timer' BaseClass is supportedSupport extension aw.vcx
    awAJAX
    awHTML
  • 1.25
  • 07/01/2012 wAddObject() with "OLEcontrol" class: first parameter contains OLEclass, fixed by replacing 't01' variable by an equivalent litteral and macro-substituting parametersFix awPublic.prg
    wAddObject()
       Text can be selected with mouse (fix in .MouseDown())Fix aw.vcx!awTxt
       Form Call-Back method can return value of any type (fix in awFrm.wFormShow())Fix aw.vcx!awFrm
       awFrm.wFormMaster() : second parameter no longer missingFix aw.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???Fix awHTML
       Child forms: set close, minimize and maximize buttons, and autocenter according to original VFP form settingsLook and feel awHTML
    awAJAX
       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.
    Enhancement awPublic.prg
    aw.vcx!awFrm
       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.
    Enhancement aw.vcx!awFrm Mr Garth Groft
       awAJAX.PVofObject() supports all base classes except Control et Collection
    (Collection to be supported in a future version)
    Enhancement awAJAX.PVofObject
       Properties added to a form at design time are saved automaticallyEnhancement awHTML
       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
    Enhancement aw.vcx!awFrm
       When Grid.RecordSource changes, columns are rebuilt automatically
    (see aw.vcx!awGrd.RecordSource_Assign())
    Enhancement aw.vcx!awGrd
       Pageframe page tabs support the same events as the page itself (same behavior as VFP)Enhancement awHTML
       ToolTip generation now obbeys to Form.showtips; no more default tooltipsEnhancement awHTML
       grid.Column.ControlSource with long field names (> 10 characters) and/or expressionsSupport extension awHTML
       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 extension awAJAX Mr Garth Groft
       Dynamic SET RELATION: save and restore aliases RELATION() and TARGET()Support extension awAJAX
       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 extension aw.vcx
    awServer
  • 1.20
  • 05/01/2012 Child Forms working in multiple parent form's datasession (default) : datasession is correctly saved and restoredFix awAJAX
       Combobox in grid cell(s) : InteractiveChange accepts character valueFix aw.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
    Fix awPublic.h
    aw.h
       As awAppHost.prg source code is not distributed, all ASSERT are replaced by Warning() for easier debuggingFix awAppHost
       Non-updateable views (Empty(CursorGetProp("KeyFieldList"))) are better saved and restoredFix awAJAX
       Combobox & Listbox with .RowSource : if .Value can't be found in .RowSource, no value in list is selectedFix awAJAX
       Form.init() with parameters:
    condition code by:
    IF Pcount() > 0
    <existing code>
    ENDIF
    [automated adaptation]
    Productivity FAA (awAdapter)
       Move aw.vcx!aw*.Init() code to awAJAX to eliminate the need for a DoDefault()Productivity aw.vcx
    awAJAX
       Step 3 - Publish: automatically installs a new Application Server and setups IIS accordinglyProductivity FAA (awAdapter)
       *_assign(): add at the beginning of method
    IF Type("thisForm.wlPropsRestore") = "L" and ThisForm.wlPropsRestore
    This.<Property> = m.tNewValue
    RETURN
    ENDIF
    <existing code>
    [automated adaptation]
    Productivity FAA (awAdapter)
       Views with row buffering: only current record is saved and restoredOptimization awAJAX
       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
    Enhancement FoxInCloud.js
       Restore Set("Path"), Set("Procedure") and Set("Classlib") if ever application SETs without an ADDITIVE clause, issues a warning in this case.Enhancement awAppHost
       wcFormParms() builds a String of parameters ('t01,t02, ...') for macro-substitution when calling a form method; Simplified code (fewer lines)Enhancement awPublic.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.
    Enhancement aw.vcx!awFrm
       awFrm.wFormMaster() accepts up to 20 parameters to be passed to form.Init()Support extension aw.vcx
    awAJAX
    awProcess
  • 1.10
  • 02/28/2012 GDIplus error 'GDI+ object not created or associated' no longer occurs when Picture file can't be foundFix aw.prg!
    cImageWeb()
       Request ID unicity is better enforcedFix awServer
       Application ini key to avoid sending a message to administrator when a Process Method is not supported (hack attempts)Productivity awProcess
       Application ini key to avoid sending a message to administrator when a Process Method is not supported (hack attempts)Productivity awProcess
       After adapted project is opened, QUIT FoxInCloud Adaptation AssistantProductivity FAA (awAdapter)
       Deprecated PEMs removedProductivity aw.vcx
       Warn developer that if any javascript error occurs, execution stops and further code is not executed, resulting in incomplete request processingProductivity FoxInCloud.js
       Grid: in development mode, warn developer if extracting contents and/or evaluating Column.Dynamic* properties seems too lengthy and can/should be optimized.Optimization awHTMLgen
       Instantiate awFrmMB and/or sub-classes once and recycle instance on each useOptimization aw.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
    Enhancement awAppHost
       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.
    Enhancement atPJcompile.prg
       Complete events mapping between VFP and HTML DOM (including When()) and more accurate definition of event support scope per VFP base classSupport extension aw.vcx
    awAJAX
    awHTML
       Grid, full support of:
    - .Highlight, .HightlightStyle, .HightlightBackColor, .HightlightForeColor
    - .GridLines, .GridLineWidth, .GridLineColor
    Support extension awHTML
  • 1.6
  • 12/15/2011 PEM descriptions are localized in EnglishLocalization aw.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.Fix aw.vcx!awPgf
       wViewsRequery() method restores Recno('view') after Requery()Fix aw.vcx!awFrm
       Recently edited grid cells are updated when grid.RecordSource content changesFix awHTML
       Cursors created by CREATE CURSOR are now correctly saved under Windows 2000 serverFix awAJAX
       Arrays whose size has decreased since last request are properly restored.Fix awAJAX
       Grids in a form under default dataSession no longer loose their recordSource/ControlSourceFix awAppHost
    awAJAX
       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.
    Productivity awProcess
    awAJAX
    awHTML
       awFrm.wFormTopLevel()
    renamed as wFormMaster() for the sake of consistency.
    If you used this method in your subclass(es), please save your code and move it to this new method.
    Productivity aw.vcx!awFrm Mr Tuvia Vinitsky
       DO FORM: automatic replacement by thisForm.wForm() when called in a form member methodProductivity FAA (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 Feel awProcess
       Support for Grid Column automatic alignment (.Alignment = 3) based on ControlSource typeLook and Feel awHTML
       Grid Column Header with .Alignment = 3 (automatic) are now properly alignedLook and Feel awHTML
  • 1.5
  • 11/24/2011 ASSERT … MESSAGE longer than 120 chars display on Windows 64-bit platform, though truncated to 120 charsFix all
       wForm(): safer detection of control where event originates fromFix aw.vcx!awFrm
       wMessageBox(): 'this.method' syntax supported as tuFormCallBack parameterFix aw.vcx!awFrm
       Better detection of cursors built by querying a remote databaseFix awAJAX
       Cursors with a varying structure and recordSource of one or several grid(s) are properly restored when user changesFix awAJAX
       In forms title bar (build with xxxProcess.wFormStandardForm()), added a link sending an email to application support manager in case of troubleProductivity awProcess
    awAJAX
       No more ASSERT when an optional path is missing or invalidProductivity awAppConfig
       You can now override xxxProcess.wFormHTML_cCaption() to customize form captionLook and Feel awProcess
       Changing Textbox.passwordChar from empty() to !emtpy() is supported in browser ('*' is browser default)Enhancement awAJAX
  • 1.4
  • 11/07/2011 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)Fix awHTML
       Improved CSS declarations
    Combobox rendering improved
    Fix awHTML
       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)
    Productivity awServer
    awAppHost
       ASSERT on invalid folder pathes in FoxInCloud Application Server .ini fileProductivity awAppConfig
       Linked resources such as images and xml are relative to site virtual for independence to site configurationProductivity awHTML
       BackHome() method added.
    Returns to site root virtual directory; requires a default page in root virtual directory
    Look and Feel awProcess
       When user authentication expires, site moves directly to home page without displaying an error messageLook and Feel awAJAX
    awProcess
       Grid processing optimization: about 30% fasterLook and Feel awHTML
       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 Feel awHTML
    awAppHost
  • 1.3
  • 09/21/2011 wlUserAnonymous() function indicating if current web user is anonymousSecurity awPublic.prg
       User authentication methods documented: wUserSet() and wUserGet()Learning aw.vcx!awFrm
    xxxProcess
       Added missing
    SET PROCEDURE TO awAppHost.fxp ADDITIVE
    Fix aw.prg
       Missing graphics now included in Trial distributionFix aw.vcx!awFrm
       System menu support with xxxProcess::wFormHTML_cMenu() and xxxMenu.xlsLook and Feel awProcess
       awProcess::wFormStandardPage(): form title bar and close button respect VFP form settingsLook and Feel awProcess
       Defining callback method as second parameter of awFrm::wForm(): supports syntax 'this.wFormCallBack'Support extension aw.vcx!awFrm
       wActiveForm(), wActiveControl() and wThisFormActiveControl() in replacement, resp., of _Screen.ActiveForm, _Screen.ActiveControl and thisForm.ActiveControlSupport extension awPublic.prg
  • 1.2
  • 09/08/2011 '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.
    Security admin.asp
       In development mode, current form is no longer activated in IDE to avoid lostFocus() and or valid() events to triggerFix awServer
       Protection against duplicate entries in list of properties to save (.wcPropSave) causing exponential growth when savingFix awServer
       Better CRLF handling in EditBox (<textarea>)Fix awAJAX
       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
    Fix FICstart.exe
       Form name added in the 'cFormReq' field to ease AJAX requests debuggingProductivity awServer
    wwRequestLog
       awServer.wUserDemo may open several sessions simultaneouslyLook and Feel awServer
  • 1.1
  • 08/24/2011 Complete COM server protection against modal statesSecurity awAppHost awAJAX
       Improved localization in EnglishLocalization All
       Session table created at first runFix awSession
       Improved data formatting in _screen-based Request tracking tableProductivity awAppHost
       Alias() is saved and restored between user eventsSupport extension awAJAX