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 lädt mithilfe der Datei orderResponses.txt Download-Antworten auf entfernte Clients.
Sie fügen außerdem die EndDownload-Methode hinzu, um das end_download-Ereignis zu verarbeiten.
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 mit Java oder .NET eine Klasse mit dem Namen MobiLinkOrders.
Für Java geben Sie den folgenden Code in einen Texteditor oder eine Entwicklungsumgebung ein.
import ianywhere.ml.script.*; import java.io.*; import java.sql.*; public class MobiLinkOrders{ // to do... |
Für .NET verwenden Sie den folgenden Code:
using iAnywhere.MobiLink.Script; using System.IO; using System.Data; using System.Text; public class MobiLinkOrders // to do... |
Deklarieren Sie eine DBConnectionContext-Instanzvariable auf Klassenebene.
In Java:
// class level DBConnectionContext DBConnectionContext _cc; |
In .NET:
// 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.
Erstellen Sie Ihren Klassenkonstruktor.
Ihr Klassenkonstruktor legt Ihre DBConnectionContext-Instanz auf Klassenebene fest.
Für Java:
public MobiLinkOrders( DBConnectionContext cc ) { // set your class-level DBConnectionContext _cc = cc; } |
Für .NET:
public MobiLinkOrders( DBConnectionContext cc ) { _cc = cc; } |
Deklarieren Sie Objekte für die Dateieingabe und Dateiausgabe.
Für Java deklarieren Sie einen java.io.FileWriter und java.io.BufferedReader:
// java objects for file i/o FileWriter my_writer; BufferedReader my_reader; |
Für .NET deklarieren Sie einen StreamWriter und StreamReader:
// instances for file I/O private static StreamWriter my_writer = null; private static StreamReader my_reader = null; |
Erstellen Sie die EndDownload-Methode.
Diese Methode verarbeitet das end_download-Verbindungsereignis und bietet Ihnen die Möglichkeit, Ressourcen freizugeben.
Für Java:
public void EndDownload() throws IOException { // free i/o resources if (my_reader!=null) my_reader.close(); if (my_writer!=null) my_writer.close(); } |
Für .NET:
public void EndDownload() { if( my_writer != null ) { my_writer.Close(); my_writer = null; } |
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 5: MobiLink-Client 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:
//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(); } // writes out comment details to file public void writeOrderComment( int _commentID, int _orderID, String _comments ) throws IOException { // a FileWriter for writing order comments if(my_writer == null) { 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(); } |
In .NET:
// 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 upload 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 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:
DownloadData download_d = _cc.getDownloadData(); DownloadTableData download_td = download_d.getDownloadTableByName( "OrderComments" ); |
Für .NET:
DownloadTableData comments_for_download = _cc.GetDownloadData().GetDownloadTableByName( "OrderComments" ); |
Die Erstellung dieser Tabelle in der entfernten Datenbank wird in Lektion 5: MobiLink-Client einrichten beschrieben.
Rufen Sie eine vorbereitete Anweisung oder IDBCommand auf, die Ihnen das Hinzufügen von Einfüge- oder Aktualisierungsvorgängen zum Download ermöglichen.
Für Java verwenden Sie die DownloadTableData getUpsertPreparedStatement-Methode, um eine java.sql.PreparedStatement-Instanz zurückzugeben.
PreparedStatement update_ps = download_td.getUpsertPreparedStatement(); |
Für .NET verwenden Sie die DownloadTableData GetUpsertCommand-Methode:
// add upserts to the set of operation that are going to be applied at the // remote database IDbCommand comments_upsert = comments_for_download.GetUpsertCommand(); |
Senden Sie Antworten an entfernte Clients.
Erstellen Sie unter c:\MLdirect eine Textdatei mit dem Namen orderResponses.txt. Diese Datei enthält Antworten zu Kommentaren. Die Datei orderResponses.txt kann z.B. folgende Einträge mit durch Tabstops getrennten Werten für comment_id, order_id und order_comment enthalten.
... 786 34 OK, we will ship promotional material. 787 35 Yes, the product is going out of production. 788 36 No, we can't increase your commission... ... |
Legen Sie die Downloaddaten für jede Zeile fest.
Für Java durchläuft das folgende Beispiel die Datei orderResponses.txt und fügt Daten zum MobiLink-Download hinzu.
Für Java:
// a BufferedReader for reading in responses if (my_reader==null) my_reader = new BufferedReader(new FileReader( "c:\\MLdirect\\orderResponses.txt")); // send updated comments down to clients String commentLine; // read the first line from orderResponses.txt commentLine = my_reader.readLine(); 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[0]); 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 from orderResponses.txt commentLine = my_reader.readLine(); } |
Für .NET:
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 IDataParameters ((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:
update_ps.close(); |
Für .NET müssen Sie IDBCommand nicht schließen. Die Anweisung wird nach dem Download von MobiLink automatisch gelöscht.
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ühren Sie den folgenden Befehl aus, um Ihre Java-Klasse zu kompilieren:
javac -classpath "%SQLANY11%\java\mlscript.jar" MobiLinkOrders.java |
Für .NET führen Sie den folgenden Befehl aus:
csc /out:MobiLinkServerCode.dll /target:library /reference:"%SQLANY11%\Assembly\v2\iAnywhere.MobiLink.Script.dll" MobiLinkOrders.cs |
Dieses Beispiel stellt nicht sicher, dass die Primärschlüsselwerte eindeutig sind. Weitere Hinweise finden Sie unter Eindeutige Primärschlüssel aufrechterhalten.
Weitere Hinweise zu Klassenkonstruktoren und DBConnectionContext finden Sie unter:
Weitere Hinweise zur Java-Synchronisationslogik finden Sie unter Synchronisationsskripten in Java erstellen.
Weitere Hinweise zur .NET-Synchronisationslogik finden Sie unter Synchronisationsskripten in .NET erstellen.
Weitere Hinweise zur direkten Zeilenbehandlung mit finden Sie unter Direkte Zeilenbehandlung.
Vollständige MobiLinkOrders-Auflistung (Java)
Vollständige MobiLinkOrders-Auflistung (.NET)
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |