289.14. SAP 예


289.14.1. 예: SAP에서 데이터 읽기

289.14.1. 개요

이 예제에서는 SAP에서 FlightCustomer 비즈니스 개체 데이터를 읽는 경로를 보여줍니다. 경로는 데이터를 검색하기 위해 SAP 동기 RFC 대상 끝점을 사용하여 FlightCustomer BAPI 메서드인 BAPI_FLECDHEST_GETLIST 를 호출합니다.

289.14.2. 경로용 Java DSL

예제 경로의 Java DSL은 다음과 같습니다.

from("direct:getFlightCustomerInfo")
    .to("bean:createFlightCustomerGetListRequest")
    .to("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST")
    .to("bean:returnFlightCustomerInfo");
Copy to Clipboard Toggle word wrap

289.14.3. 경로에 대한 XML DSL

동일한 경로에 대한 Spring DSL은 다음과 같습니다.

<route>
    <from uri="direct:getFlightCustomerInfo"/>
    <to uri="bean:createFlightCustomerGetListRequest"/>
    <to uri="sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST"/>
    <to uri="bean:returnFlightCustomerInfo"/>
</route>
Copy to Clipboard Toggle word wrap

289.14.4. createFlightCustomerGetListRequest bean

createFlightCustomerGetListRequest Bean은 후속 SAP 끝점의 RFC 호출에 사용되는 교환 방법으로 SAP 요청 오브젝트를 빌드해야 합니다. 다음 코드 조각은 요청 오브젝트를 빌드하는 작업 순서를 보여줍니다.

public void create(Exchange exchange) throws Exception {

    // Get SAP Endpoint to be called from context.
    SapSynchronousRfcDestinationEndpoint endpoint =
        exchange.getContext().getEndpoint("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST",
                                                 SapSynchronousRfcDestinationEndpoint.class);

    // Retrieve bean from message containing Flight Customer name to
    // look up.
    BookFlightRequest bookFlightRequest =
        exchange.getIn().getBody(BookFlightRequest.class);

    // Create SAP Request object from target endpoint.
    Structure request = endpoint.getRequest();

    // Add Customer Name to request if set
    if (bookFlightRequest.getCustomerName() != null &&
        bookFlightRequest.getCustomerName().length() > 0) {
            request.put("CUSTOMER_NAME",
                          bookFlightRequest.getCustomerName());
        }
    } else {
        throw new Exception("No Customer Name");
    }

    // Put request object into body of exchange message.
    exchange.getIn().setBody(request);
}
Copy to Clipboard Toggle word wrap

289.14.5. returnFlightCustomerInfo bean

returnFlightCustomerInfo Bean은 이전 SAP 끝점에서 수신하는 교환 방법으로 SAP 응답 개체에서 데이터를 추출합니다. 다음 코드 조각은 응답 개체에서 데이터를 추출하는 작업 순서를 보여줍니다.

public void createFlightCustomerInfo(Exchange exchange) throws Exception {

    // Retrieve SAP response object from body of exchange message.
    Structure flightCustomerGetListResponse =
        exchange.getIn().getBody(Structure.class);

    if (flightCustomerGetListResponse == null) {
        throw new Exception("No Flight Customer Get List Response");
    }

    // Check BAPI return parameter for errors
    @SuppressWarnings("unchecked")
    Table<Structure> bapiReturn =
        flightCustomerGetListResponse.get("RETURN", Table.class);
    Structure bapiReturnEntry = bapiReturn.get(0);
    if (bapiReturnEntry.get("TYPE", String.class) != "S") {
        String message = bapiReturnEntry.get("MESSAGE", String.class);
        throw new Exception("BAPI call failed: " + message);
    }

    // Get customer list table from response object.
    @SuppressWarnings("unchecked")
    Table<? extends Structure> customerList =
        flightCustomerGetListResponse.get("CUSTOMER_LIST", Table.class);

    if (customerList == null || customerList.size() == 0) {
        throw new Exception("No Customer Info.");
    }

    // Get Flight Customer data from first row of table.
    Structure customer = customerList.get(0);

    // Create bean to hold Flight Customer data.
    FlightCustomerInfo flightCustomerInfo = new FlightCustomerInfo();

    // Get customer id from Flight Customer data and add to bean.
    String customerId = customer.get("CUSTOMERID", String.class);
    if (customerId != null) {
        flightCustomerInfo.setCustomerNumber(customerId);
    }

    ...

    // Put bean into body of exchange message.
    exchange.getIn().setHeader("flightCustomerInfo", flightCustomerInfo);

}
Copy to Clipboard Toggle word wrap

289.14.2. 예: SAP로 데이터

289.14.6. 개요

이 예제에서는 SAP에서 FlightTrip 비즈니스 오브젝트 인스턴스를 생성하는 경로를 보여줍니다. 경로는 오브젝트를 생성하기 위해 대상 끝점을 사용하여 FlightTrip BAPI 메서드인 BAPI_FLTRIP_CREATE 를 호출합니다.

289.14.7. 경로용 Java DSL

예제 경로의 Java DSL은 다음과 같습니다.

from("direct:createFlightTrip")
    .to("bean:createFlightTripRequest")
    .to("sap-srfc-destination:nplDest:BAPI_FLTRIP_CREATE?transacted=true")
    .to("bean:returnFlightTripResponse");
Copy to Clipboard Toggle word wrap

289.14.8. 경로에 대한 XML DSL

동일한 경로에 대한 Spring DSL은 다음과 같습니다.

<route>
    <from uri="direct:createFlightTrip"/>
    <to uri="bean:createFlightTripRequest"/>
    <to uri="sap-srfc-destination:nplDest:BAPI_FLTRIP_CREATE?transacted=true"/>
    <to uri="bean:returnFlightTripResponse"/>
</route>
Copy to Clipboard Toggle word wrap

289.14.9. 트랜잭션 지원

참고

SAP 끝점의 URL은 transacted 옵션이 true 로 설정되어 있습니다. 289.11절. “트랜잭션 지원” 에서 설명한 대로 이 옵션이 활성화되면 RFC 호출을 호출하기 전에 SAP 트랜잭션 세션이 시작되었는지 확인합니다. 이 끝점의 RFC는 SAP에서 새 데이터를 생성하므로 이 옵션을 사용하여 SAP에서 경로의 변경을 영구적으로 수행해야 합니다.

289.14.10. 요청 매개변수 채우기

createFlightTripRequestreturnFlightTripResponse Beans는 각각 SAP 요청으로 요청 매개변수를 채우고 응답 매개 변수를 SAP 응답에서 추출하는 역할을 하며 이전 예제에서 설명했던 것과 동일한 작업 시퀀스를 따릅니다.

289.14.3. 예: SAP에서 요청 처리

289.14.11. 개요

이 예제에서는 경로에 의해 구현되는 SAP에서 BOOK_FLIGHT RFC로의 요청을 처리하는 경로를 보여줍니다. 또한ECDHEB를 사용하여 SAP 요청 오브젝트 및 마샬링 개체 및 사용자 지정 DestinationRule에 대한 응답 오브젝트를 사용하여 구성 요소의 XML 직렬화 지원을 보여줍니다.

이 경로는 FlightTrip 비즈니스 개체를 만드는 경우, FlightCustomer 를 대신하여. 경로는 먼저 SAP 서버 끝점에서 수신한 SAP 요청 오브젝트를 사용자 지정ECDHEBBean으로 해제합니다. 그런 다음 이 사용자 지정Bean이 교환에서 세 개의 하위 경로로 멀티 캐스트됩니다. 이 경로는 이동사와의 연결, 여하이행 연결 및 여주행을 생성하는 데 필요한 여인 정보를 수집합니다. 최종 하위 경로에서는 위 예에 설명된 대로 SAP에서 기행 트립 오브젝트를 생성합니다. 최종 하위 경로도 SAP 응답 오브젝트로 마샬링되고 서버 끝점에서 반환하는 사용자 지정ECDHEBBean을 생성 및 반환합니다.

289.14.12. 경로용 Java DSL

예제 경로의 Java DSL은 다음과 같습니다.

DataFormat jaxb = new JaxbDataFormat("org.fusesource.sap.example.jaxb");

from("sap-srfc-server:nplserver:BOOK_FLIGHT")
    .unmarshal(jaxb)
    .multicast()
    .to("direct:getFlightConnectionInfo",
        "direct:getFlightCustomerInfo",
        "direct:getPassengerInfo")
    .end()
    .to("direct:createFlightTrip")
    .marshal(jaxb);
Copy to Clipboard Toggle word wrap

289.14.13. 경로에 대한 XML DSL

또한 동일한 경로의 XML DSL은 다음과 같습니다.

<route>
    <from uri="sap-srfc-server:nplserver:BOOK_FLIGHT"/>
    <unmarshal>
        <jaxb contextPath="org.fusesource.sap.example.jaxb"/>
    </unmarshal>
    <multicast>
        <to uri="direct:getFlightConnectionInfo"/>
        <to uri="direct:getFlightCustomerInfo"/>
        <to uri="direct:getPassengerInfo"/>
    </multicast>
    <to uri="direct:createFlightTrip"/>
    <marshal>
        <jaxb contextPath="org.fusesource.sap.example.jaxb"/>
    </marshal>
</route>
Copy to Clipboard Toggle word wrap

289.14.14. BookFlightRequestBean

다음 목록은 SAP BOOK_FLIGHT 요청 오브젝트의 직렬화된 형식의 탐정을 해제하는 것을 보여줍니다.

