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

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

 

Lektion 3: Java- oder .NET-Logik für direkte Zeilenbehandlung schreiben

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

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

  3. 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;
    }
  4. 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;
  5. 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;
      }
  6. 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();
        }
  7. 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:

      DownloadData download_d = _cc.getDownloadData();
      DownloadTableData download_td = download_d.getDownloadTableByName( "OrderComments" );

      Für .NET:

      DownloadTableData comments_for_download = 
          _cc.GetDownloadData().GetDownloadTableByName( "OrderComments" );
      Hinweis

      Die Erstellung dieser Tabelle in der entfernten Datenbank wird in Lektion 5: MobiLink-Client einrichten beschrieben.

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

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

Dieses Beispiel stellt nicht sicher, dass die Primärschlüsselwerte eindeutig sind. Weitere Hinweise finden Sie unter Eindeutige Primärschlüssel aufrechterhalten.

Weitere Hinweise

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)