Arjuna Aircraft Ident.: F-MBSD | PS d'avance : Vi, c'est un 3615 mylife, mais je pense que les éléments technique ci-dessous (notamment la technique des objets en JS) peut être très bénéfique pour tous, donc le code me paraît relativement intéressant à lire, même s'il n'est pas buggé.
Alors...
Imaginez.
Une page ASP instancie un objet (DLL) codé en VB. Ce dernier appelle une PS dans SQL Server, puis met en forme les données dans une collection arborescante d'objets.
L'ASP parse tout ce joyeux bordel, pour écrire un JavaScript composé d'objets dans tous les sens, eux aussi arborescants.
Ce JS modifie à la volée un tableau généré à la volée par l'ASP (nombre de lignes variables).
C'est bô, ça marche , même sur NS7 et un veix tromblon de NT4 avec un IE d'avant la guerre du feu.
Par contre, ça fait peur, je plainds celui qui va repasser derrière
Pourtant, le code est assez propre, le résultat dans le HTML est nikel.
Extrait du code dans l'ASP :
Code :
- Response.Write "<script language=""JavaScript"" type=""text/javascript"">" & vbCrLf
- Response.Write " var envelops = new Array();" & vbCrLf
- Response.Write " function data()" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " this.envelops = new Array();" & vbCrLf
- Response.Write " this.groupinvoices = new Array();" & vbCrLf
- Response.Write " this.addEnvelop = function (envname, numero, amount)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " var index = new Number();" & vbCrLf
- Response.Write " index = -1;" & vbCrLf
- Response.Write " for (i = 0; i < this.envelops.length; i++)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " if (this.envelops[i].name == envname)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " index = i;" & vbCrLf
- Response.Write " break;" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " if (index == -1)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " index = this.envelops.length;" & vbCrLf
- Response.Write " this.envelops[index] = new envelop(envname);" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " this.envelops[index].addInvoice(numero, amount);" & vbCrLf
- Response.Write " this.addGroupInvoice(numero, amount);" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " this.addGroupInvoice = function (numero, total)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " for (i = 0; i < this.groupinvoices.length; i++)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " if (this.groupinvoices[i].numero == numero)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " this.groupinvoices[i].total += total;" & vbCrLf
- Response.Write " return;" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " this.groupinvoices[this.groupinvoices.length] = new groupinvoice(numero, total);" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " this.getGroupInvoiceByNumero = function (numero)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " for (i = 0; i < this.groupinvoices.length; i++)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " if (this.groupinvoices[i].numero == numero)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " return this.groupinvoices[i];" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " return new groupinvoice(numero, 0);" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " }" &vbCrLf
- Response.Write " function envelop(name)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " this.name = name;" & vbCrLf
- Response.Write " this.invoices = new Array();" & vbCrLf
- Response.Write " this.addInvoice = function (numero, amount) {this.invoices[this.invoices.length] = new invoice(numero, amount);}" & vbCrLf
- Response.Write " this.getInvoice = function (numero) {for (i = 0; i < this.invoices.length; i++) {if (this.invoices[i].numero == numero) return this.invoices[i];} return new invoice(numero, 0);}" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " function invoice(numero, amount)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " this.numero = numero;" & vbCrLf
- Response.Write " this.amount = amount;" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " function groupinvoice(numero, total)" & vbCrLf
- Response.Write " {" & vbCrLf
- Response.Write " this.numero = numero;" & vbCrLf
- Response.Write " this.total = total;" & vbCrLf
- Response.Write " }" & vbCrLf
- Response.Write " var index = new Number();" & vbCrLf
- Response.Write " var objData = new data();" & vbCrLf
- Response.Write "</script>" & vbCrLf
- Dim prevNumfac
- prevNumfac = ""
- For Each facture in procurement.workingFactures
- If prevNumfac <> facture.numero Then
- ' On n'avance que si on a changé de facture
- i = i + 1
- End If
- If i > (pageNb - 1) * CInt(session("sizeListeRech" )) And i <= pageNb * CInt(session("sizeListeRech" )) Then
- Response.Write "<script language=""JavaScript"" type=""text/javascript"">" & vbCrLf
- Response.Write " objData.addEnvelop('" & facture.envname & "', '" & facture.numero & "', " & facture.prixtotalht & " );" & vbCrLf
- Response.Write "</script>" & vbCrLf
- If prevNumfac <> facture.numero Then
- %>
- [... block de HTML ...]
- <%
- isEven = not isEven
- End If
- Else
- If i > pageNb * CInt(session("sizeListeRech" )) Then
- Exit For
- End If
- End If
- prevNumfac = facture.numero
- Next
- Response.Write "<script language=""JavaScript"" type=""text/javascript"">" & vbCrLf
- Response.Write " displayEnveloppes(0);" & vbCrLf
- Response.Write "</script>" & vbCrLf
|
Et le résultat dnas le HTML :
Code :
- <script language="JavaScript" type="text/javascript">
- var envelops = new Array();
- function data()
- {
- this.envelops = new Array();
- this.groupinvoices = new Array();
- this.addEnvelop = function (envname, numero, amount)
- {
- var index = new Number();
- index = -1;
- for (i = 0; i < this.envelops.length; i++)
- {
- if (this.envelops[i].name == envname)
- {
- index = i;
- break;
- }
- }
- if (index == -1)
- {
- index = this.envelops.length;
- this.envelops[index] = new envelop(envname);
- }
- this.envelops[index].addInvoice(numero, amount);
- this.addGroupInvoice(numero, amount);
- }
- this.addGroupInvoice = function (numero, total)
- {
- for (i = 0; i < this.groupinvoices.length; i++)
- {
- if (this.groupinvoices[i].numero == numero)
- {
- this.groupinvoices[i].total += total;
- return;
- }
- }
- this.groupinvoices[this.groupinvoices.length] = new groupinvoice(numero, total);
- }
- this.getGroupInvoiceByNumero = function (numero)
- {
- for (i = 0; i < this.groupinvoices.length; i++)
- {
- if (this.groupinvoices[i].numero == numero)
- {
- return this.groupinvoices[i];
- }
- }
- return new groupinvoice(numero, 0);
- }
- }
- function envelop(name)
- {
- this.name = name;
- this.invoices = new Array();
- this.addInvoice = function (numero, amount) {this.invoices[this.invoices.length] = new invoice(numero, amount);}
- this.getInvoice = function (numero) {for (i = 0; i < this.invoices.length; i++) {if (this.invoices[i].numero == numero) return this.invoices[i];} return new invoice(numero, 0);}
- }
- function invoice(numero, amount)
- {
- this.numero = numero;
- this.amount = amount;
- }
- function groupinvoice(numero, total)
- {
- this.numero = numero;
- this.total = total;
- }
- var index = new Number();
- var objData = new data();
- </script>
- <script language="JavaScript" type="text/javascript">
- objData.addEnvelop('SFT01', 'dsc12100', 2495);
- </script>
- <script language="JavaScript" type="text/javascript">
- objData.addEnvelop('SFT01', 'dsc12201', 995);
- </script>
- ...
|
Mais le plus joli, c'est le truc qui affiche les données à la volée dans le tableau HTLM
Code :
- <script language="JavaScript" type="text/javascript">
- function displayEnveloppes(fromIndex)
- {
- var i = new Number();
- var j = new Number();
- tableau = document.getElementById("arrData" );
- for (j = 0; j < Math.min(4, objData.envelops.length); j++)
- {
- tableau.rows[4].cells[(j * 2) + 8].innerHTML = objData.envelops[j + fromIndex].name;
- }
- if (fromIndex > 0 && objData.envelops.length > 4)
- {
- tableau.rows[4].cells[8].innerHTML = "<a href=\"javascript:displayEnveloppes(" + Math.max(0, fromIndex - 4) + " );\"><<</a> " + tableau.rows[4].cells[8].innerHTML;
- }
- if (fromIndex < objData.envelops.length - 4)
- {
- tableau.rows[4].cells[14].innerHTML += " <a href=\"javascript:displayEnveloppes(" + Math.min(objData.envelops.length - 4, fromIndex + 4) + " );\">>></a>";
- }
- for (j = 0; j < objData.groupinvoices.length; j++)
- {
- tableau.rows[6 + j].cells[7].innerHTML = objData.getGroupInvoiceByNumero(tableau.rows[6 + j].cells[5].innerHTML).total;
- for (i = 0; i < Math.min(4, objData.envelops.length); i++)
- {
- tableau.rows[6 + j].cells[(i * 2) + 9].innerHTML = objData.envelops[i + fromIndex].getInvoice(tableau.rows[6 + j].cells[5].innerHTML).amount;
- }
- }
- }
- </script>
|
Message édité par Arjuna le 09-05-2005 à 16:29:39
|