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

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


Viewing all articles
Browse latest Browse all 10393

Trending Articles