DevTrain

Autor: Shinja Strasser

Dynamisches Binden eines clientseitigen Controls an ein XML DSO

Der Internet Explorer ermöglicht uns DSO - Objekte zu verwenden und Daten an ein Control zu binden. Hier werden Daten aus XML an eine Combobox angebunden. Die Vorteile von XML sind in diesem Artikel vielleicht nicht offensichtlich, aber denken Sie einmal an eine Webapplikation mit der Kundendaten verarbeitet werden und die Daten von verschiedenen Firmen, von verschiedenen Datenbanken kommen.
Liegen die Daten in einem XML  - Format vor ist es im Wesentlichen gleichgültig, ob diese aus einer Oracle, MS SQL, Access, .... Datenbank stammen. Desweiteren nutze ich hier die Vorteile von DHTML mit der ich z.B. ein Feld auslesen kann. Der Code ist kurz, bündig und leicht zu warten.

Der Scriptblock, der die Daten aus einem XML - File ausliest benötigt eine Quelle die hier dsoTeam genannt wird.
Um bequem die Datensätze auslesen zu können erstellen wir ein dso-recordset Objekt. Das Handling dieses Objektes ist uns vom ADO - Recordset bekannt. Die einzelenen Felder (Options) werden mit document.createElement() angelegt.

<select id="select1" name="select1">
 <option value="1">Name</option>
 ..........
</select>

Dann weise ich dem Optionelement den Text und seinen Wert (Value) zu und hänge ihn an die Combobox an.Diese Aktion wird sequentiell - Datensatz für Datensatz - bis zum Ende des XML Dokuments fortgesetzt.

<script for="dsoTeam" event="ondatasetcomplete" language="vbscript">
     Set oXMLRec = dsoTeam.recordset

     While Not oXMLRec.eof
       Set oOpt = document.createElement("OPTION")
       oOpt.text = oXMLRec("Name")
       oOpt.value = oXMLRec("idNAme")
       cboTeam.add oOpt
       oXMLRec.movenext
     Wend
     Set oXMLRec = Nothing
     Set oOpt = Nothing
</script>


Im Body-Tag referenziere ich erst einmal auf das reale xml - Document und weise diesem eine id zu.

<xml id="dsoTeam" src="team.xml"></xml>

Als nächstes erstelle ich mein Control (hier eine Combobox) an die die Daten gebunden werden sollen. Hier könnte man evtl. auch schon Defaultwerte einfügen wenn sie sich nicht ändern.

<select id="cboTeam" name="cboTeam"></select>

Um eine kleine Master - Detail Anwendung zu demonstrieren habe ich zu den beiden Teams noch zwei weitere xml - Files generiert, die die Namen der Mitarbeiter im Team anzeigen sollen. Um Schreibarbeit zu sparen frage ich mit der Value-Eigenschaft das ausgewählte Team ab und weise dem DSO-Objekt das Quell-File mit der Eigenschaft (*).src zu.

<script id="clientEventHandlersVBS" language="vbscript">
 Sub cboTeam_onchange
      Select Case cboTeam.value
         Case "1"
            dsoTeams.src="consult.xml"
         Case "2"
            dsoTeams.src="softw.xml"
      End Select
 End Sub
</script>


Die Detail-Ansicht realisiere ich mit einer Tabelle der ich eine Datenquelle zuweise.
Dem dsoTeams-Objekt muss ich natürlich wieder ein reales xml - Document übergeben, das
hier aber leer ist, da ich zuvor in der Select-Case-Anweisung die Quellen dynamich zugewiesen habe.

<xml id="dsoTeams" src=""></xml>
<table id="tblTeams" datasrc="#dsoTeams" border="1">
  <tr>
    <td><span datafld="Name"><span></td>
  </tr>
</table>



Und hier das fertige Beispiel:
<html>
<script for="dsoTeam" event="ondatasetcomplete" language="vbscript">
     Set oXMLRec = dsoTeam.recordset

     While Not oXMLRec.eof
       Set oOpt = document.createElement("OPTION")
       oOpt.text = oXMLRec("Name")
       oOpt.value = oXMLRec("idNAme")
       cboTeam.add oOpt
       oXMLRec.movenext
     Wend
     Set oXMLRec = Nothing
     Set oOpt = Nothing
</script>

<body>
 <xml id="dsoTeam" src="team.xml"></xml>
 <select id="cboTeam" name="cboTeam"></select>
 <script id="clientEventHandlersVBS" language="vbscript">
  Sub cboTeam_onchange
       Select Case cboTeam.value
          Case "1"
             dsoTeams.src="consult.xml"
          Case "2"
             dsoTeams.src="softw.xml"
       End Select
  End Sub
 </script>
 <xml id="dsoTeams" src=""></xml>
 <table id="tblTeams" datasrc="#dsoTeams" border=1>
 <tr>
     <td><span datafld="Name"><span></td>
 </tr>
 </table>
</body>
</html>


xml - Dateien
team.xml
<?xml version="1.0" ?>
   <ROOT>
    <Mitarbeiter>
      <idName>1</idName>
      <Name>Consulting</Name>
    </Mitarbeiter>
    <Mitarbeiter>
      <idName>2</idName>
      <Name>Software</Name>
    </Mitarbeiter>
   </ROOT>
consult.xml
<?xml version="1.0" ?>
<ROOT>
    <Mitarbeiter>
      <Name>Strasser Shinja</Name>
      <idName>1</idName>
    </Mitarbeiter>
    <Mitarbeiter>
      <Name>Rauch Andreas</Name>
      <idName>1</idName>
    </Mitarbeiter>
    <Mitarbeiter>
      <Name>Tobias Ulm</Name>
      <idName>1</idName>
    </Mitarbeiter>
</ROOT>
softw.xml
<?xml version="1.0" ?>
<ROOT>
    <Mitarbeiter>
      <Name>Strasser Shinja</Name>
      <idName>2</idName>
    </Mitarbeiter>
    <Mitarbeiter>
      <Name>Bernd Hechenberger</Name>
      <idName>3</idName>
    </Mitarbeiter>
    <Mitarbeiter>
      <Name>Karl Wolfgang</Name>
      <idName>3</idName>
    </Mitarbeiter>
</ROOT>


Erfasst am: 20.04.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=430
© Copyright 2003 ppedv AG - http://www.ppedv.de