Quantcast
Channel: West Wind Message Board Messages
Viewing all 10393 articles
Browse latest View live

Re: progress meter

$
0
0
Re: progress meter
FoxInCloud
Re: progress meter
06/04/2012
05:52:40 PM
3IO12BKWX Show this entire thread in new window
Gratar Image based on email address
From:
Tuvia Vinitsky
To:
Attachments:
None
It does not look like anything became of your suggestions in that other thread.

I understand what is involved, I am just frustrated about the difficulty in reproducing this basic functionality on the web. It is, IMO, the one big hurdle conceptually to web apps becoming a standard.

BTW, the TIMER class in VFP would simplify some of this for FiC. I cannot get periodicupdater in prototype to work under FiC. Not necessarily an FiC issue, just me figuring it out. I have the FiC js source, so I an do it. There just needs to be a tool for this IMO.

Would you consider moving up in the roadmap timer support?


1- due to web constraints, the only way to feedback process progress to the user is to run a separate, asynchronous task;
2- wwAsyncWebRequest does exist in WC4, but does not address the user feedback issue;
3- we proposed an implementation here: http://www.west-wind.com/wwThreads/default.asp?Thread=3HE0QYEQ3&MsgId=3HJ025GTC

I know this subject has been done to death, but for me, with FiC, this has gotten a little ridiculous the lengths to which I must go to provide a simple progress bar. Now before everyone piles on about the web, and stateless, etc., I know all that. But the USERS, the ones paying the bill, do not care about that. Period. They want what they always had on the desktop:

instantiate thermo class
loop
process A
Process B
update thermo display
endloop

I admit to being quite annoyed previosly when the idea that processes take a while, and that users might sit there for them, was considered hey, what an idea. Besides the massive rewrites involved, it is usual, customary, and required for users to sit there until a process is done. With reports we can get away with dumping the process off, but not with financial transactions of mega-importance.

I KNOW I can dump them process and check progress with a timer -- although the ajax and prorotype timers have some quirks with FiC, we could work around that. But that is not an answer. I can open all kinds of beautiful modal progress windows, but that is not a answer.


I am not up for rewriting over 2000 forms and 1500 classes.

It is an absolute requirement that within one method or block of code there be a way to send immediately a message to update some screen appearance This is so basic I cannot believe how much time I spent arguing about it.

Webconnect docs seem to have a class to manage this, but it requires wc 5.

This is the biggest thing stopping my enterprise apps. I have lost clients because, with FiC, I cannot easily accomplish this most basic of VFP tasks.

I am at a loss.



Re: Managed Module - times out when starting

$
0
0
Re: Managed Module - times out when starting
Web Connection 5.0
Re: Managed Module - times out when starting
06/04/2012
07:34:12 PM
3IO15Y5N5 Show this entire thread in new window
Gratar Image based on email address
From:
Rick Strahl
To:
Attachments:
None

500 errors can be anything so this is hard to determine. Web Connection itself fires very few 500 errors from within the managed code - only for things like when the servers can't be loaded or some other fatal error occurs. All should be captured and returning a message. Hard 500 errors come from IIS and there's not much we can do about that unless there's more information.

IIS has a Failed Request Tracing feature that can be enabled to capture failures. It's based per site or virtual and can capture the last errors and store those in a folder as XML data, viewable via stylesheets. These usually contain a bunch more data. Maybe you can have your customers that are having problems enable that and check.

But 500 errors can come from many issues including from HTML access.

+++ Rick ---



Hi Rick -
So far testing is going pretty well. I had it running in my lab with 6 server instances running round-robin, all getting hits pretty much constantly and let it run for a week without any major issues. Load, unload, and killing instances through task manager while under load seemed to bahave as expected.

I've had it installed at a customer site for 5 days now. So far it appears to have solved all the issues it was having before, as far as wc.dll handing off requests to server instances that were still busy.

However, the customer has reported one issue: they are getting periodic HTTP 500 errors (often enough that they are complaining about it). Nothing is showing up in my app error log, or the Windows event logs. I searched the web site log file (the one that lists gets and posts) for "error", but came up with nothing. And the error message "something went wrong" is unhelpful. Do you know what might cause that, or if there is an IIS log file somewhere that reports when this happens, so I could at least find out how often it is happening?

I'll give you another update when I get further along.

Thanks - David


Can you post back and let me know how you fare in your environment? I've tested the module under load and it's done great, but haven't had a ton of live feedback (although many people are using it).


+++ Rick ---



Yes, that worked. I moved everything from init to a new PostInit method, and then call that on the first hit.

Thanks, that got me going! On to more fun testing :)

- Dave


It's the COM subsystem that's timing out actually. I double checked my code to see if the module does anything to control the actual load time and it doesn't.

Beyond the normal Web COnnection request timeout, it doesn't care how long it takes - in fact once the Createobject call is made we lose all control over the call and .NET takes over the load process. I suppose that .NET throws the timeout exception...

See if you can't delay some of these startup tasks and remove them from the initial startup. Calls can take longer, but initialization might be timed out by the OS.

+++ Rick ---



We have a pretty large app, and it has a lot of initialization work to do. Normally it won't take more than 3 seconds, but when the system is under load (we don't have a separate web server) then I've observed it timing out on my test server. Whether that's right or wrong, I'm stuck with it for now.

- Dave


The server load timeout is hardcoded unfortunately. If your servers are taking more than 10 seconds to load there's got to be something seriously wrong. If it's the app spin up time that's the problem then reloading again should be much faster. If it's the actual COM server loading that's slow there's has to be something going on that's causing it to be that slow (like a slow SQL connection?)

+++ Rick ---



I'm running some tests with using the Managed Module instead of wc.dll.

One big issue I'm running into is the length of time it takes for my server application to initialize. Normally it only takes a few seconds - but under some conditions (like when the system is very busy) it could take longer.

The problem is that if it takes a server instance longer than 10 seconds to spin up, the Managed Module will quit - when on the Module Status page and clicking Load Servers, it comes back with a message "Server (server name) failed to load in time".

Is there any way to adjust this timeout to be more tolerant? I tried setting the request timeout setting in web.config, but that didn't make any difference.

Thanks - Dave












Rick Strahl
West Wind Technologies

Making waves on the Web

from Hood River, Oregon

How to put my Mainmenu to Default.htm - Using FoxIncloud Framework

$
0
0
How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
FoxInCloud
How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
06/04/2012
08:37:31 PM
3IO187LEB Show this entire thread in new window
Gratar Image based on email address
From:
Reggie
To:
All 
Attachments:
None
Hi Experts,

I want my VPF app on the cloud.

I follow all instructions on the website(www.FoxInCloud.Com). I. Adaptation Assistant (FAA) 2. Adapt 3. Publish.

My IIS and Application Server is also running (FoxinCloud Trial Version). http:\\xxx\default.htm

We are planning to buy the License FoxInCloud and West-Wind Web Connect after we can test and run our Local App at least on the Localhost.

Anybody could help me please?


How to change the default.htm to my MAINMENU.PRG instead?


Thank you.


Regards,
Reggie



--EiggerFox

Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework

$
0
0
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
FoxInCloud
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
06/04/2012
08:49:27 PM
3IO18MT2H Show this entire thread in new window
Gratar Image based on email address
From:
Tuvia Vinitsky
To:
Attachments:
None

You will actually build an .exe in VFP and run that, although you can run just a standalone form as well. But the main point is that you want to give FiC a whole app to run,


Hi Experts,

I want my VPF app on the cloud.

I follow all instructions on the website(www.FoxInCloud.Com). I. Adaptation Assistant (FAA) 2. Adapt 3. Publish.

My IIS and Application Server is also running (FoxinCloud Trial Version). http:\\xxx\default.htm

We are planning to buy the License FoxInCloud and West-Wind Web Connect after we can test and run our Local App at least on the Localhost.

Anybody could help me please?


How to change the default.htm to my MAINMENU.PRG instead?


Thank you.


Regards,
Reggie

Re: progress meter

$
0
0
Re: progress meter
FoxInCloud
Re: progress meter
06/04/2012
10:54:21 PM
3IO1D3FX2 Show this entire thread in new window
Gratar Image based on email address
From:
LLS
To:
Attachments:
None
Hi Tuvia ..

The need for a production application with a high reactivity of the operation, I also with my clients.
When my users have before them a queue of anxious patients, seizures must be fluid and no latency ..
In WEB is its very weak point, there are many latency-related infra-structures that disrupt user habits and slow down the work of operators.
For us to change discourses marketing and providing alternative views of the use of our web applications.

Eventually, there will be a smoothing of the performance of applications between WEB and LAN and this time we will be happy to have the choice of FIC

For the bar thermometer, integration into the FIC use of asynchronous mode will allow to simulate such an indicator ..

Cordially
GLS

I understand all that; I teach people how to use FiC and consult in projects with it.

1. Users are used to desktop apps. It is going to be a long time before they are re-trained.
2. I am also referring to MY ease of use. I do not want to be sending lots of threads off to an asyncrhonous handler. Lots of rewriting!

This progress bar thing is a big deal to users and developers. It also happend to address the one issue outstanding conceptually with FoxInCloud - the need for real time communication between the we display and the code running in VFP.

BTW, it would help if the timeouts for WC and FiC could all be set dynamically. Then a long process could change the timeout and then set it back again.

As long as I am on the topic, a pet peeve of mine is that all this talk of browsers and web ignores one big thing: there are very, very few business applications that run on a stateless web system. Most of what people are calling "applications" are juiced up e-commerce sites or small apps. Java is not really a web app, it is just that Java VM runs in a browser.


Hi Tuvia..

My English is poor ..
Thank you to the translator "Google" ..

I'll try to answer your question.
Today there are only two ways to protect your applications and customers:

1) Be extended, with FIC decade life of your VFP applications without rewriting code VFP important
2) Either completely rewrite all your applications in a development environment like the current "Microsoft .NET / Visual Studio" or "Servoy"

Other solutions patterned after the VFP code can not yet transform your applications in VFP productive applications for your customers. They are still in development tools Beta version (ex "Lianja" i test at the moment) that despite the best will in the world will be hard to be operational until at least 2014 ..

Currently there is no new development tools hundred percent compatible with VFP ..

The only solution immediately operational and productive to sustain our applications, it's all WConnect (Rick) + AJAX + Javascript + HTML5 + F.I.C (THN) + VFP.

One has to do and prepare clients to understand it .. then accept or die slowly.

I know this subject has been done to death, but for me, with FiC, this has gotten a little ridiculous the lengths to which I must go to provide a simple progress bar. Now before everyone piles on about the web, and stateless, etc., I know all that. But the USERS, the ones paying the bill, do not care about that. Period. They want what they always had on the desktop:


instantiate thermo class
loop
process A
Process B
update thermo display
endloop

I admit to being quite annoyed previosly when the idea that processes take a while, and that users might sit there for them, was considered hey, what an idea. Besides the massive rewrites involved, it is usual, customary, and required for users to sit there until a process is done. With reports we can get away with dumping the process off, but not with financial transactions of mega-importance.

I KNOW I can dump them process and check progress with a timer -- although the ajax and prorotype timers have some quirks with FiC, we could work around that. But that is not an answer. I can open all kinds of beautiful modal progress windows, but that is not a answer.


I am not up for rewriting over 2000 forms and 1500 classes.

It is an absolute requirement that within one method or block of code there be a way to send immediately a message to update some screen appearance This is so basic I cannot believe how much time I spent arguing about it.

Webconnect docs seem to have a class to manage this, but it requires wc 5.

This is the biggest thing stopping my enterprise apps. I have lost clients because, with FiC, I cannot easily accomplish this most basic of VFP tasks.

I am at a loss.



Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework

$
0
0
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
FoxInCloud
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
06/04/2012
10:56:11 PM
3IO1D5T8A Show this entire thread in new window
Gratar Image based on email address
From:
Reggie
To:
Attachments:
None
Hi Tuvia,

Thanks for the prompt reply. I have build already an exe in VFP and currently running on Local Network.

But Yes, that's true, I want the help of FIC experts to guide me on how to run my whole app on the web or localhost.


Regards,
Reggie

You will actually build an .exe in VFP and run that, although you can run just a standalone form as well. But the main point is that you want to give FiC a whole app to run,


Hi Experts,

I want my VPF app on the cloud.

I follow all instructions on the website(www.FoxInCloud.Com). I. Adaptation Assistant (FAA) 2. Adapt 3. Publish.

My IIS and Application Server is also running (FoxinCloud Trial Version). http:\\xxx\default.htm

We are planning to buy the License FoxInCloud and West-Wind Web Connect after we can test and run our Local App at least on the Localhost.

Anybody could help me please?


How to change the default.htm to my MAINMENU.PRG instead?


Thank you.


Regards,
Reggie



--EiggerFox

Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework

$
0
0
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
FoxInCloud
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
06/05/2012
12:06:09 AM
3IP007XLY Show this entire thread in new window
Gratar Image based on email address
From:
LLS
To:
Attachments:
None
Hi Reggie

Is your VFP's exe currently running on LAN, compiled with F.I.C or only with VFP ?

Have you run FAA on your VFP project before ?

Regards
GLS


Hi Tuvia,

Thanks for the prompt reply. I have build already an exe in VFP and currently running on Local Network.

But Yes, that's true, I want the help of FIC experts to guide me on how to run my whole app on the web or localhost.


Regards,
Reggie

You will actually build an .exe in VFP and run that, although you can run just a standalone form as well. But the main point is that you want to give FiC a whole app to run,


Hi Experts,

I want my VPF app on the cloud.

I follow all instructions on the website(www.FoxInCloud.Com). I. Adaptation Assistant (FAA) 2. Adapt 3. Publish.

My IIS and Application Server is also running (FoxinCloud Trial Version). http:\\xxx\default.htm

We are planning to buy the License FoxInCloud and West-Wind Web Connect after we can test and run our Local App at least on the Localhost.

Anybody could help me please?


How to change the default.htm to my MAINMENU.PRG instead?


Thank you.


Regards,
Reggie



Re: progress meter

$
0
0
Re: progress meter
FoxInCloud
Re: progress meter
06/05/2012
12:43:41 AM
3IP01K7NZ Show this entire thread in new window
Gratar Image based on email address
From:
Tuvia Vinitsky
To:
LLS 
Attachments:
None
I agree.

Here is how we plan to do the progress bar. We call a child form, and that form instatiates a javascript timer. That timer looks to the value of a certain cookie to determine the percentage done and when to quit. I have old VFP code for setting cookies, I just have to update the cookie setting for Fic/wc.


Hi Tuvia ..

The need for a production application with a high reactivity of the operation, I also with my clients.
When my users have before them a queue of anxious patients, seizures must be fluid and no latency ..
In WEB is its very weak point, there are many latency-related infra-structures that disrupt user habits and slow down the work of operators.
For us to change discourses marketing and providing alternative views of the use of our web applications.

Eventually, there will be a smoothing of the performance of applications between WEB and LAN and this time we will be happy to have the choice of FIC

For the bar thermometer, integration into the FIC use of asynchronous mode will allow to simulate such an indicator ..

Cordially
GLS

I understand all that; I teach people how to use FiC and consult in projects with it.

1. Users are used to desktop apps. It is going to be a long time before they are re-trained.
2. I am also referring to MY ease of use. I do not want to be sending lots of threads off to an asyncrhonous handler. Lots of rewriting!

This progress bar thing is a big deal to users and developers. It also happend to address the one issue outstanding conceptually with FoxInCloud - the need for real time communication between the we display and the code running in VFP.

BTW, it would help if the timeouts for WC and FiC could all be set dynamically. Then a long process could change the timeout and then set it back again.

As long as I am on the topic, a pet peeve of mine is that all this talk of browsers and web ignores one big thing: there are very, very few business applications that run on a stateless web system. Most of what people are calling "applications" are juiced up e-commerce sites or small apps. Java is not really a web app, it is just that Java VM runs in a browser.


Hi Tuvia..

My English is poor ..
Thank you to the translator "Google" ..

I'll try to answer your question.
Today there are only two ways to protect your applications and customers:

1) Be extended, with FIC decade life of your VFP applications without rewriting code VFP important
2) Either completely rewrite all your applications in a development environment like the current "Microsoft .NET / Visual Studio" or "Servoy"

Other solutions patterned after the VFP code can not yet transform your applications in VFP productive applications for your customers. They are still in development tools Beta version (ex "Lianja" i test at the moment) that despite the best will in the world will be hard to be operational until at least 2014 ..

Currently there is no new development tools hundred percent compatible with VFP ..

The only solution immediately operational and productive to sustain our applications, it's all WConnect (Rick) + AJAX + Javascript + HTML5 + F.I.C (THN) + VFP.

One has to do and prepare clients to understand it .. then accept or die slowly.

I know this subject has been done to death, but for me, with FiC, this has gotten a little ridiculous the lengths to which I must go to provide a simple progress bar. Now before everyone piles on about the web, and stateless, etc., I know all that. But the USERS, the ones paying the bill, do not care about that. Period. They want what they always had on the desktop:


instantiate thermo class
loop
process A
Process B
update thermo display
endloop

I admit to being quite annoyed previosly when the idea that processes take a while, and that users might sit there for them, was considered hey, what an idea. Besides the massive rewrites involved, it is usual, customary, and required for users to sit there until a process is done. With reports we can get away with dumping the process off, but not with financial transactions of mega-importance.

I KNOW I can dump them process and check progress with a timer -- although the ajax and prorotype timers have some quirks with FiC, we could work around that. But that is not an answer. I can open all kinds of beautiful modal progress windows, but that is not a answer.


I am not up for rewriting over 2000 forms and 1500 classes.

It is an absolute requirement that within one method or block of code there be a way to send immediately a message to update some screen appearance This is so basic I cannot believe how much time I spent arguing about it.

Webconnect docs seem to have a class to manage this, but it requires wc 5.

This is the biggest thing stopping my enterprise apps. I have lost clients because, with FiC, I cannot easily accomplish this most basic of VFP tasks.

I am at a loss.





Multiple fields in WebDataGrid

$
0
0
Multiple fields in WebDataGrid
Web Connection 5.0
Multiple fields in WebDataGrid
06/05/2012
01:05:24 AM
3IP02C4XO Show this entire thread in new window
Gratar Image based on email address
From:
Luca
To:
All 
Attachments:
None
Dear Rick,
I set a grid with a column as sum of 2 character text fields:

