Compartir a través de


Realización de operaciones en tablas con tipos de datos de gran tamaño en Oracle E-Business Suite mediante el modelo de servicio WCF

El adaptador de Oracle E-Business permite a los clientes adaptadores realizar operaciones en tablas y vistas de interfaz con tipos de datos de gran tamaño, como BLOB, CLOB, NCLOB y BFILE.

  • En el caso de las columnas de tipo BLOB, CLOB y NCLOB, el adaptador permite a los clientes leer y actualizar datos. El adaptador expone Read_<LOBColName> y las operaciones Update_<LOBColName para leer y actualizar los datos, respectivamente, donde <LOBColName>> es el nombre de la columna con un tipo de datos grande. Si hay más de una columna con un tipo de datos grande en una sola tabla de interfaz, el adaptador expone tantas operaciones de lectura y actualización para esa tabla de interfaz.

  • En el caso de las columnas de tipo BFILE, los clientes del adaptador solo pueden leer datos. El adaptador expone Read_<operaciónLOBColName> para leer datos de columnas de tipo BFILE. Si hay más de una columna con un tipo de datos grande en una sola tabla de interfaz, el adaptador expone tantas operaciones de lectura para la tabla de interfaz.

    Para obtener más información sobre estas operaciones, vea Operaciones en tablas de interfaz, vistas de interfaz, tablas y vistas que contienen datos loB.

Acerca de los ejemplos usados en este tema

En el ejemplo de este tema se actualiza una columna BLOB (PHOTO) en la tabla de base de datos CUSTOMER y, a continuación, se recuperan los datos de la misma columna. La tabla se crea ejecutando el script proporcionado con los ejemplos. Para obtener más información sobre los ejemplos, consulte Ejemplos para el adaptador de Oracle EBS. También se proporciona un ejemplo, LargeDataTypes_ServiceModel, que se basa en este tema, con los ejemplos de adaptadores de Oracle E-Business.

Nota

En este tema se enumeran las tareas detalladas para actualizar y leer columnas de tipos de datos grandes en una tabla base de datos. Debe realizar el mismo conjunto de tareas para actualizar y leer columnas de tipos de datos de gran tamaño en una tabla de interfaz.

La clase de cliente WCF

El nombre del cliente WCF generado para las operaciones en tablas con tipos de datos de gran tamaño por el adaptador de Oracle E-Business se basa en el nombre de la tabla, como se muestra en la tabla siguiente.

Artefacto Nombre de cliente de WCF
Tablas de interfaz InterfaceTables_[APP_NAME][SCHEMA]\[TABLE_NAME]Client

[APP_NAME] = Nombre real de la aplicación Oracle E-Business Suite; por ejemplo, FND.

[SCHEMA] = Colección de artefactos; por ejemplo, APPS.

[TABLE_NAME] = El nombre de la tabla; por ejemplo, MS_SAMPLE_EMPLOYEE.

[VIEW_NAME] = El nombre de la vista; por ejemplo, MS_SAMPLE_EMPLOYEE_View.

Firma de método para invocar operaciones en tablas

En la tabla siguiente se muestran las firmas de método para las operaciones básicas de una tabla. Las firmas son las mismas para una vista, salvo que el espacio de nombres de la vista y el nombre reemplazan a los de la tabla.

Operación Firma del método
< Update_column_name> public void Update_<column_name>(string FILTER, byte[] DATA);
< Read_column_name> public System.IO.Stream Read_<column_name>(string FILTER);

Por ejemplo, en el código siguiente se muestran las firmas de método para una clase de cliente WCF generada para las operaciones de Update_PHOTO y Read_PHOTO en la tabla de base de datos CUSTOMER en el esquema APPS.

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);  
}  

En este fragmento de código, Tables_APPS_CUSTOMERClient es el nombre de la clase WCF en oracleEBSBindingClient.cs generada por el complemento Agregar referencia de servicio de adaptador. Update_PHOTO y Read_PHOTO son métodos que se pueden invocar para actualizar y leer columnas de tipos de datos de gran tamaño en una tabla.

Parámetros para las operaciones de tabla

En esta sección se proporcionan los parámetros necesarios para la operación Update_<column_name> y Read_<column_name>.

Nombre de operación Parámetros
< Update_column_name> Requiere los parámetros siguientes:

- string FILTER. Este parámetro debe contener la cláusula where que indica el registro para el que se deben actualizar los datos. Por ejemplo, "WHERE Name='Mindy Martin'".
- byte[] DATA. Contiene una matriz de bytes de datos que se va a actualizar en una columna de tipo de datos de gran tamaño.
< Read_column_name> Requiere los parámetros siguientes:

- string FILTER. Este parámetro debe contener la cláusula where que indica el registro desde el que se deben leer los datos. Por ejemplo, "WHERE Name='Mindy Martin'".

Creación de un cliente WCF para invocar operaciones en tablas con columnas de tipos de datos grandes

El conjunto genérico de acciones necesarias para realizar una operación en Oracle E-Business Suite mediante un cliente WCF implica un conjunto de tareas descritas en Información general del modelo de servicio WCF con el adaptador de Oracle E-Business Suite. En esta sección se describe cómo crear un cliente WCF para invocar Update_PHOTO y Read_PHOTO operaciones en una tabla de base de datos CUSTOMER.

Para crear un cliente WCF

  1. Cree un proyecto de Visual C# en Visual Studio. En este tema, cree una aplicación de consola.

  2. Genere la clase de cliente WCF para las operaciones de Update_PHOTO y Read_PHOTO en la tabla de base de datos CUSTOMER. Para obtener más información sobre cómo generar una clase de cliente WCF, consulte Generación de un cliente WCF o un contrato de servicio WCF para artefactos de soluciones de Oracle E-Business Suite.

    Importante

    Antes de generar la clase de cliente WCF, asegúrese de establecer la propiedad de enlace EnableBizTalkCompatibilityMode en false.

  3. En el Explorador de soluciones, agregue referencia a Microsoft.Adapters.OracleEBS y Microsoft.ServiceModel.Channels, System.Transactions.

  4. Abra el archivo Program.cs y agregue los siguientes espacios de nombres:

    • Microsoft.Adapters.OracleEBS

    • System.ServiceModel

    • System.Transactions

    • System.IO

  5. Abra el archivo Program.cs y cree un cliente como se describe en el fragmento de código siguiente.

    
              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>";  
    

    En este fragmento de código, Tables_APPS_CUSTOMERClient es el cliente WCF definido en OracleEBSBindingClient.cs. El complemento Agregar referencia del servicio adaptador genera este archivo.

    Nota

    En este fragmento de código, se usa la dirección de enlace y punto de conexión del archivo de configuración app.config. También puede especificar explícitamente estos valores en el código. Para obtener más información sobre las distintas formas de especificar el enlace de cliente, consulte Configuración de un enlace de cliente para Oracle E-Business Suite.

  6. Establezca las credenciales para el cliente.

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

    Importante

    En este ejemplo, va a realizar operaciones en una tabla de base de datos. Sin embargo, si está realizando operaciones en una tabla de interfaz, debe establecer el contexto de la aplicación especificando los valores adecuados para las propiedades de enlace OracleUserName, OraclePassword y OracleEBSResponsibilityName . Debe especificar estas propiedades de enlace antes de abrir el cliente. Para obtener más información sobre el contexto de la aplicación, consulte Establecimiento del contexto de la aplicación.

  7. Abra el cliente tal y como se describe en el fragmento de código siguiente:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  8. Invoque la operación Update_PHOTO en la tabla CUSTOMER.

    La operación de Update_PHOTO requiere que se actualice una matriz de bytes para los datos. En este fragmento de código, se usa la clase FileStream para crear una matriz de bytes para una foto, SamplePhoto.jpg. Para que esta aplicación funcione, el archivo debe copiarse en el directorio bin del proyecto.

    Importante

    La operación de Update_PHOTO debe realizarse en una transacción, por lo que la propiedad de enlace UseAmbientTransaction debe establecerse en true y la operación de Update_PHOTO debe realizarse dentro de un ámbito de transacción. Puede establecer la propiedad de enlace UseAmbientTransaction en el app.config o estableciendo explícitamente en la aplicación como binding.UseAmbientTransaction = true. Tenga en cuenta que si especifica la propiedad de enlace explícitamente en el código, debe hacerlo antes de abrir el cliente.

    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. Invoque la operación Read_PHOTO en la tabla CUSTOMER.

    El Read_PHOTO proporciona el resultado en forma de System.IO.Stream. El cliente del adaptador debe implementar la clase FileStream para leer los datos de Read_PHOTO operación. Una vez completada la operación de Read_PHOTO, se copia un archivo PhotoCopy.jpg en el directorio bin del proyecto.

    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. Cierre el cliente como se describe en el fragmento de código siguiente:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  11. Compile el proyecto y ejecútelo. La aplicación actualiza la columna PHOTO de la tabla CUSTOMER y, a continuación, lee el contenido de la columna PHOTO.

Consulte también

Desarrollo de aplicaciones de Oracle E-Business Suite mediante el modelo de servicio WCF