Hi FiC team,
This is a list I am maintaining that outlines problems I have encountered while evaluating FiC for use with our project.
Some of it is brief and generalised, but I am including it all in the hope that other people with similar issues and questions might chip in with suggestions, or at least feel that they are not alone!
My purpose here is twofold - firstly to let you know about the pain-points I am experiencing so that these can be improved or explained for the future and secondly to seek your help about the corruption problem itemised below.
I really want to make FiC succeed for us, it holds a lot of promise for converting a project into a viable web product - but I am finding it a demoralising and time consuming task to get to the point where a prototype can be achieved :
- documentation is haphazard
- the guides are useful, but sometimes out of date with how things currently work
- many things are not documented
- the provided samples simply do not work, or only partially work, out of the box
Problems Encountered
FAA
- prompts for a prefix to prepend to files it will create - it does not do this consistently
- some .prg files are not renamed
- some files in the Site folder are not renamed
- always initially scans the project in copy mode, even when you want to work in source mode; it doesn't remember the previous mode
- you can't just analyse a particular file, you have to analyse the entire project; this takes hours
- when FAA is run from the FoxInCloud VFP menu item, attempting to adapt only the current module (via the little button) produces this error :
awoop.fxp!Awadapter.adapt_awsubclassredefine() - awoop.fxp!Awadapter.lvcxapp_folder() - Folder where FoxInCloud sub-classes library should be stored is invalid
I have ensured that the new xxx class library is in the path, so I don't know why this errors out - Checkbox controls are not redefined to the FIC base class after adaptation, our base class needs to be manually redefined to the awchk class, located in the class library (xxxfic) that has been created
- Our own base class library is corrupted by FAA, with method code all screwed up and the new code "overlapping" over several methods; note that code is being truncated and extended between methods, as though a line counter or similar is wrong in FAA as it loops over the rows of the vcx. This makes FAA unusable currently.
i. example : StandardTextbox.MouseEnter
*used to be this 😗
LPARAMETERS nButton, nShift, nXCoord, nYCoord
do UpdateHelpBox with this
*now it is this 😗
tation Assistant version 2.25 (source mode) on 11/21/2017 16:44:45
this.
ii. example : StandardTextbox.Init
*used to be this 😗
Local TheAutoCompleteFile, AutoCompleteError
=Dodefault()
this.OldValue = this.value
this.setdecimals()
... etc...etc
*now it is this 😗
lectsAll = .T.
If this.InputMaskSetInGotFocus
this.InputMask = ""
this.InputMaskSetInGotFocus = .F.
endif
ENDPROC
a new and unrelated method is now being defined!!
PROCEDURE Click
LPARAMETERS nButton, nShift, nXcoord, nYcoord && Implementation documentation: see code inherited from aw.vcx!aw???.Click() (click 'View Parent Code')
IF (Type('m.thisForm.wlHTMLgen') == 'L' AND m.thisForm.wlHTMLgen) && Added by FoxInCloud Adaptation Assistant version 2.25 (source mode) on 11/21/2017 16:44:45
...etc...etc
ENDIF && Added by FoxInCloud Adaptation Assistant version 2.25 (source mode) on 11/21/2017 16:44:45
=Dodefault()
...etc...etc
*** The user has clicked on a
...truncated at this point
- A pageframe class in one of our class libraries is also corrupted by FAA and will not open, need to investigate further what has happened
IIS
- manually set script-mapping for .xxx to wc.dll
- manually set HTTP redirect to index.xxx
- I'm not even sure why having .xxx files are necessary in the web site. I can understand that the code files are renamed to xxx*.* to avoid conflict with others, but what is the link between those names and the names of the web-based files?
Other
- Manually alter the Temp file path in xxxtest.ini and wc.ini - must have a \ suffix
- It is assumed that there is a folder named Progs containing your program files - change this in xxxtest.prg
- I unsuccessfully tried running the TasTrade sample application. If you simply run it then it produces a "blank" messagebox form in VFP when it starts up and nothing else works; source code unavailable so can't debug further. I can get the customer form appearing in VFP by specifying it as a startup form in the Server class, but nothing works in it.
.
The FAA, item f, is what I am stumped on now and cannot proceed.
Please give me some advice on the class library corruption issue.
Has anyone else seen this before?
Thanks.
Paul
Hi Paul,
Thanks for your interest in FoxInCloud, and your rich and dense post; hopefully I can address all your points.
Generally speaking:
- what you've experienced as 'not working' has been tested over and over on our end and runs successfully for hundreds of other users… as the issue is probably specific to your configuration, we need to know more about it;
- we need details to find solutions! 'it does not work' only generates frustration, not solutions;
- we help better when users raise one point at a time, and we generally provide a solution within hours;
- we love screenshots and videos! When something does not work for you, a video lets us see immediately what's going on and find a solution; definitely worth the 5' it takes shooting;
- other FoxInCloud users may want to share their feedback about the support they get from here…
documentation
Exists but spread around source code and guides so far; now that the development of functionalities will slow down, we're looking at putting a centralized documentation on top of our priorities.
So far we support users for what is not documented;
it also helps us understand what users feel most difficult;
eg. we recently discovered users thinking FiC could not work on a server because of the server form visible in the VFP IDE.
FoxInCloud is a complex system (twice as large as West-Wind Web Connect), we definitely need to understand what and where users need documentation, which items need be prioritized so that we can set up a comprehensive structure; and users can help us a lot understand their needs…
FAA does not remember source / test mode
here is a video showing this working; if it does not happen the same on your side, please provide your log and config file (*.xml) to support at foxincloud dot com
Demo apps not working & source code not available
I unsuccessfully tried running the TasTrade sample application. If you simply run it then it produces a "blank" messagebox form in VFP when it starts up and nothing else works;
Same as above, this video might help you see how you can make it work
FAA does not rename some .prg files and some files in the Site folder
Which files?
Can you provide your Adaptation log to support at foxincloud dot com?
FAA scrambling source code
That is why you have the test mode for; you should not go to source mode before checking that the Automated Adaptation has not damaged your source code.
Please provide your adapted Class Library to support at foxincloud dot com; don't worry about dependencies as we shall just check in the methods
field which adaptation has overwritten some endproc
; if your code is confidential, you can delete the other classes from the vcx.
manually set script-mapping for .xxx to wc.dll, manually set HTTP redirect to index.xxx
should be automated through IIS 6 scripting -- no error message? -- nothing in the log?
not even sure why having .xxx files are necessary in the web site
A better alternative to redirection is to define index.xxx
as your site's default document; for that, IIS requires a file to exist physically on disk, even empty.
you can't just analyse a particular file, you have to analyse the entire project; this takes hours
agreed, might be a valid improvement for large projects like yours seem to be. However, when you click the adapt
button, you get a drop-down menu where you can select the x files modified since last analysis …
; did you try this option?
FAA is run from the FoxInCloud VFP menu item, attempting to adapt only the current module (via the little button) produces this error…
Thanks, we'll dig into this
Thank you for your prompt reply and for your videos 😃 Alas, my experience does not align with what is shown; when I get some time (not for a few days) I will produce some videos illustrating the problems.
In the meantime I have emailed you the logs and other files as requested, hopefully they shed some light on the issues.
Paul
Hy Paul, F.I.C is really efficient and operational, but for developers of desktop applications, the needs of WEB resources are not known to them. When coming from the Foxpro world, the WEB context is hard to grasp.
The first thing to understand:
- in desktop mode, an application runs for a single user. If there are multiple users, there will be multiple instances of the application, one for each user. The developer does not have to worry about managing the resources of several users on the same instance of execution of his application.
- in web mode, an application, in a single execution instance, manages several users. In WEB, the developer, through his development language, must manage the resources of each user (context, tables in use, pointers to tables, access rights, forms used, etc. ..) and each event triggered, each resource requested by a user, restore for it the initial context, process the event or respond to the requested resource then save the context of this user and finally move to treat another user in the same way.
Foxpro, in an execution instance, is not multi-task or multi-user, so it does not know how to handle multi-user actions. The major role of F.I.C is to support this multi-user management, rendering the context, processing the action of the user, saving the context of this user, etc. for each user. This is possible in WEB, because there is decoupling between the client-side interface and the server-side processing. On the client side, each HTTP request sent by an internet browser and transmitted to the WEB server, will be through wConnect understood and re-transmitted to the FoxPro executable adapted by FoxInCloud that runs in COM mode on the server. Thus FoxInCloud and wConnect allow this executable Foxpro, to treat one by one and in turn, the needs of each of the users issuing HTTP requests in which are present the actions to carry out in your Foxpro application.
It is essential to understand this well, because without this knowledge, we can not understand why in each event method of its application Foxpro, FoxInCloud adds code, properties, events etc and how does it interface with the wConnect resources ..
Regards Gilles
Hi Paul,
In the meantime I have emailed you the logs and other files as requested, hopefully they shed some light on the issues.
Thanks for these files;
compile classlib
fixes the 'scrambled code' issue.
Now we need to know why, after altering its code, FAA did not properly compile this class library as it should have…
(done in class.destroy(), should always occur unless VFP process is killed).
Update: after compile classlib
, please watch tlcClasses.err
: there is a compilation error in MODIFY CLASS standardtreeview of "tlcclasses.vcx" method removenode
that requires a manual rework.
Hello again Paul,
'c:\work_foxincloud\4manufacturing\programs\viewdefinitions.prg'
takes about 1 hour to analyze… we may have some potential optimization here… would you mind sending this file to support at foxincloud dot com so that we can see why it takes so long?
Hello again Paul,
Many of your problems were due to the fact that, because of your project name beginning with a digit (4manufacturing
), the XML file where your settings should have been saved is invalid (4manufacturing.pjx-awAdapter.xml
) -- see also this ER.
We've updated awAdapter.app
to work this issue around; it'll update automatically next time you start FAA
Please delete 4manufacturing.pjx-awAdapter.xml
before restarting FAA.
Paul,
Please hold on until we fix an issue in sub-classing aw.vcx!aw*
and replacing native classes by these sub-classes. Not sure it's due to the other issues you had or something more generic.
Thanks
Paul,
successfully adapted your class library (tlcclasses.vcx
) on our end: base classes redefined and code adapted.
you may want to restart the whole process from scratch…
after adaptation, please make sure in the log that base class replacement has occurred;
your log currently has (dates and times non significant):
21/11/2017 14:31:45 - (89) awadapter.filesvcxclassupdate(): 13/43 - Replacing native class 'Form' by class 'sficfrm' of 'H:\Work\Common\foxpro\vfpclasses\FoxInCloud\sfic.vcx'
================================================================================
14:31:45 - (01) Updating 'c:\work_foxincloud\common\foxpro\vfpclasses\splash.vcx' - none
14:31:45 - (02) Updating 'c:\work_foxincloud\common\foxpro\vfpclasses\tlcclasses.vcx' - none
14:31:45 - (03) Updating 'c:\work_foxincloud\4manufacturing\classes\schedulermps.vcx' - none
you should have DONE
instead of none
in almost all lines.
Another point: I mentioned earlier viewDefinition.prg
taking a long time analyzing; if it's only a view definition
program (create SQL view (m.thisView) as SELECT …
), you can just ignore this program in FAA, FAA will skip it in analyze and adapt steps; you should save at least one hour in analysis (50%).
we need to know why, after altering its code, FAA did not properly compile this class library (
tlcClasses.vcx
) as it should have…
the log gives the answer:
16:51:57 - (004) Compiling 'c:\work_foxincloud\common\foxpro\vfpclasses\tlcClasses.vcx' - acoop.fxp!Awadapter.filescompile() - FAILURE: Filecompile() - Method or procedure filecompile(): error #3 ("File is in use") at code line #3,331 ("compile classlib (m.tcFileAddr)") - File 'TLCCLASSES.VCX'
this is an issue with VFP who often does not properly release the *.vcx
. In this case you need to compile manually: compile classlib TLCCLASSES.VCX
I see also in the log numerous compilation errors like:
16:52:29 - (031) Compiling 'c:\work_foxincloud\4manufacturing\programs\quickqt.prg' - acoop.fxp!Awadapter.filescompile() - FAILURE: Filecompile() - File 'QUICKQT.PRG' compiled with error(s):
If (Rtrim(FieldValuesObject.Status) == Rtrim(GetStatus('', "ReWork")) or FieldValuesObject.Status <= GetStatus('', "Prototype")) And *-FIC- Replaced by FoxInCloud Adaptation Assistant version 2.25 (source mode) on 11/21/2017 15:38:35
it looks like the comment *-FIC- Replaced by FoxInCloud Adaptation Assistant version 2.25 (source mode) on 11/21/2017 15:38:35
was not added properly;
could you provide this adapted code?
Thanks
Hi,
Here are some answers to your questions and points :
"prompts for a prefix to prepend to files it will create - it does not do this consistently"
I can't remember which files exactly, but I ended up copying all files from C:\Program Files (x86)\Microsoft Visual FoxPro 9\Tools\AB\AW\App\Progs and renaming those that needed to be.
Also found that xxx.js, xxx.css got renamed to .js and .css (i.e. no file name before the extension)."manually set script-mapping for .xxx to wc.dll, manually set HTTP redirect to index.xxx"
No errors reported by the installer. Which log should I look at?"FAA not remembering copy vs source mode"
It also always shows a message that "project was never analyzed successfully in Test/Copy mode...", probably the same issue.
I will try again with the new version of FAA."drop-down menu where you can select the x files modified since last analysis …; did you try this option?"
Always lists all files as needing modification, probably related to the issue above."there is a compilation error in MODIFY CLASS standardtreeview of "tlcclasses.vcx" method removenode that requires a manual rework
and I see also in the log numerous compilation errors like: ...FAILURE: Filecompile() - File 'QUICKQT.PRG' compiled with error(s):..."
These are caused by the same problem : an "inline" call, with a line continuation, to the messagebox() function is being adapted to "code...FAA comment...code", which is invalid.
Example :
before
if a = b and ;
messagebox("why") = IDNO
after
if a = b and ;
*-FIC- Replaced by FoxInCloud Adaptation Assistant version 2.25 (source mode) on 11/21/2017 15:38:35
*-FIC- Messagebox("why") = IDNO
wMessageBox("why") = IDNO
.
I note that an "inline" call to the messagebox() function that does not involve a line continuation is not adapted at all.
Example :
before
if a = b and messagebox("why") = IDNO
after
if a = b and messagebox("why") = IDNO
.
I'm going to replace all messagebox() calls with a call to a wrapper function anyway, so this particular problem will go away."I mentioned earlier viewDefinition.prg taking a long time analyzing"
Yes, the file just contains lots of SQL view definitions, so I will ignore it.
What do I need to do to ignore it, prior to going through the first FAA analysis (I know the UI provides this ability, but you have to analyse it at least once).
Thank you for investigation and fix, your help is much appreciated.
If you have finished your immediate changes to FAA I will start everything again from scratch and see how I go.
Paul
Hi Paul,
Thanks for providing detailed elements, it really helps us fix issues going beyond the scope of our tests.
Files not renamed during installation
As log does not report any error, we need to investigate further; please allow us 24 hours more
14/11/2017 12:23:12 - Checking a compatible IIS version is installed on this computer, completed with success
14/11/2017 15:58:53 - Checking a compatible FoxInCloud Application Server version is installed on this computer, completed with success
14/11/2017 15:59:00 - Installing FoxInCloud scripts virtual Directory, completed with success
14/11/2017 16:14:38 - Installing West-Wind Web Connect temporary directory, completed with success
14/11/2017 16:15:45 - Installing application's site virtual directories and script-mapped extensions (over wc.dll), completed with success
"FAA not remembering copy vs source mode" and "drop-down menu where..."
Fixed thanks to our workaround to a wwConfig bug; should be OK now.
replace all messagebox() calls with a call to a wrapper function
This won't work for MessageBox()
used to get an answer from the user as you need to specify the call-back method as first parameter and this call-back must be defined from within a form member; see this demo for more explanation and code sample.
Please give us a couple of day to better replace this code pattern.
viewDefinition.prg
After checking source code, FAA also analyses ignored
and excluded
files…
We will remove the auto-analyze feature (just keep the message box do you want to analyze…
) and add an option to skip excluded and/or ignored files.
Thanks for the update.
Please let me know when you have finished this round of changes to FAA and I will then try again.
Paul
we should get through tomorrow (day after tomorrow for you)
Hi,
today we have:
- fixed the
messageBox()
adaptation issue - created the form where user can select ignored and / or excluded files for analysis
- enhanced the installation log messages
Tomorrow we'll further analyze the installation issues and release the new version of FAA hopefully tomorrow evening (Wednesday evening Paris time)
FAA enhancements completed and updated on our site! Just restart FAA and it'll update automatically.
Please consider adapting and installing in Test / Copy
mode first.
Server and Site files installation improved:
- raise error if app code or program folder are empty
- rebuild files whenever user changes app code
- better visual feedback when installation completes
Thank you for quick help, your service is excellent.
I will try again with FAA later next week and let you know how I get on (several projects to juggle at the same time, I'm sure you know how it is).
Paul