In dieser Lektion verwenden Sie die direkte Zeilenbehandlung für die Verarbeitung von Zeilen in der OrderComments-Tabelle Ihrer Clientdatenbank. Sie fügen die GetUpload-Methoden für die direkte Zeilenbehandlung für das handle_UploadData-Ereignis hinzu. GetUpload schreibt hochgeladene Kommentare in die XML-Datei.
Voraussetzungen
In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Einrichten einer XML-Datenquelle.
In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Synchronisation mit XML.
Kontext und Bemerkungen
Mit dem nachfolgenden Verfahren können Sie eine Java-Klasse inklusive Ihrer Methoden für die Prozessverarbeitung erstellen. Eine vollständige Auflistung finden Sie unter MobiLinkOrders-Java-Code-Auflistung.
Erstellen Sie eine Klasse namens MobiLinkOrders.
Schreiben Sie den folgenden Programmcode:
import ianywhere.ml.script.*; import java.io.*; import java.sql.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; // For write operation import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; public class MobiLinkOrders { |
Deklarieren Sie auf Klassenebene die Instanzvariablen für DBConnectionContext und Document. Document ist eine Klasse, die ein XML-Dokument als Objekt repräsentiert.
Schreiben Sie den folgenden Programmcode:
// Class level DBConnectionContext DBConnectionContext _cc; Document _doc; |
Der MobiLink-Server übergibt eine DBConnectionContext-Instanz an Ihren Klassenkonstruktor. DBConnectionContext umfasst Informationen zur aktuellen Verbindung mit der konsolidierten MobiLink-Datenbank.
Erstellen Sie Ihren Klassenkonstruktor.
Ihr Klassenkonstruktor legt Ihre DBConnectionContext-Instanz auf Klassenebene fest.
Schreiben Sie den folgenden Programmcode:
public MobiLinkOrders( DBConnectionContext cc ) throws IOException, FileNotFoundException { // Declare a class-level DBConnectionContext _cc = cc; } |
Schreiben Sie die GetUpload-Methode.
Die GetUpload-Methode ruft eine UploadedTableData-Klasseninstanz ab, die die OrderComments-Tabelle darstellt. Die OrderComments-Tabelle enthält spezielle Kommentare von entfernten Vertriebsmitarbeitern. Sie erstellen diese Tabelle in einer späteren Lektion.
Die UploadedTableData getInserts-Methode gibt eine Ergebnismenge für neue Bestellkommentare zurück.
Erstellen Sie die Methodendeklaration.
Schreiben Sie den folgenden Programmcode:
// Method for the handle_UploadData synchronization event public void GetUpload( UploadData ut ) throws SQLException, IOException { |
Schreiben Sie Programmcode, der hochgeladene Einfügungen aus dem MobiLink-Client abruft.
Schreiben Sie den folgenden Programmcode:
// Get an UploadedTableData for the remote table UploadedTableData remoteOrdersTable = ut.getUploadedTableByName("OrderComments"); // Get inserts uploaded by the MobiLink client // as a java.sql.ResultSet ResultSet insertResultSet = remoteOrdersTable.getInserts(); |
Schreiben Sie den Programmcode, der die bestehende XML-Datei order_comments.xml liest.
Schreiben Sie den folgenden Programmcode:
try { readDom("order_comments.xml"); |
Schreiben Sie den Programmcode, der alle hochgeladenen Einfügungen in die XML-Datei einfügt.
Schreiben Sie den folgenden Programmcode:
// Write out each insert in the XML file while( insertResultSet.next() ) { buildXML(insertResultSet); } |
Schreiben Sie den Programmcode, der die Ausgabe in die XML-Datei vornimmt.
Schreiben Sie den folgenden Programmcode:
writeXML(); } |
Schreiben Sie den Programmcode, der das ResultSet-Objekt schließt.
Schreiben Sie den folgenden Programmcode:
finally { // Close the result set of uploaded inserts insertResultSet.close(); } } |
Erstellen Sie die buildXML-Methode.
Schreiben Sie den folgenden Programmcode:
private void buildXML( ResultSet rs ) throws SQLException { int order_id = rs.getInt(1); int comment_id = rs.getInt(2); String order_comment = rs.getString(3); // Create the comment object to be added to the XML file Element comment = _doc.createElement("comment"); comment.setAttribute("id", Integer.toString(comment_id)); comment.appendChild(_doc.createTextNode(order_comment)); // Get the root element (orders) Element root = _doc.getDocumentElement(); // Get each individual order NodeList rootChildren = root.getChildNodes(); for(int i = 0; i < rootChildren.getLength(); i++) { // If the order exists, add the comment to the order Node n = rootChildren.item(i); if(n.getNodeType() == Node.ELEMENT_NODE) { Element e = (Element) n; int idIntVal = Integer.parseInt(e.getAttribute("id")); if(idIntVal == order_id) { e.appendChild(comment); // The comment has been added to the file, so exit // the function. return; } } } // If the order did not exist already, create it Element order = _doc.createElement("order"); order.setAttribute("id", Integer.toString(order_id)); // Add the comment to the new order order.appendChild(comment); root.appendChild(order); } |
Erstellen Sie die writeXML-Methode.
Schreiben Sie den folgenden Programmcode:
private void writeXML() { try { // Use a Transformer for output TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); // The XML source is _doc DOMSource source = new DOMSource(_doc); // Write the xml data to order_comments.xml StreamResult result = new StreamResult(new File("order_comments.xml")); transformer.transform(source, result); } catch (TransformerConfigurationException tce) { // Error generated by the parser System.out.println ("\n** Transformer Factory error"); System.out.println(" " + tce.getMessage() ); // Use the contained exception, if any Throwable x = tce; if (tce.getException() != null) x = tce.getException(); x.printStackTrace(); } catch (TransformerException te) { // Error generated by the parser System.out.println ("\n** Transformation error"); System.out.println(" " + te.getMessage() ); // Use the contained exception, if any Throwable x = te; if (te.getException() != null) x = te.getException(); x.printStackTrace(); } } |
Erstellen Sie die readDOM-Methode.
Schreiben Sie den folgenden Programmcode:
private void readDom(String filename) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { //parse the Document data into _doc DocumentBuilder builder = factory.newDocumentBuilder(); _doc = builder.parse( new File(filename) ); } catch (SAXException sxe) { // Error generated during parsing) Exception x = sxe; if (sxe.getException() != null) x = sxe.getException(); x.printStackTrace(); } catch (ParserConfigurationException pce) { // Parser with specified options can't be built pce.printStackTrace(); } catch (IOException ioe) { // I/O error ioe.printStackTrace(); } } } |
Speichern Sie den Java-Code unter dem Namen MobiLinkOrders.Java in Ihrem Arbeitsverzeichnis c:\MLobjxml.
Hinweise zur Überprügung des Codes in MobiLinkOrders.java finden Sie unter MobiLinkOrders-Java-Code-Auflistung.
Kompilieren Sie Ihre Klassendatei.
Navigieren Sie zum Verzeichnis mit Ihren Java-Quelldateien.
Kompilieren Sie MobiLinkOrders mit Referenzen zur MobiLink-Server-API-Bibliothek für Java.
Sie müssen mlscript.jar in %SQLANY16%\Java referenzieren und sicherstellen, dass die XML DOM-Bibliothek korrekt installiert ist.
Führen Sie den folgenden Befehl aus, wobei Sie C:\Program Files\SQL Anywhere 16\ durch Ihr SQL Anywhere 16-Verzeichnis ersetzen:
javac -classpath "C:\Program Files\SQL Anywhere 16\java\mlscript.jar" MobiLinkOrders.java |
MobiLinkOrders-Java-Code-Auflistung
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |