@@ -335,221 +335,31 @@ authorization master ( instance )
335335</details>
336336
337337## 8. Service Definition (서비스 정의) 생성
338-
339338ZP_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
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 생성
555365New > Create IAM App
0 commit comments