Skip to content

Commit 7caa91b

Browse files
committed
feat: add walkthrough post for RAP project
1 parent 9565129 commit 7caa91b

2 files changed

Lines changed: 199 additions & 197 deletions

File tree

‎_posts/2026-08-08-100000-rap-walkthrough.md‎

Lines changed: 7 additions & 197 deletions
Original file line numberDiff line numberDiff line change
@@ -335,221 +335,31 @@ authorization master ( instance )
335335
</details>
336336
337337
## 8. Service Definition (서비스 정의) 생성
338-
339338
ZP_WBS_TASK 뷰를 OData 서비스에 포함하겠다 정의
340339
- `ZP_WBS_TASK` 우클릭 **(new > Service Definition)**
341340
- 정보입력
342341
- **Name:**`ZUI_WBS_TASK` (UI 서비스 정의는 대개 `ZUI_` 접두사를 많이 씀. 또는 ZSB)
343342
- **Description:**`WBS Task Service Definition`
344343
345344
## 9. Service Binding (서비스 배포) 생성
346-
347345
- 서비스 정의(`ZUI_WBS_TASK`)를 바탕으로, 외부 호출 **OData 프로토콜 API** 형태로 바인딩, 활성화
348346
- `ZUI_WBS_TASK` (Service Definition)를 마우스 우클릭 (**New > Service Binding)**
349347
- 정보 입력
350-
- **Name:**`ZUI_WBS_TASK_O4` (OData V4 버전을 뜻하는 관례적 접두사/접미사 활용)
351-
- **Description:**`WBS Task Service Binding`
352-
- **Binding Type:**`OData V4 - UI`를 선택합니다. *(Fiori Elements나 간트 차트 연동 시 OData V4가 최신 표준 프로토콜.)*
348+
- **Name:**`ZUI_WBS_TASK_O4` (OData V4 버전을 뜻하는 관례적 접두사/접미사 활용)
349+
- **Description:**`WBS Task Service Binding`
350+
- **Binding Type:**`OData V4 - UI`를 선택합니다. *(Fiori Elements나 간트 차트 연동 시 OData V4가 최신 표준 프로토콜.)*
353351
- 먼저 창 상단의 `Ctrl + F3`을 눌러 이 바인딩 오브젝트 자체를 활성화합니다.
354352
- 활성화가 완료되면 화면 중앙 우측에 있는 **`Publish`** 버튼을 클릭합니다.
355353
356354
#### 서비스 바인딩 종류 정리
357-
- **`OData V4 - UI`최신 표준 웹 화면용:** SAP Fiori 표준 Elements 기반의 최신형 웹 화면(CRUD)을 만들 때 사용하는 현업 트렌드 규격입니다.
358-
- **`OData V3 - UI`과거 버전 웹 화면용:** 구형 SAPUI5 아키텍처나 예전 버전의 Fiori 표준 화면과의 하위 호환성을 맞추기 위해 제공하는 구형 규격입니다.
359-
- **`OData V4 - Web API`순수 데이터 연동용(화면X):** 타 시스템이나 모바일 앱, 외부 자바스크립트단에 화면 버튼 없이 순수 데이터(JSON)만 REST API로 쏴줄 때 씁니다.
360-
- **`OData V3 - Web API`과거 버전 데이터 연동용:** 외부 레거시 시스템이 구형 OData V3 규격 통신만 지원할 때 어쩔 수 없이 매핑해 주는 연동용 규격입니다
355+
- **`OData V4 - UI` 최신 표준 웹 화면용:** SAP Fiori 표준 Elements 기반의 최신형 웹 화면(CRUD)을 만들 때 사용하는 현업 트렌드 규격입니다.
356+
- **`OData V2 - UI` 과거 버전 웹 화면용:** 구형 SAPUI5 아키텍처나 예전 버전의 Fiori 표준 화면과의 하위 호환성을 맞추기 위해 제공하는 구형 규격입니다.
357+
- **`OData V4 - Web API` 순수 데이터 연동용(화면X):** 타 시스템이나 모바일 앱, 외부 자바스크립트단에 화면 버튼 없이 순수 데이터(JSON)만 REST API로 쏴줄 때 씁니다.
358+
- **`OData V2 - Web API` 과거 버전 데이터 연동용:** 외부 레거시 시스템이 구형 OData V2 규격 통신만 지원할 때 어쩔 수 없이 매핑해 주는 연동용 규격입니다.
361359
362360
#### 완성된 화면
363361
![관련 이미지](../_images/20260808/2026-08-08-100000-rap-walkthrough_image1.png)
364362
365-
---
366-
367-
## 10. ValueHelp(F4) 설정(옵션)
368-
- 검색 도움말을 주기 위한 Helper설정
369-
370-
<details markdown="1">
371-
<summary> 10-1. CBO테이블 내 데이터 이용하기(눌러서 열기)</summary>
372-
373-
#### 10-1-1. 통합 범주 마스터 테이블 생성
374-
### 테이블 생성 코드(주석은 지워야 됨)
375-
376-
```javascript
377-
@EndUserText.label : 'WBS 통합 범주 마스터 테이블'
378-
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
379-
@AbapCatalog.tableCategory : #TRANSPARENT
380-
@AbapCatalog.deliveryClass : #G
381-
@AbapCatalog.dataMaintenance : #ALLOWED
382-
define table ztwbs_category {
383-
384-
key client : abap.clnt not null;
385-
@EndUserText.label : '범주 고유 키'
386-
key category_uuid : sysuuid_x16 not null; // 1. Managed UUID 자동채번 키
387-
388-
@EndUserText.label : '범주 분류 (예: BIZ_TYPE, UI_TYPE)'
389-
category_type : abap.char(20); // 2. '범주분류' 컬럼
390-
391-
@EndUserText.label : '범주 명 (예: AP, FIORI, 회계)'
392-
category_name : abap.char(100); // 3. '범주명' 컬럼
393-
394-
// 마법사(Generator) 패스를 위한 필수 표준 시스템 필드 세트
395-
created_by : abp_creation_user;
396-
created_at : abp_creation_tstmpl;
397-
last_changed_by : abp_locinst_lastchange_user;
398-
last_changed_at : abp_locinst_lastchange_tstmpl;
399-
400-
}
401-
```
402-
403-
### 코드설명
404-
405-
```javascript
406-
//로그온 ID(예: CB02029393...)
407-
abp_creation_user
408-
```
409-
410-
#### 10-1-2. 마스터 테이블 오브젝트 자동 생성 (Generator)
411-
- **`ZTWBS_CATEGORY`** 테이블 우클릭 후, **`Generate ABAP Repository Objects...`** 마법사를 실행
412-
413-
#### 10-1-3. 메인 화면 프로젝션 뷰 (`ZC_TWBS_TASK2`) 수정
414-
### 테이블 데이터 필터링 제약조건 설정
415-
416-
```javascript
417-
...
418-
// 업무구분 : CategoryType이 'BizType'인 데이터만 필터링하여 가져옴
419-
@Consumption.valueHelpDefinition: [{
420-
entity: { name: 'ZC_TWBS_CATEGORY', element: 'CategoryName' },
421-
additionalBinding: [ { element: 'CategoryType', localConstant: 'BizType', usage: #FILTER } ],
422-
useForValidation: true
423-
}]
424-
BizType,
425-
...
426-
//다른 컬럼들도 알맞게 수정
427-
```
428-
429-
### 코드설명
430-
431-
```javascript
432-
1. @Consumption.valueHelpDefinition: [F4]눌렀을 때, 나오는 Value help
433-
2. additionalBinding, filter : ZTWBS_CATEGORY 테이블 내 데이터 특정 값만 필터
434-
```
435-
436-
</details>
437-
438-
439-
<details markdown="1">
440-
<summary><b>10-2. 콤보박스(DropDown) 만들기(눌러서 열기)</b></summary>
441-
442-
10-2-1. ZTWBS_YN_MASTER **CBO** 테이블 생성
443-
444-
```javascript
445-
@EndUserText.label : 'Y/N 콤보박스 마스터 테이블'
446-
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
447-
@AbapCatalog.tableCategory : #TRANSPARENT
448-
@AbapCatalog.deliveryClass : #C
449-
@AbapCatalog.dataMaintenance : #ALLOWED
450-
define table ztwbs_yn_master {
451-
452-
key client : abap.clnt not null;
453-
key yn_code : abap.char(1) not null;
454-
yn_text : abap.char(20);
455-
456-
}
457-
```
458-
459-
10-2-2. ABAP 클래스 생성(NEW > ABAP CLASS)한 후, interfaces ADD > IF_OO_ADT_CLASSRUN<br>* Active 후, F9(실행)
460-
461-
```javascript
462-
...
463-
METHOD if_oo_adt_classrun~main.
464-
" 이안에 로직 생성
465-
DATA lt_data TYPE TABLE OF ztwbs_yn_master.
466-
" ==================== AP ====================
467-
lt_data = VALUE #(
468-
( yn_code = 'Y' yn_text = '예' )
469-
( yn_code = 'N' yn_text = '아니오' )
470-
).
471-
472-
MODIFY ztwbs_yn_master FROM TABLE @lt_data.
473-
474-
out->write( lt_data ).
475-
"종료
476-
ENDMETHOD.
477-
ENDCLASS.
478-
...
479-
```
480-
481-
10-2-3. ZC_TWBS_YN_MASTER 프로젝션 뷰 생성
482-
483-
```javascript
484-
@AbapCatalog.viewEnhancementCategory: [#NONE]
485-
@AccessControl.authorizationCheck: #NOT_REQUIRED
486-
@EndUserText.label: 'Y/N 콤보박스 프로젝션 뷰'
487-
@Metadata.ignorePropagatedAnnotations: true
488-
@ObjectModel.resultSet.sizeCategory: #XS -- 콤보박스 형태로 화면 컴포넌트 강제 전환
489-
490-
define root view entity ZC_TWBS_YN_MASTER
491-
as select from ztwbs_yn_master
492-
{
493-
key yn_code as YnCode,
494-
yn_text as YnText
495-
496-
-- DB에 저장된 순수 텍스트('예')와 코드('Y')를 결합하여
497-
-- 화면단 OData 파이기구에 '예(Y)', '아니오(N)' 형태로 포맷을 완성해 전달합니다.
498-
-- concat( concat( yn_text, '(' ), concat( yn_code, ')' ) ) as DisplayText
499-
}
500-
501-
```
502-
503-
10-2-4. ZC_TWBS_TASK2 인터페이스 뷰에 콤보박스 설정
504-
505-
```javascript
506-
@Consumption.valueHelpDefinition: [{
507-
entity: { name: 'ZC_TWBS_CATEGORY', element: 'CategoryName' },
508-
additionalBinding: [ { element: 'CategoryType', localConstant: 'DevType', usage: #FILTER } ],
509-
useForValidation: true
510-
}]
511-
DevType,
512-
```
513-
514-
</details>
515-
516-
<details markdown="1">
517-
<summary> <b>10-3 표준 도메인 사용하기(눌러서 열기)</b></summary>
518-
519-
- complete_yn 완료 여부를 체크박스 또는 콤보박스로 설정
520-
521-
```javascript
522-
//체크박스(도메인에 따라 기본 UI 다름)
523-
//ZTWBS_TASK2 테이블 도메인 변경
524-
complete_yn : abap_boolean; //XFELD 더이상 사용하지 않음.
525-
526-
//ZC_TWBS_TASK2 인터페이스뷰 변경
527-
@Metadata.renderHint: [ #COMBOBOX ]
528-
CompleteYn;
529-
```
530-
531-
</details>
532-
533-
<details markdown="1">
534-
<summary> <b>10-4 달력 만들기(눌러서 열기)</b></summary>
535-
536-
### ZTWBS_TASK2 테이블 내 컬럼 속성을 날짜 타입으로 생성
537-
538-
```javascript
539-
start_date : abap.dats;
540-
```
541-
542-
### 메타데이터 익스텐션에 설정
543-
544-
```javascript
545-
// 날짜 하루 입력
546-
@Consumption.filter.selectionType: #SINGLE
547-
// 날짜 구간 값 입력
548-
@Consumption.filter.selectionType: #INTERVAL
549-
```
550-
551-
</details>
552-
553363
---
554364
## 10. IAM APP 생성
555365
New > Create IAM App

0 commit comments

Comments
 (0)