<ww:wwWebDataGrid ID="Grid1" runat="server" DataSource="qBo2" width="1240"> <Columns> <ww:wwWebDataGridColumn ID="Column5" runat="server" Expression="Field1+Field2" HeaderText="Fnz"> </ww:wwWebDataGridColumn> ...

I see the grid perfectly in browser, as if it were already

ALLTRIM(Field1) + " " + ALLTRIM(Field2)

Do you confirm that it is so?
Is it not necessary I set in Grid1

<ww:wwWebDataGrid ID="Grid1" runat="server" DataSource="qBo2" width="1240"> <Columns> <ww:wwWebDataGridColumn ID="Column5" runat="server" Expression=ALLTRIM(Field1) + " " + ALLTRIM(Field2) HeaderText="Fnz"> </ww:wwWebDataGridColumn> ...

Thank you very much

Client clipboard

$
0
0
Client clipboard
Web Connection 5.0
Client clipboard
06/05/2012
05:22:31 AM
3IP0BISST Show this entire thread in new window
Gratar Image based on email address
From:
Luca
To:
All 
Attachments:
None
Dear Rick,
on a button click I would like to obtain:

_cliptext = ALLTRIM(Field1) + "_" + CHRTRAN(ALLTRIM(Field2)," ","")

off course _cliptext should be the client machine clipboard.
Please is it possible?
Thank you very much

Southwest Fox/Xbase++ 2012 Solstice Special

$
0
0
Southwest Fox/Xbase++ 2012 Solstice Special
Conferences and Events
Southwest Fox/Xbase++ 2012 Solstice Special
06/05/2012
10:43:01 AM
3IP0MYZJ6 Show this entire thread in new window
Gratar Image based on email address
From:
Doug Hennig
To:
All 
Attachments:
None
Geek Gatherings is adding an incentive to get you to register early. In addition to all the perks you get when registering before July 1st (a $125 discount, a free pre-conference or post-conference session, and a chance for a $150 scholarship or Stonefield Query SDK), one person who registers before June 21st wins a tablet!

The winner will select one of the following:

  • iPad 2 with 16MB of memory (value of $399)

  • Kindle Fire (value of $199)

  • Samsung Galaxy Tab 2 (value of $399)

Winner is selected on July 3, 2012 from the list of people registered before June 21st.

Re: Setting ControlSource

$
0
0
Re: Setting ControlSource
Web Connection 5.0
Re: Setting ControlSource
06/06/2012
12:04:53 AM
3IQ006ERI Show this entire thread in new window
Gratar Image based on email address
From:
Luca
To:
Attachments:
None
I tried without success. This is why I asked here.
I asked it already at 06/04/2012 but maybe you have not seen it:
http://www.west-wind.com/wwThreads/default.asp?Thread=3IO0AYXEW&MsgId=3IO0AYXEX

I set ControlSource between quote and it runs now:

this.txtKeyField.ControlSource="this.Page.oBusiness.oData.Field1"

Thank you

Why don't you try it instead of asking a questino here? It's probably quicker than waiting for a response here...

Yes it works but it has to be done before a call to DataBind() is made.

+++ Rick ---



Dear Rick,
is it possible to set ControlSource programmatically from code, instead of setting it into Visual Web Developer?
When is it possible to set it? before DataBinding?

this.txtKeyField.ControlSource=this.Page.oBusiness.oData.Field1

Thank you very much



Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework

$
0
0
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
FoxInCloud
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
06/06/2012
12:52:28 AM
3IQ01VLN9 Show this entire thread in new window
Gratar Image based on email address
From:
Reggie
To:
LLS 
Attachments:
None
Hi GLS,

Thanks a lot. It's really a big help for me.

I'll try to understand and follow this one and I'll get back to you soon.


Regards,
Reggie


Hi Reggie
The tutorial on the procedures to deploy the server Fic and make its application for use in web or localhost is available http://www.foxincloud.com/how-to.php selection in "Manually Installing a development application server FoxInCloud ".
After choosing an extension for its application (STEP A1), replace all xxx xxxMyApp by its extension in all file names with xxx and xxx in files *. Prg themselves.
Within the files are written in a comment all changes made​​.
Same for the file xxx *. Ini must have all its attributes set correctly in relation to installation directories and use the VFP application / FIC / WEB.
Finally wc.ini the file should be also set with the VFP application directories / FIC / WEB.

* An example of one my xxx*.ini files. It's name is demofic.ini . It is use for a localhost application test for using Fic.


; {fr} Dans ce document,
; {fr} - 'xxx' désigne le code de votre application FoxInCloud
; {fr} - '<site>' désigne l'adresse physique du dossier de votre site
; {fr} - les clés omettent le premier caractère de type de la propriété
; {fr} correspondante de awServer.prg!awServerConfig (standard wwConfig)

; {en} In this document,
; {en} - 'xxx' is a place holder for your FoxInCloud Application code
; {en} - '<site>' is a place holder for the physical path to your site directory
; {en} - keys omit the first character indicating type in the matching
; {en} property of awServer.prg!awServerConfig (wwConfig standard)

[Main]

; ***********************
; WCONNECT SERVER SECTION
; ***********************

; ==============================================================
; {fr} Pour une information complète sur cette section,
; {fr} veuillez consulter la documentation wConnect :

; {en} For complete information on this section,
; {en} please refer to wConnect documentation:

; "Application ini file and the wwServerConfig class"
; http://www.west-wind.com/webconnection/docs/_s900r7r0l.htm
; ==============================================================

; --------------------------------------------------------------
; {fr} Ces trois réglages sont REQUIS pour fonctionner avec
; {fr} 'Mechanism=File' (voir définition dans <Site>\bin\wc.ini)
; {en} These settings are REQUIRED to operate with
; {en} 'Mechanism=File' (see definition in <Site>\bin\wc.ini)
; --------------------------------------------------------------
Tempfilepath=d:\Temp\dem\
; Value: full path to wConnect Temp files directory.
; MUST MATCH 'Path=' in <Site>\bin\wc.ini.
Template=wc_
; Message File Template (1st 3 letters), default is 'wc_'
; MUST MATCH 'Template=' in <Site>\bin\wc.ini.
Timerinterval=200
; Delay in milliseconds for FoxInCloud Server to poll the 'Tempfilepath='
; directory for 'request' messages from wc.dll

; --------------------------------------------------------------
; {fr} Administrateur qui sera informé par email des éventuelles
; {fr} erreurs du serveur FoxInCloud et recevra copie des éventuelles
; {fr} erreurs de l'application
; {fr} Recommandé en PRODUCTION, superflu en DÉVELOPPEMENT
; {en} Administrator who will be notified by email of possible
; {en} FoxInCloud Server errors and will be CC'd of possible
; {en} application errors
; {en} Recommanded in PRODUCTION, superfluous in DEVELOPMENT
; --------------------------------------------------------------
Admin=
; {fr} nom complet {en} full name
Adminemail=
; {fr} adresse email {en} email address
Adminsenderroremail=On
; {fr} Envoyer un email en cas d'erreur dans le Serveur ou l'application
; {en} Send an email if an error occurs in Server or application

Adminmailserver=
Mailserverlogin=
Mailserverpw=
; {fr} Serveur SMTP utilisé pour l'envoi des messages d'erreur
; {en} SMTP server used for sending error emails

; --------------------------------------------------------------
; {fr} Pour les réglages qui suivent,
; {fr} veuillez consulter la documentation wConnect :

; {en} For the following settings,
; {en} please refer to wConnect documentation:

; "Application ini file and the wwServerConfig class"
; http://www.west-wind.com/webconnection/docs/_s900r7r0l.htm
; --------------------------------------------------------------
Comreleaseurl=http://localhost/demofic/bin/wc.dll?_maintain~Release
Logtofile=On
Showrequestdata=Off
Showserverform=On
Showstatus=On
Saverequestfiles=On

Usemts=Off
Memusage=8176
Scriptmode=3
Sqlconnectstring=

[Awapp]

; ***************************************
; FOXINCLOUD APPLICATION AND SITE SECTION
; ***************************************

; ==============================
; {fr} RÉGLAGES DE DÉVELOPPEMENT
; {en} DEVELOPMENT SETTINGS
; ==============================

; ------------------------------
; {fr} Identité de l'application
; {en} Application identity
; ------------------------------

App=dem
; {fr} Code de l'application
; {fr} = Nom du cookie identifiant chaque utilisateur
; {fr} = Valeur par défaut de l'extension des URL (script maps)
; {en} Application code
; {en} = Name of the cookie identifying each user
; {en} = Default value for URL extentions (script maps)

AppName=demofic
; {fr} Nom complet de l'application
; {en} Application full name

; -----------------------------
; {fr} Chemins de l'application
; {fr} Votre application tourne toujours dans son dossier racine : vous pouvez indiquer des chemins relatifs
; {en} Application pathes
; {en} Your application always run in its root folder: you may indicate relative pathes
; -----------------------------

