Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (Deutsch) » MobiLink - Erste Orientierung » Praktische Einführungen in MobiLink » Praktische Einführung: Direkte Zeilenbehandlung

 

Lektion 4: Java- oder .NET-Klasse für die direkte Zeilenbehandlung in MobiLink erstellen

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).

 ♦  So erstellen Sie eine Java- oder .NET-Klasse für die direkte Zeilenbehandlung
  1. 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 {
  2. 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.

  3. 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;
  4. 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;
        }
  5. 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();
        }
  6. Schreiben Sie die SetDownload-Methode:

    1. 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");
      Hinweis

      Die Erstellung dieser Tabelle in der entfernten Datenbank wird in Lektion 6: Konsolidierte MobiLink-Clientdatenbank einrichten beschrieben.

    2. 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();
      
    3. 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();
              }
          }
    4. 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.

  7. 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;
            }
        }
    }
  8. 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.

  9. Siehe Vollständige MobiLinkOrders-Auflistung (Java) oder Vollständige MobiLinkOrders-Auflistung (.NET) zur Überprüfung des Codes.

  10. Kompilieren Sie Ihre Klassendatei.

    1. Navigieren Sie zum Verzeichnis mit Ihren Java- oder .NET-Quelldateien.

    2. 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
Hinweis

Dieses Beispiel stellt nicht sicher, dass die Primärschlüsselwerte eindeutig sind. Siehe Eindeutige Primärschlüssel aufrechterhalten.

 Weitere Hinweise

Vollständige MobiLinkOrders-Auflistung (Java)
Vollständige MobiLinkOrders-Auflistung (.NET)