Effectuer des opérations sur des tables avec des types de données volumineux dans Oracle E-Business Suite à l’aide du modèle de service WCF
L’adaptateur Oracle E-Business permet aux clients d’adaptateur d’effectuer des opérations sur des tables et des vues d’interface avec des types de données volumineux tels que BLOB, CLOB, NCLOB et BFILE.
Pour les colonnes de type BLOB, CLOB et NCLOB, l’adaptateur permet aux clients de lire et de mettre à jour des données. L’adaptateur expose les opérations Read_<LOBColName> et Update_<LOBColName> pour lire et mettre à jour des données respectivement, où <LOBColName> est le nom de colonne avec un type de données volumineux. S’il existe plusieurs colonnes avec un type de données volumineux dans une table d’interface unique, l’adaptateur expose autant d’opérations de lecture et de mise à jour pour cette table d’interface.
Pour les colonnes de type BFILE, les clients d’adaptateur peuvent uniquement lire des données. L’adaptateur expose Read_<opérationLOBColName> pour lire les données des colonnes de type BFILE. S’il existe plusieurs colonnes avec un type de données volumineux dans une table d’interface unique, l’adaptateur expose autant d’opérations de lecture pour la table d’interface.
Pour plus d’informations sur ces opérations, consultez Opérations sur les tables d’interface, les vues d’interface, les tables et les vues qui contiennent des données métier.
À propos des exemples utilisés dans cette rubrique
L’exemple de cette rubrique met à jour une colonne BLOB (PHOTO) dans la table de base de données CUSTOMER, puis récupère les données de la même colonne. La table est créée en exécutant le script fourni avec les exemples. Pour plus d’informations sur les exemples, consultez Exemples pour l’adaptateur Oracle EBS. Un exemple, LargeDataTypes_ServiceModel, basé sur cette rubrique, est également fourni avec les exemples d’adaptateur Oracle E-Business.
Notes
Cette rubrique répertorie les tâches détaillées de mise à jour et de lecture des colonnes de types de données volumineux dans une table de base de données. Vous devez effectuer le même ensemble de tâches pour mettre à jour et lire des colonnes de types de données volumineux dans une table d’interface.
Classe de client WCF
Le nom du client WCF généré pour les opérations sur les tables avec des types de données volumineux par l’adaptateur Oracle E-Business est basé sur le nom de la table, comme indiqué dans le tableau suivant.
Artefact | Nom du client WCF |
---|---|
Tables d’interface | InterfaceTables_[APP_NAME][SCHEMA]\[TABLE_NAME]Client |
[APP_NAME] = nom réel de l’application Oracle E-Business Suite ; par exemple, FND.
[SCHEMA] = Collection d’artefacts ; par exemple, APPLICATIONS.
[TABLE_NAME] = Nom de la table ; par exemple, MS_SAMPLE_EMPLOYEE.
[VIEW_NAME] = Nom de la vue ; par exemple, MS_SAMPLE_EMPLOYEE_View.
Signature de méthode pour les opérations d’appel sur des tables
Le tableau suivant montre les signatures de méthode pour les opérations de base sur une table. Les signatures sont les mêmes pour une vue, sauf que l’espace de noms et le nom de la vue remplacent ceux de la table.
Opération | Signature de méthode |
---|---|
< Update_column_name> | public void Update_<column_name>(string FILTER, byte[] DATA) ; |
< Read_column_name> | public System.IO.Stream Read_<column_name>(string FILTER) ; |
Par exemple, le code suivant montre les signatures de méthode pour une classe de client WCF générées pour les opérations Update_PHOTO et Read_PHOTO sur la table de base de données CUSTOMER sous le schéma 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);
}
Dans cet extrait de code, Tables_APPS_CUSTOMERClient est le nom de la classe WCF dans le fichier OracleEBSBindingClient.cs généré par le plug-in Add Adapter Service Reference. Update_PHOTO et Read_PHOTO sont des méthodes qui peuvent être appelées pour mettre à jour et lire des colonnes de types de données volumineux dans une table.
Paramètres pour les opérations de table
Cette section fournit les paramètres requis par l’opération Update_<column_name> et Read_<column_name> .
Nom d’opération | Paramètres |
---|---|
< Update_column_name> | Nécessite les paramètres suivants : - string FILTER . Ce paramètre doit contenir la clause where qui désigne l’enregistrement pour lequel les données doivent être mises à jour. Par exemple : "WHERE Name='Mindy Martin'" .- byte[] DATA . Contient un tableau d’octets de données à mettre à jour dans une colonne de type de données volumineuse. |
< Read_column_name> | Nécessite les paramètres suivants : - string FILTER . Ce paramètre doit contenir la clause where qui désigne l’enregistrement à partir duquel les données doivent être lues. Par exemple : "WHERE Name='Mindy Martin'" . |
Création d’un client WCF pour appeler des opérations sur des tables avec des colonnes de types de données volumineux
L’ensemble générique d’actions requis pour effectuer une opération sur Oracle E-Business Suite à l’aide d’un client WCF implique un ensemble de tâches décrites dans Vue d’ensemble du modèle de service WCF avec l’adaptateur Oracle E-Business Suite. Cette section explique comment créer un client WCF pour appeler des opérations Update_PHOTO et Read_PHOTO sur une table de base de données CUSTOMER.
Pour créer un client WCF
Créez un projet Visual C# dans Visual Studio. Pour cette rubrique, créez une application console.
Générez la classe de client WCF pour les opérations Update_PHOTO et Read_PHOTO sur la table de base de données CUSTOMER. Pour plus d’informations sur la génération d’une classe de client WCF, consultez Générer un client WCF ou un contrat de service WCF pour les artefacts de solution Oracle E-Business Suite.
Important
Avant de générer la classe de client WCF, veillez à définir la propriété de liaison EnableBizTalkCompatibilityMode sur false.
Dans le Explorateur de solutions, ajoutez une référence à
Microsoft.Adapters.OracleEBS
etMicrosoft.ServiceModel.Channels
,System.Transactions
.Ouvrez le fichier Program.cs et ajoutez les espaces de noms suivants :
Microsoft.Adapters.OracleEBS
System.ServiceModel
System.Transactions
System.IO
Ouvrez le fichier Program.cs et créez un client comme décrit dans l’extrait de code ci-dessous.
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>";
Dans cet extrait de code,
Tables_APPS_CUSTOMERClient
est le client WCF défini dans OracleEBSBindingClient.cs. Ce fichier est généré par le plug-in Add Adapter Service Reference.Notes
Dans cet extrait de code, vous utilisez la liaison et l’adresse de point de terminaison du fichier de configuration app.config. Vous pouvez également spécifier explicitement ces valeurs dans votre code. Pour plus d’informations sur les différentes façons de spécifier la liaison cliente, consultez Configurer une liaison cliente pour Oracle E-Business Suite.
Définissez les informations d’identification pour le client.
client.ClientCredentials.UserName.UserName = "myuser"; client.ClientCredentials.UserName.Password = "mypassword";
Important
Dans cet exemple, vous effectuez des opérations sur une table de base de données. Toutefois, si vous effectuez des opérations sur une table d’interface, vous devez définir le contexte de l’application en spécifiant les valeurs appropriées pour les propriétés de liaison OracleUserName, OraclePassword et OracleEBSResponsibilityName . Vous devez spécifier ces propriétés de liaison avant d’ouvrir le client. Pour plus d’informations sur le contexte d’application, consultez Définir le contexte d’application.
Ouvrez le client comme décrit dans l’extrait de code ci-dessous :
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
Appelez l’opération Update_PHOTO sur la table CUSTOMER.
L’opération Update_PHOTO nécessite un tableau d’octets pour que les données soient mises à jour. Dans cet extrait de code, vous utilisez la classe FileStream pour créer un tableau d’octets pour une photo, SamplePhoto.jpg. Pour que cette application fonctionne, le fichier doit être copié dans le répertoire bin du projet.
Important
L’opération de Update_PHOTO doit être effectuée dans une transaction, de sorte que la propriété de liaison UseAmbientTransaction doit avoir la valeur true et l’opération Update_PHOTO doit être effectuée dans une étendue de transaction. Vous pouvez définir la propriété de liaison UseAmbientTransaction dans le app.config ou en la définissant explicitement dans votre application comme
binding.UseAmbientTransaction = true
. Notez que si vous spécifiez explicitement la propriété de liaison dans le code, vous devez le faire avant d’ouvrir le client.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(); }
Appelez l’opération Read_PHOTO sur la table CUSTOMER.
Le Read_PHOTO donne la sortie sous la forme de System.IO.Stream. Le client d’adaptateur doit implémenter la classe FileStream pour lire les données de Read_PHOTO opération. Une fois l’opération de Read_PHOTO terminée, un fichier PhotoCopy.jpg est copié dans le répertoire bin du projet.
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();
Fermez le client comme décrit dans l’extrait de code ci-dessous :
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
Générez le projet, puis exécutez-le. L’application met à jour la colonne PHOTO de la table CUSTOMER, puis lit le contenu de la colonne PHOTO.
Voir aussi
Développer des applications Oracle E-Business Suite à l’aide du modèle de service WCF