Cloud Release가 안된 View를 사용해야될 경우
Cloud Release가 안된 View를 사용해야될 경우
💡 (주)> ZHFB0011 참고
1. 사용자 정의 CDS 뷰 생성
- 레이블을 입력하면 이름이 자동으로 입력 됨.
- 외부 API로 생성
경고창이 뜨는 경우, 무시하고 진행해도 됨.
2. 요소 추가
3. 사용자 정의 통신 시나리오 생성
- 네이밍 패턴:
YY1_[비즈니스영역]_[목적]- 시나리오 ID : PRODN_ROUTING_API (Communication Scenario)
- **내역 ** : 제품 라우팅 API 시나리오
- 인바운드 서비스 등록
- 검색 > 사용자 정의 CDS뷰 이름(ZI_ProdnRoutingOpSubor) 입력
- 저장 > 게시 ※ 게 후, [규약생성] 가능
사용자 정의 CDS뷰 검색하면, 앞서 정한 레이블에 접두가 YY1이 붙은 형태로 나옴
4. 규약생성
규약생성을 누르면 자동으로 입력 됨.
- 통신 시스템 > [신규]
- 정보입력
- 시스템 ID:
YY1_[상대시스템명]_[비즈니스영역]또는Z_[상대시스템명]_[목적]- 시스템 이름: (시스템 ID와 동일하게 입력하여 식별성 유지)
- Z_CLD_EXT_BYPASS_API : 클라우드 외부 API 라는 의미로 생성
- 일반 > 호스트 이름 : 현재 URL(myXXXXXX.s4hana.cloud.sap)
- 인바운드 통신 사용자 등록
- [신규 사용자] 등록
- 정보입력 후, 생성 (비밀번호 최소 길이: 20자) - ZEXT_BYPASS_USERitm0526!@
- 확인
- 신규 아웃바운드 사용자 등록 (인바운드 사용자와 동일하게) 후, 저
5. 통신규약 복귀 후, 앞서 등록한 통신시스템 및 사용자 등록
- 등록 후, 서비스 URL/서비스 인터페이스 [복사]
- WSDL/서비스 메타데이터 ]다운로드[
6. 사용자 정의 통신 시나리오 > 아웃바운드 서비스 등록
- 편집 > 추가
- 통신규약 인바운드 서비스와 동일한 이름/URL 로 지정
- 저장 후, 게시
7. 통신규약 설정
- 아웃바운드 통신 사용자 선택
- 아웃바운드 서비스 활성화
7. Service Consumption Model (SRVC) 생성
- New > Business Services > Service Consumption Model을 생성합니다.
- Remote Consumption Mode : OData
8. 다운로드 받은 xml 임포트 후 [Next]
9. 확인
10. Custom Entity 생성
1
2
3
4
5
6
7
8
9
10
11
@EndUserText.label: '공정 하위 작업 외부 API 매핑 엔티티'
@ObjectModel.query.implementedBy: 'ZCL_PRODN_ROUTING_PROVIDER'
define custom entity ZI_PRODNROUTINGOPSUBORD
{
key BillOfOperationsType : abap.char(1);
key ProductionRoutingGroup : abap.char(8);
key ProductionRoutingOpIntID : abap.char(8);
key ProductionRoutingOpIntVersion : abap.char(8);
Operation : abap.char(4);
Plant : abap.char(4);
}
11. Class 생성
ZCL_PRODN_ROUTING_PROVIDER 이름으로 CLASS 생성 ```javascript CLASS zcl_prodn_routing_provider DEFINITION PUBLIC FINAL CREATE PUBLIC .
PUBLIC SECTION. INTERFACES if_rap_query_provider.
1
2
3
4
5
6
7
8
9
TYPES tt_result TYPE STANDARD TABLE OF zi_prodnroutingopsubord WITH EMPTY KEY.
CLASS-METHODS get_data
IMPORTING
io_filter TYPE REF TO if_rap_query_filter OPTIONAL
iv_top TYPE int8 OPTIONAL
iv_skip TYPE int8 OPTIONAL
RETURNING
VALUE(rt_data) TYPE tt_result. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS.
CLASS zcl_prodn_routing_provider IMPLEMENTATION.
METHOD get_data. DATA: lo_http_client TYPE REF TO if_web_http_client, lo_client_proxy TYPE REF TO /iwbep/if_cp_client_proxy, lo_request TYPE REF TO /iwbep/if_cp_request_read_list, lo_response TYPE REF TO /iwbep/if_cp_response_read_lst.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
DATA lt_business_data TYPE TABLE OF zsc_prodn_routing_subor=>tys_yy_1_zi_prodn_routing_op_2.
TRY.
DATA(lo_destination) = cl_http_destination_provider=>create_by_comm_arrangement(
comm_scenario = 'YY1_ZCS_PRODN_ROUTING'
).
lo_http_client = cl_web_http_client_manager=>create_by_http_destination( lo_destination ).
lo_client_proxy = /iwbep/cl_cp_factory_remote=>create_v2_remote_proxy(
EXPORTING
is_proxy_model_key = VALUE #(
repository_id = 'DEFAULT'
proxy_model_id = 'ZSC_PRODN_ROUTING_SUBOR'
proxy_model_version = '0001' )
io_http_client = lo_http_client
iv_relative_service_root = '' ).
lo_request = lo_client_proxy->create_resource_for_entity_set( 'YY_1_ZI_PRODN_ROUTING_OP_S' )->create_request_for_read( ).
IF io_filter IS BOUND.
DATA(lt_all_filters) = io_filter->get_as_ranges( ).
DATA(lo_filter_factory) = lo_request->create_filter_factory( ).
DATA lo_root_node TYPE REF TO /iwbep/if_cp_filter_node.
LOOP AT lt_all_filters INTO DATA(ls_filter).
DATA lv_property_path TYPE string.
CLEAR lv_property_path.
CASE to_upper( ls_filter-name ).
WHEN 'BILLOFOPERATIONSTYPE'.
lv_property_path = 'BILL_OF_OPERATIONS_TYPE'.
WHEN 'PRODUCTIONROUTINGGROUP'.
lv_property_path = 'PRODUCTION_ROUTING_GROUP'.
WHEN 'PRODUCTIONROUTINGOPINTID'.
lv_property_path = 'PRODUCTION_ROUTING_OP_INT_ID'.
WHEN 'PRODUCTIONROUTINGOPINTVERSION'.
lv_property_path = 'PRODUCTION_ROUTING_OP_INT_VERSION'.
WHEN 'OPERATION'.
lv_property_path = 'OPERATION'.
WHEN 'PLANT'.
lv_property_path = 'PLANT'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
DATA(lo_node) = lo_filter_factory->create_by_range(
iv_property_path = lv_property_path
it_range = ls_filter-range ).
IF lo_root_node IS NOT BOUND.
lo_root_node = lo_node.
ELSE.
lo_root_node = lo_root_node->and( lo_node ).
ENDIF.
ENDLOOP.
IF lo_root_node IS BOUND.
lo_request->set_filter( lo_root_node ).
ENDIF.
ENDIF.
IF iv_top > 0.
lo_request->set_top( CONV i( iv_top ) ).
ENDIF.
IF iv_skip > 0.
lo_request->set_skip( CONV i( iv_skip ) ).
ENDIF.
lo_response = lo_request->execute( ).
lo_response->get_business_data( IMPORTING et_business_data = lt_business_data ).
LOOP AT lt_business_data INTO DATA(ls_business).
DATA lv_op_int_id TYPE string.
DATA lv_op_int_ver TYPE string.
FIELD-SYMBOLS <lv_any> TYPE any.
ASSIGN COMPONENT 'PRODUCTION_ROUTING_OP_INT_ID' OF STRUCTURE ls_business TO <lv_any>.
IF sy-subrc = 0.
lv_op_int_id = <lv_any>.
ELSE.
ASSIGN COMPONENT 'PRODUCTION_ROUTING_OP_INT' OF STRUCTURE ls_business TO <lv_any>.
IF sy-subrc = 0.
lv_op_int_id = <lv_any>.
ENDIF.
ENDIF.
ASSIGN COMPONENT 'PRODUCTION_ROUTING_OP_INT_VERSION' OF STRUCTURE ls_business TO <lv_any>.
IF sy-subrc = 0.
lv_op_int_ver = <lv_any>.
ELSE.
ASSIGN COMPONENT 'PRODUCTION_ROUTING_OP_IN_2' OF STRUCTURE ls_business TO <lv_any>.
IF sy-subrc = 0.
lv_op_int_ver = <lv_any>.
ENDIF.
ENDIF.
APPEND VALUE #(
billofoperationstype = ls_business-bill_of_operations_type
productionroutinggroup = ls_business-production_routing_group
productionroutingopintid = lv_op_int_id
productionroutingopintversion = lv_op_int_ver
operation = ls_business-operation
plant = ls_business-plant ) TO rt_data.
ENDLOOP.
CATCH /iwbep/cx_cp_remote.
CLEAR rt_data.
CATCH /iwbep/cx_gateway.
CLEAR rt_data.
CATCH cx_web_http_client_error.
CLEAR rt_data.
CATCH cx_root.
CLEAR rt_data.
ENDTRY. ENDMETHOD.
METHOD if_rap_query_provider~select. DATA lv_top TYPE int8. DATA lv_skip TYPE int8.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DATA(lo_paging) = io_request->get_paging( ).
IF lo_paging IS BOUND.
IF lo_paging->get_page_size( ) <> if_rap_query_paging=>page_size_unlimited.
lv_top = lo_paging->get_page_size( ).
ENDIF.
IF lo_paging->get_offset( ) > 0.
lv_skip = lo_paging->get_offset( ).
ENDIF.
ENDIF.
DATA(lo_filter) = io_request->get_filter( ).
DATA(lt_result) = get_data(
io_filter = lo_filter
iv_top = lv_top
iv_skip = lv_skip ).
IF io_request->is_total_numb_of_rec_requested( ).
DATA(lt_count_result) = get_data( io_filter = lo_filter ).
io_response->set_total_number_of_records( lines( lt_count_result ) ).
ENDIF.
IF io_request->is_data_requested( ).
io_response->set_data( lt_result ).
ENDIF. ENDMETHOD. ENDCLASS. ```
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.




