TempPath=.\Temp\
; {fr} Dossier des fichiers temporaires pour le serveur d'application FoxInCloud
; {fr} REQUIS: dossier où le serveur d'application FoxInCloud écrit les tables d'état pour les utilisateurs
; {en} FoxInCloud Application Server's temporary files Folder
; {en} REQUIRED: Folder where FoxInCloud Application Server writes users' state tables

ImgPath=.\Bitmaps\
; {fr} Dossier des Images
; {fr} OPTIONNEL: renseigner si l'application utilise aw.vcx!awImg.DisabledPicture et/ou des images dynamiques
; {fr} utile surtout en développement, pour la production pensez à inclure les images alternatives dans l'exe par des commandes EXTERNAL FILE dans le programme principal de votre serveur foxInCloud
; {en} Images Folder
; {en} OPTIONAL: indicate if application uses aw.vcx!awImg.DisabledPicture and/or dynamic images
; {en} mainly useful in development; for production please remind to include images into the .exe with some EXTERNAL FILE commands somewhere in your server main.prg

DataPath=.\data\
; {fr} Dossier de la Base de données et/ou des tables VFP
; {fr} OPTIONNEL : renseigner si l'application utilise les méthodes de synchronisation de données (cf. awProcess::TableGet(), TableSyncUp(), etc.)
; {fr} et/ou l'ouverture automatique d'une base de données (cf. awProcess::DBopen())
; {en} VFP Database and/or tables Folder
; {en} OPTIONAL: indicate if application uses the database synchronization methods (cf. awProcess::TableGet(), TableSyncUp(), etc.)
; {en} and/or automatic database opening (cf. awProcess::DBopen())

PrgPath=
; {fr} Dossier des ClassLibraries
; {fr} OPTIONNEL : renseigner si l'application instancie tous les formulaires d'un vcx
; {en} ClassLibraries Folder
; {en} OPTIONAL: indicate if application instantiates all forms in a .vcx

; -----
; SITE
; -----

Site=Démonstration FoxInCloud
; {fr} Nom du site utilisé dans les messages, emails, etc.
; {fr} (peut être différent du nom de l'application, par exemple selon le client)
; {en} Site name mentioned in messages, emails, etc.
; {en} (may differ from application's name, e.g. according to end client)

ScriptPathPhysical=
; {fr} Cheminphysique du dossier des scripts FoxInCloud
; {fr} standard de développement : Home(1) + 'Tools\AB\AW\Scripts\'
; {en} Physical path to FoxInCloud scripts
; {en} development standard: Home(1) + 'Tools\AB\AW\Scripts\'

ScriptPathVirtual=/awScripts/
; {fr} Chemin virtuel du dossier des scripts FoxInCloud
; {fr} valeur recommandée en développement et production : '/awScripts/'
; {en} Virtual path to FoxInCloud scripts
; {en} recommended value for development and production: '/awScripts/'

HTMLpath=.\Site\
Virtual=/demofic/
; {fr} Chemins virtuel & physique du dossier de départ pour le site de l'application
; {fr} FoxInCloud y écrit les fichiers .html, .js et .css des écrans dans ce dossier
; {fr} Vous devez définir un document par défaut sur ce répertoire virtuel (FoxInCloud y ramène l'utilisateur s'il s'est déconnecté)
; {en} Virtual & physical path of site's root directory
; {en} FoxInCloud writes .html, .js and .css files produced from forms into this directory
; {en} You need to define a default document on this virtual directory (FoxInCloud bringS user back there after disconnection)

ImagePathPhysical=.\Site\Images\
ImagePathVirtual=/demofic/Images/
; {fr} Chemins virtuel & physique du dossier des Images pour le site de l'application
; {fr} FoxInCloud y écrit les images générées à partir des images de l'application dans ce dossier
; {en} Virtual & physical path of site's Images directory
; {en} FoxInCloud writes image files produced from forms' images into this directory

TempPathPhysical=.\Site\Temp\
TempPathVirtual=/demofic/Temp/
; {fr} Chemins virtuel & physique du dossier temporaire FoxInCloud
; {fr} FoxInCloud y écrit les fichiers .xml des grilles, les copies des fichiers temporaires produits par l'application (images, pdf, etc.)
; {en} Virtual & physical path for FoxInCloud temporary files
; {en} FoxInCloud writes into this folder: Grids' .xml files, copies of temporary files produced by application (images, pdf, etc.)


; ============================
; {fr} RÉGLAGES DE PRODUCTION
; {en} PRODUCTION SETTINGS
; ============================

; --------------------------------------
; {fr} Administrateur de l'application
; {fr} L'administrateur de l'application gère ses aspects techniques ; il ou elle reçoit les emails si une erreur survient dans l'application
; {en} Application Administrator
; {en} Application Administrator manages technical issues; he or she receives emails whenever an error occurs in application
; --------------------------------------

AppAdmin=FoxInCloud App Admin
; {fr} Nom de l'administrateur de l'application
; {en} Application administrator name

AppAdminEmail=appAdmin@yourDomain.com
; {fr} Adresse courriel de l'administrateur de l'application
; {en} Application administrator email address

; --------------------------------------------
; {fr} Administrateur des licences FoxInCloud
; {fr} L'administrateur des licences FoxInCloud accède au tableau de bord des Sessions Actives Concurrent (CAS)
; {en} FoxInCloud License Administrator
; {en} FoxInCloud license administrator has access to the Concurrent Active Sessions (CAS) online transactions
; --------------------------------------------

LicenseAdmin=FiC License Administrator
; {fr} Nom de l'administrateur des licences FoxInCloud
; {en} FoxInCloud license administrator

LicenseAdminEmail=licenseAdmin@yourDomain.com
; {fr} Adresse email de l'administrateur des licences FoxInCloud
; {en} FoxInCloud license administrator email

LicenseAdminPW=FiC License Administrator Password
; {fr} Mot de passe de l'administrateur des licences FoxInCloud
; {en} FoxInCloud license administrator password

; -----------------------------
; {fr} Identifiants FoxInCloud
; {en} FoxInCloud Identifiers
; -----------------------------

awCustomerID=
; {fr} Identifiant client communiqué par FoxInCloud
; {en} FoxInCloud-supplied customer identifier

awBasePackID=
; {fr} Identifiant de 'BasePack' communiqué par FoxInCloud
; {fr} Rappel: selon les termes de la licence FoxInCloud, un BasePack ne peut être utilisé que sur un seul serveur Windows
; {en} FoxInCloud-supplied 'BasePack' identifier
; {en} Reminder: according to FoxInCloud license, a BasePack can only be used on a single Windows server

; ------------------------------------------------------------
; {fr} Proxy pour les requêtes HTTP sortantes (le cas échéant)
; {fr} Requis si votre serveur de production doit passer par un proxy pour émettre des requêtes HTTP
; {en} Proxy for outgoing HTTP requests (if any)
; {en} Required if your production server needs to go through a proxy to issue HTTP requests
; ------------------------------------------------------------

HTTPproxyName=

; {fr} Le cas échéant, nom ou adresse IP du proxy autorisant les requêtes HTTP sortantes
; {fr} Selon les termes de la licence FoxInCloud, votre serveur Web de production DOIT accepter les requêtes HTTP sortantes vers le serveur 'foxincloud.com'
; {en} Proxy for outgoing HTTP requests in production environment (if any)
; {en} According to FoxInCloud licensing terms, your production Web server MUST accept outgoing HTTP requests to 'foxincloud.com' server

HTTPproxyUserName=

; {fr} Le cas échéant, nom d'utilisateur pour la connexion au Proxy autorisant les requêtes HTTP sortantes
; {en} Proxy connection User Name for outgoing HTTP requests in production environment (if any)

HTTPproxyPassword=
; {fr} Le cas échéant, mot de passe pour la connexion au Proxy autorisant les requêtes HTTP sortantes
; {en} Proxy connection PassWord for outgoing HTTP requests in production environment (if any)

; ------------------
; {fr} Divers
; {en} Miscellaneous
; ------------------

SessionTimeOutMin=30
; {fr} Minutes pour la déconnexion / fermeture de la session utilisateur
; {en} User disconnect / session expiration timeout in minutes

UserStateWeeks=4
; {fr} Durée de conservation des tables d'état utilisateur du serveur d'application FoxInCloud
; {fr} Nombre de semaines d'historique des tables d'état utilisateur
; {fr} Pendant cette durée, les utilisateurs retrouvent les écrans dans l'état où l'a laissé leur dernière requête
; {fr} Réduire pour préserver l'espace disque !
; {en} FoxInCloud Application Server's users state tables conservation delay
; {en} Number of weeks for keeping history of user states tables
; {en} During this delay, users will retrieve forms in the state where their last request left it
; {en} Reduce to preserve disk space!

GridRenderClass=abDHTMLAWGrid
; {fr} Pour rétro compatibilité ; peut être supprimé sans préavis
; {fr} For back compatibility; may be removed without prior notice


[Wwmaint]
Htmlpagepath=
Virtualpath=/xxx/

Here is example of the xxxMain.prg. It's name is demtest.prg and it is the main prg for the WEB


<<pre class="codeblock">
>
LPARAMETERS ;
tuFormsLaunch,; && [xxxServer.cFormsLaunchAtStartup] {fr} Formulaire(s) à lancer, .T.: tous -- {en} Forms to launch at startup, .T. all
tlHTMLcomment && [.F.] {fr} Commenter le HTML produit -- {en} Comment generated HTML

&& {fr} tuFormsLaunch = .T. génère la feuille de styles globale 'awDefaultAll.css'
&& {en} tuFormsLaunch = .T. generates global styles sheet 'awDefaultAll.css'

IF Pcount() = 0
CLEAR ALL && {fr} utile en développement -- {en} useful during development
LOCAL tuFormsLaunch, tlHTMLcomment && {fr} CLEAR ALL a détruit ces variables -- {en} CLEAR ALL released these variables
ENDIF

AW() && {fr} Charge les ressources FoxInCloud -- {en} Loads FoxInCloud resources

SET PATH TO Addbs(JustPath(Sys(16))) + 'Progs\' ADDITIVE
&& {fr} Remplacer 'Progs\' par le sous-dossier où vous rangez habituellement vos .prgs, où 'xxxEnv.prg' et 'xxxServer.prg' doivent se trouver
&& {en} Replace 'Progs\' with the sub-folder in which you usually store your .prgs, where 'xxxEnv.prg' and 'xxxServer.prg' should reside

SET PROCEDURE TO demServer, demSets ADDITIVE && SET PROCEDURE TO xxxServer, xxxSets ADDITIVE
&& {fr} ajoute automatiquement ces prg à votre projet
&& {en} both .prgs are automatically included to your project

awServerStart('demServerTest', m.tuFormsLaunch, m.tlHTMLcomment) &&awServerStart('xxxServerTest', m.tuFormsLaunch, m.tlHTMLcomment)
&& {fr} Démarre xxxServerTest en mode Fichier
&& {en} Starts xxxServerTest in file mode

* ===========================================
DEFINE CLASS demServerTest AS demServer OF demServer.prg OLEPUBLIC && DEFINE CLASS xxxServerTest AS xxxServer OF xxxServer.prg OLEPUBLIC
&& {fr} OLEPUBLIC pour le fonctionnement en mode COM (production)
&& {en} OLEPUBLIC for COM operation (production)
* ===========================================

&& ------------------------------------------------
&& {fr} Initialisation du serveur (voir les réglages dans 'xxxServerTest.ini')
&& {en} Server Initialization (see settings in 'xxxServerTest.ini')
&& ------------------------------------------------

cawServerIni = 'demTest.ini' && cawServerIni = 'xxxServerTest.ini'

&& {fr} OBLIGATOIRE
&& {fr} Fichier .ini pour awServerConfig
&& {fr} Ce fichier doit être dans le MÊME DOSSIER que le projet et que le présent programme

&& {en} REQUIRED
&& {en} .ini file for awServerConfig
&& {en} This file must be in the SAME FOLDER as the project and this program

* ===========================================
ENDDEFINE
* ===========================================
<</div>>

Here is the xxxServer.prg, name demserver.prg witch define class from awserver baseclass..
This is the code "heart" of the VFP application to make it usable by FIC WEB


<<pre class="codeblock">
>
* =====================================================================================================
DEFINE CLASS demServer AS awServer OF awServer.prg &&DEFINE CLASS xxxServer AS awServer OF awServer.prg
* =====================================================================================================

&& ============================================
&& {fr} RÉGLAGES COURANTS || {en} BASE SETTINGS
&& ============================================

&& ------------------------------------------------
&& {fr} Les 3 réglages qui suivent permettent de définir le module de code
&& {fr} qui régle l'environnement de votre application
&& {fr} Ce code peut être une classe dans un .prg ou un .vcx, une procédure dans un .prg ou un .prg
&& {fr} Idéalement ce code est partagé avec la version LAN pour assurer un environnement d'exécution exactement identique
&& {fr} Ce module peut faire tous les SETs nécessaires sans limitation
&& {fr} FoxInCloud rectifiera le cas échéant les SET incompatibles

&& {en} The 3 following settings allow you to define the code module which SETs you application's execution environment
&& {en} This code may be either a class in a .prg or a .vcx, a standalone procedure in a .prg or a .prg
&& {en} Ideally this code is shared with the LAN version to ensure a identical execution environement in both modes
&& {en} You may SET almost anything; if necessary, FoxInCloud will save/restore conflicting settings
&& ------------------------------------------------

cAppSetsLib = 'demSets.prg' &&'xxxSets.prg'
&& {fr} OBLIGATOIRE
&& {fr} Chemin de la ressource (.prg ou .vcx) où se trouve la procédure ou classe d'environnement de l'application
&& {en} REQUIRED
&& {en} Path of the library (.prg or .vcx) where the class or procedure SETting application's environment resides

cAppSets = ''
&& {fr} Nom de la classe ou procédure d'environnement dans <this.cAppSetsLib>
&& {fr} Si vide, <this.cAppSetsLib>.prg est exécutée
&& {en} Name of the class or procedure located in <this.cAppSetsLib>
&& {en} If Empty(), <this.cAppSetsLib>.prg is executed

lAppSetsClass = .F.
&& {fr} <this.cAppSets> est une classe définie dans <this.cAppSetsLib>.prg
&& {en} <this.cAppSets> is a class defined in <this.cAppSetsLib>.prg

&& ------------------------------------------------
&& {fr} Ici vous allez décider comment générer les pages HTML des formulaires de haut niveau (top level); vous pouvez :
&& {fr} - soit les générer avec une sous-classe de 'awProcess' COMME INDIQUÉ DANS L'EXEMPLE CI-APRÈS
&& {fr} - soit les produire avec ASP, ASPX, PHP, etc. en incluant à votre page le code HTML produit par FoxInCloud (directive server-side include)
&& {en} Here you will decide how your top-level forms will be included into an HTML page; you may either:
&& {en} - generate them with a sub-class of 'awProcess' AS ILLUSTRATED IN THE EXAMPLE BELOW
&& {en} - produce them with ASP, ASPX, PHP, etc. by INCLUDing HTML code produced by FoxInCloud with a server-side Include Directive
&& ------------------------------------------------

cawProcessClass = 'demProcess' && awProcess
&& {fr} Sous-classez si vous voulez construire les pages HTML avec wConnect
&& {fr} Cette solution est préférable car elle permet d'instancier les formulaires dynamiquement et de leur passer des paramètres
&& {fr} Pour construire une page standard d'un formulaire, utilisez la méthode awProcess::wFormStandardPage(<formulaire>[, <paramètre1>[, <paramètre2>[, ...]]])
&& {fr} Pour un exemple d'implémentation, voir la classe 'xxxProcess' ci-après

&& {en} Sub-class if you want to build HTML pages with wConnect
&& {en} This method is preferrable as FoxInCloud instantiates forms dynamically with whatever parameter passed.
&& {en} To build a standard form page, just call awProcess::wFormStandardPage(<form>[, <parameter1>[, <parameter2>[, ...]]])
&& {en} For a sample implementation, see 'xxxProcess' class below

cFormsLaunchAtStartup = ''
&& {fr} Écrans de premier niveau à instancier au démarrage du serveur
&& {fr} Renseignez cette propriété si vous utilisez ASP, ASPX, PHP, ou autre pour construire vos pages HTML,
&& {fr} au lieu d'une sous-classe de 'awProcess' (this.cawProcessClass)
&& {fr} Si vous utilisez une sous-classe de 'awProcess' (recommandé, voir ci-dessus), cette déclaration est inutile
&& {fr} car vous pouvez instancier les formulaires dynamiquement avec une méthode awProcess::wForm*()
&& {fr} Liste séparée par des virgules : *.scx, class, *.vcx
&& {fr} *.vcx : toutes les classes Form contenues dans le .vcx sont instanciées
&& {fr} > dans ce cas awAppConfig::cPrgPath est REQUIS
&& {fr} Voir un exemple d'implémentation en ASP : \Site\Form.asp

&& {en} Top-Level form(s) to be instantiated at server startup
&& {en} Declare Top-Level forms if you use ASP, ASPX, PHP or any mean to build your HTML pages,
&& {en} rather than a sub-class of 'awProcess' (this.cawProcessClass)
&& {en} If you use a sub-class of 'awProcess' (recommended as explained above),
&& {en} you can instantiate forms just when needed by calling a awProcess::wForm*() method
&& {en} Coma-separated list: *.scx, class, *.vcx
&& {en} *.vcx: all form classes contained in the class library are instantiated;
&& {en} > in this case, awAppConfig::cPrgPath is REQUIRED
&& {en} See a sample ASP implementation: \Site\Form.asp

&& ------------------------------------------------
&& {fr} Utilisateur anonyme pour l'application
&& {en} Anonymous user for application
&& ------------------------------------------------

wUserAnonymous = .NULL.
&& {fr} Identifiant d'utilisateur signifiant 'utilisateur anonyme' pour votre application
&& {en} User ID meaning 'anonymous user' for your application

wUserDemo = .NULL.
&& {fr} Identifiant d'utilisateur de démo; cet utilisateur peut avoir plusieurs sessions ouvertes simultanément
&& {en} Demo User ID: this user my have several sessions opened simultaneously

&& ==============================================
&& {fr} RÉGLAGES EXPERTS || {en} EXPERT SETTINGS
&& ==============================================

cawAppHostClass = 'awAppHost' && awAppHost OF awServer.prg

&& {fr} Classe hôte de l'application FoxInCloud
&& {fr} Sous-classez si vous voulez implémenter une des méthodes crochets :
&& {fr} .Init_App_Ante() : avant que l'application soit initialisée
&& {fr} .Init_App_Post() : après que l'application est initialisée
&& {fr} .Destroy_App_Ante(): avant que l'application soit déchargée
&& {fr} .Destroy_App_Post(): après que l'application est déchargée

&& {en} FoxInCloud Application Host class
&& {en} Sub-class if you want to implement some hook method:
&& {en} .Init_App_Ante(): before Application is initialised
&& {en} .Init_App_Post(): after Application is initialised
&& {en} .Destroy_App_Ante(): before Application is destroyed
&& {en} .Destroy_App_Post(): after Application is destroyed

cawAppConfigClass = 'awAppConfig' && AS awAppConfig OF awServer.prg
&& {fr} Classe de configuration de l'application FoxInCloud
&& {fr} Sous-classez si vous avez besoin d'autres paramètres configurables en ligne
&& {en} FoxInCloud application configuration class
&& {en} sub-class if you need extra parameters that you can modify on line

cawHTMLGenClass = 'awHTMLgen' && AS awHTMLgen OF awHTML.prg
&& {fr} Classe de génération de HTML FoxInCloud
&& {fr} Utilisez une sous-classe de awHTMLgen si vous avez des besoins de génération HTML que vous ne pouvez traiter avec les méthodes .wcHTMLgen() des objets
&& {en} FoxInCloud HTML generation class
&& {en} Use this 'awHTMLgen' subclass if you have specific HTML generation needs that objects' .wcHTMLgen() method cannot meet

cawAJAXClass = 'awAJAX' && AS awAJAX OF awServer.prg
&& {fr} Classe AJAX FoxInCloud
&& {fr} Sous-classez si vous avez des requêtes AJAX particulières
&& {fr} Dans ce cas, vous pourrez aussi avoir besoin d'ajouter des méthodes et/ou des handlers d'événement à FoxInCloud.js
&& {en} FoxInCloud AJAX class
&& {en} Subclass if you have specific AJAX requests
&& {en} In this cas you may need to extend FoxInCloud.js with specific methods and/or handler events

cawSessionClass = 'awSession' && AS awSession OF awServer.prg
&& {fr} Classe Session (sous-classe de 'awSession')
&& {fr} Sous-classez si vous souhaitez ajouter des champs ou des indexes à la table de Session standard 'wwSession'
&& {en} Session class ('awSession' subclass)
&& {en} Sub-class if you need some extra fields or indexes in session standard table 'wwSession'

cawProcessSetsClass = 'awProcessSets' && AS awProcessSets OF awServer.prg
&& {fr} Classe d'environnement (SETs) des REQUÊTES (process)
&& {fr} Définissez cette classe si vous traitez les requêtes 'conventionnelles' avec une sous-classe d'awProcess qui requiert des SETs particuliers
&& {en} Request environment SETter class
&& {en} Define this class if you process 'conventional' requests with an awProcess sub-class and you need specific SETs

cScriptMapExts = 'php,pl,vfp,fic,zip'
&& {fr} Extensions de requête routées vers this.cawProcessClass
&& {fr} Ces extensions doivent être 'mappées' dans le serveur Web sur ...\bin\wc.dll
&& {en} URL extensions processed by this.cawProcessClass
&& {en} These extensions must be 'mapped' to ...\bin\wc.dll in the web server

wlUserTemp = .F.
&& {fr} Votre application gère l'emprunt d'identité
&& {en} Your Application manages user impersonation

cLangUser = 'fr' && [cLangUser()]
&& {fr} Langue préférée du développeur (abDev.prg!cLangUser() par défaut)
&& {en} Developer's preferred language (defaults to abDev.prg!cLangUser())

* ===========================================
ENDDEFINE && class demServer xxxServer


* ==========================================================================================================


DEFINE CLASS demProcess AS awProcess OF awServer.prg && DEFINE CLASS xxxProcess AS awProcess OF awServer.prg
* ==========================================================================================================

&& {fr} LES MÉTHODES QUI SUIVENT SONT JUSTE DES EXEMPLES
&& {en} THE FOLLOWING METHODS ARE JUST EXAMPLES

&& {fr} * 'xxx' est l'extension choisie pour votre application (cf. xxxServer.cScriptMapExts)
&& {en} * 'xxx' is the extension chosen for application (cf. xxxServer.cScriptMapExts)

* ------------------------------------------------------------
PROTECTED FUNCTION wFormHTML_cMenu && définition du menu d'après le tableau Excel

LOCAL lcResult

TEXT TO lcResult NOSHOW FLAGS 1 PRETEXT 7
Identification iif(wlUserAnonymous(), 'Login', 'Disconnect') identification.scx .T. iif(wlUserAnonymous(), 'identification', 'deconnexion')
Example Form Example Form Town !wlUserAnonymous() wlUserAnonymous() ville.scx ville

? ? About.. apropos.scx apropos
ENDTEXT

RETURN m.lcResult
ENDPROC

* ------------------------------------------------------------
PROTECTED FUNCTION wFormHTML_cHeader_cMenu && Menu
LOCAL lcTitle
m.lcTitle=UPPER(THIS.oConfig.cAppName)+" - User : "+ICASE(ISNULL(_SCREEN._code_ope),'Anonymous',_SCREEN._code_ope=-1,'Demofic','N°'+ALLTRIM(STR(_screen._code_ope)))

RETURN DODEFAULT() + TEXTMERGE([<p></p>])
ENDPROC

* ------------------------------------------------------------
PROTECTED FUNCTION wFormHTML_cFooter && Pied du formulaire

RETURN ;
[<p style="font:bold 18px 'Copperplate Gothic Bold',calibri,cambria,sans-serif; width:500px; margin-left:20px; color:#808080;" >];
+ [<span style="font-size:22px; color:#F18E29;">LLS</span> Conseil];
+ [  ::  ];
+ [<a href="http://www.foxincloud.com/" target="_blank" title="FoxInCloud" style="color:#808080;">];
+ [<img src="images/foxincloud-icon.png" style="vertical-align:bottom;" alt="Powered by FoxInCloud" />];
+ [ <span style="color:red; ">Fox</span>InCloud];
+ [</a>];
+ [</p>]
ENDPROC

* ------------------
PROTECTED PROCEDURE wUserSet
LPARAMETERS ;
twUser,; && Identifiant utilisateur && /!\ type variable
tlTemp && [.F.] Identité d'emprunt

_SCREEN.ADDPROPERTY('_code_ope', m.twUser)

DODEFAULT(m.twUser, m.tlTemp) && {fr} Toujours conserver cette instruction ! - {en} Always keep this instruction!
ENDPROC

* ------------------
PROTECTED FUNCTION wUserGet
LPARAMETERS tlTemp && [.F.] Retourner l'identité d'emprunt

RETURN _SCREEN._code_ope
ENDPROC

PROCEDURE Deconnexion
THIS.wUserSet(m.this.wUserAnonymous)
=ferme_session()
RETURN THIS.INDEX()
ENDPROC

&& Déclaration de tous les formulaires utilisés par le menu de l'application
&& cela peut être repris depuis le fichier dem.xls. xxx.xls
&& ce fichier excel crée le code de chaque appel de formulaire dès son paramétrage dans le fichier
&& le formulaire 'index' est utilisé comme page d'accueil naturelle du site. Pour cela
&& dans le gestionnaire IIS, il faut vérifier et indiquer si nécessaire que le site a une page 'index.htm'
&& cette page 'index.htm' qui doit être physiquement présente dans le dossier du site (fichier index.htm ayant un contenu vide)
&& dans le gestionnaire IIS, il faut rediriger de façon permanente cette page index.htm vers l'adresse xxx\index.xxx. ex: demofic\index.dem
&& demofic étant le nom du site dans le serveur WEB IIS.
PROCEDURE INDEX && Affiche une page avec le formulaire d'accueil 'index'
RETURN THIS.wFormStandardPage('index.scx')
EXTERNAL FORM INDEX.scx
ENDPROC

PROCEDURE DEFAULT && Affiche une page avec le formulaire d'accueil 'index'
RETURN THIS.Index()
ENDPROC

PROCEDURE identification && Affiche une page avec le formulaire 'identification'
RETURN THIS.wFormStandardPage('identification.scx')
EXTERNAL FORM identification.scx
ENDPROC

PROCEDURE ville && Affiche une page avec le formulaire 'ville'
RETURN THIS.wFormStandardPage('ville.scx')
EXTERNAL FORM ville.scx
EXTERNAL FORM dialogue_impression.scx
ENDPROC

PROCEDURE apropos&& Affiche une page avec le formulaire 'apropos'
RETURN THIS.wFormStandardPage('apropos.scx')
EXTERNAL FORM apropos.scx
ENDPROC

*!* * -------------------------------------------
*!* PROCEDURE Form1 && http://localhost/xxx/Form1.xxx * or http://localhost/xxx/bin/wc.dll?FoxInCloud~Form1

*!* RETURN this.wFormStandardPage('Form1.scx')

*!* && {fr} 'Form1.scx' est instancié sans paramètre
*!* && {en} 'Form1.scx' is instantiated without parameter

*!* * -------------------------------------------
*!* PROCEDURE Form2 && http://localhost/xxx/Form2.xxx * or http://localhost/xxx/bin/wc.dll?FoxInCloud~Form2

*!* RETURN this.wFormStandardPage('Form2')

&& {fr} 'Form2' est une classe dans une library définie par
&& {fr} xxxServer.cAppSetsLib or xxxServer.cAppSets

&& {en} 'Form2' is a class defined in some library SET by
&& {en} xxxServer.cAppSetsLib or xxxServer.cAppSets

*!* * -------------------------------------------
*!* PROCEDURE Form3 && http://localhost/xxx/Form3.xxx * or http://localhost/xxx/bin/wc.dll?FoxInCloud~Form3

*!* RETURN this.wFormStandardPage('Form3.scx', 1, .F.)

*!* && {fr} FoxInCloud passe deux paramètres constants à Form3.Init()
*!* && {en} FoxInCloud passes 2 pre-defined parameters to Form3.Init()

*!* * -------------------------------------------
*!* PROCEDURE Form4 && http://localhost/xxx/Form4.xxx?parm1=value1&parm2=value2 * or http://localhost/xxx/bin/wc.dll?FoxInCloud~Form4

*!* LOCAL lcParm1 AS String, lnParm2 AS Integer

*!* lcParm1 = Request.QueryString('parm1')
*!* lnParm2 = Int(Val(Request.QueryString('parm2')))
*!*
*!* RETURN this.wFormStandardPage('Form4.scx', m.lcParm1, m.lnParm2)

&& {fr} FoxInCloud passe deux paramètres communiqués dans l'URL de la requête
&& {en} FoxInCloud passes 2 parameters indicated within URL Query String

* ========================================
ENDDEFINE && CLASS demProcess &&xxxProcess
* ========================================

<</div>>

The next file is the for the settings of your application. It's name is demSet.prg. You can see that i chose "dem" for the "xxx" caracters to be replace.

<<pre class="codeblock">
>
&& ENGLISH
&& {en} This is a sample program for SETting application's environment
&& {en} Ideally this module is shared by application's LAN and WEB versions
&& {en} You may use either of these three implementations:

&& {en} Implementation .cAppSetsLib .cAppSets .lAppSetsClass
&& {en} --------------------- ------------- ---------- ---------------
&& {en} 1-Execute this program 'AppSets.prg' '' .F.
&& {en} 2-Execute 'AppSets' 'AppSets.prg' 'AppSets' .F.
&& {en} 3-Instantiate 'AppSets' 'AppSets.prg' 'AppSets' .T.

&& {en} Notes:
&& {en} - In Web mode, as usually in LAN mode, when this module executes,
&& {en} Curdir() is main program's folder: ..\ in this case
&& {en} - As FoxInCloud executes application in a Session class,
&& {en} DataSession-dependant SETtings don't need to be restored

&& FRANÇAIS
&& {fr} Ceci est un exemple de programme qui règle l'environnement de l'application
&& {fr} Idéalement ce module est partagé entre le mode LAN et WEB
&& {fr} Vous pouvez utiliser une de ces trois implémentations:

&& {fr} Implémentation .cAppSetsLib .cAppSets .lAppSetsClass
&& {fr} --------------------- ------------- ---------- ---------------
&& {fr} 1-Exécuter ce programme 'AppSets.prg' '' .F.
&& {fr} 2-Exécuter 'AppSets()' 'AppSets.prg' 'AppSets' .F.
&& {fr} 3-Instancier 'AppSets' 'AppSets.prg' 'AppSets' .T.

&& {fr} Notes :
&& {fr} - En mode Web, par analogie avec le mode LAN, quand ce module s'exécute,
&& {fr} Curdir() est le dossier du programme principal : ..\ dans ce cas
&& {fr} - FoxInCloud exécute l'application dans une classe session ;
&& {fr} Les SETs dépendant de la session de données n'ont pas besoin d'être restaurés

* ==========================================================
*!* Code ajouté manuellement pour initialiser l'application
* ==========================================================

* Chemin par défaut pour une utilisation de l'application directement par l'IDE VFP
SET PATH TO '.\forms,.\report,.\libs,.\menu,.\bitmaps,.\data,.\progs\' ADDITIVE

SET PROCEDURE TO utile ADDITIVE
SET CLASSLIB TO dem ADDITIVE
SET CLASSLIB TO mesclasses ADDITIVE

* Ouverture des librairies
EXTERNAL LIBRARY foxtools.fll
STORE "foxtools.fll" TO librairie
SET LIBRARY TO (librairie) ADDITIVE

EXTERNAL LIBRARY xfrxlib.fll
STORE "xfrxlib.fll" TO librairie
SET LIBRARY TO (librairie) ADDITIVE

* Déclaration de DLL externes
DECLARE INTEGER SetDefaultPrinter IN winspool.drv STRING pszPrinter
DECLARE INTEGER GetActiveWindow IN win32api
DECLARE INTEGER FindWindow IN WIN32API STRING lcNullString, STRING lcName
DECLARE INTEGER ShellExecute IN shell32.DLL ;
INTEGER hndWin, ;
STRING cAction, ;
STRING cFileName, ;
STRING cParams, ;
STRING cDir, ;
INTEGER nShowWin
DECLARE INTEGER GetPrivateProfileString IN Win32API ;
STRING,STRING,STRING,STRING,INTEGER,STRING
DECLARE INTEGER WritePrivateProfileString IN Win32API ;
STRING,STRING,STRING,STRING
DECLARE INTEGER GetProfileString IN Win32API ;
STRING,STRING,STRING,STRING,INTEGER
DECLARE INTEGER WriteProfileString IN Win32API ;
STRING,STRING,STRING

SET SAFETY OFF && Permet aux requêtes de fermer et ouvrir les bases sans avertissement
SET ESCAPE OFF
SET EXCLUSIVE OFF && Permet l'utilisation des tables en réseau
SET MULTILOCK ON
SET REPROCESS TO AUTOMATIC
SET EXACT OFF
SET ANSI ON
SET DATE FRENCH
SET HOURS TO 24

* Opérateur anonyme par defaut
_SCREEN.ADDPROPERTY("_code_ope", .NULL.)

* Ouvrir la base de donnée
=open_dbc('datavfp.dbc')

ON ERROR DO traitErr WITH ERROR(), MESSAGE(), PROGRAM(0)
<</div>>

An finally my old main.prg name demofic.prg is now a little bit modified to run my application in LAN mode. In Web Mode the main is demTest.prg

<<pre class="codeblock">
>
* EXEMPLE D'APPLICATION VFP9.0 FONCTIONNANT EN LAN ET EN WEB avec FoxInCloud
* Cet exemple montre un fonctionnement avec une gestion des formulaires par un menu utilisateur

CLEAR ALL

=SYS(3050, 1, 64 * 1024 * 1024)
=SYS(3050, 2, 16 * 1024 * 1024)

SET PATH TO ADDBS(HOME(1))+'Tools\AB\' ADDITIVE && Ajouté par Assistant d'Adaptation FoxInCloud (prod) le 12/09/2011 14:23:50
AB() && loads ab modules

* Chemin de l'application (racine du projet, calculée à partir du répertoire de lancement du programme principal dit le 'main')
SET DEFAULT TO ADDBS(JUSTPATH(SYS(16,0)))+'..\'

* Initialisation de l'environnement (commun LAN-Web)
DO '.\progs\demSets.prg'


* =================================================
* Ici commence l'initialisation spécifique au LAN
* Here starts LAN-Specific initialization
* =================================================

* Identification opérateur
=lire_session()

LOCAL lcCaption, lcIcon, lnWinState

lcCaption = _SCREEN.CAPTION
lcIcon = _SCREEN.ICON
lnWinState = _SCREEN.WINDOWSTATE

_SCREEN.CAPTION = "LANCEMENT DE DEMOFIC"
_SCREEN.ICON = ".\bitmaps\fic.ico"
_SCREEN.WINDOWSTATE = 2


ON SHUTDOWN CLEAR EVENTS
READ EVENTS

_SCREEN.CAPTION = m.lcCaption
_SCREEN.ICON = m.lcIcon
_SCREEN.WINDOWSTATE = m.lnWinState

* Sortie de l'application
=raz_prg()
<</div>>

I can send you this little application DemoFic by email..

Best regards
GLS


--EiggerFox

Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework

$
0
0
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
FoxInCloud
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
06/06/2012
01:18:56 AM
3IQ02TN5U Show this entire thread in new window
Gratar Image based on email address
From:
LLS
To:
Attachments:
None
This is the most difficult to understand ..

We must make WConnect visible and usable by IIS, we must to the DLL WC WEB application to provide in its INI file directories used, and we must set the PRG used by FIC to make hour application VFP adapted by FIC used in WEB ..

Once a first migrated application in localhost and functional, the second will be more easily made ​​operational, the third that will be all good .. It is alway the same thing to do..

while the rest is pure VFP so carefree ..

Best regards

Re: Our progress meter tool

$
0
0
Re: Our progress meter tool
FoxInCloud
Re: Our progress meter tool
06/06/2012
05:48:56 AM
3IQ0CGRKO Show this entire thread in new window
Gratar Image based on email address
From:
Tuvia Vinitsky
To:
Attachments:
None
If you look at the picture, you will see the look we are going for.

In the code I posted is a javascript timer window.setTimeout. That calls a one time timer. Then in the code that runs, after we do what we want, we set it again. There really is no javascript timer per se, but by resetting the setTimeout, we emulate one. Maybe I will setup a demo on our servers later today, just a form with some buttons and progress bars.


If anyone is curious how we did it, we rolled a very nice progress meter of our own with no need for sending off asynchronous events. Here is what we did:

1. When a VFP loop wants to start a progress meter (PM for short), it does two things:
a. it writes with strtofile a small text file with a "1" in it and saves it under the user or session id.
b. calls the PM form, which looks like this initially:


Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework

$
0
0
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
FoxInCloud
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
06/06/2012
05:51:27 AM
3IQ0CK01O Show this entire thread in new window
Gratar Image based on email address
From:
Tuvia Vinitsky
To:
Attachments:
None
I see the problem. You relied to a message I had started and deleted. Not sure how that happened. In a different thread I posted all the code.


Hi Experts,

I want my VPF app on the cloud.

I follow all instructions on the website(www.FoxInCloud.Com). I. Adaptation Assistant (FAA) 2. Adapt 3. Publish.

My IIS and Application Server is also running (FoxinCloud Trial Version). http:\\xxx\default.htm

We are planning to buy the License FoxInCloud and West-Wind Web Connect after we can test and run our Local App at least on the Localhost.

Anybody could help me please?


How to change the default.htm to my MAINMENU.PRG instead?


Thank you.


Regards,
Reggie

Re: progress meter

$
0
0
Re: progress meter
FoxInCloud
Re: progress meter
06/06/2012
05:55:37 AM
3IQ0CPCGS Show this entire thread in new window
Gratar Image based on email address
From:
Tuvia Vinitsky
To:
Attachments:
None
I understand that. I see from my message it seems like I was asking for an enhancement; I was really more saying "sigh, oh the way things work in this crazy web world". But now that you bring it up, why can't a session have its own timeout? I assume it is because wc.dll itself does not see sessions, it sees requests, and it woul add a complete new layer. Correct?

BTW, it would help if the timeouts for WC and FiC could all be set dynamically. Then a long process could change the timeout and then set it back again.

You can't do that because a change affects all users and all requests. If you have a few people at all times accessing one of the functions that reset the timeout then everything is affected and probably never resets.

The Web is different than desktop - plain and simple. You can't make things work exactly the same way. All you can do is try to abstract the Web functionality to mimic desktop functionality which is in some cases very difficult to do. Especially when you're talking about VFP which is a purely procedural non-async tool which doesn't fit well into the way you do asynchronous things like JavaScript callbacks.

+++ Rick ---

I understand all that; I teach people how to use FiC and consult in projects with it.

1. Users are used to desktop apps. It is going to be a long time before they are re-trained.
2. I am also referring to MY ease of use. I do not want to be sending lots of threads off to an asyncrhonous handler. Lots of rewriting!

This progress bar thing is a big deal to users and developers. It also happend to address the one issue outstanding conceptually with FoxInCloud - the need for real time communication between the we display and the code running in VFP.

BTW, it would help if the timeouts for WC and FiC could all be set dynamically. Then a long process could change the timeout and then set it back again.

As long as I am on the topic, a pet peeve of mine is that all this talk of browsers and web ignores one big thing: there are very, very few business applications that run on a stateless web system. Most of what people are calling "applications" are juiced up e-commerce sites or small apps. Java is not really a web app, it is just that Java VM runs in a browser.


Hi Tuvia..

My English is poor ..
Thank you to the translator "Google" ..

I'll try to answer your question.
Today there are only two ways to protect your applications and customers:

1) Be extended, with FIC decade life of your VFP applications without rewriting code VFP important
2) Either completely rewrite all your applications in a development environment like the current "Microsoft .NET / Visual Studio" or "Servoy"

Other solutions patterned after the VFP code can not yet transform your applications in VFP productive applications for your customers. They are still in development tools Beta version (ex "Lianja" i test at the moment) that despite the best will in the world will be hard to be operational until at least 2014 ..

Currently there is no new development tools hundred percent compatible with VFP ..

The only solution immediately operational and productive to sustain our applications, it's all WConnect (Rick) + AJAX + Javascript + HTML5 + F.I.C (THN) + VFP.

One has to do and prepare clients to understand it .. then accept or die slowly.

I know this subject has been done to death, but for me, with FiC, this has gotten a little ridiculous the lengths to which I must go to provide a simple progress bar. Now before everyone piles on about the web, and stateless, etc., I know all that. But the USERS, the ones paying the bill, do not care about that. Period. They want what they always had on the desktop:


instantiate thermo class
loop
process A
Process B
update thermo display
endloop

I admit to being quite annoyed previosly when the idea that processes take a while, and that users might sit there for them, was considered hey, what an idea. Besides the massive rewrites involved, it is usual, customary, and required for users to sit there until a process is done. With reports we can get away with dumping the process off, but not with financial transactions of mega-importance.

I KNOW I can dump them process and check progress with a timer -- although the ajax and prorotype timers have some quirks with FiC, we could work around that. But that is not an answer. I can open all kinds of beautiful modal progress windows, but that is not a answer.


I am not up for rewriting over 2000 forms and 1500 classes.

It is an absolute requirement that within one method or block of code there be a way to send immediately a message to update some screen appearance This is so basic I cannot believe how much time I spent arguing about it.

Webconnect docs seem to have a class to manage this, but it requires wc 5.

This is the biggest thing stopping my enterprise apps. I have lost clients because, with FiC, I cannot easily accomplish this most basic of VFP tasks.

I am at a loss.





HELP - WW POSTS NOT WORKING

$
0
0
HELP - WW POSTS NOT WORKING
FoxInCloud
HELP - WW POSTS NOT WORKING
06/06/2012
06:02:26 AM
3IQ0CY44E Show this entire thread in new window
Gratar Image based on email address
From:
Tuvia Vinitsky
To:
All 
Attachments:
None

I created a post under the thread "our progress meter tool". I deleted it, and then enterd a long post with liots of code. I logged back an hour later and reviewed my post happily.

This morning the post is gone, the deleted one is in its place. And when I reply to a topic, the rely goes to some other random topic. I have restarted my browser and cleared my dns cache. What should I do, ad how can I get my post back?

Sending Email

$
0
0
Sending Email
Web Connection 5.0
Sending Email
06/06/2012
07:08:25 AM
3IQ0FAZJI Show this entire thread in new window
Gratar Image based on email address
From:
Luca
To:
All 
Attachments:
None
Dear Rick,
I have a webpage sending email, I load recipient address from Request.Querystring

FUNCTION OnLoad() ... .txtRecipient.Text=Request.Querystring("Recipient")

then I can change manually recipient address before to send email.
The webTextBox for recipient has ControlSourceMode=TwoWay.
However even if I change manually the recipient address on webpage, the form sends email to original recipient (what loaded from Request.Querystring)

.oSmtp=CREATEOBJECT("wwSmtp") WITH .oSmtp ... .cRecipient=this.txtRecipient.Text

Please, what is wrong?
Thank you very much

Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework

$
0
0
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
FoxInCloud
Re: How to put my Mainmenu to Default.htm - Using FoxIncloud Framework
06/06/2012
07:50:18 AM
3IQ0GSUMQ Show this entire thread in new window
Gratar Image based on email address
From:
Thierry Nivelet (FoxInCloud)
To:
Attachments:
None
Hi Reggie, Gilles and Tuvia,

Let me jump into your rich conversation.

Current version of FAA is designed to install your http://localhost demo application automatically in step 3 (Publish).

If step 3 went on right, you should see such a form on
http://localhost/<your 2 or 3 letter app code>/

Can you see a similar page?


Hello GLS,

I have two VFP's exe, One is compiled with FIC and another one is with VFP.

I'm a newbie of this activity particularly on FIC and FAA.

Is there any manual coding or some INI's configuration required in order to run the app on the web?

Thanks,
Reggie


Hi Reggie

Is your VFP's exe currently running on LAN, compiled with F.I.C or only with VFP ?

Have you run FAA on your VFP project before ?

Regards
GLS


Hi Tuvia,

Thanks for the prompt reply. I have build already an exe in VFP and currently running on Local Network.

But Yes, that's true, I want the help of FIC experts to guide me on how to run my whole app on the web or localhost.


Regards,
Reggie

You will actually build an .exe in VFP and run that, although you can run just a standalone form as well. But the main point is that you want to give FiC a whole app to run,


Hi Experts,

I want my VPF app on the cloud.

I follow all instructions on the website(www.FoxInCloud.Com). I. Adaptation Assistant (FAA) 2. Adapt 3. Publish.

My IIS and Application Server is also running (FoxinCloud Trial Version). http:\\xxx\default.htm

We are planning to buy the License FoxInCloud and West-Wind Web Connect after we can test and run our Local App at least on the Localhost.

Anybody could help me please?


How to change the default.htm to my MAINMENU.PRG instead?


Thank you.


Regards,
Reggie






Thierry Nivelet (FoxInCloud)

Viewing all 10393 articles
Browse latest View live