Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2008, 00h33   #1
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975
Par défaut Existe-t-il un FrameWork ASP3?

Salut,

Existe-t-il un FrameWork ASP3?

Et bien oui. Qu'est-ce qu'un FW? Et bien la definition de Wikipédia est assez bonne.

Sans plus attendre il est en pièce jointe.

C'est moi qui l'ai fait. Je dois dire que depuis quelques mois, j'utilise beaucoup de classes ASP pour coder. Cela rend beaucoup de service si ce n'est pas trop le bazar. Pourtant, il me manquait ce petit qqch qui pouvait transformer tous ces outils en un framework convenable.

Il est très loin d'être terminé. Il souffre certainement de beaucoup d'imperfections, mais si vous voulez bien m'aider, je crois que nous allons pouvoir l'améliorer et le rendre vraiment utile. Il faudrait y ajouter une classe pour manipuler les dates, lire un web.config, ...

Utile à quoi? Et bien dans un premier temps je dirai qu'il va beaucoup nous aider à interroger proprement notre base de données préférée. Ensuite, il va bien nous aider à débuguer. Et puis j'ose espérer à rendre notre code plus lisible.

Le ZIP contient un certain nombre de fichiers. Il s'agit des classes du FW. Vous pouvez le récupérer et les copier dans un dossier de votre site Web.
Ci-dessous 3 exemples pour illustrer:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ language="VBSCRIPT" codepage="1252" %>
 
<!--#include file="fw/cls_Immobilis.asp" -->
 
<%
' Déclaration d'un variable globale à laquelle sera liée le framework
Dim Immo
 
' Appel de la procédure principale
Call Main
 
' Procédure principale pilotant la page
Public Sub Main
    Set Immo = New Immobilis
 
        ' Affichage du context Http
        Immo.Http.ToTable
 
    Set Immo = Nothing
End Sub
%>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@ language="VBSCRIPT" codepage="1252" %>
 
<!--#include file="fw/cls_Immobilis.asp" -->
 
<%
' Déclaration d'un variable globale à laquelle sera liée le framework
Dim Immo
 
' Appel de la procédure principale
Call Main
 
' Procédure principale pilotant la page
Public Sub Main
    Set Immo = New Immobilis
        ' Assignement de la propriété du fournisseur de données au gestionnaire de base de données.
        ' Ici, il s'agit de SQL. Ce pourrait être Access.
        ' Immo.BD.Provider = "Driver={Microsoft Access Driver (*.mdb)}; DBQ = " & Server.MapPath("BaseDeDonnees.mdb") & ";"
        ' Ce pourrait être aussi une variable d'application initialisée dans le "Global.asa"
        ' Immo.BD.Provider = Application("ConnectionString")
 
        Immo.BD.Provider = "Driver={SQL Native Client};Server=127.0.0.1;Database=MaBase;Uid=sa;Pwd=sa;"
        Call Immo.BD.SqlToTable("SELECT * FROM [USER]", "")
 
    Set Immo = Nothing
End Sub
%>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<%@ language="VBSCRIPT" codepage="1252" %>
 
<!--#include file="fw/cls_Immobilis.asp" -->
 
<%
' Indication que l'on souhaite voir s'afficher toutes les indications de débugage dispersées dans le code
Debug.IsDebug = true
' Indication que l'on souhaite voir s'afficher tous les recordsets signalés explicitement
Debug.IsDebugTbl = true
 
' Déclaration d'un variable globale à laquelle sera liée le framework
Dim Immo
 
' Appel de la procédure principale
Call Main
 
' Procédure principale pilotant la page
Public Sub Main
    Dim StrSql
 
    Set Immo = New Immobilis
        ' Assignement de la propriété du fournisseur de données au gestionnaire de base de données.
        ' Ici, il s'agit de SQL. Ce pourrait être Access.
        ' Immo.BD.Provider = "Driver={Microsoft Access Driver (*.mdb)}; DBQ = " & Session("BaseDeDonnees") & ";"
        ' Ce pourrait être aussi une variable d'application initialisée dans le "Global.asa"
        ' Immo.BD.Provider = Application("ConnectionString")
        Immo.BD.Provider = "Driver={SQL Native Client};Server=127.0.0.1;Database=MaBase;Uid=sa;Pwd=sa;"
 
        %>
        <form action="" id="frm" method="post" enctype="application/x-www-form-urlencoded">
            <input id="txt" name="txt" type="text" value="<%=Immo.Http.ItemByKey("txt") %>" />
            <%
            ' La valeur des champs envoyé par le formulaire est stocké dans Immo.Http
 
            ' Creation d'une liste déroulante de pays
            StrSql = "select country_id, country_desc from country order by country_desc asc"
            call Immo.BD.SqlToDDListe(StrSql, "", Immo.Http.ItemByKey("country"), "country")
 
            ' Creation d'une liste déroulante d'équipes fonctionnelles
            StrSql = "select team_id, team_desc from team order by team_desc asc"
            call Immo.BD.SqlToDDListe(StrSql, "", Immo.Http.ItemByKey("team"), "team")
            %>
            <input type="submit" name="action" id="action" value="Go" />
        </form>
        <%
        ' Affichage du resultat uniquement si le formulaire est soumis quelque soit la méthode
        if Immo.Http.IsPostBack then
            strsql = "select * from [user] where (User_UserName like '%" & Immo.Http.ItemByKey("txt") & "%' and user_country = " & Immo.Http.ItemByKey("country") & " and user_team = " & Immo.Http.ItemByKey("team") & ")"
            Call Immo.BD.SqlToTable(strsql, "")
        End If
    Set Immo = Nothing
End Sub
%>
Liste des fonctionnalités:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"Class HttpContext";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Get Count"
;"Public Property Get Form"
;"Public Property Get QueryString"
;"Public Property Get IsPostBack"
;"Public Property Get ItemByKey(key)"
;"Public Property Get ItemByIndex(i)"
;"Public Property Get KeyByIndex(i)"
;"Public Sub ToTable"
;"Public Sub ToXml(path)"
;"Private Sub GrabServerVariables"
;"Private Sub GrabApplication"
;"Private Sub GrabSession"
;"Private Sub GrabCookies"
;"Private Sub GrabForm"
;"Private Sub GrabQueryString"
;"Private Sub SetArrays"
"Class DBFactory";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Let Provider(value)"
;"Private Property Get Provider"
;"Private Property Set Connection(value)"
;"Private Property Get Connection"
;"Private Property Set Command(value)"
;"Private Property Get Command"
;"Private Property Let CountRequest(value)"
;"Private Property Get CountRequest"
;"Public Function ExecuteQuery(s)"
;"Public Function GetRst(s)"
;"Public Function GetRows(s)"
;"Public Sub RsToTable(rs, classname)"
;"Public Sub SqlToTable(sql, classname)"
;"Public Sub RsToDDListe(rs, classname, selectedvalue, id)"
;"Public Sub SqlToDDListe(sql, classname, selectedvalue, id)"
;"Public Sub RsToXls(rs, path)"
"Class CFile";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Set File(value)"
;"Public Property Get File"
;"Public Sub DownLoad(path)"
"Class CNumbers";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Function IsDecimal(byval str)"
"Class CStrings";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Function ToProperCase(s)"
;"Public Function IsAlpha(c)"
;"Public Sub DisplayAscii"
;"Public Function ActivateHttp(str)"
"Class CSecurity";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Get Encryption"
;"Public Property Get Authentication"
"Class CCollection";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
"Class CDebug";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Let IsDebug(value)"
;"Public Property Get IsDebug"
;"Public Property Let IsDebugTbl(value)"
;"Public Property Get IsDebugTbl"
;"Public Property Let Color(value)"
;"Public Property Get Color"
;"Public Property Let THColor(value)"
;"Public Property Get THColor"
;"Public Property Let TDColor(value)"
;"Public Property Get TDColor"
;"Public Function DWrite(value)"
;"Public Sub RsToTable(rs)"
La classe de base s'appelle "Immobilis" vous ne devez inclure que celle-ci dans vos pages ASP. Elle contient les liens vers les autres classe.
Vous pouvez évidement la personnaliser en modifiant le nom: "System" eût été plus approprié.

Il serait aussi interessant de construire les page en faisant des classes comme indiqué ici

Voilà, j'espère avoir bientôt de vos nouvelles.

Cordialement,

Immobilis
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 11h02   #2
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
bonjour immobilis,

voilà un travail impressionnant !
moi qui utilise les classes depuis 2001, je ne m'en lasse pas
même si j'ai plutôt des classes sur les objets que je manipule (personnes, etc ...). pour le reste (construction des menus déroulants, etc ...), j'ai une solide bibliothèque de fonctions (réparties en différents fichiers : dates, texte, BDD, formulaire, ...)

Nico.
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 13h16   #3
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975
Cool,

Tu cela t'interesses, je te propose d'inclure les fonctionnalités que tu utilises et qui ne figurent pas dans ce framework et de publier la nouvelle version.

Qu'en penses-tu?

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 16h03   #4
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
pourquoi pas !
comment veux-tu que l'on procède ? je te prépare les fichiers asp de fonction et tu les intègres ? ou bien je fais un pré-tri dans les fonctions à partir de ton FW (j'espère dans ce cas ne pas avoir trop de merde dans les yeux et bien identifier ce qui est présent/absent...)

Nico.
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 19h32   #5
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975
Cool,

Autant que tu essayes de les intégrer car ainsi, on pourra s'approprier les fonctionnalités et ainsi bien les connaître. Ou alors on se partage le travail. Tu en as beaucoup?

Sinon, j'ai déjà fait la liste des classes, des propriétés, des fonctions et procédures dans mon premier post.

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2008, 20h25   #6
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
je vais déjà te les lister.
tu me diras si ça te parait opportun
par contre, je ne sais pas si j'aurai le temps demain ...
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2008, 12h39   #7
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
Par défaut liste des ajouts et fusions possibles

salut Immobilis,

voici les ajouts que je te propose, fusionnés avec l'existant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
 
"Class HttpContext";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Get Count"
;"Public Property Get Form"
;"Public Property Get QueryString"
;"Public Property Get IsPostBack"
;"Public Property Get ItemByKey(key)"
;"Public Property Get ItemByIndex(i)"
;"Public Property Get KeyByIndex(i)"
;"Public Sub ToTable"
;"Public Sub ToXml(path)"
;"Private Sub GrabServerVariables"
;"Private Sub GrabApplication"
;"Private Sub GrabSession"
;"Private Sub GrabCookies"
;"Private Sub GrabForm"
;"Private Sub GrabQueryString"
;"Private Sub SetArrays"
 
"Class DBFactory";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Let Provider(value)"
;"Private Property Get Provider"
;"Private Property Set Connection(value)"
;"Private Property Get Connection"
;"Private Property Set Command(value)"
;"Private Property Get Command"
;"Private Property Let CountRequest(value)"
;"Private Property Get CountRequest"
;"Public Function ExecuteQuery(s)"
;"Public Function GetRst(s)"
;"Public Function GetRows(s)"
;"Public Sub RsToTable(rs, classname)"
;"Public Sub SqlToTable(sql, classname)"
;"Public Sub RsToDDListe(rs, classname, selectedvalue, id)"
;"Public Sub SqlToDDListe(sql, classname, selectedvalue, id)"
;"Public Sub RsToXls(rs, path)"
 
"Class CFile";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Set File(value)"
;"Public Property Get File"
;"Public Sub DownLoad(path)"
'| Public function getFileExtension(pFileName)
'| Public function getSizeAndUnit(pSize, pWithUnit)
 
"Class CNumbers";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Function IsDecimal(byval str)"
'| Public function toZero(pNum)
'| Public function to00(pNum)
'| Public function to000(pNum)
'| Public function toDouble(pY)
'| Public function notNegative(pValue)
'| Public function format_double(pNbr)
'| Public function format_integer(pNbr)
'| Public function format_bigNumber(pNum)
'| Public function max(pA1, pA2)
'| Public function min(pA1, pA2)
 
'| Class CDates
'| Private Sub Class_Initialize
'| Private Sub Class_Terminate
'| Public function DecodeMilliSecondTimer(pMilliSecond)
'| Public function get_today_ddmmyyyy 
'| Public function format_date_ddmmyyyy(pDate)
'| Public function stringDate_to_DDMMYYYY(pDate)
'| Public function format_date(pDate)	'au format "01 janvier 2005"
'| Public function format_time_hhmm(pDate)
 
"Class CStrings";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Function ToProperCase(s)"
;"Public Function IsAlpha(c)"
;"Public Sub DisplayAscii"
;"Public Function ActivateHttp(str)"
'| Public function default_value(pChaine, pValue)
'| Public function db_in(pString)
'| Public function db_out(pString)
'| Public function db_txt_in(pString)
'| Public function db_txt_out(pString)
'| Public function js_encode(pString)
'| Public function plural(pChaine, pNb)
'| Public function Generate_random_text(nbCar)
'| Public function noHTMLtag(pTxt)
'| Public function onlyLettersAndNumbers(pTxt)
'| Public function premiersMots(pTxt, pNum)
'| Public function Generate_login(pPrenom, pNom)
'| Public function Generate_Password(nbCar)
 
"Class CSecurity";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Get Encryption"
;"Public Property Get Authentication"
 
"Class CCollection";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
'| Public function collection_contains(pCollection, pItem)
 
'| Class CForms
'| Private Sub Class_Initialize
'| Private Sub Class_Terminate
'| Public Default Property Get DefaultProperty
'| Public function size_input(pValue)
'| Public sub combo (pRS, pName, pSelect, pTexte)
'| Public sub combo_submit (pRS, pName, pSelect, pTexte, pForm)
'| Public sub input_texte (pName, pSize, pTexte)
'| Public sub input_textarea (pName, pCol, pRows, pTexte)
'| Public sub date_field(name, pSize, value)
 
"Class CDebug";
;"Private Sub Class_Initialize"
;"Private Sub Class_Terminate"
;"Public Default Property Get DefaultProperty"
;"Public Property Let IsDebug(value)"
;"Public Property Get IsDebug"
;"Public Property Let IsDebugTbl(value)"
;"Public Property Get IsDebugTbl"
;"Public Property Let Color(value)"
;"Public Property Get Color"
;"Public Property Let THColor(value)"
;"Public Property Get THColor"
;"Public Property Let TDColor(value)"
;"Public Property Get TDColor"
;"Public Function DWrite(value)"
;"Public Sub RsToTable(rs)"
 
'| Class CEmail
'| Private Sub Class_Initialize
'| Private Sub Class_Terminate
'| Public Default Property Get DefaultProperty
'| Public Property Let SMTP_IP(pIP)
'| Public sub sendMail(sFrom, sTo, sSubject, sTexte)
'| Public sub sendMail2000(sFrom, sTo, sSubject, sTexte)
'| Public sub sendMailCC(sFrom, sTo, sCC, sSubject, sTexte)
'| Public sub sendMail_HTML(sFrom, sTo, sSubject, sTexte)
'| Public sub sendMail_HTML_withSenderName(sFromName, sFromMail, sTo, sSubject, sTexte)
'| Public function noBadMail(pMail, pDefault)
'| Public function isGoodEmailCharacter(pChar)
'| Public function containsDomain(pMail)
je te prépare l'intégration dans les classes et créations de classes ad-hoc.
je te propose aussi de renommer la classe Immobilis en autre chose, mais je ne sais pas encore quoi... un truc du genre FrameWorkASP

enfin, je te propose un petit exécutable vbs qui, à partir d'une requête SQL de création de table génère une classe et 2 procédures stockées pour créer un objet, récupérer les données d'un objet et enregistrer en bases ses caractéristiques.
Exemple : table PERSONNE avec NOM, PRENOM
le vbs créé le code ASP de la classe suivante et les proStocks utilisées pour le GET et le SAVE
SQL =
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
CREATE TABLE [dbo].[PERSONNE] (
	[ID] [int] IDENTITY (1, 1) NOT NULL ,
	[p_ARCHIVE] [bit] NULL ,
	[p_DT_CREA] [datetime] NULL ,
	[p_DT_MAJ] [datetime] NULL ,
	[p_HOST] [varchar] (20) COLLATE French_CI_AS NULL ,
	[p_ADMIN] [int] NULL ,
	[PER_PRENOM] [varchar] (255) COLLATE French_CI_AS NULL ,
	[PER_NOM] [varchar] (255) COLLATE French_CI_AS NULL
) ON [PRIMARY]
GO
Classe=
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
Class PERSONNE
 
    private pID
    private ConnectionString
    private oConn
    public p_ARCHIVE
    public p_DT_CREA
    public p_DT_MAJ
    public p_HOST
    public p_ADMIN
    public PER_PRENOM
    public PER_NOM
 
    public sub Class_Initialize
        ConnectionString = Application("ConnectionString")
        set oConn = Server.CreateObject("ADODB.Connection")
    end sub
 
    public sub Class_Terminate
        set oConn = nothing
    end sub
 
    public property let ID(sID)
        dim oCmd
        set oCmd=server.CreateObject("ADODB.Command")
        if sID<>"" then
            pID=sID
            oCmd.CommandText="sp_GET_PERSONNE"
            oCmd.CommandType=adCmdStoredProc
            oCmd.Parameters.Append oCmd.CreateParameter("ID",adInteger,adParamInput,,pID)
            oCmd.Parameters.Append oCmd.CreateParameter("p_ARCHIVE",adBoolean, adParamOutput)
            oCmd.Parameters.Append oCmd.CreateParameter("p_DT_CREA",adDate, adParamOutput)
            oCmd.Parameters.Append oCmd.CreateParameter("p_DT_MAJ",adDate, adParamOutput)
            oCmd.Parameters.Append oCmd.CreateParameter("p_HOST",adVarChar, adParamOutput,20)
            oCmd.Parameters.Append oCmd.CreateParameter("p_ADMIN",adInteger, adParamOutput)
            oCmd.Parameters.Append oCmd.CreateParameter("PER_PRENOM",adVarChar, adParamOutput,255)
            oCmd.Parameters.Append oCmd.CreateParameter("PER_NOM",adVarChar, adParamOutput,255)
            oConn.Open ConnectionString
            Set oCmd.ActiveConnection=oConn
            oCmd.Execute
            Set oCmd.ActiveConnection=nothing
            oConn.Close
 
            p_ARCHIVE=oCmd.Parameters(1).Value
            p_DT_CREA=oCmd.Parameters(2).Value
            p_DT_MAJ=oCmd.Parameters(3).Value
            p_HOST=oCmd.Parameters(4).Value
            p_ADMIN=oCmd.Parameters(5).Value
            PER_PRENOM=oCmd.Parameters(6).Value
            PER_NOM=oCmd.Parameters(7).Value
 
        end if
        set oCmd=nothing
    end property
 
    public sub Save 
        dim oCmd
        set oCmd=server.CreateObject("ADODB.Command")
        oCmd.CommandText="sp_UPDATE_PERSONNE"
        oCmd.CommandType=adCmdStoredProc
        oCmd.Parameters.Append oCmd.CreateParameter("ID",adInteger, adParamInput,,pID)
        oCmd.Parameters.Append oCmd.CreateParameter("p_ARCHIVE",adBoolean, adParamInput,,p_ARCHIVE)
        oCmd.Parameters.Append oCmd.CreateParameter("p_DT_CREA",adDate, adParamInput,,p_DT_CREA)
        oCmd.Parameters.Append oCmd.CreateParameter("p_DT_MAJ",adDate, adParamInput,,p_DT_MAJ)
        oCmd.Parameters.Append oCmd.CreateParameter("p_HOST",adVarChar, adParamInput,20,p_HOST)
        oCmd.Parameters.Append oCmd.CreateParameter("p_ADMIN",adInteger, adParamInput,,p_ADMIN)
        oCmd.Parameters.Append oCmd.CreateParameter("PER_PRENOM",adVarChar, adParamInput,255,PER_PRENOM)
        oCmd.Parameters.Append oCmd.CreateParameter("PER_NOM",adVarChar, adParamInput,255,PER_NOM)
        oCmd.Parameters.Append oCmd.CreateParameter("ID_BACK", adInteger, adParamOutput)
        oConn.Open ConnectionString
        Set oCmd.ActiveConnection=oConn
        oCmd.Execute
        set oCmd.ActiveConnection=nothing
        oConn.Close
        pID=oCmd.Parameters(8).Value
        set oCmd=nothing
    end sub
 
    public property get ID
        ID=pID
    end property
 
End Class
ProStock=
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
CREATE PROCEDURE  sp_GET_PERSONNE (
    @ID int,
    @p_ARCHIVE bit OUTPUT,
    @p_DT_CREA datetime OUTPUT,
    @p_DT_MAJ datetime OUTPUT,
    @p_HOST varchar (20) OUTPUT,
    @p_ADMIN int OUTPUT,
    @PER_PRENOM varchar (255) OUTPUT,
    @PER_NOM varchar (255) OUTPUT)
as
    select
    @p_ARCHIVE=p_ARCHIVE,
    @p_DT_CREA=p_DT_CREA,
    @p_DT_MAJ=p_DT_MAJ,
    @p_HOST=p_HOST,
    @p_ADMIN=p_ADMIN,
    @PER_PRENOM=PER_PRENOM,
    @PER_NOM=PER_NOM
    from PERSONNE where @ID=ID
 
et
 
CREATE PROCEDURE  sp_UPDATE_PERSONNE (
    @ID int=null,
    @p_ARCHIVE bit=0,
    @p_DT_CREA datetime=null,
    @p_DT_MAJ datetime=null,
    @p_HOST varchar (20)=null,
    @p_ADMIN int=null,
    @PER_PRENOM varchar (255)=null,
    @PER_NOM varchar (255)=null,
    @ID_BACK int OUTPUT)
as 
    if (select count(*) from PERSONNE where ID=@ID)=0
        begin
            insert into PERSONNE (
            p_ARCHIVE,
            p_DT_CREA,
            p_DT_MAJ,
            p_HOST,
            p_ADMIN,
            PER_PRENOM,
            PER_NOM)
            values (
            @p_ARCHIVE,
            (getdate()),
            (getdate()),
            @p_HOST,
            @p_ADMIN,
            @PER_PRENOM,
            @PER_NOM);
            select @ID_BACK=@@IDENTITY;
        end
    else
        begin
            update PERSONNE set
            p_ARCHIVE=@p_ARCHIVE,
            p_DT_MAJ=(getdate()),
            p_HOST=@p_HOST,
            p_ADMIN=@p_ADMIN,
            PER_PRENOM=@PER_PRENOM,
            PER_NOM=@PER_NOM
            where ID=@ID;
            select @ID_BACK=@ID
        end
ce qui s'utilise comme suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
dim oPersonne
set oPersonne = new PERSONNE
 
'initialisation de l'objet (si request("id_per") = "", le .save créera un nouvel enregistrement tout seul dont l'ID sera alors accessible via oPersonne.ID)
oPersonne.ID = request("id_per")
 
'affichage du nom de la personne
response.write oPersonne.PER_PRENOM & " " & oPersonne.PER_NOM
 
'modification du prénom de la personne
oPersonne.PER_PRENOM = request("PER_PRENOM")
oPersonne.save
 
set oPersonne = nothing
Nico.
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2008, 22h18   #8
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975
Salut,

Ca m'a l'air très bien tout ça. Je suis curieux de voir le code.
J'ai déplacé des fonctions, qu'en penses-tu?
Dans la classe collection, il s'agira d'utiliser un dictionnaire pour lequel une fonction "Exist()" permet de faire le "collection_contains".
Crois-tu que ton script de génération de class et procédures stockées peut être intégré au FW?
Je suis d'accord pour changer le nom de la classe "Immobilis" par contre "System" me parait plus approprié, non?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
"Class HttpContext";;
;"Private Sub Class_Initialize";
;"Private Sub Class_Terminate";
;"Public Default Property Get DefaultProperty";
;"Public Property Get Count";
;"Public Property Get Form";
;"Public Property Get QueryString";
;"Public Property Get IsPostBack";
;"Public Property Get ItemByKey(key)";
;"Public Property Get ItemByIndex(i)";
;"Public Property Get KeyByIndex(i)";
;"Public Sub ToTable";
;"Public Sub ToXml(path)";
;"Private Sub GrabServerVariables";
;"Private Sub GrabApplication";
;"Private Sub GrabSession";
;"Private Sub GrabCookies";
;"Private Sub GrabForm";
;"Private Sub GrabQueryString";
;"Private Sub SetArrays";
" ";;
"Class DBFactory";;
;"Private Sub Class_Initialize";
;"Private Sub Class_Terminate";
;"Public Default Property Get DefaultProperty";
;"Public Property Let Provider(value)";
;"Private Property Get Provider";
;"Private Property Set Connection(value)";
;"Private Property Get Connection";
;"Private Property Set Command(value)";
;"Private Property Get Command";
;"Private Property Let CountRequest(value)";
;"Private Property Get CountRequest";
;"Public Function ExecuteQuery(s)";
;"Public Function GetRst(s)";
;"Public Function GetRows(s)";
;"Public Sub RsToTable(rs, classname)";
;"Public Sub SqlToTable(sql, classname)";
;"Public Sub RsToXls(rs, path)";
" ";;
"Class CFile";;
;"Private Sub Class_Initialize";
;"Private Sub Class_Terminate";
;"Public Default Property Get DefaultProperty";
;"Public Property Set File(value)";
;"Public Property Get File";
;"Public Sub DownLoad(path)";
;"** Public function getFileExtension(pFileName)";
;"** Public function getSizeAndUnit(pSize, pWithUnit)";
" ";;
"Class CNumbers";;
;"Private Sub Class_Initialize";
;"Private Sub Class_Terminate";
;"Public Default Property Get DefaultProperty";
;"Public Function IsDecimal(byval str)";
;"** Public function toZero(pNum)";
;"** Public function to00(pNum)";
;"** Public function to000(pNum)";
;"** Public function toDouble(pY)";
;"** Public function notNegative(pValue)";
;"** Public function format_double(pNbr)";
;"** Public function format_integer(pNbr)";
;"** Public function format_bigNumber(pNum)";
;"** Public function max(pA1, pA2)";
;"** Public function min(pA1, pA2)";
" ";;
"** Class CDates";;
;"** Private Sub Class_Initialize";
;"** Private Sub Class_Terminate";
;"** Public function DecodeMilliSecondTimer(pMilliSecond)";
;"** Public function get_today_ddmmyyyy ";
;"** Public function format_date_ddmmyyyy(pDate)";
;"** Public function stringDate_to_DDMMYYYY(pDate)";
;"** Public function format_date(pDate)	'au format ""01 janvier 2005""";
;"** Public function format_time_hhmm(pDate)";
" ";;
"Class CStrings";;
;"Private Sub Class_Initialize";
;"Private Sub Class_Terminate";
;"Public Default Property Get DefaultProperty";
;"Public Function ToProperCase(s)";
;"Public Function IsAlpha(c)";
;"Public Sub DisplayAscii";
;"Public Function ActivateHttp(str)";
;"** Public function default_value(pChaine, pValue)";
;"** Public function db_in(pString)";
;"** Public function db_out(pString)";
;"** Public function db_txt_in(pString)";
;"** Public function db_txt_out(pString)";
;"** Public function js_encode(pString)";
;"** Public function plural(pChaine, pNb)";
;"** Public function Generate_random_text(nbCar)";
;"** Public function noHTMLtag(pTxt)";
;"** Public function onlyLettersAndNumbers(pTxt)";
;"** Public function premiersMots(pTxt, pNum)";
;;
"Class CSecurity";;
;"Private Sub Class_Initialize";
;"Private Sub Class_Terminate";
;"Public Default Property Get DefaultProperty";
;"Public Property Get Encryption";
;"Public Property Get Authentication";
;"** Public function Generate_login(pPrenom, pNom)";"Déplacé"
;"** Public function Generate_Password(nbCar)";"Déplacé"
" ";;
"Class CCollection";;
;"Private Sub Class_Initialize";
;"Private Sub Class_Terminate";
;"Public Default Property Get DefaultProperty";
;"** Public function collection_contains(pCollection, pItem)";"Scripting.Dictionnary.Exist()"
" ";;
"** Class CForms";;
;"** Private Sub Class_Initialize";
;"** Private Sub Class_Terminate";
;"** Public Default Property Get DefaultProperty";
;"** Public function size_input(pValue)";
;"** Public sub combo (pRS, pName, pSelect, pTexte)";
;"** Public sub combo_submit (pRS, pName, pSelect, pTexte, pForm)";
;"** Public sub input_texte (pName, pSize, pTexte)";
;"** Public sub input_textarea (pName, pCol, pRows, pTexte)";
;"** Public sub date_field(name, pSize, value)";
;"Public Sub RsToDDListe(rs, classname, selectedvalue, id)";"Déplacé"
;"Public Sub SqlToDDListe(sql, classname, selectedvalue, id)";"Déplacé"
" ";;
"Class CDebug";;
;"Private Sub Class_Initialize";
;"Private Sub Class_Terminate";
;"Public Default Property Get DefaultProperty";
;"Public Property Let IsDebug(value)";
;"Public Property Get IsDebug";
;"Public Property Let IsDebugTbl(value)";
;"Public Property Get IsDebugTbl";
;"Public Property Let Color(value)";
;"Public Property Get Color";
;"Public Property Let THColor(value)";
;"Public Property Get THColor";
;"Public Property Let TDColor(value)";
;"Public Property Get TDColor";
;"Public Function DWrite(value)";
;"Public Sub RsToTable(rs)";
" ";;
"** Class CEmail";;
;"** Private Sub Class_Initialize";
;"** Private Sub Class_Terminate";
;"** Public Default Property Get DefaultProperty";
;"** Public Property Let SMTP_IP(pIP)";
;"** Public sub sendMail(sFrom, sTo, sSubject, sTexte)";
;"** Public sub sendMail2000(sFrom, sTo, sSubject, sTexte)";
;"** Public sub sendMailCC(sFrom, sTo, sCC, sSubject, sTexte)";
;"** Public sub sendMail_HTML(sFrom, sTo, sSubject, sTexte)";
;"** Public sub sendMail_HTML_withSenderName(sFromName, sFromMail, sTo, sSubject, sTexte)";
;"** Public function noBadMail(pMail, pDefault)";
;"** Public function isGoodEmailCharacter(pChar)";
;"** Public function containsDomain(pMail)";
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2008, 09h48   #9
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
salut Immobilis !

j'ai fait l'intégration hier soir en tenant compte de tes très légères modifications.
je n'ai pas testé le FW par manque de temps... j'espère donc que il n'y aura pas trop de pb

tu verras, j'ai rajouté une question dans la page cls_system.asp ...


pour le générateur de classe, je t'ai mis le .vbs dans le zip joint.
il peut tout à fait être intégré au fw, mais côté pages d'admin seulement
il devra alors créer le fichier class au bon endroit et les prostocks dans la bonne base ==> changer le paramètre de destination du fichier classe du vbs actuel et remplacer l'écriture du fichier contenant le SQL de la prostock en exécution dudit SQL sur la base pour laquelle on fournit la chaine de connexion.
je te prépare ça ? une page qui utilise le FW, donc et qui transforme le SQL create en ce qu'il faut
délais ? pas avant le début de la semaine prochaine ...

Nico.
Fichiers attachés
Type de fichier : zip fw.zip (20,9 Ko, 5 affichages)
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2008, 23h29   #10
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975
Salut,

Désolé, j'ai eu une coupure d'Internet alors j'ai pas pu répondre plus tôt.

Après un premier tour d'horizon:
  1. Les variables globales sont détruites à la fin de l'execution de la page. J'ai lu sur un site de Microsoft que du coup, c'etait même pas utile de mettre un objet à "Nothing".
  2. Pour ce qui est du nommage des fonctions, que penserais-tu d'utiliser la méthode dite du dromadaire (cf FXCOP )? Les mots sont collés mais chaque initiale est en majuscule.
  3. Le tip 15 de cette page http://msdn2.microsoft.com/en-us/library/ms972335.aspx, mais aussi ici, indique qu'il vaut mieux éviter de switcher du HTML à l'ASP. Il va falloir que je reprenne la fonction "DisplayAscii"
  4. Le plus important: il faut parfois laisser le code planter. L'utilisation de "gStrings.default_value" ne doit pas se faire dans les classes, mais dans l'appel de la fonction. Si le format des données attendues par une fonction n'est pas le bon, il faut que ça plante et puis c'est tout. Sinon, ça passe et on ne sait plus d'où vient l'erreur. C'est d'ailleurs le comportement de Visual Studio en .NET ("Cannot implicitly convert type 'string' to 'int'"). Il faut être explicite. Du coup, cela rend peut-être inutile de déclarer:
    Code :
    1
    2
    Set gStrings = New CStrings
    Set gNumbers = New CNumbers
    Non
    Code :
    1
    2
     
    db_in(Request.Form("toto"))
    Oui
    Code :
    1
    2
     
    MaValue = System.DB.db_in(System.Strings.default_value(Request.Form("toto"), ""))
    Avec
    Code :
    1
    2
    3
    4
     
    public function db_in(pString)
        db_in = Replace(Replace(pString, "'", "''"),"""","""""")
    end function
  5. "noHTMLtag" je te propose ceci:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Function HTMLDecode(sText)
        Dim I
        IF not isnull(sText) THEN
            sText = Replace(sText, "& quot;", Chr(34)) ' Le colorateur syntaxique interprete &*quot;
            sText = Replace(sText, "&lt;"  , Chr(60))
            sText = Replace(sText, "&gt;"  , Chr(62))
            sText = Replace(sText, "&amp;" , Chr(38))
            sText = Replace(sText, "&nbsp;", Chr(32))
            For I = 1 to 255
                sText = Replace(sText, "&#" & I & ";", Chr(I))
            Next
            HTMLDecode = sText
        ELSE
            HTMLDecode = ""
        END IF
    End Function
    Le colorateur syntaxique interprete &quot;
    Code :
    Replace(sText, """, Chr(34))
  6. "onlyLettersAndNumbers" peut-être une expression régulière?
  7. "format_PhoneNumber" une expression régulière ou bien utiliser "Not IsNumeric()" au lieu de "unWantedChar". Peut-être faudrait-il ajouter l'information de la langue en paramètre ou dans le nom de la fonction.
  8. Les fonctions de formatage des données pour SQL sont très interessantes et indispensables. Toutefois il faudrait peut-être les mettre dans la classe DBFactory, non?
  9. La classe Email est interessante, notement le choix de la methode d'envoi. Par contre, il faudrait une propriété pour from, to, subject, etc. Ainsi, chaque methode se bornerait à affecter les valeurs aux propriétés. Par exemple, tu a une propriété "Let SMTP_IP(pIP)" mais pas "Get SMTP_IP". Tu ne devrais pas récupérer cette valeur en passant par la variable privée, mais par la propriété. On pourrait imaginer une propriété "Mailer" qui recevrait le type d'objet (CDONTS, CDO.SYS, AUTO, etc) chargé d'envoyer le mail. Ainsi, en fonction de cette valeur, il n'y aurait qu'une méthode "SendMail".
  10. Pour la génération de listes déroulantes, il faut aussi penser aux listes à séléction multiple. J'ai un code qui permet de le faire. Je le mettrai en ligne dès que possible.
Bon, j'arrête là, attendant avec impatience tes remarques.

Cordialement,

Immo
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2008, 09h30   #11
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
salut Immo,

je te répondrai un peu tard car je serai en déplacement lundi et mardi ... il faut donc que je prépare pas mal de choses.

a priori, tes remarques me vont en grande partie, certains points un peu moins
je peaufine ma réflexion et te fais un retour.

Nico.
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 15h55   #12
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
salut Immo,

comme convenu, ma petite réponse :
Citation:
Envoyé par Immobilis Voir le message
(...)
  1. Les variables globales sont détruites à la fin de l'execution de la page. J'ai lu sur un site de Microsoft que du coup, c'etait même pas utile de mettre un objet à "Nothing".

    >> agrotic : OK, rien à dire

  2. Pour ce qui est du nommage des fonctions, que penserais-tu d'utiliser la méthode dite du dromadaire (cf FXCOP )? Les mots sont collés mais chaque initiale est en majuscule.

    >> agrotic : OK, rien à dire
    je mets à jour mon code

  3. Le tip 15 de cette page http://msdn2.microsoft.com/en-us/library/ms972335.aspx, mais aussi ici, indique qu'il vaut mieux éviter de switcher du HTML à l'ASP. Il va falloir que je reprenne la fonction "DisplayAscii"

    >> agrotic : vi, un monsieur qui travaille aujourd'hui à redmond sur ASP.Net me l'avait dit aussi
  4. Le plus important: il faut parfois laisser le code planter. L'utilisation de "gStrings.default_value" ne doit pas se faire dans les classes, mais dans l'appel de la fonction. Si le format des données attendues par une fonction n'est pas le bon, il faut que ça plante et puis c'est tout. Sinon, ça passe et on ne sait plus d'où vient l'erreur. C'est d'ailleurs le comportement de Visual Studio en .NET ("Cannot implicitly convert type 'string' to 'int'"). Il faut être explicite. Du coup, cela rend peut-être inutile de déclarer:
    Code :
    1
    2
    Set gStrings = New CStrings
    Set gNumbers = New CNumbers
    Non
    Code :
    1
    2
     
    db_in(Request.Form("toto"))
    Oui
    Code :
    1
    2
     
    MaValue = System.DB.db_in(System.Strings.default_value(Request.Form("toto"), ""))
    Avec
    Code :
    1
    2
    3
    4
     
    public function db_in(pString)
        db_in = Replace(Replace(pString, "'", "''"),"""","""""")
    end function
    >> agrotic : si tu le dis
    perso, je préfère blinder que d'avoir des messages d'insulte à l'écran.
    surtout quand je rajoute ce genre de contrôles sans retoucher au code de toutes mes pages.
    ça permet d'éviter de faire du debug à tout va (enfin, je pense) ; et surtout, ça permet de gérer toutes les exceptions qui se présentent au déploiement de la nouvelle fonction.
    mais là, comme on est sur un FW, on part de zéro pour l'intégration, donc... OK ça ne devrait pas poser de problème.
    je peux mettre mon code à jour.

  5. "noHTMLtag" je te propose ceci:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Function HTMLDecode(sText)
        Dim I
        IF not isnull(sText) THEN
            sText = Replace(sText, "& quot;", Chr(34)) ' Le colorateur syntaxique interprete &*quot;
            sText = Replace(sText, "&lt;"  , Chr(60))
            sText = Replace(sText, "&gt;"  , Chr(62))
            sText = Replace(sText, "&amp;" , Chr(38))
            sText = Replace(sText, "&nbsp;", Chr(32))
            For I = 1 to 255
                sText = Replace(sText, "&#" & I & ";", Chr(I))
            Next
            HTMLDecode = sText
        ELSE
            HTMLDecode = ""
        END IF
    End Function
    Le colorateur syntaxique interprete &quot;
    Code :
    Replace(sText, """, Chr(34))
    >> agrotic : en fait, il s'agit de virer d'un texte tout ce qui est tag HTML (mise en forme, tableaux, etc...) et non pas de faire un server.htmlEncode ou ce genre de chose qui correspond plus à ta proposition
  6. "onlyLettersAndNumbers" peut-être une expression régulière?

    >> agrotic : oui, tout à fait
    j'ai fait cette fonction à la rache, donc j'ai fait super simple...

  7. "format_PhoneNumber" une expression régulière ou bien utiliser "Not IsNumeric()" au lieu de "unWantedChar". Peut-être faudrait-il ajouter l'information de la langue en paramètre ou dans le nom de la fonction.

    >> agrotic : cette fonction est arrivée avant tout un tas d'autres et du coup, s'insère pas forcément bien dans le zoo actuel. en fait, elle fait suite à une dde du mkt pour son appli CRM, histoire d'harmoniser les num de tel affichés.
    tu peux ajouter le code pays si tu souhaites. je ne l'ai pas fait car nos clients ne sont que français. (inter-profession française avec cotisation, etc...)[/COLOR]
  8. Les fonctions de formatage des données pour SQL sont très interessantes et indispensables. Toutefois il faudrait peut-être les mettre dans la classe DBFactory, non?

    >> agrotic : OK, je les déplace
  9. La classe Email est interessante, notement le choix de la methode d'envoi. Par contre, il faudrait une propriété pour from, to, subject, etc. Ainsi, chaque methode se bornerait à affecter les valeurs aux propriétés. Par exemple, tu a une propriété "Let SMTP_IP(pIP)" mais pas "Get SMTP_IP". Tu ne devrais pas récupérer cette valeur en passant par la variable privée, mais par la propriété. On pourrait imaginer une propriété "Mailer" qui recevrait le type d'objet (CDONTS, CDO.SYS, AUTO, etc) chargé d'envoyer le mail. Ainsi, en fonction de cette valeur, il n'y aurait qu'une méthode "SendMail".

    >> agrotic : OK, qui la fait ?
  10. Pour la génération de listes déroulantes, il faut aussi penser aux listes à séléction multiple. J'ai un code qui permet de le faire. Je le mettrai en ligne dès que possible.

    >> agrotic : bien noté
je retravaille ça ...

Nico.
Fichiers attachés
Type de fichier : zip FW_System_080402.zip (16,9 Ko, 3 affichages)
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 00h44   #13
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975
Salut,

Je fais un tour et je te dis.

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 15h07   #14
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
so Immo ... no news, bad news ?
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 22h26   #15
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975

Salut,

En fait, ça prend pas mal de temps!!
J'ai déjà commencé une réponse y'a un certain temps. Mais je j'arrive pas à terminer. J'hésite, est-ce que je te mets le début?

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 22h32   #16
Membre actif
 
Inscription : avril 2004
Messages : 202
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2004
Messages : 202
Points : 192
Points : 192
vas-y,

comme ça on avancera plus vite
__________________
Nico, l'agrotic géomatic
agrotic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 22h40   #17
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975
Salut,
Citation:
Envoyé par agrotic Voir le message
vi, un monsieur qui travaille aujourd'hui à redmond sur ASP.Net me l'avait dit aussi
Tu as des contact là-bas ou Bill est ton copain?
Citation:
Envoyé par agrotic Voir le message
perso, je préfère blinder que d'avoir des messages d'insulte à l'écran.
Hélas, en ASP y'a pas de solution à part une page d'erreur par défaut paramétrée dans IIS.
Citation:
Envoyé par agrotic Voir le message
en fait, il s'agit de virer d'un texte tout ce qui est tag HTML (mise en forme, tableaux, etc...) et non pas de faire un server.htmlEncode ou ce genre de chose qui correspond plus à ta proposition
Ah oui, c'est vrai, j'ai pas bien regardé la fonction. Ok.
Citation:
Envoyé par agrotic Voir le message
OK, qui la fait ?
En parlant de la classe Email, ben comme tu veux. On peut y réfléchir chacun de son côté et faire des propositions

Il faut absolument qu'on créé un script qui teste toutes les propriétés les unes à la suite des autres!
  1. Class CCollection
    1. La collection dans ce cas est une chaine de caractères. Un InStr() suffirait non? Sinon, on peut ajouter un "Exit Function"
      Code :
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      Public Function CollectionContains(pCollection, pItem)
      	Dim pSplitted, pI
      	pSplitted = split("," & replace(pCollection, " " , "") & ",", ",")
      	CollectionContains = False
      	For pI = 0 to uBound(pSplitted)
      		If pSplitted(pI) <> "" and not CollectionContains Then
      			CollectionContains = (cStr(pSplitted(pI)) = cStr(pItem))
      			Exit Function
      		End If 
      	Next
      End Function
  2. Class CDates
    1. Renommage de la classe "CDates" en "CDatesTime"
    2. A moins que ce soit une nécessité d'avoir les millisecondes, la fonction "DecodeMilliSecondTimer" peut être remplacée par
      Code :
      FormatDateTime(pMilliSecond/86400000, 3)
      Par contre il ne s'affiche pas les millisecondes.
    3. Les fonctions de conversion de date sont interessantes mais elles tiennent uniquement compte de la culture FR. Je ne suis pas trop pour les mettre dans un FW qui se voudrait générique. A moins d'y adjoindre la notion de culture. A mon avis, la gestion des dates affichées chez le client doit être neutre pour laisser le LCID ou les langues supportées par le navigateur fonctionner. Qu'en penses-tu?
    4. Plutôt que d'utiliser une variable globale, je verrais plutôt un propriété référençant l'objet "Strings" de la classe "System"
  3. Class CFile:
    1. Remplacement de:
      Code :
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      ' récupération de l'extension d'un fichier
      '+-------------------------------------------------------
      Public Function GetFileExtension(pFileName)
          Dim pSplitted
          If pFileName = "" Then
              getFileExtension = "xxx"
          else
              pSplitted = split(pFileName, ".")
              getFileExtension = pSplitted(uBound(pSplitted))
          End If
      End Function
      Par
      Code :
      1
      2
      3
      Public Function GetFileExtension(pPath)
          GetFileExtension = File.GetExtensionName(pPath)
      End Function
  4. Class CSecurity:
    1. Suppression de:
      Code :
      <!--#include file="cls_Encryption.asp" -->
      N'était pas fini dans ma première version => générait une erreur car déjà inclus dans cls_System.asp
    2. Suppression de:
      Code :
      1
      2
      3
      4
      5
      6
      Public Property Get Encryption
      	If m_Encrypt Is Nothing Then
      		Set m_Encrypt = New CEncryption
      	End If
      	Set Encryption = m_Encrypt
      End Property
      Pas utilisé.
    3. Mise en propriété de:
      Code :
      1
      2
      3
      4
      5
      6
      Public Property Get Strings
      	If m_String Is Nothing Then
      		Set m_String = New CStrings
      	End If
      	Set Strings = m_String
      End Property
      Pour rendre l'objet disponible pour toute la classe lors du premier appel de "GenerateLogin"
    4. Correction de "GenerateLogin" en conséquence:
      Code :
      1
      2
      3
      Public Function GenerateLogin(pPrenom, pNom)
      	GenerateLogin = lCase(left(Strings.Desaccentue(Strings.OnlyLettersAndNumbers(Strings.DefaultValue(pPrenom, ""))), 1) & Strings.Desaccentue(Strings.OnlyLettersAndNumbers(Strings.DefaultValue(pNom, ""))))
      End Function
    5. Suppression de "GeneratePassword" au profit de "RandomString" (plus court) dans la classe CString:
      Code :
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      ' texte aléatoire, pas de confusion entre le chiffre 0 et la lettre O
      '+-------------------------------------------------------
      Public Function RandomString(nbCar)
          Dim vocab, temp, i
          vocab = "AZERTYUIOPMLKJHGFDSQWXVCBN123456789azertyuiopqsdfghjklmwxcvbn"
          temp = ""
          randomize
          For i = 1 to nbCar
              temp = temp & Mid(vocab, rnd() * len(vocab) + 1, 1)
          Next 
          RandomString = temp
      End Function
  5. Toutes les classes:
    1. correction "Proper Case" (Dim, Function, Public, ...) et "CamelCase" (chameau pas dromadaire )
    2. Modification de la propriété par défaut:
      Code :
      DefaultProperty = typename(Me)
Fichiers attachés
Type de fichier : zip fw2.zip (22,4 Ko, 6 affichages)
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2008, 22h44   #18
Expert Confirmé Sénior

 
Avatar de Immobilis
 
Inscription : mars 2004
Messages : 5 857
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 5 857
Points : 5 975
Points : 5 975
Je me demandais si il ne faudrait pas prendre chacun en charge l'intergration d'une partie.

Qu'en penses-tu?

J'ai ajouté une page "Console.asp". Elle permet de controler une peut le framework. Je te laisse tester.

A+
Immobilis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h14.


 
 
 
 
Partenaires

Hébergement Web