Freigeben über


Abschließen von Vorgängen für Tabellen mit großen Datentypen in Oracle E-Business Suite mithilfe des WCF-Dienstmodells

Der Oracle E-Business-Adapter ermöglicht Adapterclients das Ausführen von Vorgängen für Schnittstellentabellen und Ansichten mit großen Datentypen wie BLOB, CLOB, NCLOB und BFILE.

  • Für Spalten vom Typ BLOB, CLOB und NCLOB ermöglicht der Adapter Clients das Lesen und Aktualisieren von Daten. Der Adapter macht Read_<LOBColName> - und Update_<LOBColName-Vorgänge> verfügbar, um Daten zu lesen und zu aktualisieren, wobei <LOBColName> der Name der Spalte mit großem Datentyp ist. Wenn mehr als eine Spalte mit einem großen Datentyp in einer einzelnen Schnittstellentabelle vorhanden ist, macht der Adapter so viele Lese- und Aktualisierungsvorgänge für diese Schnittstellentabelle verfügbar.

  • Für Spalten vom Typ BFILE können Adapterclients nur Daten lesen. Der Adapter macht Read_<LOBColName-Vorgang> verfügbar, um Daten aus Spalten des BFILE-Typs zu lesen. Wenn mehr als eine Spalte mit einem großen Datentyp in einer einzelnen Schnittstellentabelle vorhanden ist, macht der Adapter so viele Lesevorgänge für die Schnittstellentabelle verfügbar.

    Weitere Informationen zu diesen Vorgängen finden Sie unter Vorgänge für Schnittstellentabellen, Schnittstellensichten, Tabellen und Sichten, die LOB-Daten enthalten.

Informationen zu den in diesem Thema verwendeten Beispielen

Das Beispiel in diesem Thema aktualisiert eine BLOB-Spalte (PHOTO) in der Customer-Datenbanktabelle und ruft dann die Daten aus derselben Spalte ab. Die Tabelle wird erstellt, indem das mit den Beispielen bereitgestellte Skript ausgeführt wird. Weitere Informationen zu Beispielen finden Sie unter Beispiele für den Oracle EBS-Adapter. Ein Beispiel , LargeDataTypes_ServiceModel, das auf diesem Thema basiert, wird auch mit den Oracle E-Business-Adapterbeispielen bereitgestellt.

Hinweis

In diesem Thema werden ausführliche Aufgaben zum Aktualisieren und Lesen von Spalten großer Datentypen in einer Basisdatenbanktabelle aufgeführt. Sie müssen die gleichen Aufgaben ausführen, um Spalten großer Datentypen in einer Schnittstellentabelle zu aktualisieren und zu lesen.

Die WCF-Clientklasse

Der Name des WCF-Clients, der für die Vorgänge für Tabellen mit großen Datentypen vom Oracle E-Business-Adapter generiert wird, basiert auf dem Namen der Tabelle, wie in der folgenden Tabelle aufgeführt.

Artefakt WCF-Clientname
Schnittstellentabellen InterfaceTables_[APP_NAME][SCHEMA]\[TABLE_NAME]Client

[APP_NAME] = Tatsächlicher Name der Oracle E-Business Suite-Anwendung; z. B. FND.

[SCHEMA] = Sammlung von Artefakten; z. B. APPS.

[TABLE_NAME] = Der Name der Tabelle; beispielsweise MS_SAMPLE_EMPLOYEE.

[VIEW_NAME] = Der Name der Ansicht; beispielsweise MS_SAMPLE_EMPLOYEE_View.

Methodensignatur zum Aufrufen von Vorgängen für Tabellen

Die folgende Tabelle zeigt die Methodensignaturen für die grundlegenden Vorgänge für eine Tabelle. Die Signaturen sind für eine Ansicht identisch, mit der Ausnahme, dass der Ansichtsnamespace und der Name die der Tabelle ersetzen.

Vorgang Methodensignatur
< Update_column_name> public void Update_<column_name>(string FILTER, byte[] DATA);
< Read_column_name> public System.IO.Stream Read_<column_name>(string FILTER);

Der folgende Code zeigt beispielsweise die Methodensignaturen für eine WCF-Clientklasse, die für die Update_PHOTO- und Read_PHOTO-Vorgänge für die CUSTOMER-Datenbanktabelle unter dem APPS-Schema generiert wurden.

public partial class Tables_APPS_CUSTOMERClient : System.ServiceModel.ClientBase<Tables_APPS_CUSTOMER>, Tables_APPS_CUSTOMER {      

    public void Update_PHOTO(string FILTER, byte[] DATA);  

    public System.IO.Stream Read_PHOTO(string FILTER);  
}  

In diesem Codeausschnitt ist Tables_APPS_CUSTOMERClient der Name der WCF-Klasse in der OracleEBSBindingClient.cs, die vom Add Adapter Service Reference Plug-In generiert wird. Update_PHOTO und Read_PHOTO sind Methoden, die aufgerufen werden können, um Spalten großer Datentypen in einer Tabelle zu aktualisieren und zu lesen.

Parameter für Tabellenvorgänge

Dieser Abschnitt enthält die Parameter, die für den vorgang Update_<column_name> und Read_<column_name> erforderlich sind.

Vorgangsname Parameter
< Update_column_name> Erfordert die folgenden Parameter:

- string FILTER. Dieser Parameter muss die where-Klausel enthalten, die den Datensatz angibt, für den Die Daten aktualisiert werden müssen. Beispiel: "WHERE Name='Mindy Martin'".
- byte[] DATA. Enthält ein Bytearray von Daten, die in einer Spalte mit großem Datentyp aktualisiert werden sollen.
< Read_column_name> Erfordert die folgenden Parameter:

- string FILTER. Dieser Parameter muss die where-Klausel enthalten, die den Datensatz angibt, aus dem die Daten gelesen werden müssen. Beispiel: "WHERE Name='Mindy Martin'".

Erstellen eines WCF-Clients zum Aufrufen von Vorgängen für Tabellen mit Spalten großer Datentypen

Der generische Satz von Aktionen, die zum Ausführen eines Vorgangs in Oracle E-Business Suite mithilfe eines WCF-Clients erforderlich sind, umfasst eine Reihe von Aufgaben, die unter Übersicht über das WCF-Dienstmodell mit dem Oracle E-Business Suite-Adapter beschrieben werden. In diesem Abschnitt wird beschrieben, wie Sie einen WCF-Client erstellen, um Update_PHOTO- und Read_PHOTO-Vorgänge für eine CUSTOMER-Datenbanktabelle aufzurufen.

So erstellen Sie einen WCF-Client

  1. Erstellen Sie ein Visual C#-Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.

  2. Generieren Sie die WCF-Clientklasse für die Update_PHOTO- und Read_PHOTO-Vorgänge in der CUSTOMER-Datenbanktabelle. Weitere Informationen zum Generieren einer WCF-Clientklasse finden Sie unter Generieren eines WCF-Clients oder eines WCF-Dienstvertrags für Oracle E-Business Suite-Lösungsartefakte.

    Wichtig

    Stellen Sie vor dem Generieren der WCF-Clientklasse sicher, dass Sie die Bindungseigenschaft EnableBizTalkCompatibilityMode auf false festlegen.

  3. Fügen Sie im Projektmappen-Explorer verweis auf Microsoft.Adapters.OracleEBS und Microsoft.ServiceModel.ChannelshinzuSystem.Transactions.

  4. Öffnen Sie die Datei Program.cs, und fügen Sie die folgenden Namespaces hinzu:

    • Microsoft.Adapters.OracleEBS

    • System.ServiceModel

    • System.Transactions

    • System.IO

  5. Öffnen Sie die Datei Program.cs, und erstellen Sie einen Client, wie im folgenden Codeausschnitt beschrieben.

    
              Tables_APPS_CUSTOMERClient client = new Tables_APPS_CUSTOMERClient("OracleEBSBinding_Tables_APPS_CUSTOMER");  
    
    client.ClientCredentials.UserName.UserName = "<Enter user name here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    In diesem Codeausschnitt ist der WCF-Client, Tables_APPS_CUSTOMERClient der in OracleEBSBindingClient.cs definiert ist. Diese Datei wird vom Add Adapter Service Reference Plug-In generiert.

    Hinweis

    In diesem Codeausschnitt verwenden Sie die Bindungs- und Endpunktadresse aus der Konfigurationsdatei app.config. Sie können diese Werte auch explizit im Code angeben. Weitere Informationen zu den verschiedenen Möglichkeiten zum Angeben der Clientbindung finden Sie unter Konfigurieren einer Clientbindung für die Oracle E-Business Suite.

  6. Legen Sie die Anmeldeinformationen für den Client fest.

    client.ClientCredentials.UserName.UserName = "myuser";  
    client.ClientCredentials.UserName.Password = "mypassword";  
    

    Wichtig

    In diesem Beispiel führen Sie Vorgänge für eine Datenbanktabelle aus. Wenn Sie jedoch Vorgänge für eine Schnittstellentabelle ausführen, müssen Sie den Anwendungskontext festlegen, indem Sie geeignete Werte für die Bindungseigenschaften OracleUserName, OraclePassword und OracleEBSResponsibilityName angeben. Sie müssen diese Bindungseigenschaften angeben, bevor Sie den Client öffnen. Weitere Informationen zum Anwendungskontext finden Sie unter Festlegen des Anwendungskontexts.

  7. Öffnen Sie den Client wie im folgenden Codeausschnitt beschrieben:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  8. Rufen Sie den vorgang Update_PHOTO für die Tabelle CUSTOMER auf.

    Der Update_PHOTO Vorgang erfordert ein Bytearray, damit die Daten aktualisiert werden. In diesem Codeausschnitt verwenden Sie die FileStream-Klasse, um ein Bytearray für ein Foto zu erstellen, SamplePhoto.jpg. Damit diese Anwendung funktioniert, muss die Datei in das Bin-Verzeichnis des Projekts kopiert werden.

    Wichtig

    Der Update_PHOTO-Vorgangs muss in einer Transaktion ausgeführt werden, sodass die UseAmbientTransaction-Bindungseigenschaft auf TRUE und der Update_PHOTO-Vorgang innerhalb eines Transaktionsbereichs ausgeführt werden muss. Sie können die UseAmbientTransaction-Bindungseigenschaft entweder im app.config oder durch explizites Festlegen in Ihrer Anwendung als binding.UseAmbientTransaction = truefestlegen. Wenn Sie die Bindungseigenschaft explizit im Code angeben, müssen Sie dies vor dem Öffnen des Clients tun.

    byte[] photo;  
    
    using (FileStream fs = new FileStream("SamplePhoto.jpg", FileMode.Open))  
    {  
        try  
        {  
            Console.WriteLine("Reading the photo");  
            int count = 0;  
            photo = new byte[fs.Length];  
            while ((count += fs.Read(photo, count, (int)(((fs.Length - count) > 4096) ? 4096 : fs.Length - count))) < fs.Length) ;  
        }  
        catch(Exception ex)  
        {  
            Console.WriteLine("Exception: " + ex.Message);  
            throw;  
        }  
    }  
    
    Console.WriteLine("Updating data for the 'PHOTO' column");  
    // Invoking the Update_PHOTO operation inside a transaction scope  
    using (TransactionScope tx = new TransactionScope())  
    {  
        string filter = "WHERE Name='Mindy Martin'";  
        client.Update_PHOTO(filter, photo);  
        tx.Complete();  
    }  
    
    
  9. Rufen Sie den vorgang Read_PHOTO für die TABELLE CUSTOMER auf.

    Die Read_PHOTO gibt die Ausgabe in Form von System.IO.Stream an. Der Adapterclient muss die FileStream-Klasse implementieren, um die Daten aus Read_PHOTO Vorgang zu lesen. Nach Abschluss des Read_PHOTO Vorgangs wird eine Datei PhotoCopy.jpg im Verzeichnis bin des Projekts kopiert.

    using (FileStream fs = new FileStream("PhotoCopy.jpg", FileMode.Create))  
    {  
        Console.WriteLine("Reading photo data");  
        String ReadFilter = "WHERE NAME='Mindy Martin'";  
        Stream photoStream = client.Read_PHOTO(ReadFilter);  
        Console.WriteLine("Photo data read -- writing to PhotoCopy.jpg");  
    
        int count;  
        int length = 0;  
        byte[] buffer = new byte[4096];  
        while ((count = photoStream.Read(buffer, 0, 4096)) > 0)  
        {  
            fs.Write(buffer, 0, count);  
            length+=count;  
        }  
        Console.WriteLine("{0} bytes written to PhotoCopy.jpg", length);  
    }  
    
    Console.WriteLine("Photo updated and read back -- Hit <RETURN> to end");  
    Console.ReadLine();  
    
  10. Schließen Sie den Client wie im folgenden Codeausschnitt beschrieben:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  11. Erstellen Sie das Projekt, und führen Sie es dann aus. Die Anwendung aktualisiert die PHOTO-Spalte der TABELLE CUSTOMER und liest dann den Inhalt der SPALTE PHOTO.

Weitere Informationen

Entwickeln von Oracle E-Business Suite-Anwendungen mithilfe des WCF-Dienstmodells