共用方式為


使用 Oracle E-Business Suite 建立通道

在 WCF 通道模型中,您會在 Oracle E-Business Suite 上叫用作業,並透過 WCF 通道與 Microsoft BizTalk Adapter for Oracle E-Business Suite 交換 SOAP 訊息來接收結果。

  • 您可以使用 IRequestChannelIOutputChannel 將訊息傳送至配接器,叫用作業 (輸出作業) 。

  • 您會透過 IInputChannel接收輸入作業的訊息。

    本節中的主題提供如何建立及設定用於輸入和輸出作業的通道圖形的相關資訊。

建立輸出 (用戶端) 通道

您可以使用 IRequestChannelIOutputChannel 來叫用 Oracle E-Business Suite 上的作業。 不論是哪一種情況,您都先使用適當的介面來建立 System.ServiceModel.ChannelFactory 。 接著,您可以使用處理站來建立通道。 建立通道之後,您可以使用通道來叫用介面卡上的作業。

若要建立和開啟輸出通道

  1. 使用端點和系結,為所需的通道圖形建立和初始化 ChannelFactory 的實例。 端點會指定 Oracle E-Business Suite 連線 URI,而系結是 OracleEBSBinding的實例。

  2. 使用 Credentials 屬性,為通道處理站提供 Oracle E-Business Suite 認證。

  3. 開啟通道處理站。

  4. 在通道處理站上叫用 CreateChannel 方法,以取得通道的實例。

  5. 開啟通道。

    您可以在程式碼或組態中指定系結和端點位址。

在程式碼中指定系結和端點位址

下列程式碼範例示範如何在程式碼中指定系結和端點位址,以建立 IRequestChannel 。 建立IOutputChannel的程式碼相同,但您必須為ChannelFactory和通道類型指定IOutputChannel介面。

// Create binding -- set binding properties before you open the factory.  
OracleEBSBinding binding = new OracleEBSBinding();  
  
// Create address  
EndpointAddress address = new EndpointAddress("oracleebs://<oracleebs_instance_name>/");  
  
// Create channel factory from binding and address.  
ChannelFactory<IRequestChannel> factory =   
    new ChannelFactory<IRequestChannel>(binding, address);  
  
// Specify credentials.   
factory.Credentials.UserName.UserName = "myuser";  
factory.Credentials.UserName.Password = "mypassword";  
  
// Open factory  
factory.Open();  
  
// Get channel and open it.  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

在組態中指定系結和端點位址

下列程式碼範例示範如何從組態中指定的用戶端端點建立通道處理站。

// Create channel factory from configuration.  
ChannelFactory<IRequestChannel> factory =  
new ChannelFactory<IRequestChannel>("MyRequestChannel");  
  
// Specify credentials.  
factory.Credentials.UserName.UserName = "myuser";  
factory.Credentials.UserName.Password = "mypassword";  
  
// Open the factory.  
factory.Open();  
  
// Get a channel and open it.  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

組態設定

下列程式碼顯示上述範例所使用的組態設定。 用戶端端點的合約必須是 「System.ServiceModel.Channels.IRequestChannel」 或 「System.ServiceModel.Channels.IOutputChannel」,視您想要建立的通道圖形類型而定。

<?xml version="1.0" encoding="utf-8"?>  
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">  
    <system.serviceModel>  
        <bindings>  
            <oracleEBSBinding>  
                <binding openTimeout="00:05:00" name="OracleEBSBinding" closeTimeout="00:01:00"  
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" clientCredentialType="Database"  
                    inboundOperationType="Polling" metadataPooling="true" statementCachePurge="false"  
                    statementCacheSize="10" pollWhileDataFound="false" pollingInterval="30"  
                    useOracleConnectionPool="true" minPoolSize="1" maxPoolSize="100"  
                    incrPoolSize="5" decrPoolSize="1" connectionLifetime="0" acceptCredentialsInUri="false"  
                    useAmbientTransaction="true" notifyOnListenerStart="true"  
                    notificationPort="-1" dataFetchSize="65536" longDatatypeColumnSize="0"  
                    skipNilNodes="true" maxOutputAssociativeArrayElements="32"  
                    enableSafeTyping="false" insertBatchSize="20" useSchemaInNameSpace="true"  
                    enableBizTalkCompatibilityMode="true" enablePerformanceCounters="false">  
                    <mlsSettings language="" dateFormat="" dateLanguage="" numericCharacters=""  
                        sort="" territory="" comparison="" currency="" dualCurrency=""  
                        iSOCurrency="" calendar="" lengthSemantics="" nCharConversionException="true"  
                        timeStampFormat="" timeStampTZFormat="" timeZone="" />  
                </binding>  
            </oracleEBSBinding>  
        </bindings>  
        <client>  
            <endpoint address="oracleebs://oracle_ebs_instance/" binding="oracleEBSBinding"  
                bindingConfiguration="OracleEBSBinding" contract="System.ServiceModel.Channels.IRequestChannel"  
                name="MyRequestChannel" />  
        </client>  
    </system.serviceModel>  
</configuration>  

建立輸入 (服務) 通道

您可以在 OracleEBSBinding實例上設定系結屬性,以設定 Oracle E-Business 配接器來輪詢 Oracle 資料庫資料表和檢視。 接著,您可以使用此系結來建置通道接聽程式,您可以從中取得 IInputChannel 通道來接收介面卡的輸入作業。

建立並開啟 IInputChannel 以接收輸入作業的訊息
  1. 建立 OracleEBSBinding的實例。

  2. 設定輸入作業所需的系結屬性。 例如,針對輪詢作業,您至少必須設定 InboundOperationTypePolledDataAvailableStatementPollingActionPollingInput 系結屬性,以設定 Oracle E-Business 配接器來輪詢 Oracle 資料庫。

  3. 使用 BindingParameterCollection 類別建立系結參數集合,並設定認證。

  4. OracleEBSBinding上叫用BuildChannelListener < IInputChannel >方法,以建立通道接聽程式。 您可以將 Oracle 連線 URI 指定為這個方法的其中一個參數。

  5. 開啟接聽程式。

  6. 在接聽程式上叫用AcceptChannel方法,以取得IInputChannel通道。

  7. 開啟通道。

    下列程式碼示範如何建立通道接聽程式,並取得 IInputChannel 以從配接器接收輸入作業的訊息。

重要

Oracle E-Business 配接器僅支援單向接收。 因此,您必須使用 IInputChannel 從 Oracle E-Business Suite 接收輸入作業的訊息。

// Create a binding: specify the InboundOperationType, the PolledDataAvailableStatement, the PollingAction, and   
// the PollingInput binding properties.  
OracleEBSBinding binding = new OracleEBSBinding();  
binding.InboundOperationType = InboundOperation.Polling;  
binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM MS_SAMPLE_EMPLOYEE";  
binding.PollingAction = "InterfaceTables/Poll/FND/APPS/MS_SAMPLE_EMPLOYEE";  
binding.PollingInput = "SELECT * FROM MS_SAMPLE_EMPLOYEE FOR UPDATE";  
  
// Create a binding parameter collection and set the credentials  
ClientCredentials credentials = new ClientCredentials();  
credentials.UserName.UserName = "myuser";  
credentials.UserName.Password = "mypassword";  
  
BindingParameterCollection bindingParams = new BindingParameterCollection();  
bindingParams.Add(credentials);  
  
// Get a listener from the binding and open it.  
Uri connectionUri = new Uri("oracleebs://oracle_ebs_instance/");  
IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(connectionUri, bindingParams);  
listener.Open();  
  
// Get a channel from the listener and open it.  
IInputChannel channel = listener.AcceptChannel();  
channel.Open();  

另請參閱

使用 WCF 通道模型開發 Oracle E-Business Suite 應用程式