WCF 서비스 모델을 사용하여 Oracle E-Business Suite에서 동시 프로그램 호출
Oracle E-Business Suite는 Oracle 애플리케이션에서 특정 작업을 수행하기 위해 실행할 수 있는 동시 프로그램을 노출합니다. 각 Oracle 애플리케이션에는 표준 동시 프로그램 집합(모든 작업에서 동일함) 및 Oracle 애플리케이션과 관련된 특정 동시 프로그램이 있습니다. Oracle E-Business 어댑터는 모든 동시 프로그램을 어댑터 클라이언트가 호출할 수 있는 작업으로 노출합니다. 어댑터가 동시 프로그램을 지원하는 방법에 대한 자세한 내용은 동시 프로그램에 대한 작업을 참조하세요.
참고
메타데이터를 노출하지 않는 동시 프로그램의 경우 Oracle E-Business 어댑터는 이러한 각 동시 프로그램에 대해 100개의 선택적 매개 변수를 노출합니다. 이러한 동시 프로그램을 성공적으로 호출하려면 사용자가 Oracle E-Business Suite 설명서를 참조하여 값이 필요한 동시 프로그램의 매개 변수를 파악한 다음 지정해야 합니다. 이러한 동시 프로그램의 예로 일반 원장 애플리케이션의 저널 가져오기(실제 이름: GLLEZL)가 있습니다.
이 항목에 사용된 예제 정보
이 항목의 예제에서는 MS_SAMPLE_COPY_EMP_DATA 동시 프로그램을 호출한 다음, Get_Status 동시 프로그램을 호출하여 첫 번째 동시 프로그램의 상태 알아봅니다. 이러한 동시 프로그램은 애플리케이션 개체 라이브러리 애플리케이션에서 호출됩니다. MS_SAMPLE_COPY_EMP_DATA 샘플과 함께 제공되는 스크립트를 실행하여 만듭니다. 샘플에 대한 자세한 내용은 Oracle EBS 어댑터에 대한 샘플을 참조하세요. 이 항목을 기반으로 하는 샘플 ConcurrentProgram_ServiceModel Oracle E-Business 어댑터 샘플도 제공됩니다.
WCF 클라이언트 클래스
Oracle E-Business 어댑터에서 동시 프로그램을 호출하기 위해 생성된 WCF 클라이언트의 이름은 다음 표에 나와 있습니다.
아티팩트 | WCF 클라이언트 이름 |
---|---|
동시 프로그램 | ConcurrentPrograms_[APP_NAME]클라이언트 |
[APP_NAME] = Oracle E-Business Suite 애플리케이션의 실제 이름입니다. 예를 들어 FND입니다.
동시 프로그램 호출을 위한 메서드 서명
다음 표에서는 동시 프로그램의 메서드 서명을 보여 줍니다.
작업 | 메서드 시그니처 |
---|---|
동시 프로그램 | public <return type><Concurrent_program_name>(param 1, param 2, ...) |
예를 들어 다음 코드는 MS_SAMPLE_COPY_EMP_DATA 및 Get_Status 동시 프로그램에 대해 생성된 WCF 클라이언트 클래스에 대한 메서드 서명을 보여 줍니다.
public partial class ConcurrentPrograms_FNDClient : System.ServiceModel.ClientBase<ConcurrentPrograms_FND>, ConcurrentPrograms_FND {
public string MS_SAMPLE_COPY_EMP_DATA(schemas.microsoft.com.OracleEBS._2008._05.Options.SetOptions SetOptions,
schemas.microsoft.com.OracleEBS._2008._05.Options.SetPrintOptions SetPrintOptions,
schemas.microsoft.com.OracleEBS._2008._05.Options.SetRepeatOptions SetRepeatOptions,
string Description, string StartTime);
public bool GetStatusForConcurrentProgram(string RequestId, out string Phase, out string Status,
out string DevPhase, out string DevStatus, out string Message);
}
이 코드 조각에서 ConcurrentPrograms_FNDClient 어댑터 서비스 참조 플러그 인 추가에서 생성된 OracleEBSBindingClient.cs의 WCF 클래스 이름입니다. MS_SAMPLE_COPY_EMP_DATA 동시 프로그램을 호출하는 메서드의 이름입니다. GetStatusForConcurrentProgram은 동시 프로그램을 호출하여 첫 번째 동시 프로그램의 상태 가져오는 메서드의 이름입니다.
참고
GetStatusForConcurrentProgram 은 Get_Status 동시 프로그램의 실제 이름입니다.
동시 프로그램을 호출하는 WCF 클라이언트 만들기
WCF 클라이언트를 사용하여 Oracle E-Business Suite에서 작업을 수행하는 데 필요한 일반 작업 집합에는 Oracle E-Business Suite 어댑터를 사용한 WCF 서비스 모델 개요에 설명된 작업 집합이 포함됩니다. 이 섹션에서는 MS_SAMPLE_COPY_EMP_DATA 호출하고 동시 프로그램을 Get_Status WCF 클라이언트를 만드는 방법을 설명 합니다.
WCF 클라이언트를 만들려면
Visual Studio에서 Visual C# 프로젝트를 만듭니다. 이 항목에서는 콘솔 애플리케이션을 만듭니다.
MS_SAMPLE_COPY_EMP_DATA 및 Get_Status 동시 프로그램에 대한 WCF 클라이언트 클래스를 생성합니다. WCF 클라이언트 클래스를 생성하는 방법에 대한 자세한 내용은 Oracle E-Business Suite 솔루션 아티팩트용 WCF 클라이언트 또는 WCF 서비스 계약 생성을 참조하세요.
중요
WCF 클라이언트 클래스를 생성하기 전에 EnableBizTalkCompatibilityMode 바인딩 속성을 false로 설정해야 합니다.
솔루션 탐색기 및
Microsoft.ServiceModel.Channels
에 대한 참조를Microsoft.Adapters.OracleEBS
추가합니다.Program.cs 파일을 열고 다음 네임스페이스를 추가합니다.
Microsoft.Adapters.OracleEBS
System.ServiceModel
Program.cs 파일을 열고 아래 코드 조각에 설명된 대로 클라이언트를 만듭니다.
OracleEBSBinding binding = new OracleEBSBinding(); EndpointAddress address = new EndpointAddress("oracleebs://ebs_instance_name"); ConcurrentPrograms_FNDClient client = new ConcurrentPrograms_FNDClient(binding, address);
이 코드 조각
ConcurrentPrograms_FNDClient
에서 는 OracleEBSBindingClient.cs에 정의된 WCF 클라이언트입니다. 이 파일은 어댑터 서비스 참조 추가 플러그 인에서 생성됩니다.참고
이 코드 조각에서는 애플리케이션 코드에서 바인딩 및 엔드포인트 주소를 명시적으로 지정합니다. 어댑터 서비스 참조 플러그 인 추가에서 생성된 애플리케이션 구성 파일 app.config 이러한 값을 사용할 수도 있습니다. 클라이언트 바인딩을 지정하는 다양한 방법에 대한 자세한 내용은 Oracle E-Business Suite에 대한 클라이언트 바인딩 구성을 참조하세요.
클라이언트에 대한 자격 증명을 설정합니다.
client.ClientCredentials.UserName.UserName = "myuser"; client.ClientCredentials.UserName.Password = "mypassword";
Oracle E-Business Suite 애플리케이션에서 동시 프로그램을 호출하기 때문에 애플리케이션 컨텍스트를 설정해야 합니다. 이 예제에서는 애플리케이션 컨텍스트를 설정하기 위해 OracleUserName, OraclePassword 및 OracleEBSResponsibilityName 바인딩 속성을 지정합니다. 애플리케이션 컨텍스트에 대한 자세한 내용은 애플리케이션 컨텍스트 설정을 참조하세요.
binding.OracleUserName = "myOracleEBSUserName"; binding.OraclePassword = "myOracleEBSPassword"; binding.OracleEBSResponsibilityName = "myOracleEBSResponsibility";
아래 코드 조각에 설명된 대로 클라이언트를 엽니다.
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
MS_SAMPLE_COPY_EMP_DATA 호출하고 동시 프로그램을 Get_Status.
string RequestID; bool Result; string Phase; string Status; string DevPhase; string DevStatus; string Message; try { Console.WriteLine("Invoking the MS_SAMPLE_COPY_EMP_DATA concurrent program"); RequestID = client.MS_SAMPLE_COPY_EMP_DATA(null, null, null, null, null); Console.WriteLine("The request ID generated for the concurrent program is : " + RequestID); Console.WriteLine("********************************************************"); Console.WriteLine("\nWaiting for 60 seconds for the concurrent program to be complete"); System.Threading.Thread.Sleep(60000); Console.WriteLine("\nInvoking the Get_Status concurrent program"); Result = client.GetStatusForConcurrentProgram(RequestID, out Phase, out Status, out DevPhase, out DevStatus, out Message); Console.WriteLine("\nResult is : " + Result); Console.WriteLine("Phase is : " + Phase); Console.WriteLine("Status is : " + Status); Console.WriteLine("DevPhase is : " + DevPhase); Console.WriteLine("DevStatus is : " + DevStatus); Console.WriteLine("Message is : " + Message); Console.WriteLine("********************************************************"); Console.WriteLine("\nHit <RETURN> to end"); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("Exception : " + ex); throw; }
아래 코드 조각에 설명된 대로 클라이언트를 닫습니다.
client.Close();
프로젝트를 빌드한 다음 실행합니다. 애플리케이션은 MS_SAMPLE_COPY_EMP_DATA 호출하고 요청 ID를 반환합니다. 그런 다음 ID가 Get_Status 동시 프로그램에 전달되며, 마지막으로 MS_SAMPLE_COPY_EMP_DATA 열 프로그램의 상태 제공합니다.