ABAP (62) 썸네일형 리스트형 ABAP : OCCURS Ty~ 꼴로 Type Structure를 선언할 때, OCCURS 0를 많이 볼수 있다 OCCURS 0를 선언하면 테이블로 인식된다. "OCCRUS"는 "Open Cursor"의 줄임말이다. 데이터베이스 커서는 SELECT 문을 실행하여 데이터베이스 테이블의 레코드를 읽을 때 사용되는 개념입니다 "OCCRUS"는 이러한 데이터베이스 커서를 ABAP에서 다루기 위한 내부 구조로 사용됩니다. OCCRUS ~ = 나 인터널 테이블로 사용한다. OCCURS 0 -> 인터널 테이블을 초기화 한다. OCCURS 200 -> 인터널 테이블을 200개의 항목을 가질 수 있다는 뜻이다. ABAP : Method; set_table_for_first_display IF go_con IS INITIAL. * ~~ CALL METHOD go_alv->set_table_for_first_display EXPORTING is_variant = gs_disv is_layout = gs_layo i_save = 'A' it_toolbar_excluding = gt_excel CHANGING it_outtab = gt_main[] it_fieldcatalog = gt_fcat it_sort = gt_sort. ELSE IF . CALL METHOD P_GO_ALV->REFRESH_TABLE_DISPLAY EXPORTING IS_STABLE = LS_STABLE I_SOFT_REFRESH = 'X'. ENDIF. ABAP : LEAVE LIST-PROCESSING ABAP에서 LEAVE LIST-PROCESSING은 현재 실행 중인 목록 처리 블록에서 빠져나와 다음 명령문을 실행하는 ABAP 문법입니다. 일반적으로 목록 처리 블록은 TOP-OF-PAGE, AT LINE-SELECTION 및 END-OF-PAGE 이벤트 블록에서 사용됩니다. 이 블록은 사용자 인터페이스에서 리스트를 표시하고 사용자가 선택한 항목을 처리하는 데 사용됩니다. LEAVE LIST-PROCESSING은 실행 중인 목록 처리 블록을 빠져나와 일반적인 ABAP 명령문으로 제어를 반환합니다. 예를 들어 사용자가 목록에서 새로운 페이지를 요청하는 경우, LEAVE LIST-PROCESSING을 사용하여 목록 처리 블록에서 빠져나올 수 있습니다. ABAP : DESCRIBE ABAP에서는 DESCRIBE 문을 사용하여 데이터 객체에 대한 정보를 검색할 수 있다. DESCRIBE 뒤에는 다음과 같은 옵션을 사용 할 수 있다. FIELD: 주어진 데이터 객체의 데이터 타입, 길이, 소수점 위치 및 데이터 유형에 대한 정보를 검색합니다. FIELD 옵션 뒤에는 필드 이름이나 변수 이름을 사용할 수 있습니다. STRUCTURE: 주어진 구조체에 대한 정보를 검색합니다. STRUCTURE 옵션 뒤에는 구조체 이름이나 변수 이름을 사용할 수 있습니다. TABLE: 주어진 데이터베이스 테이블에 대한 정보를 검색합니다. TABLE 옵션 뒤에는 테이블 이름을 사용할 수 있습니다. COMPONENTS: 주어진 구조체의 구성 요소 정보를 검색합니다. COMPONENTS 옵션 뒤에는 구조체 이름.. ABAP : 산술연산자 말고 관계연산자 그동안 EQ = Equal NE = Not Equal LT = Lower Than GT = Greater Than LE = Less or Equal GE = Greater or Equal 에 익숙해져있던 나에게 새로운 연산자가 보이기 시작했다 CO - Constants Only 'abc' -> a,b,c (한글자만 만족하면 True) CN - Constants Not Only -> 1번과 반대 CA - Contains Any 'abc' -> a,b,c 중 하나라도 포함이면 true이다 NA - Contains Not Any -> 3번과 반대 CS - Contains String 'abc' -> 'abc' (문자열 전체) 를 포함하면 true NS - Contains No String - 바로 위에꺼와 반.. ABAP : SALV METHOD 간단 예시 인터널테이블을 간단하게 alv로 확인할때 사용한다 ABAP : SORT형식 SORT itab BY field1 ASCENDING field2 DESCENDING ABAP : FREE 이벤트 초기화 이벤트 Clear와 같은 용도로 사용하지만 FREE는 메모리를 삭제한다. 그 대상이 더이상 필요하지 안을때 FREE를 사용해야한다. ABAP : CONTINUE, STOP, CHECK 이벤트 CONTINUE : LOOP문내에서 사용되며, 특정 조건에 해당하면 다음 LOOP로 이동하기 위해 사용한다 CONTINUE조건에 걸리면 LOOP내 하위 로직을 수행하지 않는다. STOP : STOP구문을 만나면 START-OF-SELECTION 하위 구문을 모두 종료하고 END-OF-SELECTION을 실행한다 CHECK : CHECK구문이 참일 경우 하위 로직을 수행하고, 거짓일 경우 하위 로직을 수행하지 않고 종료한다. 서브루틴내 하위 로직은 모두 종료시키고 서브루틴을 탈출한다 Return을 넣어서 Processing BLOCK을 탈출 시킬 수 있다는 것이 RETURN Command와의 차이점이다. ABAP : 인터널 테이블에서의 MOVE-CORRESPONDING MOVE-CORRESPONDING 구문은 구조체나 헤더라인지 존재하는 Internal Table에 사용되는 구문이며 동일한 필드명에 데이터를 할당하는 명령이다. MOVE-CORRESPONDING 구문은 MOVE-CORRESPONDING wa1 to wa2 MOVE-CORRESPONDING itab1 to itab2 와 같이 같은 형태로 사용해야한다 wa는 wa끼리, itab은 itab끼리 만약 MOVE-CORRESPONDING의 구조체, 필드이름 및 순서가 다를 경우 필드 이름에 관계없이 순서대로 할당이 일어나므로 주의해야 한다. 결과 : ABAP : Field Symbol 필드심볼 Field Symbol의 특징 - 필드 심볼은 ABAP 프로그램 내에서 변수에 동적인 접근이 가능하게 한다 . - 필드 심볼은 자기 자신을 위한 메모리 공간을 점유하지 않는다. - 필드 심볼의 데이터 이름과 속성은 실행 시점(Runtime)에 결정된다 . - 필드 심볼은 모든 데이터 오브젝트에 지정될 수 있다. - 일단 필드 심볼이 할당되면 데이터 오브젝트와 필드 심볼 간에는 차이가 없다. - MOVE 같은 ABAP 명령어도 같이 사용할 수 있다. - 필드 심볼은 타입을 명시하여 선언하거나, 타입 없이 생성할 수 있다. 타입이 명시되지 않으면 할당 되는 필드(오브젝트)의 타입을 그대로 상속받는다. -필드 심볼을 선언하여 프로그램 내에서 사용하려면 반드시 ASSIGN 구문을 이용하여 오브젝트를 할당하여야 .. ABAP : IS BOUND 와 IS INITIAL의 차이 먼저 Reference문서를 보면 IS BOUND와 IS INITIAL의 기능을 설명 하고 있다. IS BOUND 참조 값이 유효할 경우 그 값을 를 참조 한다 -> 스택에 없거나 삭제된 경우 존재 하지 않는 값이냐? 고 묻는데 사용할 수 도 있다. IS INITIAL 피연산자가 초기값인지 확인한다 또 다른 Reference에는 IS BOUND는 개체(object reference)을 구체적화할때 쓰고 IS INITIAL은 더 큰 개념으로 사용한다 변수, ITAB, 개체 등 더 큰 범주에서 사용된다 개체를 참조할경우 IS BOUND를 사용하기를 권하고 있다. Well, the only thing that I would say is, that the IS BOUND syntax is specific to .. ABAP : ALV에서의 CRUD 스크린에서 조회하려할때 Module-Pool을 이용한다고 했을때, screen을 생성하여 user-command를 태우고 데이터를 조회한다고 했을 때, CREATE REFRESH 데이터 갱신시 ALV를 REFRESH 해준다. SAVE DATA DELETE ABAP : IS_READY_FOR_INPUT을 이용한 ALV 필드 EDIT CONTROL SAP의 메소드중에 is_ready_for_input set_ready_for_input 이라는 메소드가 있다 Layout/FieldCatalog/Cell의 Edit을 활성/비활성 할때 사용하는 메서드이다 주로 PAI에서 사용하며 기본 형식은 아래와 같다 ALV_GRID->IS_READY_FOR_INPUT( ) EQ 0. ALV_GRID->SET_READY_FOR_INPUT = 0 (조회상태) ALV_GRID->SET_READY_FOR_iNPUT = 1 (수정상태) 조회모드 수정모드 ABAP : ALV에서의 SOFT REFRESH ● 이미 조회된 ALV의 아웃풋 테이블을 조회할 때 사용하는 메소드 ● 데이터가 변경되어 다시 ALV를 띄워야 할 때 사용한다. METHOD 인스턴스 : [ALV_GRID명] 클래스 : CL_GUI_ALV_GIRD METHOD : REFRESH_TABLE_DISPLAY 파라미터 IS_STABLE : 라인과 칼럼 위치를 기억하여 재조회하고 이전의 위치에 화면을 보이게 한다. lvc_s_stbl 구조체 선언이 필요하다. ABAP : READ TABLE형식 인터널 테이블에서 READ TABLE의 형식 READ TABLE (테이블명) WITH KEY (필드조건) READ TABLE (테이블명) WITH TABLE KEY (필드조건) READ TABLE (테이블명) INDEX (인덱스) ABAP : LOOP 형식 LOOP AT (인터널테이블) FROM (구조체). ( LOOP 내용 ) ENDLOOP. ABAP : BDC DATA ● BDC DATA란? 레거시 시스템에서 SAP 시스템으로 데이터 가져오는 절차 1. 레거시 데이터를 SAP 포맷에 맞는 형태로 데이터를 가공 및 생성 2. SAP 로 데이터를 전송 - 전송 방법에는 BAPI, Batch Input, Direct Input 등이 있음 - 이 중 Batch Input 전송 방법을 사용하기 위해서는 BDC 프로그램이 필요 ● Data Transfer Workbench 기존의 시스템 or 외부 시스템에서 SAP로 데이터 전송을 위한 일련의 작업들을 총괄해주는 Tool ● BDC 프로그램 여러가지 전송 방법 중 Batch Input을 사용하여 레거시 데이터를 SAP로 가져오기 위한 프로그램 일반적으로 Batch Input프로그램을 BDC(Batch Data Communicati.. ABAP : Eclipse를 이용하여 CDS, OData 만들기 ● 알아둬야 할 T-CODE - /IWFND/MAINT_SERVICE : Active & Maintain Services - SEGW : SAP Gateway Service Builder 만들어보자 1. 이클립스에서 뷰의 껍데기를 만들어준다 (테이블을 미리 만들어 주었다는 가정하에) 2. SEGW의 AddService에 들어가 System Alias에 저장위치, External Servcie Name에 서비스 명을 입력해주고 Get Services를 눌러준다 3. 아래와 같이 Add Selected Services를 눌러준다 그럼 OData 껍데기가 만들어진 것이다. 4. 만들고 나오면 보이지만 혹시 안보일경우 필터를 이용하여 External에 검색해준다 5. Status에 초록불이 들어와야 활성화 상태.. ABAP : OData 개념 ● 개요 - SAP Data(Table 또는 Query Data)를 UI5/Fiori 또는 HANA와 같은 외부 환경에 노출하려는 경우 데이터를 API 형태로 푸시해야 한다 - CRUD작업을 수행하는데 사용할 수 있는 링크이다. - SAP ABAP환경의 SAP OData는 다른 ABAP 클래스와 같다. SEGW 트랜잭션을 사용하여 이 클래스의 메소드에 엑세스할 수 있다. - 데이터 조작에 필요한 코드를 작성할 수 있으며 클래스를 활성화하면 생성한 서비스 링크가 작동한다. ● 정의 - ABAP을 이용하여 SAP에 있는 데이터 쿼리를 업데이트하고 HTTP와 같은 웹 기술을을 적용하고 구축한다. - 외부 애플리케이션, 플랫폼 및 장치의 정보에 덱세스를 제공하는 웹 프로토콜 ● SAP OData의 아키텍처 : .. ABAP : CDS View ● CDS의 유형 - ABAP CDS : ABAP프로그램을 설계 및 개발하는 layer에서데이터 모델에 대한 추상화를 하여 모델 접근 편의성을 개선하고 물리적인 HANA View를 생성한다 - HANA Native CDS SAP HANA database에는 Core Data Service (DDL, QL , EL) / SQL Engine / Clac Engine / SQL Script로 나누어져 있다. - DDL : Data Definition Language - QL : Query Language - EL : Expression Language CDS의 정의 : ABAP의향상된 'View 엔터티"이다, ● CDS의 장점은 다음과 같다 - 데이터 집약적 계산을 데이터베이스 계층으로 푸시한다. - 쿼리를 .. ABAP : ALV_GRID에서 사용하는 CLASS/METHOD모음 CALL FUNCTION - LVC_VARIANT_SAVE_LOAD : VARIANT 값을 저장할 때 컨테이너 만들때 - cl_gui_custom_container. - cl_gui_splitter_container : split 컨테이너를 만들때 사용한다 - cl_gui_docking_container ALV GRID만들 떄 CL_GUI_ALV_GRID - REFRESH_TABLE_DISPLAY : 테이블 디스플레이를 REFRESH를 한다 ALV_GRID에서 EDIT할 때 CL_ALV_CHANGED_DATA_PROTOCOL - MT_DELETED_ROWS : 지워진 ROW 기억 - MT_INSERTED_ROWS : INSERT된 ROW기억 CALL FUNCTION 정리 - POPUP_TO CONFIRM.. ABAP : BADI를 생성하고 만드는 방법 ● BADI를 생성하고 적용하는 방법 - 프로그램의 BADI를 더블클릭해서 들어간다 - 새로만들기 - 만들어진 모습 - 들어가서 클릭한다 - 들어간다 - 여기서 코드를 추가해주면 하나가 완성된다 - 들어가면 추가되는걸 볼 수 있다. ABAP : 프로그램을 INCLUDE를 활용하여 편하게 관리하기 ALV프로그램을 만들어봤는데 스크롤이 길고 왔다갔다 불편합니다 INCLUDE를 활용하여 편하게 만들어 봅니다 - 기존 코드 - 바뀐 후 많이 간결해집니다 INCLDUE사용은 사용자 마음이지만 제가 하는 방식을 소개드립니다 TOP : 프로그램이름_TOP CLASS : 프로그램이름_C01 SELECTION SCREEN : 프로그램이름_S01 OUTPUT : 프로그램이름_O01 INPUT : 프로그램이름_I01 FORM : 프로그램이름_F01 순으로 정리했습니다 > TOP : 글로벌 변수 선언한 내용을 넣습니다 > CLASS : CLASS만 넣어줍니다 > SELECTION CREEN에 관한 것만 넣어줍니다 > OUTPUT : OUTPUT에관한 모든것을 넣어줍니다 > INPUT > FORM ABAP : ALV GRID 생성 3부 1,2부에 이어서 진행합니다 1부 https://kdk09.tistory.com/67 ABAP : ALV GRID 생성 1부 ALV그리드를 만들어 봅니다 ALV를 만들기 위한 선행 과정 프로그램 생성 1. SCREEN 생성 2. Container 생성 3. ALV 생성 이라는 것을 기억합니다 ● 먼저 프로그램을 만들고 스크린을 생성해 줍니다 ● OK_C kdk09.tistory.com 2부 https://kdk09.tistory.com/69 ABAP : ALV GRID 생성 2부 1부에이어서 진행됩니다 1부는 아래 링크로 https://kdk09.tistory.com/67 ABAP : ALV GRID 생성 1부 ALV그리드를 만들어 봅니다 ALV를 만들기 위한 선행 과정 프로그램 생성 1. SCREEN .. ABAP : ALV GRID CLASS METHOD 구성요소 정리 ● SET_TABLE_FOR_FIRST_DISPLAY → IS_VARIANT 경로 : disvariant → variant USERNAME : VARIANT저장한 USER의 이름을 저장한다. VARIANT : VARIANT의 레이아웃을 저장한다. TEST : 저장한 VARIANT의 Description값을 저장한다. → I_SAVE U : 사용자가 사용자 고유 레이아웃 변형만 지정할 수 있음 X : 사용자가 전역 레이아웃 변형을 저장할 수 있음 A : 사용자가 사용자 고유 레이아웃 변형과 전역 레이아웃 변형을 둘 다 저장 할 수 있음 → LAYOUT TYPE REF : LVC_S_LAYO ZEBRA : 레이아웃 ROW를 구분하기 쉽도록 색으로 ROW가 바뀔때 마다 색을 바꿔줌 INFO-FNAME : 인터.. ABAP : ALV GRID 생성 2부 1부에이어서 진행됩니다 1부는 아래 링크로 https://kdk09.tistory.com/67 ABAP : ALV GRID 생성 1부 ALV그리드를 만들어 봅니다 ALV를 만들기 위한 선행 과정 프로그램 생성 1. SCREEN 생성 2. Container 생성 3. ALV 생성 이라는 것을 기억합니다 ● 먼저 프로그램을 만들고 스크린을 생성해 줍니다 ● OK_C kdk09.tistory.com 1부까지 따라 하셨다면 아래 화면같이 ALV에 데이터가 출력되어야 합니다 2부에서는 ● VARIANT ● LAYOUT ● SORT ● COLOR 를 해봅니다. ● 간단 개념체크 - VARIANT : 각 사용자가 원하는 레이아웃을 저장하여 제공합니다 - LAYOUT : AVL GRID컨트롤의 화면 속성을 정의합니다 .. ABAP : ALV GRID 생성 1부 ALV그리드를 만들어 봅니다 ALV를 만들기 위한 선행 과정 프로그램 생성 1. SCREEN 생성 2. Container 생성 3. ALV 생성 이라는 것을 기억합니다 ● 먼저 프로그램을 만들고 스크린을 생성해 줍니다 ● OK_CODE를 만들어 줍니다 ● 컨테이너를 만들기 위해 레이아웃으로 들어갑니다 ● CUSTOM CONTROL을 이용해 컨테이너 공간을 만들어줍니다 ● 컨테이너 이름을 만듭니다 ※ Attributes, Length 값은 지정한 크기에 따라 다를 수 있음 수정 : NAME : 'MY_CONTAINER_AREA' 22.07.21 ● PBO모듈을 활성화하고 만듭니다 마스터 프로그램에 넣습니다 ※ PAI MODULE도 동일한 방식으로 만들어줍니다 ● GUI STATUS창을 설정합니다 ● 기본적.. SCREEN 명령어 모음 SY-SYDNNR : 현재 스크린 넘버 SY-REPID : Report Program ID SY-UCOMM : PAI를 일으키는 시스템변수 ABAP : Domain : xflag Xflag data element에 대해 알아봅시다 XFLAG는 SAP 스탠다드 도메인타입 입니다. CHAR형 1BYTE타입으로 선언되어 있습니다. 값은 BLANK, radio button, selection으로 이루어져 있습니다 RADIOBUTTON에 사용하면 좋겠네요 이전 1 2 3 다음