Praktikum 27. Juni 2003 Projekt Einführung • Das Praktikum endet mit einem Projekt: • Erstellt einen Kneipenführer! • Am Ende wird der Kneipenführer vielleicht für das NUKATH-Projekt benutzt werden. • 1. Schema Definition • 2. PocketPC Anwendung • 3. Web Service für Daten-Upload • 4. Zusammentragen der Daten • 5. Kneipenführer Web-Seite (benutzt Web Services) • 6. Falls ihr Zeit habt: … Timeline Heute: erste Treffen Nächste Freitag: PDAAnwendung und DatenUpload Web Service fertig gestellt Zusammentragen der Daten vollständig (11 Juli) PDAs Zurückgeben Letzte Treffen (25 Juli) Das Szenario Mobile Db Gruppe 1 Datenbank Mobile Db Gruppe 2 Kneipenführer Web service Mobile Db Gruppe 3 SOAP Mobile Db Gruppe 4 Web Sites HTTP POST Schema • Wir brauchen ein XML-Schema • z.B. Name der Kneipe, Adresse, Bierangebot (alkoholfreie Biere, Weizenbier, belgische Biere), Musik, Atmosphäre, Telefonnummer, UID (Eindeutige Identifikator)... • Stadtplan? • Landmarke? Compaq iPAQ PocketPC StrongARM/XScale, MIPS, oder SH3 Prozessor iPAQ StrongArm >200MHz 240 x 320 LCD Bildschirm 32 – 64 Mb Speicher (RAM) 16 Mb flüchtiger Speicher (Flash ROM) Web Server Installation • Es gibt mehrere Web Server für den Pocket PC, z.b. Apache und IIS + ASP (kommt mit Microsoft SQL Dashboard) • Wir benutzen IIS • Heute existiert außerdem IIS.Net für Pocket PC, unter anderem – aber die Installation ist kompliziert und es ist nichts vorkompiliert... Forts. Installation • • • • • • • • http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=AD37ACEA8020-45E4-9489-270C1E638759 – SQL Dashboard http://www.angers.ensam.fr/wce/_0_site_web_2001/site_anglais/travail_angers/serveur_we b.htm - Installation HOWTO http://members.cox.net/nnsysdev/ppcwebserver.htm - Installation HOWTO „Weicher“ Neustart (Soft Reset): zum Neustart des Pocket PC drücken Sie mit dem Stift die Soft-Reset-Taste „Harter“ Neustart (Hard Reset): Zum „harten“ Neustart drücken Sie die Soft-Reset-Taste + Sync-Taste+ Kalender-Taste und warten Sie 5 Sek. ALLE DATEIEN WERDEN GELÖSCHT Die VBScript Programmiersprache • Alt, unkompliziert, unvollständig • Keine objekte, dynamische Arrays, usw. • Einführung: • Hello.asp <HTML><% @ LANGUAGE=“VBScript“%> <BODY> <H2><% Response.Write “Hello World“ %></H2> </BODY> </HTML> Beispiele • Kommentare: C# // Hier ist ein Kommentar VB REM Hier ist ein Kommentar • Variablen definieren C# string Mystring VB Dim Mystring rem Dieses VBscript ist ‚weakly typed‘! • Escaping anführungszeichen C# Mystring=“I am a \“string\“ with quotes“ VB Mystring=“I am a ““string““ with quotes“ • Variablen ausdrucken C# VB Console.Write(“Variable=“+Mystring) Response.Write “Variable=“ & Mystring Resultat: Variable=I am a “string“ with quotes Vergleiche, Operatoren C# VBScript If (variable==null) { ...} == > < != >= <= If Variable is Nothing Then... = > < <> >= <= Iteration - Beispiele For i=0 to 20 step +2 Response.Write i&“<br>“ Next While i<10 i=i+1 Wend Dim myArray(10) Dim i For i=0 to 9 step +1 myArray(i)=10-i Response.Write i&“<br>“ Next Do while not i>10 i=i+1 If i=5 Then Exit Do End If Loop Prozeduren C# void myFunction(){ VBScript Sub myFunction() } End Sub int myFunction(){ // oder anderen Typ return int_value } Function myFunction() ... myFunction=returnvalue End Function Try/Catch // C# try { // Code hier einsetzen... } catch { //error=true } If(!error){ // No error occurred } REM VBScript Dim wErr On Error Resume Next Rem Put code here wErr= Err.Number On Error Goto 0 If wErr <> 0 Then Rem No error occurred End If String manipulation Dim mystring=“Hello world“ mystring2=Replace(mystring,“world“,“Karlsruhe“) mylength=Len(mystring) mystring2=Left(mystring,5) mystring2=Right(mystring,5) rem mystring definieren rem mystring2 ist “Hello Karlsruhe“ rem die Lange von String bestimmen rem mystring2 ist jetzt “Hello“ rem mystring2 ist jetzt “world“ Die Mid() Funktion ist nicht verfügbar in dieser Ausführung – benutze Left(Right, ), ) Chr(eine_Zahl) liefert den Buchstaben, der mit ‚eine_Zahl‘ übereinstimmt Char(Buchstabe) liefert den character code des Buchstaben in der Funktion Es gibt verschiedene VBScript String-Konstanten: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsconvbscript.asp HTTP Get/Post • Um Variablen von der HTTP Get Methode abzurufen: Request.Querystring(“variableName“) • Um Variablen von der HTTP Post Methode abzurufen : Request.Form( “variableName“) Diejenigen, die VBScript kennen, könnten die Idee haben, die ‚For Each Field In Request.Form‘ Methode anzuwenden. Diese Methode ist aber nicht in diese ASP-Programm definiert! Datenbank-Zugang • Ein verfügbares Objekt ist das ADOCE Recordset Dim dbObject=CreateObject(“ADOCE.RecordSet.3.0“) • Nutzliche Funktionen: – dbObject.Open “dbname“, , 2, 3 – dbObject.MoveFirst rem zum Beginn des Recordsets springen – dbObject.MoveNext rem springt zum nächsten Eintrag (EOF wird angezeigt, wenn es sich um den letzten Eintrag handelt) – dbObject.Close rem das Recordset schließen – dbObject.AddNew rem neuer Eintrag – dbObject.Fields(“ColumnName“)=“Value“ – dbObject.Update rem Recordset aktualisieren Beispiele Do While Not dbObject.EOF Response.Write dbObject(0).Name & “ “_ & dbObject(0).Value Response.Write “<BR>“ dbObject.MoveNext Loop Forts. Datenbank, SQL • Um das Recordset zu laden oder zu benutzen,muß man mit der Db mit SQL kommunizieren • Hier sind einige Beispiele: – Löschen • SQLquery=“Delete from tablename where columnname=“&value – Eine Tabelle kreieren • SQLquery=“Create table tablename (Id INT, pubname Text)“ – Nach Einträgen suchen • SQLquery=“Select * from tablename“ [sort by column] – Nach einem bestimmten Eintrag suchen • SQLquery=“Select * from tablename where column=“&uniquevalue – Sortieren: ADO besitzt normalerweise eine Sortier-Option, dieser ist aber in diesem ASP-Programm nicht verfügbar. Stattdessen benutze ‚sort by column‘ bei der ‚select‘ Abfrage. CreateObject & andere Funktionen • Generell ist VB/ASP weniger limitiert • Weil sehr wenige Funktionen in diesem ASP Programm verfügbar sind, ist man gezwungen mit wenig Mitteln viel zu machen. • Versucht nicht die Grenzen des ASP Programmes zu finden – es sind genug Angaben gemacht um die erforderlichen Resultate zu erzielen. • Es gibt ein komplettes, funktionstüchtiges Beispiel auf der Praktikums-Seite. SCHREIBT ES NICHT EINFACH NUR AB! Es benutzt CSV für die interne Datenspeicherung und ist einerseits falsch, und andererseits sofort zu erkennen ;-) Notwendige Scripts 1. Kneipen-Info-Tabelle Dieses Script versucht, beim Laden die Tabelle zu kreieren. Sowohl die erfolgreiche Durchführung als auch jegliche Fehler, die auftreten, sollen angezeigt werden. 2. HTTP Post ‚neuer Eintrag‘ Formular Dieses Formular sollte die Kneipen-Informationen zu dem ... Script senden (3). Fals genügend Zeit bleibt, versucht, das Script so zu designen, dass man es außerdem zum Editieren von bereits existierenden Einträgen benutzen kann... 3. Script für Einträge/ Updates Akzeptiert Daten von Formular (2). Öffnet die Verbindung zur Datenbank. Generiert eine “unique ID“. Fügt eine „Gruppe ID“ hinzu. Löscht verbotene Zeichen, falls vorhanden, im input. Fügt Werte zur Datenbank hinzu, mit der generierten “unique ID“. (Andernfalls, wenn es sich um ein Update handelt, löscht es den Original-Eintrag, um ihn danach als neuen Eintrag mit der selben “unique ID“ wieder einzufügen.) Forts. Scripts 4. 5. 6. 7. Löschen von einem Eintrag Benutzt HTTP Get, um die “Unique ID“ zu lesen, um danach den korrespondierenden Eintrag mit SQL Query aus der Datenbank zu löschen. Zeigt an: “Löschvorgang erfolgreich“ bzw. “Fehler beim Löschvorgang“ Einträge anzeigen Liest alle Einträge der Datenbank aus und zeigt sie auf dem Bildschirm angemessen an, zusammen mit Links zu (4), (6) und (7) (optional). Details anzeigen Liest alle Details eines gegebenen Eintrags aus der Datenbank, indem es die “Unique ID“ benutzt, um ihn zu lokalisieren und ihn danach angemessen auf dem Bildschirm darzustellen (z.B. indem es das Formular (2) zum erneuten Eintrag der Werte benutzt). Upload Script Dieses Formular schickt alle Daten von der Datenbank, codiert als ein einzelnes XML-String, als eine versteckte Variable. Die XML-Daten werden zu einem Web Service geschickt, der den XML-String speichert. Web Service • Um Daten zu laden – Weil iPAQ nicht direkt in der Lage ist, Web Services zu benutzen, kann es nur auf ‚standard HTTP‘ – POST und GET zurückgreifen. – Deswegen benutzen wir HTTP POST, um Daten zu laden. – Das ist möglich durch Verändern des ,web.config‘ Files – dadurch erwartet es einfach HTTP POST input. • Der Web Service – Der Web Service empfängt und speichert einen Text-String – davon abgesehen, liest oder benutzt er den Text-String nicht weiter. – Denkt daran, eure versteckte Variable so zu nennen, wie es der Web Service erwartet! <webServices> <protocols> <add name="HttpPost"/> <add name="HttpGet"/> <add name="Documentation"/> <add name="HttpPostLocalhost"/> </protocols> </webServices> Zusammentragen der Daten • Logistik klären... 2 Gruppen, Daten- und PDA- Gruppe Die PDA-Gruppe arbeitet hier Aufteilung innerhalb Gruppe? Daten-Gruppe ??? Aufteilung innerhalb Gruppe ? Hotspots... Vermeidet doppelte Einträge! Ist es zweckmäßig, zur Lokalisierung der Kneipen Karlsruhe in Quadranten aufzuteilen? • Und jetzt: Auf geht‘s in die Kneipe! ;-)