In dieser Lektion verwenden Sie die direkte Zeilenbehandlung für die Verarbeitung von Zeilen in der OrderComments-Tabelle Ihrer Clientdatenbank.
Voraussetzungen
In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Einrichten einer Textdatei-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: Verwenden der direkten Zeilenbehandlung.
Kontext und Bemerkungen
Sie fügen die folgende Methode für die direkte Zeilenbehandlung hinzu:
GetUpload Verwenden Sie diese Methode für das handle_UploadData-Ereignis. GetUpload schreibt Upload-Kommentare in die Datei orderComments.txt.
SetDownload Verwenden Sie diese Methode für das handle_DownloadData-Ereignis. SetDownload verwendet die orderResponses.txt-Datei zum Download von Antworten auf entfernte Clients.
EndDownload Verwenden Sie diese Methode für das end_download-Ereignis. EndDownload gibt Speicherressourcen frei.
In der folgenden Prozedur wird gezeigt, wie Sie eine Java- oder .NET-Klasse erstellen, die Ihre Verarbeitungsmethoden enthält. Eine vollständige Auflistung finden Sie unter Vollständige MobiLinkOrders-Auflistung (Java) oder Vollständige MobiLinkOrders-Auflistung (.NET).
Erstellen Sie eine Klasse mit dem Namen MobiLinkOrders in Java oder .NET.
Für Java verwenden Sie den folgenden Code:
import ianywhere.ml.script.*; import java.io.*; import java.sql.*; public class MobiLinkOrders { |
Für .NET verwenden Sie den folgenden Code:
using iAnywhere.MobiLink.Script; using System.IO; using System.Data; using System.Text; public class MobiLinkOrders { |
Deklarieren Sie eine DBConnectionContext-Instanzvariable auf Klassenebene.
Für Java verwenden Sie den folgenden Code:
// Class level DBConnectionContext DBConnectionContext _cc; |
Für .NET verwenden Sie den folgenden Code:
// Class level DBConnectionContext private DBConnectionContext _cc = null; |
Der MobiLink-Server übergibt eine DBConnectionContext-Instanz an Ihren Klassenkonstruktor. DBConnectionContext umfasst Informationen zur aktuellen Verbindung mit der konsolidierten MobiLink-Datenbank.
Deklarieren Sie Objekte für die Dateieingabe und Dateiausgabe.
Für Java deklarieren Sie einen java.io.FileWriter und java.io.BufferedReader wie folgt:
// Java objects for file i/o FileWriter my_writer; BufferedReader my_reader; |
Für .NET deklarieren Sie einen StreamWriter und StreamReader wie folgt:
// Instances for file I/O private static StreamWriter my_writer = null; private static StreamReader my_reader = null; |
Erstellen Sie Ihren Klassenkonstruktor.
Ihr Klassenkonstruktor legt Ihre DBConnectionContext-Instanz auf Klassenebene fest.
Für Java verwenden Sie den folgenden Code:
public MobiLinkOrders( DBConnectionContext cc ) throws IOException, FileNotFoundException { // Declare a class-level DBConnectionContext _cc = cc; } |
Für .NET verwenden Sie den folgenden Code:
public MobiLinkOrders(DBConnectionContext cc) { _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. Die writeOrderComment-Methode gibt jede Zeile in der Ergebnismenge in einer Textdatei aus.
Für Java verwenden Sie den folgenden Code:
public void writeOrderComment( int _commentID, int _orderID, String _comments ) throws IOException { if (my_writer == null) // A FileWriter for writing order comments my_writer = new FileWriter( "C:\\MLdirect\\orderComments.txt",true); // Write out the order comments to remoteOrderComments.txt my_writer.write(_commentID + "\t" + _orderID + "\t" + _comments); my_writer.write( "\n" ); my_writer.flush(); } // Method for the handle_UploadData synchronization event public void GetUpload( UploadData ut ) throws SQLException, IOException { // Get an UploadedTableData for OrderComments UploadedTableData orderCommentsTbl = ut.getUploadedTableByName("OrderComments"); // Get inserts uploaded by the MobiLink client ResultSet insertResultSet = orderCommentsTbl.getInserts(); while ( insertResultSet.next() ) { // Get order comments int _commentID = insertResultSet.getInt("comment_id"); int _orderID = insertResultSet.getInt("order_id"); String _specialComments = insertResultSet.getString("order_comment"); if (_specialComments != null) { writeOrderComment(_commentID,_orderID,_specialComments); } } insertResultSet.close(); } |
Für .NET verwenden Sie den folgenden Code:
public void WriteOrderComment(int comment_id, int order_id, string comments) { if (my_writer == null) { my_writer = new StreamWriter("c:\\MLdirect\\orderComments.txt"); } my_writer.WriteLine("{0}\t{1}\t{2}", comment_id, order_id, comments); my_writer.Flush(); } // Method for the handle_UploadData synchronization event. public void GetUpload(UploadData ut) { // Get UploadedTableData for remote table called OrderComments UploadedTableData order_comments_table_data = ut.GetUploadedTableByName("OrderComments"); // Get inserts uploaded by the MobiLink client using( IDataReader new_comment_reader = order_comments_table_data.GetInserts() ) { while (new_comment_reader.Read()) { // Columns are // 0 - "order_comment" // 1 - "comment_id" // 2 - "order_id" // You can look up these values using the DataTable returned by: // order_comments_table_data.GetSchemaTable(). // In this example, you just use the known column order to // determine the column indexes; alternatively, you could use // the column names // Only process this insert if the order_comment is not null if (!new_comment_reader.IsDBNull(2)) { int comment_id = new_comment_reader.GetInt32(0); int order_id = new_comment_reader.GetInt32(1); string comments = new_comment_reader.GetString(2); WriteOrderComment(comment_id, order_id, comments); } } } } |
Erstellen Sie die SetDownload-Methode:
Rufen Sie eine Klasseninstanz ab, die die OrderComments-Tabelle darstellt.
Verwenden Sie die DBConnectionContext getDownloadData-Methode, um eine DownloadData-Instanz zu erhalten. Verwenden Sie die DownloadData getDownloadTableByName-Methode zur Rückgabe einer DownloadTableData-Instanz für die OrderComments-Tabelle.
Für Java verwenden Sie den folgenden Code:
public void SetDownload() throws SQLException, IOException { DownloadData download_d = _cc.getDownloadData(); DownloadTableData download_td = download_d.getDownloadTableByName( "OrderComments" ); |
Für .NET verwenden Sie den folgenden Code:
private const string read_file_path = "c:\\MLdirect\\orderResponses.txt"; // Method for the handle_DownloadData synchronization event public void SetDownload() { if ((my_reader == null) && !File.Exists(read_file_path)) { System.Console.Out.Write("There is no file to read."); return; } DownloadTableData comments_for_download = _cc.GetDownloadData().GetDownloadTableByName("OrderComments"); |
Sie erstellen die Tabelle OrderComments in der entfernten Datenbank in Lektion 7: Einrichten der konsolidierten MobiLink-Clientdatenbank.
Rufen Sie eine vorbereitete Anweisung auf, die Ihnen das Hinzufügen oder Einfügen von Vorgängen zum bzw. in den Download sowie das Aktualisieren dieser Vorgänge ermöglicht.
Für Java verwenden Sie die DownloadTableData getUpsertPreparedStatement-Methode, um eine java.sql.PreparedStatement-Instanz zurückzugeben, wie folgt:
PreparedStatement update_ps = download_td.getUpsertPreparedStatement(); |
Für .NET verwenden Sie die DownloadTableData GetUpsertCommand-Methode wie folgt:
// Add upserts to the set of operation that are going to be // applied at the remote database IDbCommand comments_upsert = comments_for_download.GetUpsertCommand(); |
Legen Sie die Downloaddaten für jede Zeile fest.
Dieser Code durchläuft die orderResponses.txt-Datei und fügt Daten zum MobiLink-Download hinzu.
Für Java verwenden Sie den folgenden Code:
try { // A BufferedReader for reading in responses if (my_reader == null) my_reader = new BufferedReader(new FileReader("C:\\MLdirect\\orderResponses.txt")); // Get the next line from orderResponses String commentLine; commentLine = my_reader.readLine(); // Send comment responses down to clients while (commentLine != null) { // Get the next line from orderResponses.txt String[] response_details = commentLine.split("\t"); if (response_details.length != 3) { System.err.println("Error reading from orderResponses.txt"); System.err.println("Error setting direct row handling download"); return; } int comment_id = Integer.parseInt(response_details[0]); int order_id = Integer.parseInt(response_details[1]); String updated_comment = response_details[2]; // Set an order comment response in the MobiLink download update_ps.setInt(1, comment_id); update_ps.setInt(2, order_id); update_ps.setString(3, updated_comment); update_ps.executeUpdate(); // Get next line commentLine = my_reader.readLine(); } } |
Für .NET verwenden Sie den folgenden Code:
if (my_reader == null) { my_reader = new StreamReader(read_file_path); } string comment_line; while ((comment_line = my_reader.ReadLine()) != null) { // Three values are on each line separated by '\t' string[] response_details = comment_line.Split('\t'); if (response_details.Length != 3) { throw (new SynchronizationException( "Error reading from orderResponses.txt")); } int comment_id = System.Int32.Parse(response_details[0]); int order_id = System.Int32.Parse(response_details[1]); string comments = response_details[2]; // Parameters of the correct number and type have // already been added so you just need to set the // values of the IDataParameter ((IDataParameter)(comments_upsert.Parameters[0])).Value = comment_id; ((IDataParameter)(comments_upsert.Parameters[1])).Value = order_id; ((IDataParameter)(comments_upsert.Parameters[2])).Value = comments; // Add the upsert operation comments_upsert.ExecuteNonQuery(); } } |
Schließen Sie die vorbereitete Anweisung für das Hinzufügen von Einfüge- oder Aktualisierungsvorgängen zum Download.
Für Java verwenden Sie den folgenden Code:
finally { update_ps.close(); } } |
Für .NET müssen Sie IDBCommand nicht schließen. Das Objekt wird am Ende des Downloads automatisch zerstört.
Erstellen Sie die EndDownload-Methode.
Diese Methode verarbeitet das end_download-Verbindungsereignis und bietet Ihnen die Möglichkeit, Ressourcen freizugeben.
Für Java verwenden Sie den folgenden Code:
public void EndSync() throws IOException { // Close i/o resources if (my_reader != null) { my_reader.close(); my_reader = null; } if (my_writer != null) { my_writer.close(); my_writer = null; } } } |
Für .NET verwenden Sie den folgenden Code:
public void EndSync() { if (my_writer != null) { my_writer.Close(); my_writer = null; } if (my_reader != null) { my_reader.Close(); my_reader = null; } } |
Speichern Sie den Programmcode.
Für Java speichern Sie Ihren Code als MobiLinkOrders.java in Ihrem Arbeitsverzeichnis c:\MLdirect.
Für .NET speichern Sie Ihren Code als MobiLinkOrders.cs in Ihrem Arbeitsverzeichnis c:\MLdirect.
Hinweise zur Überprüfung des Codes finden Sie unter Vollständige MobiLinkOrders-Auflistung (Java) oder Vollständige MobiLinkOrders-Auflistung (.NET).
Kompilieren Sie Ihre Klassendatei.
Navigieren Sie zum Verzeichnis mit Ihren Java- oder .NET-Quelldateien.
Kompilieren Sie MobiLinkOrders mit Referenzen zur API-Bibliothek des MobiLink-Servers für Java oder .NET.
Für Java müssen Sie mlscript.jar unter %SQLANY16%\java referenzieren.
Für Java führen Sie den folgenden Befehl aus und ersetzen C:\Program Files\SQL Anywhere 16\ durch Ihr SQL Anywhere 16-Verzeichnis:
javac -classpath "C:\Program Files\SQL Anywhere 16\java\mlscript.jar" MobiLinkOrders.java |
Für .NET führen Sie den folgenden Befehl aus und ersetzen C:\Program Files\SQL Anywhere 16\ durch Ihr SQL Anywhere 16-Verzeichnis:
csc /out:MobiLinkServerCode.dll /target:library /reference:"C:\Program Files\SQL Anywhere 16\Assembly\v2\iAnywhere.MobiLink.Script.dll" MobiLinkOrders.cs |
Dieses Beispiel gewährleistet nicht, dass die Primärschlüsselwerte eindeutig sind. Siehe Eindeutige Primärschlüssel.
Vollständige MobiLinkOrders-Auflistung (Java)
Vollständige MobiLinkOrders-Auflistung (.NET)
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |