Initial commit: ABAP indexing pipeline (ingest, parser, summarize, index, query, wiki)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,271 @@
|
||||
---
|
||||
type: abap-program
|
||||
title: "ZFIRCLV0010"
|
||||
description: "SM34 뷰 클러스터 ZFIV0070 의 저장 전 처리를 담당하는 Exit 프로그램이다. 뷰 클러스터 유지보수(테이블 설정값 관리) 화면에서 저장 시점에 호출되어 권한을 확인하고 클러스터 데이터를 저장한다. 업무 로직이 아니라 SAP 뷰 유지보수 프레임워크의 확장 지점이다."
|
||||
resource: "abap://ZFIRCLV0010"
|
||||
tags: ["설정", "권한관리", "마스터관리", "FI", "뷰클러스터", "변경이력", "생성자", "변경자", "감사필드", "뷰유지보수", "필드심볼", "뷰저장", "기능제외", "저장위임", "조회모드", "변경모드", "회사코드 권한체크", "뷰 클러스터 저장 검증", "저장 취소", "권한 오류"]
|
||||
generated: { by: "abap-indexing/z-ai/glm-5.2:free", at: "2026-09-20T15:36:23+00:00" }
|
||||
status: stable
|
||||
x-package:
|
||||
x-changed-on:
|
||||
x-tables-read: []
|
||||
x-tables-write: []
|
||||
x-calls: ["VIEW_MAINTENANCE_LOW_LEVEL"]
|
||||
x-code-hash: "ece135d2e0a134034e8d09d78ea4e7840a150c7109b4af653cf92c54aa7c7383"
|
||||
x-unit-count: 4
|
||||
x-chunk-count: 3
|
||||
x-declaration-count: 0
|
||||
---
|
||||
|
||||
## 업무 목적
|
||||
|
||||
SM34 뷰 클러스터 ZFIV0070 의 저장 전 처리를 담당하는 Exit 프로그램이다. 뷰 클러스터 유지보수(테이블 설정값 관리) 화면에서 저장 시점에 호출되어 권한을 확인하고 클러스터 데이터를 저장한다. 업무 로직이 아니라 SAP 뷰 유지보수 프레임워크의 확장 지점이다.
|
||||
|
||||
## 주 흐름
|
||||
|
||||
1. 뷰 클러스터 저장 직전에 호출된다 (REASSIGN_CLUSTER_SAVE / BEFORE_VIEW_SAVE_DATA)
|
||||
2. 저장 권한을 확인한다 (CHECK_AUTH)
|
||||
3. 클러스터 데이터를 저장한다 (SAVE_CLUSTER_ZFIV0070)
|
||||
|
||||
## 테이블 / 외부 호출
|
||||
|
||||
- read: -
|
||||
- write: -
|
||||
- 외부 호출: VIEW_MAINTENANCE_LOW_LEVEL
|
||||
|
||||
## 로직 조각 (3건 / unit 2개)
|
||||
|
||||
LLM 이 코드에서 골라낸 업무 로직 단위다. **조각마다 소스 원문과 자연어 설명을 함께 싣는다** — 설명이 코드와 맞는지 바로 대조할 수 있어야 하기 때문이다.
|
||||
테이블·호출은 LLM 이 쓴 값이 아니라 파서가 조각 범위에서 다시 뽑은 사실이다. 순서는 실행 순서다.
|
||||
|
||||
### FORM SAVE_CLUSTER_ZFIV0070 — `ZFIRCLV0010` L28-L152 (125줄)
|
||||
|
||||
*뷰 클러스터 ZFIV0070 저장 직전에 생성/변경 이력 필드를 채우고 저장 함수를 호출한다.*
|
||||
|
||||
> 이 unit 의 조각 2개가 68/125줄(54%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [aggregation] 뷰 유지보수 화면에서 변경된 행(ACTION 이 N 신규 또는 U 변경)만 골라, 신규 행에는 생성일시·생성자를, 모든 변경 행에는 변경일시·변경자를 채워 뷰 클러스터의 TOTAL·EXTRACT 버퍼에 되돌려 넣는다. 필드심볼 캐스팅으로 뷰 구조에 동적으로 접근한다.
|
||||
|
||||
```abap
|
||||
78| LOOP AT <VCL_TOTAL> INTO LS_TOTAL.
|
||||
79| LV_INDEX = SY-TABIX.
|
||||
80| CHECK LS_TOTAL-ACTION IS NOT INITIAL. " U, N 등의 데이터만.
|
||||
81|
|
||||
82| MOVE LS_TOTAL TO LV_TOTAL. " View 구조만 복사 " VIEWKEY 접근용
|
||||
83| READ TABLE <VCL_EXTRACT> INTO LV_EXTRACT
|
||||
84| WITH KEY <VIEWKEY> BINARY SEARCH.
|
||||
85|
|
||||
86| IF SY-SUBRC = 0.
|
||||
87|
|
||||
88| ASSIGN : LV_EXTRACT TO <FS_RECORD> CASTING.
|
||||
89|
|
||||
90| " 신규 입력
|
||||
91| IF LS_TOTAL-ACTION EQ 'N'.
|
||||
92| <FS_RECORD>-CDATE = SY-DATUM.
|
||||
93| <FS_RECORD>-CTIME = SY-UZEIT.
|
||||
94| <FS_RECORD>-CNAME = SY-UNAME.
|
||||
95| ENDIF.
|
||||
96|
|
||||
97| <FS_RECORD>-UDATE = SY-DATUM.
|
||||
98| <FS_RECORD>-UTIME = SY-UZEIT.
|
||||
99| <FS_RECORD>-UNAME = SY-UNAME.
|
||||
100|
|
||||
101| MODIFY <VCL_TOTAL> FROM <FS_RECORD> INDEX LV_INDEX.
|
||||
102| MODIFY <VCL_EXTRACT> FROM <FS_RECORD> INDEX LV_INDEX.
|
||||
103| CLEAR : LV_EXTRACT.
|
||||
104| ENDIF.
|
||||
105| ENDLOOP.
|
||||
```
|
||||
|
||||
- **EN**: Stamps created-by/changed-by audit fields onto rows flagged as new or updated in the view-cluster buffers, using field-symbol casting for dynamic view access.
|
||||
- SAP 객체: ZFIV0070, VIMFLAGTAB, VCL_STRUC_TAB, VIMDESC
|
||||
- 업무 키워드: 뷰클러스터, 변경이력, 생성자, 변경자, 감사필드, 뷰유지보수, 필드심볼
|
||||
- English: view cluster, audit fields, created by, changed by, view maintenance, field symbol
|
||||
- 정의부(복사 시 함께 필요): [`T_RECORD`](#decl-zfirclv0010-30-t_record), [`LS_TOTAL`](#decl-zfirclv0010-43-ls_total), [`LV_INDEX`](#decl-zfirclv0010-36-lv_index), [`LV_TOTAL`](#decl-zfirclv0010-40-lv_total), [`LV_EXTRACT`](#decl-zfirclv0010-41-lv_extract), [`<VIEWKEY>`](#decl-zfirclv0010-48--viewkey-), [`<FS_RECORD>`](#decl-zfirclv0010-50--fs_record-)
|
||||
- 선언을 못 찾은 이름: <VCL_TOTAL>, <VCL_EXTRACT> (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZFIRCLV0010/ZFIRCLV0010#L78-L105` · confidence 0.82 · `ZFIRCLV0010#ZFIRCLV0010#FORM#SAVE_CLUSTER_ZFIV0070#C1`
|
||||
|
||||
#### [fm_call] 뷰 동작(S 조회 / U 변경)에 따라 화면에서 제외할 기능코드(조회·변경·신규·저장·종료)를 정하고, 표준 FM VIEW_MAINTENANCE_LOW_LEVEL 에 SAVE 를 지시해 실제 저장을 맡긴다.
|
||||
|
||||
```abap
|
||||
107| IF VCL_ACTION = 'S'.
|
||||
108| FU_TO_EXCL-FUNCTION = 'ANZG'.
|
||||
109| APPEND FU_TO_EXCL.
|
||||
110| FU_TO_EXCL-FUNCTION = 'AEND'.
|
||||
111| APPEND FU_TO_EXCL.
|
||||
112| FU_TO_EXCL-FUNCTION = 'NEWL'.
|
||||
113| APPEND FU_TO_EXCL.
|
||||
114| FU_TO_EXCL-FUNCTION = 'SAVE'.
|
||||
115| APPEND FU_TO_EXCL.
|
||||
116| FU_TO_EXCL-FUNCTION = 'ENDE'.
|
||||
117| APPEND FU_TO_EXCL.
|
||||
118| ELSEIF VCL_ACTION = 'U'.
|
||||
119| FU_TO_EXCL-FUNCTION = 'SAVE'.
|
||||
120| APPEND FU_TO_EXCL.
|
||||
121| FU_TO_EXCL-FUNCTION = 'ENDE'.
|
||||
122| APPEND FU_TO_EXCL.
|
||||
123| ELSE.
|
||||
124| EXIT.
|
||||
125| ENDIF.
|
||||
126|
|
||||
127| CALL FUNCTION 'VIEW_MAINTENANCE_LOW_LEVEL'
|
||||
128| EXPORTING
|
||||
129| FCODE = 'SAVE'
|
||||
130| VIEW_ACTION = VCL_ACTION
|
||||
131| VIEW_NAME = LV_VIEWNAME
|
||||
132| TABLES
|
||||
133| CORR_KEYTAB = L_T_E071K
|
||||
134| DBA_SELLIST = <VCL_DBA_SELLIST>
|
||||
135| DPL_SELLIST = <VCL_DPL_SELLIST>
|
||||
136| EXCL_CUA_FUNCT = FU_TO_EXCL
|
||||
137| EXTRACT = <VCL_EXTRACT>
|
||||
138| TOTAL = <VCL_TOTAL>
|
||||
139| X_HEADER = <VCL_HEADER>
|
||||
140| X_NAMTAB = <VCL_NAMTAB>
|
||||
141| EXCEPTIONS
|
||||
142| FUNCTION_NOT_FOUND = 1
|
||||
143| MISSING_CORR_NUMBER = 2
|
||||
144| NO_VALUE_FOR_SUBSET_IDENT = 3
|
||||
145| SAVING_CORRECTION_FAILED = 4
|
||||
146| OTHERS = 5.
|
||||
```
|
||||
|
||||
- **EN**: Builds the excluded-function list per view action and delegates the actual save to the standard FM VIEW_MAINTENANCE_LOW_LEVEL.
|
||||
- 호출(파서): VIEW_MAINTENANCE_LOW_LEVEL
|
||||
- SAP 객체: VIEW_MAINTENANCE_LOW_LEVEL, ZFIV0070, VIMEXCLFUN, E071K
|
||||
- 업무 키워드: 뷰저장, 기능제외, 뷰유지보수, 저장위임, 조회모드, 변경모드
|
||||
- English: view save, excluded functions, view maintenance, SAVE fcode, display mode, change mode
|
||||
- 정의부(복사 시 함께 필요): [`FU_TO_EXCL`](#decl-zfirclv0010-53-fu_to_excl), [`LV_VIEWNAME`](#decl-zfirclv0010-37-lv_viewname), [`L_T_E071K`](#decl-zfirclv0010-52-l_t_e071k)
|
||||
- 선언을 못 찾은 이름: <VCL_DBA_SELLIST>, <VCL_DPL_SELLIST>, <VCL_EXTRACT>, <VCL_TOTAL>, <VCL_HEADER>, <VCL_NAMTAB> (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZFIRCLV0010/ZFIRCLV0010#L107-L146` · confidence 0.84 · `ZFIRCLV0010#ZFIRCLV0010#FORM#SAVE_CLUSTER_ZFIV0070#C2`
|
||||
|
||||
### FORM CHECK_AUTH — `ZFIRCLV0010` L159-L185 (27줄)
|
||||
|
||||
*뷰 클러스터 ZFIV0070/ZFIV0080 저장 시 편집 중인 각 행의 회사코드에 대해 F_BKPF_BUK 권한을 검사하고 권한이 없으면 저장 기능을 취소하고 현재 뷰에 머무르게 하는 FORM이다.*
|
||||
|
||||
> 이 unit 의 조각 1개가 19/27줄(70%)을 덮는다. 나머지는 선언·화면설정 등 업무 의미가 없다고 판단해 버린 구간이다.
|
||||
|
||||
#### [validation] 대상 뷰 클러스터가 ZFIV0070/ZFIV0080이면 VCL_SET_TABLE_ACCESS_FOR_OBJ로 상위 객체 테이블 접근을 설정한 뒤 <VCL_TOTAL>의 각 행(ZFIT0081 구조)의 회사코드에 AUTHORITY-CHECK F_BKPF_BUK를 수행하고, 실패 시 FZ 240 메시지를 내고 VCL_NEXT_VIEW/VCL_AKT_VIEW를 이전 뷰로 되돌리며 VCL_FUNCTION을 지워 저장을 막는다.
|
||||
|
||||
```abap
|
||||
165| IF VCL_STRUC_TAB-OBJECT EQ 'ZFIV0070' OR
|
||||
166| VCL_STRUC_TAB-OBJECT EQ 'ZFIV0080'.
|
||||
167|
|
||||
168| PERFORM VCL_SET_TABLE_ACCESS_FOR_OBJ USING VCL_STRUC_TAB-PREDOBJECT
|
||||
169| CHANGING LV_ERROR_FLAG.
|
||||
170|
|
||||
171| CHECK LV_ERROR_FLAG EQ SPACE.
|
||||
172| LOOP AT <VCL_TOTAL> INTO LS_ZFIV0081.
|
||||
173| * 회사코드 권한체크
|
||||
174| AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
|
||||
175| ID 'BUKRS' FIELD LS_ZFIV0081-BUKRS.
|
||||
176| IF SY-SUBRC NE 0.
|
||||
177| MESSAGE S240(FZ) WITH LS_ZFIV0081-BUKRS.
|
||||
178| VCL_NEXT_VIEW = VCL_LAST_VIEW.
|
||||
179| VCL_AKT_VIEW = VCL_LAST_VIEW.
|
||||
180| CLEAR VCL_FUNCTION.
|
||||
181| ENDIF.
|
||||
182| ENDLOOP.
|
||||
183| ENDIF.
|
||||
```
|
||||
|
||||
- **EN**: For view clusters ZFIV0070/ZFIV0080, checks authorization object F_BKPF_BUK for the company code of every edited row in the view-cluster total table and cancels the save (resets current view and clears VCL_FUNCTION) when the check fails.
|
||||
- 호출(파서): VCL_SET_TABLE_ACCESS_FOR_OBJ
|
||||
- SAP 객체: F_BKPF_BUK, ZFIV0070, ZFIV0080, ZFIT0081, VCL_SET_TABLE_ACCESS_FOR_OBJ
|
||||
- 업무 키워드: 회사코드 권한체크, 뷰 클러스터 저장 검증, 저장 취소, 권한 오류
|
||||
- English: Authorization Check, F_BKPF_BUK, View Cluster, SM34, Company Code
|
||||
- 정의부(복사 시 함께 필요): [`LV_ERROR_FLAG`](#decl-zfirclv0010-163-lv_error_flag), [`LS_ZFIV0081`](#decl-zfirclv0010-161-ls_zfiv0081)
|
||||
- 선언을 못 찾은 이름: <VCL_TOTAL> (수집 안 된 인클루드·함수 인터페이스일 수 있다)
|
||||
- 위치: `abap://ZFIRCLV0010/ZFIRCLV0010#L165-L183` · confidence 0.9 · `ZFIRCLV0010#ZFIRCLV0010#FORM#CHECK_AUTH#C1`
|
||||
|
||||
## 정의부 (12건)
|
||||
|
||||
로직 조각을 다른 프로그램으로 옮겨 붙일 때 **함께 가야 하는 선언**이다. 조각별로 무엇이 필요한지는 위 조각 항목의 `정의부` 줄에 있고(이름을 누르면 여기로 온다), 붙여넣기용으로 의존까지 묶은 코드는 `GET /chunks/<chunk_id>` 의 `declaration_code` 로 받는다.
|
||||
|
||||
### `ZFIRCLV0010` (12건)
|
||||
|
||||
#### T_RECORD — types · unit 로컬 · L30-L34 {#decl-zfirclv0010-30-t_record}
|
||||
|
||||
```abap
|
||||
TYPES : BEGIN OF T_RECORD.
|
||||
INCLUDE STRUCTURE ZFIV0070.
|
||||
TYPES : ACTION LIKE VIMFLAGTAB-ACTION.
|
||||
TYPES : MARK LIKE VIMFLAGTAB-ACTION,
|
||||
END OF T_RECORD.
|
||||
```
|
||||
|
||||
#### LV_INDEX — data · unit 로컬 · L36-L36 {#decl-zfirclv0010-36-lv_index}
|
||||
|
||||
```abap
|
||||
DATA : LV_INDEX LIKE SY-TABIX.
|
||||
```
|
||||
|
||||
#### LV_VIEWNAME — data · unit 로컬 · L37-L37 {#decl-zfirclv0010-37-lv_viewname}
|
||||
|
||||
```abap
|
||||
DATA: LV_VIEWNAME TYPE VCLSTRUC-OBJECT.
|
||||
```
|
||||
|
||||
#### LV_TOTAL — data · unit 로컬 · L40-L40 {#decl-zfirclv0010-40-lv_total}
|
||||
|
||||
```abap
|
||||
DATA : LV_TOTAL(1000) TYPE C.
|
||||
```
|
||||
|
||||
#### LV_EXTRACT — data · unit 로컬 · L41-L41 {#decl-zfirclv0010-41-lv_extract}
|
||||
|
||||
```abap
|
||||
DATA : LV_EXTRACT(1000) TYPE C.
|
||||
```
|
||||
|
||||
#### LS_TOTAL — data · unit 로컬 · L43-L43 {#decl-zfirclv0010-43-ls_total}
|
||||
|
||||
```abap
|
||||
DATA : LS_TOTAL TYPE T_RECORD.
|
||||
```
|
||||
|
||||
#### <VIEWKEY> — field-symbol · unit 로컬 · L48-L48 {#decl-zfirclv0010-48--viewkey-}
|
||||
|
||||
```abap
|
||||
FIELD-SYMBOLS : <VIEWKEY> TYPE X.
|
||||
```
|
||||
|
||||
#### <FS_RECORD> — field-symbol · unit 로컬 · L50-L50 {#decl-zfirclv0010-50--fs_record-}
|
||||
|
||||
```abap
|
||||
FIELD-SYMBOLS : <FS_RECORD> TYPE T_RECORD.
|
||||
```
|
||||
|
||||
#### L_T_E071K — data · unit 로컬 · L52-L52 {#decl-zfirclv0010-52-l_t_e071k}
|
||||
|
||||
```abap
|
||||
DATA: L_T_E071K LIKE E071K OCCURS 0.
|
||||
```
|
||||
|
||||
#### FU_TO_EXCL — data · unit 로컬 · L53-L55 {#decl-zfirclv0010-53-fu_to_excl}
|
||||
|
||||
```abap
|
||||
DATA: BEGIN OF FU_TO_EXCL OCCURS 10.
|
||||
INCLUDE STRUCTURE VIMEXCLFUN.
|
||||
DATA: END OF FU_TO_EXCL.
|
||||
```
|
||||
|
||||
#### LS_ZFIV0081 — data · unit 로컬 · L161-L161 {#decl-zfirclv0010-161-ls_zfiv0081}
|
||||
|
||||
```abap
|
||||
DATA: LS_ZFIV0081 LIKE ZFIT0081.
|
||||
```
|
||||
|
||||
#### LV_ERROR_FLAG — data · unit 로컬 · L163-L163 {#decl-zfirclv0010-163-lv_error_flag}
|
||||
|
||||
```abap
|
||||
DATA: LV_ERROR_FLAG TYPE VCL_FLAG_TYPE.
|
||||
```
|
||||
|
||||
## Unit 목록 (컨테이너)
|
||||
|
||||
| unit | 유형 | 위치 | 조각 | 한 줄 요약 |
|
||||
|---|---|---|---|---|
|
||||
| REASSIGN_CLUSTER_SAVE | FORM | ZFIRCLV0010 L18-20 | 0 | 뷰 클러스터 저장 직전(BEFORE_VIEW_SAVE_DATA) 이벤트에서 SAVE_CLUSTER_ZFIV0070을 호출해 클러스터 데이터를 저장하는 위임 FORM이다. |
|
||||
| SAVE_CLUSTER_ZFIV0070 | FORM | ZFIRCLV0010 L28-152 | 2 | 뷰 클러스터 ZFIV0070 저장 직전에 생성/변경 이력 필드를 채우고 저장 함수를 호출한다. |
|
||||
| CHECK_AUTH | FORM | ZFIRCLV0010 L159-185 | 1 | 뷰 클러스터 ZFIV0070/ZFIV0080 저장 시 편집 중인 각 행의 회사코드에 대해 F_BKPF_BUK 권한을 검사하고 권한이 없으면 저장 기능을 취소하고 현재 뷰에 머무르게 하는 FORM이다. |
|
||||
Reference in New Issue
Block a user