In dieser Lektion verwenden Sie die direkte Zeilenbehandlung für die Verarbeitung von Zeilen in der OrderComments-Tabelle Ihrer Clientdatenbank. Sie fügen die folgende Methode für die direkte Zeilenbehandlung hinzu:
GetUpload Diese Methode verwenden Sie für das handle_UploadData-Ereignis. GetUpload schreibt Upload-Kommentare in die Datei orderComments.txt.
SetDownload Diese Methode verwenden Sie für das handle_DownloadData-Ereignis. SetDownload verwendet die orderResponses.txt-Datei zum Download von Antworten auf entfernte Clients.
EndDownload Diese Methode verwenden Sie für das end_download-Ereignis. EndDownload gibt Speicherressourcen frei.
Mit der folgenden Prozedur erstellen Sie eine Java- oder .NET-Klasse unter Berücksichtigung Ihrer Verarbeitungsmethoden. 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 Lektion 6: Konsolidierte MobiLink-Clientdatenbank einrichten. 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 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() if the send // column names option is turned on at the remote. // In this example, you just use the known column order to // determine the column indexes // 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); } } // Always close the reader when you are done with it! new_comment_reader.Close(); } |
Schreiben 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"); |
Die Erstellung dieser Tabelle in der entfernten Datenbank wird in Lektion 6: Konsolidierte MobiLink-Clientdatenbank einrichten beschrieben.
Rufen Sie eine vorbereitete Anweisung auf, die Ihnen das Hinzufügen von Einfüge- oder Aktualisierungsvorgängen zum Download 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:
// 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:
update_ps.close(); } |
Für .NET müssen Sie IDBCommand nicht schließen. Das Objekt wird am Ende des Download 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 EndDownload() throws IOException { // Close i/o resources if (my_reader != null) my_reader.close(); if (my_writer != null) my_writer.close(); } } |
Für .NET verwenden Sie den folgenden Code:
public void EndDownload() { 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.
Siehe Vollständige MobiLinkOrders-Auflistung (Java) oder Vollständige MobiLinkOrders-Auflistung (.NET) zur Überprüfung des Codes.
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 Installationsverzeichnis\java referenzieren.
Für Java führen Sie den folgenden Befehl aus und ersetzen C:\Programme\SQL Anywhere 12\ durch Ihr SQL Anywhere 12-Verzeichnis:
javac -classpath "C:\Programme\SQL Anywhere 12\java\mlscript.jar" MobiLinkOrders.java |
Für .NET führen Sie den folgenden Befehl aus und ersetzen C:\Programme\SQL Anywhere 12\ durch Ihr SQL Anywhere 12 Verzeichnis:
csc /out:MobiLinkServerCode.dll /target:library /reference:"C:\Programme\SQL Anywhere 12\Assembly\v2\iAnywhere.MobiLink.Script.dll" MobiLinkOrders.cs |
Dieses Beispiel stellt nicht sicher, dass die Primärschlüsselwerte eindeutig sind. Siehe Eindeutige Primärschlüssel aufrechterhalten.
Vollständige MobiLinkOrders-Auflistung (Java)
Vollständige MobiLinkOrders-Auflistung (.NET)
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |