Last updated on 12-11-23
Subject to change without prior notice
Download as Excel 97-2003 Workbook
Starting with version 2.20.1, FoxInCloud follows the SemVer specification
Road map
Version | Released | Feature | Benefit | Module(s) | Contributor(s) |
---|---|---|---|---|---|
Future (see history below) | |||||
3.0.1 | TBA | Support for URLs "about:..." | Support extension | awAJAX | M. Vincent Helleboid |
.sel* properties supported Read/Write | Support extension | aw.vcx | M. Vincent Helleboid | ||
e-mails sent by FoxInCloud have a 'message-ID' header (required by gMail) | Support extension | oIPstuff_access | |||
FoxInCloud Web Application Dashboard: errors due to hack attempts are no longer accounted for | Enhancement | awProcess | |||
Bootstrap mode: xxxFrm.wBSsize='FS' displays form fullscreen, either as a master or a child form | Enhancement | awProcess | M. Vincent Helleboid | ||
New property awOLETV6.wcJScustom to customize treeview's behavor | Enhancement | aw.vcx awHTML awServer | M. Vincent Helleboid | ||
Treeview with nodes.count < 100 support node.text of unlimited length; otherwise limited to 254 chars | Enhancement | aw.vcx awRP | M. Vincent Helleboid | ||
BootStrap : if the element's wBSsize is 'sm' or 'xs', FoxInCloud disregards the Font Awesome size attribute defined in awBsicon.Size. | Enhancement | awHTML | |||
Running …\xxxTest.exe from Windows command supports parameters; eg. "…\xxxTest|Prod.exe" .T. To use .T. as first parameter, make sure to generate "xxxTest|Prod.forms" by running in IDE "do ...\xxxTest|Prod.prg with .T.", and include the "xxxTest|Prod.forms" text file in your project. see also https://www.berezniker.com/content/pages/visual-foxpro/how-pass-parameters-vfp-exe | Enhancement | awServer | |||
xxxServer.nMemoryMB extended to 1 GB | Enhancement | awServer | |||
Bootstrap: sub-menus close on .click() | Fix | FoxInCloud.js | M. Vincent Helleboid | ||
Holding one session per browser tab is neutralized on mobile devices where firing the window.unload() when page unloads is too unpredictable | Fix | FoxInCloud.js | M. Vincent Helleboid | ||
Less errors "access denied to file "form_scx_ini.dbf" | Fix | awAJAX | |||
FoxInCloud-status: workaround error 2066 'index cFormReq is corrupted, please rebuild it' | Fix | awProcess | |||
3.1.0 | TBA | Set xxxGrd.memberClass to xxxGrc of xxx.prg (as awGrc of awPublic.prg) Benefits: . support Events on Column and Header without BindEvent() -- reuse your original event code . FoxInCloud standard methods (eg. .wFormCallBack*() . FoxInCloud standard properties such as .wlContentDynamic (members altered at run-time) and .wcPropSave* REQUIRES to RE-ADAPT the project using FAA. Retrofit: 1- re-adapt your desktop project using FAA; 2- If your project already has a project Hook (prj), make sure to execute in prj.Init() : SET PATH TO (JustPath(_VFP.ActiveProject.Files('xxx.prg'))) ADDITIVE; otherwise re-adapting the project using FAA assigns xxxPrj of xxx.vcx (as awPrj of aw.vcx) as project Hook to the project | Support extension | FAA (awAdapter) | Sr. Arcadio Bianco |
objectOfXML(): restore array properties to class values | Enhancement | abOOP.prg | Mr. Paul Elliot | ||
Log errors occurred while instantiating forms | Enhancement | awAppHost.formLaunch | Sr. Arcadio Bianco | ||
Ignore errors occurred in awFrmLogError | Enhancement | FoxInCloud-status | |||
Modified properties identification (aw.vcx!aw???.wcPropSave): identify native 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) | |||
4.0.0 | TBA | Upgrade to current West-Wind Web Connect version Main benefits brought by this migration: - easier deployment and upgrade (.net-based webConnectionModule.dll replacing wc.dll) - enchanced UTF-8 support Anticipated behavior changes: - debugmode is evaluated at run time rather than compile time - Send administrative emails using wwSMTP instead of deprecated wwIPstuff | Support extension | aw*.prg | |
4.1.0 | TBA | Support all Locale ID, code page, and FontCharSet supported by VFP | Support extension | aw.vcx!awFrm awProcess | Mr Tuvia Vinitsky |
Multiple instances of the same form | Enhancement | 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) | |||
4.2.0 | TBA | Install a FoxInCloud Live Tutorial instance using VFP Advanced 64 bit | Support extension | Live Tutorial | |
property .wlFullScreen to resize master forms to full browser screen in Web classic mode | Enhancement | awFrm awServer | |||
FoxInCloud Web Application Dashboard (http://…/FoxInCloud-Status.xxx): improve link to form error | Enhancement | awServer.prg FWAD | |||
FoxInCloud Web Application Dashboard (http://…/FoxInCloud-Status.xxx): detailed response time per form member object, event, user | Enhancement | awServer.prg FWAD | |||
FoxInCloud Web Application Dashboard (http://…/FoxInCloud-Status.xxx): additional hints to improve response time | Enhancement | awServer.prg FWAD | |||
Automatically archive the request log at server startup | Enhancement | awServer.prg | |||
Support thisForm.wcScriptJS*() for grid members | Enhancement | awHTML | |||
Automated adaptation: Replace . '_Screen.ActiveForm' by 'wActiveForm()', . 'thisForm.ActiveControl' by 'wActiveControl()' | 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) | |||
4.3.0 | TBA | In source mode, automatically backup project's source files before starting automated adaptations. | Productivity | FAA (awAdapter) | |
'Optimizing data management' how-to Guide: Private vs Default Datasession, tables, views and cursors, grid.recordSource | Learning | foxincloud.com | |||
'Setting Application Environment' how-to Guide: SETs, public variables, sharing environment settings with LAN version | Learning | 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 ActiveWidgets | Learning | foxincloud.com | |||
4.4.0 | TBA | 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 CATCH | Productivity | FAA (awAdapter) | |||
Secured FiC License administration page with on-line payment | Licensing | awProcess | |||
Localize all ASSERT messages into English | Localization | *.prg aw.vcx | |||
4.5.0 | TBA | 'ToolBar' and 'Separator' Base Classes are supported | Support extension | aw.vcx awAJAX awHTML | |
Third-party modules: improve identification and segregation between FoxInCloud certified and others | Productivity | 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 -based | Learning | foxincloud.com | |||
Modules signatures (purpose, parameters descriptions and returned value) : localize into English | Localization | *.prg aw.vcx | |||
4.6.0 | TBA | GetColor(): support through wGetColor()/aw.vcx!awFrmGC | Support extension | aw.vcx awAJAX awHTML | |
Optimize grid state save and conversion into HTML/JavaScript (faster execution) | Optimization | awHTML awAJAX | |||
4.7.0 | TBA | 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 | |
Form.resize() support in classic mode: use CSS relative measurements (%); controls resizes while form is resized, all resizing happens on client using CSS, server no is longer involved: faster and smoother. [12 Jul. 2018] postponed until all browsers support CSS3 directive {width|height: available;} | Enhancement | awHTML | |||
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 entries | Learning | foxincloud.com | |||
4.8.0 | TBA | For controls with Disabled* properties (e.g. Commandbutton), create a .disabled CSS class instead of changing HTML element's style properties | Look and feel | awHTML awAJAX | |
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 | |||
4.9.0 | TBA | Event 'DragDrop' is supported on server | Support extension | FoxInCloud.js awAJAX | |
4.10.0 | TBA | OLEClass 'MSComctlLib.ListViewCtrl.2' [Microsoft ListView Control V6 (SP4)] is supported | Support extension | aw.vcx awAJAX awHTML | |
Event 'Scrolled' is supported on server | Support extension | FoxInCloud.js awAJAX | |||
Support form.Visible | Support extension | awHTML awAJAX | |||
Provide a set of standard FoxInCloud error pages | Look and feel | wc.ini | |||
Provide a set of standard FoxInCloud CSS style sheets to easily upgrade web application's look and feel | Look and feel | awSetup awHTML | |||
4.11.0 | TBA | OLEClass 'MSComctlLib.ProgCtrl.2' [Microsoft ProgressBar Control 6.0 (SP4)] is supported for asynchronous processes | Support extension | aw.vcx awAJAX awHTML | |
NONE | TBA | 'FormSet' BaseClass is supported | Support extension | aw.vcx awAJAX awHTML | |
TBA | TBA | 'Hyperlink' BaseClass is supported | Support 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 FRX2Any | Support 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 time | Optimization | aw.vcx awAJAX | |||
Support the DHTMLx widgets library | Look and feel | awAJAX awHTML | |||
Support the Sencha / ext.js widgets library | Look and feel | awAJAX awHTML | |||
Automated adaptation: move call-back code to a call-back method if no variable dependencies is detected within this code | Productivity | FAA (awAdapter) | |||
If an adaptation feature is part of FoxInCloud road map, mention version and scheduled date in adaptation hints | Productivity | 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 guide | Learning | FAA (awAdapter) | |||
History | |||||
3.0.0 | 03-01-22 | Fixed toggling the display of a clickable label | Fix | FoxIncloud.js | M. Vincent Helleboid |
FoxInCloud Web Application Dashboard: fixed various CSS issues related to Bootstrap V 5 | Fix | awServer.prg | |||
User no longer gets disconnected when hitting app. for the first time through a direct log-in URL | Fix | awAJAX | M. Vincent Helleboid | ||
In case of error in awMenu, make sure an error message is provided to the user. | Enhancement | awMenu.prg | M. Vincent Helleboid | ||
Improved .mouse* surface event bubbling across containers | Enhancement | awHTML.prg FoxInCloud.js | |||
Implemented pageframe events - pgf.click() and pgf.pag.Click() when clicking in a page tab - pgf.mouseDown|Up() | Enhancement | awHTML.prg FoxInCloud.js | M. Vincent Helleboid | ||
Fixed decimal point / separator mismatch between browser and app datasession settings | Support extension | aw.vcx | Sig. Michele Bosetti | ||
Added support for separator line in Listbox and Combobox (\-) | Support extension | awHTML.prg | M. Vincent Helleboid | ||
Support for Bootstrap 5 Bootstrap 5 replaces the previous version 3 shipping with FoxInCloud. If your application only relies on the HTML/CSS/JS code that FoxIncloud generates from your VFP forms, you're ready to go without any adaptation. Conversely, if your app. generates specific HTML (eg. using the .wcHTMLgen() method), you need to take into account the evolutions imposed by the migration: - from V.3 to V.4 : https://getbootstrap.com/docs/4.6/migration/, - from V.4 to V.5 : https://getbootstrap.com/docs/5.0/migration/. Though not exhaustive, the most notable evolutions are: - new HTML for checkbox and optionButton, - class '.btn-default' renamed '.btn-secondary' - new standard classes: primary, secondary, warning, success, etc. - new classes for form controls: .form-label, form-check, .mb-* instead of .form-group, etc. - .input-group-* classes simplified - popover : initialisation must be explicit (no more jQuery extension) - HTML alerts is modified (https://getbootstrap.com/docs/5.0/components/alerts/) - the date-time picker control is now "Tempus Dominus Bootstrap 4" (https://getdatepicker.com/5-4/) for compatibility with BS 4/5 (from the same author as previous control "Tempus Dominus is the successor to the very popular Eonasdan/bootstrap-datetimepicker") - the "remarkable-bootstrap-notify" module plays bad with BS 5 (the HTML it generates is deprecated) ; you can use a 'toast' instead https://getbootstrap.com/docs/5.0/components/toasts/ - compatibility with other Bootstrap-dependent components is satisfactory : bootstrap3-typeahead et bootstrap-treeview. | Support extension | awHTML.prg | M. Vincent Helleboid (sponsor) | ||
Web MDI : each browser tab opens a distinct session on server - enable by setting xxxServer.lBrowserTabSession = .T. - Not supported on Safari In different tabs of the same browser instance user can: - use the same app. with different credentials (requires xxxServer.wUserSharable = .T.) - using the same crendential, see the same form in different states (eg. use the same 'client form' for different customers) | Support extension | FoxInCloud.js awServer | M. Vincent Helleboid (sponsor) | ||
2.31.1 | 08-01-21 | Open session when user gets identified through an URL | Fix | awSession | M. Vincent Helleboid |
awFrm.wFileSaveAs(): added tlFileKeep parameter to keep temp file on disk (standard behavior deletes temp files after delivering to user) | Support extension | awFrm.wFileSaveAs() | M. Vincent Helleboid | ||
In FoxInCloud Web App. Dashboard, ignore errors occurred during search engine crawling (eg. wrong URL) | Support extension | awServer FWAD | |||
Support DOS/Windows file & folder pathes in Javascript Strings | Support extension | uValue_JS | M. Vincent Helleboid | ||
2.31.0 | 02-01-21 | .w*RowChange() no longer calls this.refresh() If behavior changes, add this.refresh() to your class or object code | Behavior Change | awGrd | M. Vincent Helleboid |
Fixed syntax of url() directive according to https://developer.mozilla.org/en-US/docs/Web/CSS/url() | Fix | awHTMLgen | Sig. Michele Bosetti | ||
Bootstrap mode: fixed error "Variable Ngmember can't be found" when generating label HTML | Fix | awHTMLgen | M. Vincent Helleboid | ||
Generate form's HTML, CSS and JS only once per Web Application Server release. Generate only if the target files don't exist or are older than the Web Application Server file (xxx*.exe). | Optimization | awAppHost, awAJAX | M. Gilles Lajot-Sarthou | ||
In production mode, if form's initial state table exists and is more recent than executable, do not save initial state again. This avoids conflictual accesses to the initial state table between different servers | Optimization | awAJAX | M. Gilles Lajot-Sarthou | ||
Use in the form's previous state table (old) just before user action on the form, re-open it afterwards to compare form state before/after user action. Reason: if a server chokes while processing a user action, and user no longer wants to wait and reloads the page, another server needs exclusive access to the form state table to overwrite it. | Optimization | awAJAX | |||
No more 'HTTP protocol error' message when sending a user event to the server while the page (master form) is unloading. | Enhancement | FoxInCloud.js | M. Gilles Lajot-Sarthou | ||
Boostrap date-time picker flies over parent container | Enhancement | awHTML | M. Gilles Lajot-Sarthou | ||
textbox.InteractiveChange() no longer overwrites user's typing | Enhancement | awAJAX | M. Gilles Lajot-Sarthou | ||
Support for native date[-time] picker on mobile devices | Enhancement | awHTML awAJAX | Sig. Michele Bosetti | ||
.wFileSaveAs(): Added 4th parameter to force temporary file | Enhancement | wFileSaveAs() | M. Vincent Helleboid | ||
Support for getting textbox.selStart() in some event code, such as cmd.click() FLT sample: http://foxincloud.com/tutotest/bs/sel.tuto | Enhancement | FoxInCloud.js | M. Vincent Helleboid | ||
xxxTxt.wlAlwaysBlur sends .blur() to server even if .value is unchanged | Enhancement | aw.vcx | |||
Support for multiple files upload | Enhancement | awImgGetPict | Sig. Michele Bosetti | ||
Bootstrap: scrolling support improved for multiple child forms | Enhancement | FoxInCloud.js | Sig. Michele Bosetti | ||
Ignore AJAX requests from major search engines bots. These requests generate meaningless errors. To ignore more search engine bots request, add a 'robots.txt' file at your site root. | Enhancement | awAJAX | |||
xxxServer.lBSnotifyAdd adds the 'Bootstrap Notify JS' and 'animate CSS' libraries | Enhancement | awServer | Sr. Arcadio Bianco | ||
Asynchronous report sample in FoxInCloud Live Tutorial http://foxincloud.com/tutotest/bs/report.tuto | Enhancement | FLT | Sr. Arcadio Bianco | ||
Fixed error "the initial properties table can't be found or used: '…\_Ini.dbf'" | Enhancement | awServer | |||
Better handle the 'invalid form specification' errors due to novice hackers trying to cheat FoxInCloud | Enhancement | awAppHost | |||
HotFix mode modification Please BEWARE that xxxServer.lHotFixMode REPLACES xxx.ini!hotFixMode | Enhancement | awServer | M. Vincent Helleboid | ||
Bootstrap: rounded corner on first/last button visible in button group. .wuEffect* not compatible: set to .F. at design time or in .Init() | Enhancement | FoxInCloud.js FoxInCloud.css | M. Vincent Helleboid | ||
Test version indicator If testVersion is on in xxxTest|Prod.ini, standard form pages display "Test Version" in the upper left corner | Enhancement | awServer | |||
HotFix mode If xxxServer.lHotFixMode = .T., when production server restarts after an update, restore previous user's application environment: users continue working seamlessly. Set xxxServer.lHotFixMode = .F. only if the new version alters application's environment: public variables, _screen.properties, menus, etc., and/or you use the VFP menu designer and have not named all your menu pads (in which case VFP assigns random names) | Enhancement | awServer | M. Vincent Helleboid | ||
xxxProcess.UserEnvTableGet() downloads an app. Environment state table for analysis and optimization. Copy and adapt xxxTest.userEnvTableGet.prg for your own application | Enhancement | awServer | Sr. Arcadio Bianco | ||
Added support for diacritics in auto completion | Support extension | awCboAutoComp | M. Vincent Helleboid | ||
Support for slanted single quotes in JavaScript literals | Support extension | abTxt | Sig. Michele Bosetti | ||
Support for treeview nodes drag-and-drop FLT sample: http://foxincloud.com/tutotest/bs/treeView.tuto | Support extension | awBCevent FLT | M. Vincent Helleboid | ||
2.30.0 | 04-16-20 | awTxt.backColor_assign() removed This code was removed: lparameters tBackColor IF Vartype(m.tBackColor) == 'N' AND Between(m.tBackColor, 0, Rgb(255,255,255)) && sometimes, VFP assigns RGB(255,255,255) * 4! this.BackColor = m.tBackColor ENDIF | Fix | awTxt | Mr. Paul Elliot |
page.Enabled changes in Bootstrap mode fixed | Fix | awServer, awHTML | M. Vincent Helleboid | ||
Fix unterminated comment issue | Fix | FAA xxx.js | Sr. Arcadio Bianco | ||
grid: fix 'Z' format support | Fix | awHTML.prg | Sig. Michele Bosetti | ||
Bootstrap datetime picker: show time picker when .Value is of type 'T' demo: http://foxincloud.com/tutotest/bs/event.tuto | Fix | awHTML.prg | M. Vincent Helleboid | ||
In classic mode, grid re-position correctly when resizing form or parent container | Fix | awHTML.prg awGrd.dbf | Mr. Paul Elliot | ||
Hot Fix Mode New setting in xxxTest|Prod.ini : 'HotFixMode'; if set to 'on', after a server update, previous app environment is restored for user. User continues working seamlessly. Use only if new server version changes nothing in: public variables, _screen and _vfp custom properties, menu definition. | Enhancement | awAppConfig xxxTest|Prod.ini | M. Vincent Helleboid | ||
awOLEIE: load initial src URL in generated HTML | Enhancement | awHTML | M. Vincent Helleboid | ||
Better protect production server startup against FoxInCloud server failure | Enhancement | awAppHost | Sig. Michele Bosetti | ||
In Web mode, Label.Caption supports more than 254 chars (VFP limitation) | Enhancement | awServer.prg | M. Vincent Helleboid | ||
uValue(): support date with year < 100 Determine the date using Set("Century", 1) and Set("Century", 2) | Enhancement | abDev.prg | M. Vincent Helleboid | ||
When no custom code implemented in .click() of Optiongroup/Commandgroup member, execute *group.click() (as of VFP native behavior) | Support extension | awopt, awcmd | Mr. Paul Elliot | ||
2.29.0 | 06-06-19 | grid.scrollBars no longer adjusts to the number of rows and cols in the grid | Fix | awGrid | Mr. Paul Elliot |
Support wMenu() while server unloads | Fix | awAppHost awServer | M. Vincent Helleboid | ||
Escape critical characters in treeView.node.text | Fix | awRP | M. Vincent Helleboid | ||
Properly log object type request value | Fix | awServer | M. Vincent Helleboid | ||
Added missing program at.prg | Fix | at.prg | M. Vincent Helleboid | ||
Support DEACTIVATE POPUP in Bootstrap mode | Fix | awMenu | M. Vincent Helleboid | ||
Support repeated DEFINE MENU | POPUP without prior RELEASE Demo: http://foxincloud.com/tutotest/bs/RowSourceType.tuto > rightClick on form surface | Fix | awMenu | |||
Implement .click() by default when commandButton is a member of a commandGroup, to trigger commandGroup.InteractiveChange() | Fix | aw.vcx!awCmd | M. Vincent Helleboid | ||
Added missing ENDPROC when adapting event methods (required by foxBin2Prg) | Fix | FAA (awAdapter) | M. Vincent Helleboid | ||
Statistics based on all files instead of only those with adaptations | Fix | FAA (awAdapter) | |||
Fixed C00005 error: CLEAR parent CLASS before child class | Fix | FAA (awAdapter) abOOP.prg!aClassesClear() | |||
File upload: support for drag and drop from file explorer - If awImgGetFile is a member of awCntGetFile, drop zone is the awCntGetFile surface - else file can be dropped anywhere in the document | Fix | awImgGetFile awCntGetFile | M. Vincent Helleboid | ||
Properly remove deprecated columns when grid.columnCount decreases Workaround a VFP bug: when decreasing .columnCount, VFP does not properly discard the excess columns; awHTML.grdRestore() now .removeObject() these 'ghost' columns. Demo: http://foxincloud.com/tutotest/bs/dynamicGrid.tuto | Fix | awHTML | Mr. Paul Elliot | ||
wMenu(): response time improved by about 15% | Optimization | awMenu abGA | |||
New option 'posDimEffect' controls animations upon position and/or dimension changes | Enhancement | xxx.js | Mr. Paul Elliot | ||
Boostrap menu: support line separators | Enhancement | awMenu | M. Vincent Helleboid | ||
awBSicon: replace image address only if it has changed. Previously awHTMLgen.awBSiconUpdate() always updated awBSicon.addr, hence an obese awBSicon.fpt Reminder: pack awBSicon.fpt, it should no longer get bloated: use awBSicon exclusive pack memo | Enhancement | awHTML | |||
To improve privacy, add user's sessionID to stem of files just generated for download | Enhancement | awServer | M. Vincent Helleboid | ||
Bootstrap HTML generation time reduced by about 25% | Enhancement | awHTML | M. Vincent Helleboid | ||
Fixed generation error in Bootstrap Responsive mode | Enhancement | awHTML | |||
Boostrap: .wBScolAlign forces alignement of containing Boostrap colum; - parent (container, page, form, etc.) has precedence - members must agree on alignment or abstain ('') | Enhancement | awHTML | M. Vincent Helleboid | ||
Improved _Screen.properties restoration | Enhancement | awPublic.prg awSets | |||
Set, save and restore _Screen.Width and _Screen.Height as browser's view port width and height (in development, awSets.Destroy() restores _Screen.Width and _Screen.Height when application unloads) | Enhancement | awServer awAppUserEnv | Mr. Paul Elliot | ||
Support for .SelStart and .SelLength selection changes in browser are notified to server | Enhancement | awServer FoxInCloud.js | M. Vincent Helleboid | ||
Shortcut: F4 ignores (or recall) current adaptation | Enhancement | FAA (awAdapter) | |||
Icon size set by default according to original image size Clear icon button | Enhancement | atBSicon | |||
Updated bower\*.* to the latest version | Enhancement | awScripts | |||
awImg.wBSiconNo prevents .*Picture from being added to awBSicon table | Enhancement | awImg awHTML | M. Vincent Helleboid | ||
Dynamic grid sample Grid has 0 column at form.Init(), use can dynamically choose the .columncount and .columns.controlSource issue: https://support.west-wind.com/Thread5E507FLA7.wwt demo: http://foxincloud.com/tutotest/bs/dynamicGrid.tuto | Enhancement | FoxInCloud Live Tutorial | Mr. Paul Elliot | ||
wFormMaster() supports form classes | Enhancement | awPublic.prg | Mr. Paul Elliot | ||
XMLofObject() and public objects based on a FoxInCloudf class: save custom properties automatically | Enhancement | abOOP.prg | Mr. Paul Elliot | ||
form.Init() : support comments before [L]parameters instruction | Enhancement | acTxt.prg!acRegExp | Mr. Paul Elliot | ||
wNavigate(): do not override previous redirection. Make sure to call the indended redirection first; eg. thisForm.wFormMaster(...) thisForm.release() | Enhancement Behavior change | awServer.prg | Mr. Paul Elliot | ||
Support for drag & drop Support for the main OLE drag and drop events, OLEstartDrag and OLEdragOver being supported on client only. Data set in browser's event.dataTransfer are sent automatically to à .OLEdragDrop() on server as a VFP dataObject. Only data of type 'text' are supported. Demo and code sample: http://foxincloud.com/tutotest/bs/dragdrop.tuto | Support extension | awHTML FoxInCloud.js | M. Vincent Helleboid | ||
Auto-Complete combo box Drop an instance of aw.vcx!awCboAutoComp on your form and set its .rowSource; when user types characters in the text portion, the matching entries in (.rowSource) pop in the dropped down list. 1. Supports (.rowSourceType = 2 && Alias) only 2. (.rowSource) is a local table, a non-parameterized view or an immutable cursor (contents does not change across user actions); to seek the mtching records, FoxInCloud takes the alias as-is, without restoring it. 3. If data are strings (most likely), (.rowSource) must have a candidate index built on the search expression with collate "general". 4. by default search occurs on the beginning of text; a property sets search in the whole text using the 'atcc()' function. As this function is not rushmore optimized, this search mode is slower. Supported in Bootstrap mode only using https://github.com/bassjobsen/Bootstrap-3-Typeahead demo: http://foxincloud.com/tutotest/bs/autoComp.tuto | Support extension | awHTML awCboAutoComp | M. Vincent Helleboid | ||
2.28.0 | 12-01-18 | .wFormShow() returns modal child form's (.wModalChoiceProp) even without a call-back method defined. | Fix | aw.vcx!awFrm | |
Pageframe tabs no longer cycle when clicking them fast | Fix | awServer.prg | Sr. Arcadio Bianco | ||
Scrolling in grids when swiping on touch devices | Fix | FoxInCloud.css | Sig. Michele Bosetti | ||
Support deletion of several records in views or cursorAdapters in table buffering mode demo: . open http://foxincloud.com/tutotest/bs/dataUpdate.tuto in 2 browsers . navigates down the grid to the test customers ("z Company...") . delete different records in both browser . check deleted records are persistent across the 2 browsers | Fix | awServer | Sr. Arcadio Bianco | ||
Restore state of a grid.recordSource CAD or cursor in a private datasession form being opened by a member of a form having grid member(s) with CAD or cursor as .recordSource. Test: - open in 2 browsers: http://foxincloud.com/tutotest/bs/report.tuto (the customers grid had a CAD as .recordSource) - Click 'update' to open the dataUpdate form; by default the grid also has a CAD as .recordSource - use the 2 browsers alternatively | Fix | awServer | Sr. Arcadio Bianco | ||
Close HTML child form if .QueryUnload() returns .T. | Fix | FoxInCloud.js | M. Gilles Lajot-Sarthou | ||
Tabindex of objects located in nested containers see https://support.west-wind.com/Thread59R02XOHH.wwt | Fix | awHTML | M. Vincent Helleboid | ||
Property xxxServer.wUserSharable Indicates that several users can log into the application using the same ID [.wUserLogin(ID)] | Enhancement | awServer | M. Vincent Helleboid | ||
Improved and updated home(1) + "Tools\AB\AW\Samples\Tastrade\Adapted" to be more reliable; all grids have an adapted .memberClass and grid columns have .headerClass | Enhancement | Samples | |||
Tabbing between controls and forms mimics the VFP behavior - when form opens, focus goes to the control with lowest tabindex (in classic mode only, Bootstrap seems to somehow contradict this behavior) - hitting the Tab or Enter key moves focus to the next control in tab order, and circles around the visible controls in the form (done on client side) - on server side, if .Valid() does not return .T. or 1, server sends a focus order to whatever controls that .Valid() wants focused - when closing a child form by any mean (button, cross or escape key), in classic and Bootstrap mode, focus returns to the control from which form opened . if tabbing out of a control opens a dialog (eg. a lookup dialog), focus moves to next control only after dialog is closed demo: http://foxincloud.com/tutotest/Event.tuto THANKS FOR TESTING CAUTIOUSLY on your application and, in case of an issue, post it WITH A VIDEO SHOT on the support forum | Enhancement | awServer awHTML FoxInCloud.js | Sr. Arcadio Bianco, M. Vincent Helleboid | ||
FoxInCloud Web Application Dashboard (http://…/FoxInCloud-Status.xxx): CAS and request history graphs update automatically when changing scope Demo: http://foxincloud.com/tutotest/bs/foxincloud-status.tuto?tab=reqHistory | Enhancement | awServer.prg FWAD | |||
FoxInCloud Web Application Dashboard (http://…/FoxInCloud-Status.xxx): history of number of user requests on application Demo: http://foxincloud.com/tutotest/bs/foxincloud-status.tuto?tab=reqHistory | Enhancement | awServer.prg FWAD | M. Gilles Lajot-Sarthou | ||
More details in case of error "Table could not be opened under alias..." | Enhancement | awServer | M. Gilles Lajot-Sarthou | ||
In case of startup error, add name of Application Admin to notification email | Enhancement | awAppHost | Sig. Michele Bosetti | ||
New property FoxInCloud.inputAlwaysBlur [default value false for back compat] If set to true, input (textbox and editbox) send .LostFocus() and/or .Valid() event to server even if .value has not changed since .focus() | Enhancement | FoxInCloud.js xxx.js | |||
Support [textbox|editbox|spinner].InteractiveChange() on client side using HTML5 DOM event oninput(). - return .T. (behavior change): execute on server twice (instead of once previously), at first and last .Value modification (not upon intermediate changes) - return .F.: execute on server at last .Value modification, just before .Valid(); use this option to have the same behaviour as (return .T.) previously - return <javaScript> : execute on client at EACH .Value modification | Enhancement Behavior Change | FAA (awAdapter) awSupport aw.vcx FoxInCloud.js | |||
Fine tune the events where dodefault() is needed | Enhancement | FAA (awAdapter) | Sr. Alejandro Sosa | ||
Support for form.TitleBar = 0 demo: http://foxincloud.com/tutoTest > event log | Support extension | awHTML | M. Gilles Lajot-Sarthou | ||
2.27.0 | 08-01-18 | [Bootstrap] columns containing a single control spread across the whole row. If you have sub-classed the awHTMLgen class, you may need to revise xxxHTMLgen.getHTML_BS_ColSpec_User() | Behavior change | awHTML | |
Remove deprecated SWFupload.js | Deprecation | FoxInCloud.js | |||
Last dependencies on Prototype.js removed You can now run your server with: xxxServer[Test|Prod].lPrototypeAdd = .F. Prior to making this change, make sure to read and follow the documentation in: modify command home(1) + 'tools\ab\aw\app\progs\xxxServer.prg' | Deprecation | FoxInCloud.js | |||
Surface Events tutorial Learn how to implement fast surface events such as .MouseEnter(), .MouseMove(), .MouseLeave() in JavaScript and/or CSS demo: http://foxincloud.com/tutotest/bs/eventClient.tuto blog: http://foxincloud.com/blog/2018/07/11/adapting-surface-events.html | Learning | Live Tutorial Blog | Mr Tuvia Vinitsky | ||
Render file upload image using a button demo: http://foxincloud.com/tutotest/bs/imgUpload.tuto | Learning | Live Tutorial | |||
"object.xxx?" type specification not supported | Fix | aw.vcx!awCntGrdPage | |||
Support characters UTF-8 encoded on more than 2 bytes eg. "€" | Fix | awServer.prg | Sig. Michele Bosetti | ||
Fix "grid was emptied" error Workaround CursorToXML() unexpected, 'random' errors where "<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?><VFPData</VFPData>" is returned | Fix | awHTML.prg | |||
cSrceCodeOfObject(): fixed properties longer than 255 chars | Fix | awTxt.prg | |||
Upload file with diacritics in name | Fix | awServer.prg | M. Vincent Helleboid | ||
Diacritics in log reports Make sure to do atPJcompile at least once on a FoxInCloud project | Fix | awServer.prg | |||
Opening a form with a grid from a menu | Fix | awServer.prg | Sig. Michele Bosetti | ||
Form.resize() support in classic mode: use CSS relative measurements (%); Postponed until all browsers support CSS3 directive {width|height: available;} | Enhancement | awHTML | |||
In production mode, remove inline comments from form generated JavaScript (form_scx.js) | Enhancement | abDev awHTML | M. Vincent Helleboid | ||
Paged Grid Container: updateable grid and faster refresh set .wlCntGrcCSpageCursor = .F. to execute the new logic: grid.columns.controlSource are no longer redirected on the paged cursor | Enhancement | aw.vcx!awCntGrdPage | |||
2 new parameters to control the scope of requests to D/L tdReqMin: minimum Date[-time] of requests to D/L tdReqMax: maximum Date[-time] of requests to D/L | Enhancement | awServer.prg xxxTest.RequestLogGet.prg | |||
Request log form loads quicker wc.wc?FoxInCloud~wFrmLogError | Enhancement | awServer.prg aw.vcx!awCADlogError | |||
Support deleted() on non-buffered cursors | Enhancement | awServer.prg | Sig. Michele Bosetti | ||
Issue a single log record for a request with AJAX error(s) | Enhancement | awHTML | |||
2.26.2 | 04-15-18 | Improve the responsive (Bootstrap) version of Samples\FIC\FICdemo Bootstrap users please make sure the inline form rendering is OK | Learning | Samples | |
form.activate() triggers in Web mode on child forms, with or without JavaScript and/or server request | Fix | awHTML.prg FoxInCloud.js | M. Vincent Helleboid | ||
CSScustomAdd(): mispelled CSS rule fixed | Fix | awHTML.prg | |||
Fixed column width in grid.column.resize() event web mode handler | Fix | FoxInCloud.js | |||
Fixed error "Menu 'xyz' has not been defined with DEFINE POPUP" | Fix | awAppEnvUser | M. Gilles Lajot-Sarthou | ||
Fixed an issue when commandButton in a grid column has a non-reachable .Picture | Fix | awHTML | Sig. Michele Bosetti | ||
Grid properly rendered when starting application from FoxInCloud Adaptation Assistant, at the end of step 3- Publish | Fix | FAA (awAdapter) | |||
In FoxInCloud Adaptation Assistant, step 3- Publish, Install Files, Error message does display when a file copy fails. | Fix | FAA (awAdapter) | |||
Bootstrap: fixed drop-down menu invisible on child form | Fix | awMenu.prg | M. Vincent Helleboid | ||
Member object names no longer mistakenly added to .wcPropSave (store value to this*.container.*) | Fix | FAA (awAdapter) | M. Gilles Lajot-Sarthou | ||
xxxTest.pjx.prg better (re)generate the web projects, with less files missing | Fix | FAA (awAdapter) | M. Gilles Lajot-Sarthou | ||
Nested parentheses in function or method parameters are now supported | Fix | FAA (awAdapter) | M. Gilles Lajot-Sarthou | ||
Fixed error 'Method or procedure uValue_td() : erreur # 11 ("Function argument value, type, or count is invalid") at line # 4,020; Value : "01/020/2018"' | Fix | abDev!uValue() | M. Gilles Lajot-Sarthou | ||
Fixed a bug in supporting the FROM clause in command DEFINE POPUP ... SHORTCUT RELATIVE FROM MROW(), MCOL() Test: http://foxincloud.com/tutotest/bs/Keypress.tuto, right click in the form surface | Fix | awMenu.prg | M. Vincent Helleboid | ||
Boostrap menu: support replacing picture by a font icon such as 'font awesome' demo: http://foxincloud.com/tutotest/bs/ > 'Source code' menu | Enhancement | awMenu.prg | |||
First time Server saves properties, it identifies custom properties (added at design time or by *.Init()/Form.Load()) in all objects and parent classes and adds to .wcPropSave. At design time, you only need to add: - in .wcPropSave: native properties that code changes (such as .Visible, .Enabled, etc.) - in .wcPropsSaveNot: custom properties that you don't want/need to save as they remain unchanged across users (eg. heavy objects) | Enhancement Behavior Change | awServer | |||
2.26.1 | 02-15-18 | When Form is displayed in the VFP IDE (development and/or Trial mode), add cover to prevent user from interacting with the form. | Learning | awAppHost | Sr. Gustavo Colmenares |
Responsive (Bootstrap) version of AW\Samples\Tastraders | Learning | Samples | |||
Provide a responsive (Bootstrap) version of Samples\FIC\FICdemo | Learning | Samples | |||
.RightClick() fixed demo: http://foxincloud.com/tutotest/RowSourceType.tuto, right click in the form surface to show a context menu | Fix | FoxInCloud.js | |||
Fix random file access error "File access is denied c:\...\temp\4y60jvv3v\_4y60jvv3v_form_scx_old.cdx" | Fix | awSession | M. Gilles Lajot-Sarthou | ||
Fixed resize issue with base class container | Fix | awPublic.prg!wAnchorResize*() | |||
Fix random error when saving session: Error: 1884 Message: Uniqueness of index WWSESSION is violated Program: save | Fix | awSession | M. Gilles Lajot-Sarthou | ||
Get adir() from the server instead of polling each file's last modification date-time By sending only one request per folder instead of one request per file, updating the site is 5 to 10 times faster. | Optimization | awServerUpdate awProcess | |||
FoxInCloud Web Application Dashboard (http://…/FoxInCloud-Status.xxx) List all forms found in the log, even if not instantiated in the current server | Enhancement | awProcess | |||
aw.vcx!aw*.wBSgroup: controls Bootstrap Group membership | Enhancement | aw.vcx!aw* | |||
Version queryString added to *.js and *.css URLs Browser reloads *.js and *.css after a FoxInCloud version change, avoiding the 'version mismatched' message box introduced in V 2.26.0, at the expense of a growing browser cache space. | Enhancement | awProcess | |||
Support thisForm.wFormMaster('form.xxx', ...) Assuming that xxxProcess.form() displays a standard page for 'form.scx'; in LAN mode, 'form.xxx' is automatically translated to 'form.scx' | Enhancement | awFrm | |||
Protection and error message in case of a form call (eg. message box) during application startup | Enhancement | awAppHost | |||
Bootstrap: right justify inline forms (https://getbootstrap.com/docs/4.0/components/forms/#inline-forms) | Enhancement | awHTML | |||
When a modal form has .QueryUnload() or a callback method, disable closing form by pressing the escape key or by clicking in the modal backdrop (Bootstrap) | Enhancement | FoxInCloud.js | Sr. Arcadio Bianco | ||
Grid: fix title (Tooltiptext) inheritence from grid to cell through column. Like in VFP, if Tooltiptext is defined at grid or column level and empty at cell level, upper level displays | Enhancement | awHTML | |||
Bootstrap: render labels overlapping the top of a shape or line as a HTML fieldset legend: http://foxincloud.com/tutotest/bs/Event.tuto ('State') | Enhancement | awHTML | |||
objectOfXML(): avoid running .Init() when restoring an object based on a class other than Empty | Enhancement | abOOP | Mr Tuvia Vinitsky | ||
Persist client-side grid column sorting when updating the data | Enhancement | awHTML.prg | Sr. Arcadio Bianco | ||
Bootstrap: support contextual menu demo: http://foxincloud.com/tutotest/bs/RowSourceType.tuto, right click in the form surface to show a contextual menu | Support extension | FoxInCloud.js | M. Vincent Helleboid | ||
2.26.0 | 01-01-18 | FoxInCloud Web Application Dashboard (http://…/FoxInCloud-Status.xxx) on-line CAS usage histograms; test: http://foxincloud.com/tutotest/bs/foxincloud_status.tuto | Licensing | awProcess | Sig. Michele Bosetti |
When displaying a child form and a messagebox (or similar), make sure messagebox always displays last regardless of the call order This case occurs when dialog is issued for form.show() or form.refresh() | Fix | awAJAX | M. Vincent Helleboid | ||
CAS history: new parameters: - max / avg - this app / all app on this server - this server / all servers | Enhancement | awProcess | |||
FoxInCloud Web Application Dashboard (http://…/FoxInCloud-Status.xxx) re-designed using Bootstrap: responsive and more modern; test: http://foxincloud.com/tutotest/bs/foxincloud_status.tuto | Enhancement | awProcess | |||
Error report and email include the exe date and version | Enhancement | awProcess | Sig. Michele Bosetti | ||
Various fixes and enhancements: - fixed adaptation issue when function call (eg. messageBox()) is part of an expression and/or on several lines of code - added a form where user can select ignored and / or excluded files for analysis Server and Site installation (step 3): - enhanced the log messages - raise error if app code or program folder are empty - rebuild files whenever user changes app code - better visual feedback when files installation completes - compile classlibraries in reverse order of dependencies | Enhancement | FAA (awAdapter) | Mr. Paul Elliott | ||
In 'copy' (test) mode, copy all files located in folders where some project source code resides. | Enhancement | FAA (awAdapter) | Mr Art Bergquist | ||
FAA no longer stops when closing a class or form containing an OLE control such as MSComctlLib.TreeCtrl.2 or RichText.RichTextCtrl.1 | Enhancement | FAA (awAdapter) | |||
New method awHTMLgen.CSScustomAdd() Allows adding specific CSS rules to the generated awDefault*.css | Enhancement | aw.vcx awHTML | |||
Do not log this request! If you don't want a request to appear in the server log, call xxxProcess.logRequestNo() anywhere duting the request | Enhancement | awServer.prg | |||
Support OLEClass 'MSComctlLib.TreeCtrl.2' [Microsoft TreeView Control V6 (SP4)] using Bootstrap treeview (https://github.com/jonmiles/bootstrap-treeview) - support node.*image. Demo: http://foxincloud.com/tutotest/bs/treeview.tuto | Support extension | aw.vcx awAJAX awHTML | |||
New server properties xxxServer.ljQueryUIdialog = .T. && use jQueryUI dialog instead of legacy 'Prototype Window Class' xxxServer.lPrototypeAdd = .T. && load Prototype.js (http://prototypejs.org/) and dependent scripts: Scriptaculous, PrototypeWindowClass, event.simulate, etc. As PrototypeJS will get deprecated, make sure to test these settings in your application! You may want to first set these properties in xxxTestServer. | Support extension | awHTML aw.vcx!aw* FoxInCloud.js | |||
Bootstrap Support Step 4: Complete migration from Prototype.js to jQuery. | Support extension | awHTML aw.vcx!aw* FoxInCloud.js | |||
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 Demo: http://foxincloud.com/tutotest/bs/treeview.tuto | Support extension | aw.vcx awAJAX awHTML | |||
2.25.0 | 10-01-17 | 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 available | Productivity | FAA (awAdapter) | |||
Save current project view filters in projet's initialization file (<project>-awAdapter.xml), and restore when loading project | Productivity | 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 folder | Productivity | 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-17 | xxxServer.cFrmMBclass and xxxServer.cFrmIBclass replace awFrm.wcMessageBoxClass / awFrm.wcInputBoxClass and awPublic*.h constants Because compilation constants in awPublic.h / awPublic_override.h can fail because of changes in set('path') at compile time, we define these classes at server level so that they can be accessed from anywhere, either from an independent procedure or a form member method. Please make sure to manually add these properties to your xxxServer.prg; you can just copy and paste the corresponding lines from aw\app\progs\xxxServer.prg | Behavior 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-16 | VFP base classes removed from generated awDefault*.css In xxx.css, make sure to replace any .<vfpbaseclass> {} CSS directive by a .aw???{} directive, where ??? is the standard VFP abbreviation for base class; eg replace any ".commandbutton" by ".awcmd" | Behavior change | awHTML.gen | |
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.properties | Enhancement | awServer.prg awAJAX | v&u | ||
When running in 'copy' (test) mode, prompt user to open all source code files as read-only | Enhancement | 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 | |||
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* | |||
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-16 | jQuery is now required; xxxServer.ljQueryAdd is forced to .T. | Behavior 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 row | Fix | 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 executable | Productivity | awServerUpload | |||
Improve image and text position on button according to .PictureMargin, .PictureSpacing and .PicturePosition | Look and feel | awHTML | |||
Child form position saved when moved and restored next time user opens it | Enhancement | awScripts/*.js awProcess | |||
In Web mode, disable grid row change when !grid.Enabled | Enhancement | aw.vcx!awGrd awHTML | Mr James Patterson | ||
No longer need to re-set .RowSourceType before assigning .RowSource | Enhancement | aw.vcx!awLst aw.vcx!awCbo FAA | |||
.RowSourceType = 2 (Alias): Recno(.RowSource) in sync with .ListIndex | Enhancement | aw.vcx!awLst/Cbo | M. Vincent Helleboid | ||
Support for dynamic update of list contents with .ColumnCount > 1 | Enhancement | 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 session | Enhancement | 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 mode | Enhancement | 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() supported | Enhancement | 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-16 | Wait until Windows has actually erased the old form state files before renaming the new ones as old Seemingly, ERASE files.* can take some time before Windows has completed the job, in what seems to be an asynchronous process. awServer.prg!awAJAX.propsReplace() now catches the rename error and sleeps until the file name is really available to avoid the error 1705 "file access is denied" when renaming. | Fix | awServer.prg!awAJAX.propsReplace() | |
Saving collections that are form members | Fix | 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-16 | Error "Uniqueness of index wwSession is violated" (Error 1884) fixed | Fix | 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 column | Enhancement | FoxInCloud.js.MethExec() | STI | ||
FoxInCloud Application Server status page: CPU load added | Enhancement | 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-15 | Fixed error message "no action specified on target form" Reminder: if you need to pass parameters to form.init(), make sure to pass a coma-delimited string of VFP literals as FoxInCloud.FormDisplay() third parameter; eg for 3 parameters (integer, string, date): FoxInCloud.FormDisplay(event, 'form.scx', '1,"String", {^2014/11/16}') | 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 recorded | Enhancement | 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-15 | 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-15 | grid sort column better recognized when some columns have an expression as controlSource | Fix | 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 form | Fix | awAppHost | Mr Tuvia Vinitsky | ||
2.20.0 | 08-07-15 | First time a form gets instantiated upon a user request, .Init() executes without parameters only once (used to be twice) Since awFrm.Load() sets thisForm.wlWeb, thisForm.wlWeb is properly set when form.Init() executes. ThisForm.wlWeb used to be set from outside, hence the second execution to make sure .Init() knew whether form was running in desktop or web mode. Thus thisForm.wlInitFirst is fully meaningful. Another consequence is that form.members.Init() can also safely rely on thisForm.wlWeb. Just make sure to call dodefault() in you form subclasses' .Load(), after all views and cursoradapters are opened (used). | Behavior 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 page | Fix | 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 expires | Fix | 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 phases | Enhancement | 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 .Height | Enhancement | 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 server | Enhancement | 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-14 | awFrm.wViewRequery_post() signature upgraded Added 2 parameters to awFrm.wViewRequery_post(), make sure your sub-class accept the following parameters: tcView && View just requery()'d , success && success of requery() (.T./.F.) , nError && if !m.success, @error that occurred , cMessage && if !m.success, @error message | Behavior 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 | |||
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 container | Fix | 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 | |||
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 | |||
.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 behavior | Fix | 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 mode | Enhancement | 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 supported | Support extension | awServer | Sig. Michele Bosetti | ||
Support for label.alignment changing during the course of a user request | Support 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-13 | Sample applications After installing FoxInCloud Application Server (FAA step 3-Publish), you'll find sample applications in <path to VFP9>\tools\ab\aw\samples\. You can review code provided. In next version, sample applications will install automatically so that you can let them run on http://localhost/ | Learning | 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.*.inc | Learning | awProcess | Mr Tuvia Vinitsky | ||
Created aw.vcx!aw???.wReadMe() for class documentation | Learning | 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 administrator | Productivity | 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://.../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 ID | Enhancement | awHTML | Mr Tuvia Vinitsky | ||
Improved number formatting based on .InputMask | Enhancement | 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-13 | 'Adapting PUBLIC variables' - detailed explanations and code samples on how to choose a strategy to adapt PUBLIC variables to web operations, according to the kind of data these variables contain: - Identify PUBLIC variables whose contents depend on the user: . either on user identity and/or security rights and priviledges (user profile), . or on user actions through interaction with application (user actions); - Choose an adaptaton strategy for each of these kind of variable | 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.php | Learning | FAA (awAdapter) | |||
"tabindex=" attribute better assigned based on containers and multiple forms | Fix | 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.RecordSource | Fix | awHTML | |||
Fixed container.borderWidth > 1 not showing up in CSS | Fix | 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 CSS | Fix | awHTML awGrd.dbf | Sig. Michele Bosetti | ||
Support for pageframe.Tabs = .F. | Fix | FoxInCloud.js | Sig. Michele Bosetti | ||
Support for AutoIncrement integer fields in grid.RecordSource | Fix | awHTML | Sig. Michele Bosetti | ||
awSpn.Valid() is processed in Web mode | Fix | 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 device | Enhancement | 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.Curvature | Support extension | awHTML | |||
Support for timeout in wMessageBox() and other similar forms | Support 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-12 | Release form (javascript window) that is not currently focused | Fix | aw.vcx!awFrm FoxInCloud.js | |
DOMelement.focus() works in IE < 9 | Fix | 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 users | Fix | awServer.prg | |||
awAJAX.PropsRestore_Array(): ".BoundColumn property is not found" error fixed | Fix | 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 application | Enhancement | aw.vcx!awFrm | |||
Save and restore Deleted() records in cursors and views | Support extension | awAJAX | |||
Support double-byte character code pages (cn, jp, etc.) | Support extension | FAA (awAdapter) | |||
READONLY cursors are supported | Support extension | awAJAX | |||
'Timer' BaseClass is supported | Support extension | aw.vcx awAJAX awHTML | |||
1.25 | 07-01-12 | wAddObject() with "OLEcontrol" class: first parameter contains OLEclass, fixed by replacing 't01' variable by an equivalent litteral and macro-substituting parameters | Fix | 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 missing | Fix | 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 settings | Look 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 automatically | Enhancement | 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 tooltips | Enhancement | awHTML | |||
grid.Column.ControlSource with long field names (> 10 characters) and/or expressions | Support 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-12 | Child Forms working in multiple parent form's datasession (default) : datasession is correctly saved and restored | Fix | awAJAX | |
Combobox in grid cell(s) : InteractiveChange accepts character value | Fix | 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 debugging | Fix | awAppHost | |||
Non-updateable views (Empty(CursorGetProp("KeyFieldList"))) are better saved and restored | Fix | awAJAX | |||
Combobox & Listbox with .RowSource : if .Value can't be found in .RowSource, no value in list is selected | Fix | 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 accordingly | Productivity | 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 restored | Optimization | 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-12 | GDIplus error 'GDI+ object not created or associated' no longer occurs when Picture file can't be found | Fix | aw.prg! cImageWeb() | |
Request ID unicity is better enforced | Fix | 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 Assistant | Productivity | FAA (awAdapter) | |||
Deprecated PEMs removed | Productivity | aw.vcx | |||
Warn developer that if any javascript error occurs, execution stops and further code is not executed, resulting in incomplete request processing | Productivity | 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 use | Optimization | 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 class | Support extension | aw.vcx awAJAX awHTML | |||
Grid, full support of: - .Highlight, .HightlightStyle, .HightlightBackColor, .HightlightForeColor - .GridLines, .GridLineWidth, .GridLineColor | Support extension | awHTML | |||
1.6 | 12-15-11 | PEM descriptions are localized in English | Localization | 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 changes | Fix | awHTML | |||
Cursors created by CREATE CURSOR are now correctly saved under Windows 2000 server | Fix | 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/ControlSource | Fix | 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 method | Productivity | 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 type | Look and Feel | awHTML | |||
Grid Column Header with .Alignment = 3 (automatic) are now properly aligned | Look and Feel | awHTML | |||
1.5 | 11-24-11 | ASSERT … MESSAGE longer than 120 chars display on Windows 64-bit platform, though truncated to 120 chars | Fix | all | |
wForm(): safer detection of control where event originates from | Fix | aw.vcx!awFrm | |||
wMessageBox(): 'this.method' syntax supported as tuFormCallBack parameter | Fix | aw.vcx!awFrm | |||
Better detection of cursors built by querying a remote database | Fix | awAJAX | |||
Cursors with a varying structure and recordSource of one or several grid(s) are properly restored when user changes | Fix | awAJAX | |||
In forms title bar (build with xxxProcess.wFormStandardForm()), added a link sending an email to application support manager in case of trouble | Productivity | awProcess awAJAX | |||
No more ASSERT when an optional path is missing or invalid | Productivity | awAppConfig | |||
You can now override xxxProcess.wFormHTML_cCaption() to customize form caption | Look and Feel | awProcess | |||
Changing Textbox.passwordChar from empty() to !emtpy() is supported in browser ('*' is browser default) | Enhancement | awAJAX | |||
1.4 | 11-07-11 | Checkbox.Enabled = .F. mapped to disabled="disabled" as <input type="checkbox"> does not support readonly the same way as VFP (user can still change control's value) | 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 file | Productivity | awAppConfig | |||
Linked resources such as images and xml are relative to site virtual for independence to site configuration | Productivity | 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 message | Look and Feel | awAJAX awProcess | |||
Grid processing optimization: about 30% faster | Look 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-11 | wlUserAnonymous() function indicating if current web user is anonymous | Security | 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 distribution | Fix | aw.vcx!awFrm | |||
System menu support with xxxProcess::wFormHTML_cMenu() and xxxMenu.xls | Look and Feel | awProcess | |||
awProcess::wFormStandardPage(): form title bar and close button respect VFP form settings | Look 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.ActiveControl | Support extension | awPublic.prg | |||
1.2 | 09-08-11 | 'Update code on line' <a> and <form> commented because too difficult to use manually; ALWAYS use standard awStart.prg!awServerUpload() procedure instead. Retrofit: in all your sites, manually replace "admin.asp" file by this version. | Security | admin.asp | |
In development mode, current form is no longer activated in IDE to avoid lostFocus() and or valid() events to trigger | Fix | awServer | |||
Protection against duplicate entries in list of properties to save (.wcPropSave) causing exponential growth when saving | Fix | 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 debugging | Productivity | awServer wwRequestLog | |||
awServer.wUserDemo may open several sessions simultaneously | Look and Feel | awServer | |||
1.1 | 08-24-11 | Complete COM server protection against modal states | Security | awAppHost awAJAX | |
Improved localization in English | Localization | All | |||
Session table created at first run | Fix | awSession | |||
Improved data formatting in _screen-based Request tracking table | Productivity | awAppHost | |||
Alias() is saved and restored between user events | Support extension | awAJAX |