@XmlRootElement(name="Request", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class BookFlightRequest {

    @XmlAttribute(name="CUSTNAME")
    private String customerName;

    @XmlAttribute(name="FLIGHTDATE")
    @XmlJavaTypeAdapter(DateAdapter.class)
    private Date flightDate;

    @XmlAttribute(name="TRAVELAGENCYNUMBER")
    private String travelAgencyNumber;

    @XmlAttribute(name="DESTINATION_FROM")
    private String startAirportCode;

    @XmlAttribute(name="DESTINATION_TO")
    private String endAirportCode;

    @XmlAttribute(name="PASSFORM")
    private String passengerFormOfAddress;

    @XmlAttribute(name="PASSNAME")
    private String passengerName;

    @XmlAttribute(name="PASSBIRTH")
    @XmlJavaTypeAdapter(DateAdapter.class)
    private Date passengerDateOfBirth;

    @XmlAttribute(name="CLASS")
    private String flightClass;

    ...
}
Copy to Clipboard Toggle word wrap

289.14.15. BookFlightResponseBean

다음 목록은 SAP BOOK_FLIGHT 응답 오브젝트의 직렬화된 형식으로 마샬링하는ECDHEBBean을 보여줍니다.

@XmlRootElement(name="Response", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class BookFlightResponse {

    @XmlAttribute(name="TRIPNUMBER")
    private String tripNumber;

    @XmlAttribute(name="TICKET_PRICE")
    private BigDecimal ticketPrice;

    @XmlAttribute(name="TICKET_TAX")
    private BigDecimal ticketTax;

    @XmlAttribute(name="CURRENCY")
    private String currency;

    @XmlAttribute(name="PASSFORM")
    private String passengerFormOfAddress;

    @XmlAttribute(name="PASSNAME")
    private String passengerName;

    @XmlAttribute(name="PASSBIRTH")
    @XmlJavaTypeAdapter(DateAdapter.class)
    private Date passengerDateOfBirth;

    @XmlElement(name="FLTINFO")
    private FlightInfo flightInfo;

    @XmlElement(name="CONNINFO")
    private ConnectionInfoTable connectionInfo;

    ...
}
Copy to Clipboard Toggle word wrap
참고

응답 오브젝트의 complex 매개변수 필드는 응답의 하위 요소로 직렬화됩니다.

289.14.16. flightInfoBean

다음 목록은 복잡한 구조 매개 변수 FLTINFO 의 직렬화 된 형태로 마샬링하는ECDHEBBean을 보여줍니다.

@XmlRootElement(name="FLTINFO", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class FlightInfo {

    @XmlAttribute(name="FLIGHTTIME")
    private String flightTime;

    @XmlAttribute(name="CITYFROM")
    private String cityFrom;

    @XmlAttribute(name="DEPDATE")
    @XmlJavaTypeAdapter(DateAdapter.class)
    private Date departureDate;

    @XmlAttribute(name="DEPTIME")
    @XmlJavaTypeAdapter(DateAdapter.class)
    private Date departureTime;

    @XmlAttribute(name="CITYTO")
    private String cityTo;

    @XmlAttribute(name="ARRDATE")
    @XmlJavaTypeAdapter(DateAdapter.class)
    private Date arrivalDate;

    @XmlAttribute(name="ARRTIME")
    @XmlJavaTypeAdapter(DateAdapter.class)
    private Date arrivalTime;

    ...
}
Copy to Clipboard Toggle word wrap

289.14.17. ConnectionInfoTableBean

다음 목록은 복잡한 테이블 매개 변수 CONNINFO 로 직렬화된 형식으로 마샬링하는 것을 보여줍니다.

참고

ECDHEBBean의 root 요소 유형의 이름은 _ ECDHE로 접미사가 지정된 행 구조 유형의 이름에 해당하며, DestinationRule에는 행 요소 목록이 포함됩니다.

@XmlRootElement(name="CONNINFO_TABLE", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class ConnectionInfoTable {

    @XmlElement(name="row")
    List<ConnectionInfo> rows;

    ...
}
Copy to Clipboard Toggle word wrap

289.14.18. ConnectionInfoBean

다음 목록은 위 테이블 행 요소의 직렬화된 양식으로 마샬링하는 것을 보여줍니다.

@XmlRootElement(name="CONNINFO", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT")
@XmlAccessorType(XmlAccessType.FIELD)
public class ConnectionInfo {

    @XmlAttribute(name="CONNID")
    String connectionId;

    @XmlAttribute(name="AIRLINE")
    String airline;

    @XmlAttribute(name="PLANETYPE")
    String planeType;

    @XmlAttribute(name="CITYFROM")
    String cityFrom;

    @XmlAttribute(name="DEPDATE")
    @XmlJavaTypeAdapter(DateAdapter.class)
    Date departureDate;

    @XmlAttribute(name="DEPTIME")
    @XmlJavaTypeAdapter(DateAdapter.class)
    Date departureTime;

    @XmlAttribute(name="CITYTO")
    String cityTo;

    @XmlAttribute(name="ARRDATE")
    @XmlJavaTypeAdapter(DateAdapter.class)
    Date arrivalDate;

    @XmlAttribute(name="ARRTIME")
    @XmlJavaTypeAdapter(DateAdapter.class)
    Date arrivalTime;

    ...
}
Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat