Completare le operazioni sulle tabelle con tipi di dati di grandi dimensioni in Oracle E-Business Suite usando il modello di servizio WCF
L'adattatore Oracle E-Business consente ai client dell'adattatore di eseguire operazioni su tabelle e viste di interfaccia con tipi di dati di grandi dimensioni, ad esempio BLOB, CLOB, NCLOB e BFILE.
Per le colonne di tipo BLOB, CLOB e NCLOB, l'adattatore consente ai client di leggere e aggiornare i dati. L'adapter espone rispettivamente le operazioni Read_<LOBColName> e Update_<LOBColName> per leggere e aggiornare i dati, dove <LOBColName> è il nome della colonna con tipo di dati di grandi dimensioni. Se in una singola tabella di interfaccia sono presenti più colonne con tipo di dati di grandi dimensioni, l'adattatore espone tutte le operazioni di lettura e aggiornamento per tale tabella di interfaccia.
Per le colonne di tipo BFILE, i client dell'adattatore possono leggere solo i dati. L'adapter espone Read_operazioneLOBColName>< per leggere i dati dalle colonne di tipo BFILE. Se in una singola tabella di interfaccia sono presenti più colonne con tipo di dati di grandi dimensioni, l'adattatore espone tutte le operazioni di lettura per la tabella dell'interfaccia.
Per altre informazioni su queste operazioni, vedere Operazioni su tabelle di interfaccia, viste di interfaccia, tabelle e viste contenenti dati LOB.
Informazioni sugli esempi usati in questo argomento
L'esempio in questo argomento aggiorna una colonna BLOB (PHOTO) nella tabella di database CUSTOMER e quindi recupera i dati dalla stessa colonna. La tabella viene creata eseguendo lo script fornito con gli esempi. Per altre informazioni sugli esempi, vedere Esempi per l'adapter Oracle EBS. Viene fornito anche un esempio, LargeDataTypes_ServiceModel, basato su questo argomento, con gli esempi dell'adapter Oracle E-Business.
Nota
In questo argomento vengono elencate le attività dettagliate per l'aggiornamento e la lettura di colonne di tipi di dati di grandi dimensioni in una tabella di database di base. È necessario eseguire lo stesso set di attività per l'aggiornamento e la lettura di colonne di tipi di dati di grandi dimensioni in una tabella di interfaccia.
Classe client WCF
Il nome del client WCF generato per le operazioni sulle tabelle con tipi di dati di grandi dimensioni dall'adattatore Oracle E-Business è basato sul nome della tabella, come indicato nella tabella seguente.
Elemento | Nome client WCF |
---|---|
Tabelle di interfaccia | InterfaceTables_[APP_NAME][SCHEMA]\[TABLE_NAME]Client |
[APP_NAME] = Nome effettivo dell'applicazione Oracle E-Business Suite; ad esempio FND.
[SCHEMA] = Raccolta di artefatti; ad esempio APP.
[TABLE_NAME] = Nome della tabella; ad esempio, MS_SAMPLE_EMPLOYEE.
[VIEW_NAME] = Nome della visualizzazione; ad esempio, MS_SAMPLE_EMPLOYEE_View.
Firma del metodo per richiamare operazioni sulle tabelle
Nella tabella seguente vengono illustrate le firme dei metodi per le operazioni di base in una tabella. Le firme sono le stesse per una vista, ad eccezione del fatto che lo spazio dei nomi e il nome della vista sostituiscono quelli della tabella.
Operazione | Firma del metodo |
---|---|
< Update_column_name> | public void Update_<column_name>(string FILTER, byte[] DATA); |
< Read_column_name> | public System.IO.Stream Read_<column_name>(string FILTER); |
Ad esempio, il codice seguente mostra le firme del metodo per una classe client WCF generata per le operazioni di Update_PHOTO e Read_PHOTO nella tabella di database CUSTOMER nello schema 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);
}
In questo frammento di codice Tables_APPS_CUSTOMERClient è il nome della classe WCF nel plug-in OracleEBSBindingClient.cs generato dal plug-in Aggiungi riferimento al servizio adapter. Update_PHOTO e Read_PHOTO sono metodi che possono essere richiamati per aggiornare e leggere colonne di tipi di dati di grandi dimensioni in una tabella.
Parametri per le operazioni di tabella
In questa sezione vengono forniti i parametri richiesti dall'operazione Update_<column_name> e Read_<column_name> .
Nome operazione | Parametri |
---|---|
< Update_column_name> | Richiede i parametri seguenti: - string FILTER . Questo parametro deve contenere la clausola where che indica il record per il quale devono essere aggiornati i dati. Ad esempio: "WHERE Name='Mindy Martin'" .- byte[] DATA . Contiene una matrice di byte di dati da aggiornare in una colonna di tipo di dati di grandi dimensioni. |
< Read_column_name> | Richiede i parametri seguenti: - string FILTER . Questo parametro deve contenere la clausola where che indica il record da cui devono essere letti i dati. Ad esempio: "WHERE Name='Mindy Martin'" . |
Creazione di un client WCF per richiamare operazioni su tabelle con colonne di tipi di dati di grandi dimensioni
Il set generico di azioni necessarie per eseguire un'operazione su Oracle E-Business Suite tramite un client WCF prevede un set di attività descritte in Panoramica del modello di servizio WCF con l'adapter Oracle E-Business Suite. Questa sezione descrive come creare un client WCF per richiamare Update_PHOTO e Read_PHOTO operazioni in una tabella di database CUSTOMER.
Per creare un client WCF
Creare un progetto Visual C# in Visual Studio. Per questo argomento, creare un'applicazione console.
Generare la classe client WCF per le operazioni di Update_PHOTO e Read_PHOTO nella tabella di database CUSTOMER. Per altre informazioni sulla generazione di una classe client WCF, vedere Generare un client WCF o un contratto di servizio WCF per gli artefatti della soluzione Oracle E-Business Suite.
Importante
Prima di generare la classe client WCF, assicurarsi di impostare la proprietà di associazione EnableBizTalkCompatibilityMode su false.
Nella Esplora soluzioni aggiungere il riferimento a
Microsoft.Adapters.OracleEBS
eMicrosoft.ServiceModel.Channels
,System.Transactions
.Aprire il file Program.cs e aggiungere gli spazi dei nomi seguenti:
Microsoft.Adapters.OracleEBS
System.ServiceModel
System.Transactions
System.IO
Aprire il file Program.cs e creare un client come descritto nel frammento di codice seguente.
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 questo frammento di
Tables_APPS_CUSTOMERClient
codice è il client WCF definito in OracleEBSBindingClient.cs. Questo file viene generato dal plug-in Aggiungi riferimento al servizio adapter.Nota
In questo frammento di codice si usano l'associazione e l'indirizzo dell'endpoint dal file di configurazione app.config. È anche possibile specificare in modo esplicito questi valori nel codice. Per altre informazioni sui diversi modi per specificare l'associazione client, vedere Configurare un'associazione client per Oracle E-Business Suite.
Impostare le credenziali per il client.
client.ClientCredentials.UserName.UserName = "myuser"; client.ClientCredentials.UserName.Password = "mypassword";
Importante
In questo esempio si eseguono operazioni su una tabella di database. Tuttavia, se si eseguono operazioni su una tabella di interfaccia, è necessario impostare il contesto dell'applicazione specificando i valori appropriati per le proprietà di associazione OracleUserName, OraclePassword e OracleEBSResponsibilityName . È necessario specificare queste proprietà di associazione prima di aprire il client. Per altre informazioni sul contesto dell'applicazione, vedere Impostare il contesto dell'applicazione.
Aprire il client come descritto nel frammento di codice seguente:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
Richiamare l'operazione di Update_PHOTO nella tabella CUSTOMER.
L'operazione Update_PHOTO richiede l'aggiornamento di una matrice di byte per i dati. In questo frammento di codice si usa la classe FileStream per creare una matrice di byte per una foto SamplePhoto.jpg. Affinché l'applicazione funzioni, è necessario copiare il file nella directory bin del progetto.
Importante
L'operazione di Update_PHOTO deve essere eseguita in una transazione, pertanto la proprietà di associazione UseAmbientTransaction deve essere impostata su true e l'operazione di Update_PHOTO deve essere eseguita all'interno di un ambito di transazione. È possibile impostare la proprietà di associazione UseAmbientTransaction nel app.config o impostandola in modo esplicito nell'applicazione come
binding.UseAmbientTransaction = true
. Si noti che se si specifica la proprietà di associazione in modo esplicito nel codice, è necessario farlo prima di aprire il 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(); }
Richiamare l'operazione di Read_PHOTO nella tabella CUSTOMER.
Il Read_PHOTO restituisce l'output sotto forma di System.IO.Stream. Il client dell'adattatore deve implementare la classe FileStream per leggere i dati dall'operazione di Read_PHOTO. Al termine dell'operazione di Read_PHOTO, un file PhotoCopy.jpg viene copiato nella directory bin del progetto.
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();
Chiudere il client come descritto nel frammento di codice seguente:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
Compilare il progetto ed eseguirlo. L'applicazione aggiorna la colonna PHOTO della tabella CUSTOMER e quindi legge il contenuto della colonna PHOTO.
Vedere anche
Sviluppare applicazioni Oracle E-Business Suite usando il modello di servizio WCF