abapgit-agent 1.1.5 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yml +9 -22
- package/CLAUDE.md +248 -0
- package/README.md +16 -2
- package/RELEASE_NOTES.md +80 -8
- package/abap/CLAUDE.md +72 -6
- package/abap/copilot-instructions.md +51 -0
- package/abap/zcl_abgagt_cmd_factory.clas.abap +2 -0
- package/abap/zcl_abgagt_command_tree.clas.abap +237 -0
- package/abap/zcl_abgagt_command_tree.clas.xml +15 -0
- package/abap/zcl_abgagt_command_view.clas.abap +238 -0
- package/abap/zcl_abgagt_command_view.clas.xml +15 -0
- package/abap/zcl_abgagt_resource_tree.clas.abap +70 -0
- package/abap/zcl_abgagt_resource_tree.clas.xml +15 -0
- package/abap/zcl_abgagt_resource_view.clas.abap +68 -0
- package/abap/zcl_abgagt_resource_view.clas.xml +15 -0
- package/abap/zcl_abgagt_rest_handler.clas.abap +2 -0
- package/abap/zcl_abgagt_viewer_clas.clas.abap +58 -0
- package/abap/zcl_abgagt_viewer_clas.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_dtel.clas.abap +98 -0
- package/abap/zcl_abgagt_viewer_dtel.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_factory.clas.abap +41 -0
- package/abap/zcl_abgagt_viewer_factory.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_intf.clas.abap +58 -0
- package/abap/zcl_abgagt_viewer_intf.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_stru.clas.abap +59 -0
- package/abap/zcl_abgagt_viewer_stru.clas.xml +15 -0
- package/abap/zcl_abgagt_viewer_tabl.clas.abap +59 -0
- package/abap/zcl_abgagt_viewer_tabl.clas.xml +15 -0
- package/abap/zif_abgagt_command.intf.abap +3 -1
- package/abap/zif_abgagt_viewer.intf.abap +11 -0
- package/abap/zif_abgagt_viewer.intf.xml +15 -0
- package/bin/abapgit-agent +397 -0
- package/docs/commands.md +27 -8
- package/docs/tree-command.md +303 -0
- package/docs/view-command.md +409 -0
- package/package.json +1 -1
- package/src/abap-client.js +22 -0
- package/src/agent.js +27 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# tree Command Requirements
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Display the package hierarchy tree from an ABAP system, showing parent packages, sub-packages, and object counts.
|
|
6
|
+
|
|
7
|
+
## Command
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Basic usage
|
|
11
|
+
abapgit-agent tree --package $ZMY_PACKAGE
|
|
12
|
+
|
|
13
|
+
# With object breakdown
|
|
14
|
+
abapgit-agent tree --package $ZMY_PACKAGE --include-objects
|
|
15
|
+
|
|
16
|
+
# Limit depth
|
|
17
|
+
abapgit-agent tree --package $ZMY_PACKAGE --depth 3
|
|
18
|
+
|
|
19
|
+
# JSON output for scripting (pure machine-readable)
|
|
20
|
+
abapgit-agent tree --package $ZMY_PACKAGE --json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Prerequisite
|
|
24
|
+
|
|
25
|
+
- `.abapGitAgent` exists with valid credentials
|
|
26
|
+
- Package must exist in the ABAP system
|
|
27
|
+
|
|
28
|
+
## Parameters
|
|
29
|
+
|
|
30
|
+
| Parameter | Required | Description |
|
|
31
|
+
|-----------|----------|-------------|
|
|
32
|
+
| `--package` | Yes | ABAP package name (e.g., `$ZMY_PACKAGE`, `ZMY_PACKAGE`) |
|
|
33
|
+
| `--depth` | No | Maximum depth to traverse (default: 3) |
|
|
34
|
+
| `--include-objects` | No | Include object counts breakdown |
|
|
35
|
+
| `--json` | No | Output raw JSON only (for scripting) |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Tasks
|
|
40
|
+
|
|
41
|
+
### 1. Validate Parameters
|
|
42
|
+
|
|
43
|
+
- `--package` must be specified
|
|
44
|
+
- Package name must be valid (1-30 characters, start with letter or `$`)
|
|
45
|
+
|
|
46
|
+
### 2. Load Configuration
|
|
47
|
+
|
|
48
|
+
Read `.abapGitAgent` for credentials
|
|
49
|
+
|
|
50
|
+
### 3. Fetch CSRF Token
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
GET /health (with X-CSRF-Token: fetch)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 4. Make Tree Request
|
|
57
|
+
|
|
58
|
+
**Endpoint:** `POST /tree`
|
|
59
|
+
|
|
60
|
+
**Request Body:**
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"package": "$ZMY_PACKAGE",
|
|
64
|
+
"depth": 3,
|
|
65
|
+
"include_objects": true
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 5. Display Results
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Output
|
|
74
|
+
|
|
75
|
+
### Basic Tree
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
79
|
+
|
|
80
|
+
📦 $ZMAIN_PACKAGE (Main Package)
|
|
81
|
+
├─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
82
|
+
│ ├─ 📦 $ZMAIN_SUB1_A (Sub Package 1A)
|
|
83
|
+
│ └─ 📦 $ZMAIN_SUB1_B (Sub Package 1B)
|
|
84
|
+
└─ 📦 $ZMAIN_SUB2 (Sub Package 2)
|
|
85
|
+
└─ 📦 $ZMAIN_SUB2_A (Sub Package 2A)
|
|
86
|
+
|
|
87
|
+
📊 Summary
|
|
88
|
+
PACKAGES: 6
|
|
89
|
+
OBJECTS: 127
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### With Object Counts
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
96
|
+
|
|
97
|
+
📦 $ZMAIN_PACKAGE (Main Package)
|
|
98
|
+
├─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
99
|
+
│ ├─ 📦 $ZMAIN_SUB1_A (Sub Package 1A)
|
|
100
|
+
│ └─ 📦 $ZMAIN_SUB1_B (Sub Package 1B)
|
|
101
|
+
└─ 📦 $ZMAIN_SUB2 (Sub Package 2)
|
|
102
|
+
└─ 📦 $ZMAIN_SUB2_A (Sub Package 2A)
|
|
103
|
+
|
|
104
|
+
📊 Summary
|
|
105
|
+
PACKAGES: 6
|
|
106
|
+
OBJECTS: 127
|
|
107
|
+
TYPES: CLAS=10 INTF=2 PROG=11 FUGR=1 TABL=3
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### With Parent Package
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
114
|
+
|
|
115
|
+
⬆️ Parent: $ZSAP_BASE (SAP Base Package)
|
|
116
|
+
|
|
117
|
+
📦 $ZMAIN_PACKAGE (Main Package)
|
|
118
|
+
└─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
119
|
+
|
|
120
|
+
📊 Summary
|
|
121
|
+
PACKAGES: 2
|
|
122
|
+
OBJECTS: 15
|
|
123
|
+
TYPES: CLAS=5 PROG=10
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### JSON Output
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"SUCCESS": true,
|
|
131
|
+
"COMMAND": "TREE",
|
|
132
|
+
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
133
|
+
"MESSAGE": "Tree retrieved successfully",
|
|
134
|
+
"PARENT_PACKAGE": "$ZSAP_BASE",
|
|
135
|
+
"NODES": [
|
|
136
|
+
{
|
|
137
|
+
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
138
|
+
"PARENT": "",
|
|
139
|
+
"DESCRIPTION": "$ZMAIN_PACKAGE",
|
|
140
|
+
"DEPTH": 0,
|
|
141
|
+
"OBJECT_COUNT": 11
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"PACKAGE": "$ZMAIN_SUB1",
|
|
145
|
+
"PARENT": "$ZMAIN_PACKAGE",
|
|
146
|
+
"DESCRIPTION": "Sub Package 1",
|
|
147
|
+
"DEPTH": 1,
|
|
148
|
+
"OBJECT_COUNT": 10
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"PACKAGE": "$ZMAIN_SUB1_A",
|
|
152
|
+
"PARENT": "$ZMAIN_SUB1",
|
|
153
|
+
"DESCRIPTION": "Sub Package 1A",
|
|
154
|
+
"DEPTH": 2,
|
|
155
|
+
"OBJECT_COUNT": 3
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"TOTAL_PACKAGES": 6,
|
|
159
|
+
"TOTAL_OBJECTS": 127,
|
|
160
|
+
"OBJECTS": [
|
|
161
|
+
{ "OBJECT": "CLAS", "COUNT": 10 },
|
|
162
|
+
{ "OBJECT": "INTF", "COUNT": 2 },
|
|
163
|
+
{ "OBJECT": "PROG", "COUNT": 11 },
|
|
164
|
+
{ "OBJECT": "FUGR", "COUNT": 1 },
|
|
165
|
+
{ "OBJECT": "TABL", "COUNT": 3 }
|
|
166
|
+
],
|
|
167
|
+
"ERROR": ""
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Response Fields:**
|
|
172
|
+
|
|
173
|
+
| Field | Type | Description |
|
|
174
|
+
|-------|------|-------------|
|
|
175
|
+
| `SUCCESS` | boolean | Whether the request succeeded |
|
|
176
|
+
| `COMMAND` | string | Command name ("TREE") |
|
|
177
|
+
| `PACKAGE` | string | Root package name |
|
|
178
|
+
| `MESSAGE` | string | Status message |
|
|
179
|
+
| `PARENT_PACKAGE` | string | Parent package (empty if root) |
|
|
180
|
+
| `NODES` | array | Flat list of all packages with parent refs |
|
|
181
|
+
| `TOTAL_PACKAGES` | number | Total packages in tree |
|
|
182
|
+
| `TOTAL_OBJECTS` | number | Total objects in tree |
|
|
183
|
+
| `OBJECTS` | array | Object counts by type [{OBJECT, COUNT}] |
|
|
184
|
+
| `ERROR` | string | Error message (empty if success) |
|
|
185
|
+
|
|
186
|
+
**Node Structure:**
|
|
187
|
+
|
|
188
|
+
Each entry in `NODES` array:
|
|
189
|
+
|
|
190
|
+
| Field | Type | Description |
|
|
191
|
+
|-------|------|-------------|
|
|
192
|
+
| `PACKAGE` | string | Package name |
|
|
193
|
+
| `PARENT` | string | Parent package name |
|
|
194
|
+
| `DESCRIPTION` | string | Package description |
|
|
195
|
+
| `DEPTH` | number | Depth in tree (0 = root) |
|
|
196
|
+
| `OBJECT_COUNT` | number | Objects in this package |
|
|
197
|
+
|
|
198
|
+
**Note:** The `NODES` array is flat - children are identified by `PARENT` reference. The CLI builds the tree display by grouping nodes by depth and parent.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Response Structure
|
|
203
|
+
|
|
204
|
+
### JSON Mode
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"SUCCESS": true,
|
|
209
|
+
"COMMAND": "TREE",
|
|
210
|
+
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
211
|
+
"MESSAGE": "Tree retrieved successfully",
|
|
212
|
+
"PARENT_PACKAGE": "$ZSAP_BASE",
|
|
213
|
+
"NODES": [...],
|
|
214
|
+
"TOTAL_PACKAGES": 6,
|
|
215
|
+
"TOTAL_OBJECTS": 127,
|
|
216
|
+
"OBJECTS": [
|
|
217
|
+
{ "OBJECT": "CLAS", "COUNT": 10 },
|
|
218
|
+
{ "OBJECT": "INTF", "COUNT": 2 }
|
|
219
|
+
],
|
|
220
|
+
"ERROR": ""
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
See [JSON Output](#json-output-pure-scripting) for full schema.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Error Handling
|
|
229
|
+
|
|
230
|
+
| Error | Message |
|
|
231
|
+
|-------|---------|
|
|
232
|
+
| Package not found | `Package <name> does not exist in the system` |
|
|
233
|
+
| Invalid package name | `Invalid package name: <name>` |
|
|
234
|
+
| Access denied | `Access denied to package information` |
|
|
235
|
+
| Depth too large | `Depth value too large (max: 10)` |
|
|
236
|
+
|
|
237
|
+
### Error Output
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
❌ Package not found: $ZNONEXISTENT
|
|
241
|
+
|
|
242
|
+
Error: Package $ZNONEXISTENT does not exist in the system.
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Example
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Basic usage
|
|
251
|
+
abapgit-agent tree --package $ZMY_PACKAGE
|
|
252
|
+
|
|
253
|
+
# With object breakdown
|
|
254
|
+
abapgit-agent tree --package $ZMY_PACKAGE --include-objects
|
|
255
|
+
|
|
256
|
+
# Shallow tree (depth 1)
|
|
257
|
+
abapgit-agent tree --package $ZMY_PACKAGE --depth 1
|
|
258
|
+
|
|
259
|
+
# JSON for scripting
|
|
260
|
+
abapgit-agent tree --package $ZMY_PACKAGE --json > tree.json
|
|
261
|
+
|
|
262
|
+
# CI/CD usage with jq
|
|
263
|
+
COUNT=$(abapgit-agent tree --package $ZMY_PACKAGE --json | jq '.TOTAL_OBJECTS')
|
|
264
|
+
echo "Package contains $COUNT objects"
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Implementation
|
|
270
|
+
|
|
271
|
+
### ABAP Tables Used
|
|
272
|
+
|
|
273
|
+
| Table | Purpose |
|
|
274
|
+
|-------|---------|
|
|
275
|
+
| **TDEVC** | Package definitions (contains `PARENTCL` for hierarchy) |
|
|
276
|
+
| **TADIR** | Object directory (for object counts per package) |
|
|
277
|
+
|
|
278
|
+
### Query Logic
|
|
279
|
+
|
|
280
|
+
```abap
|
|
281
|
+
" Get root package with parent
|
|
282
|
+
SELECT SINGLE devclass parentcl FROM tdevc
|
|
283
|
+
INTO ls_package
|
|
284
|
+
WHERE devclass = lv_package.
|
|
285
|
+
|
|
286
|
+
" Get direct sub-packages recursively (up to depth)
|
|
287
|
+
SELECT devclass parentcl FROM tdevc
|
|
288
|
+
INTO TABLE lt_direct_subs
|
|
289
|
+
WHERE parentcl = iv_parent.
|
|
290
|
+
|
|
291
|
+
" Get object count per package
|
|
292
|
+
SELECT COUNT(*) FROM tadir
|
|
293
|
+
INTO lv_count
|
|
294
|
+
WHERE devclass = iv_package
|
|
295
|
+
AND object NOT IN ('DEVC', 'PACK').
|
|
296
|
+
|
|
297
|
+
" Get object counts by type
|
|
298
|
+
SELECT object COUNT(*) AS count FROM tadir
|
|
299
|
+
INTO TABLE lt_counts
|
|
300
|
+
WHERE devclass = iv_package
|
|
301
|
+
AND object NOT IN ('DEVC', 'PACK')
|
|
302
|
+
GROUP BY object.
|
|
303
|
+
```
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
# view Command Requirements
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
View ABAP object source code directly from the ABAP system. This command retrieves and displays source code for objects that may not exist locally in your git repository, enabling developers to understand class definitions, method signatures, structure components, and data element types without pulling the entire object.
|
|
6
|
+
|
|
7
|
+
**This is the PRIMARY way to explore unfamiliar ABAP objects.**
|
|
8
|
+
|
|
9
|
+
## Use Cases
|
|
10
|
+
|
|
11
|
+
- **Understand unfamiliar code**: View a class definition from a dependency package
|
|
12
|
+
- **Check method signatures**: See method parameters and return types before calling
|
|
13
|
+
- **Inspect data structures**: View table or structure field definitions
|
|
14
|
+
- **Review interface definitions**: Check interface methods and constants
|
|
15
|
+
- **Quick reference**: Look up definitions without opening SE80 or ADT
|
|
16
|
+
|
|
17
|
+
## Command
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# View single object (auto-detect type from TADIR)
|
|
21
|
+
abapgit-agent view --objects ZCL_MY_CLASS
|
|
22
|
+
abapgit-agent view --objects ZIF_MY_INTERFACE
|
|
23
|
+
abapgit-agent view --objects ZMY_TABLE
|
|
24
|
+
|
|
25
|
+
# View with explicit type
|
|
26
|
+
abapgit-agent view --objects ZCL_MY_CLASS --type CLAS
|
|
27
|
+
abapgit-agent view --objects ZIF_MY_INT --type INTF
|
|
28
|
+
abapgit-agent view --objects ZMY_STRUCT --type STRU
|
|
29
|
+
abapgit-agent view --objects ZMY_TABLE --type TABL
|
|
30
|
+
abapgit-agent view --objects ZMY_DTEL --type DTEL
|
|
31
|
+
|
|
32
|
+
# View multiple objects
|
|
33
|
+
abapgit-agent view --objects ZCL_CLASS1,ZCL_CLASS2,ZIF_INTERFACE1
|
|
34
|
+
|
|
35
|
+
# Lowercase names and types are supported
|
|
36
|
+
abapgit-agent view --objects zcl_my_class --type clas
|
|
37
|
+
|
|
38
|
+
# Output as JSON (for scripting/AI processing)
|
|
39
|
+
abapgit-agent view --objects ZCL_MY_CLASS --json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Prerequisite
|
|
43
|
+
|
|
44
|
+
- `.abapGitAgent` exists with valid credentials
|
|
45
|
+
- Object must exist in the ABAP system
|
|
46
|
+
|
|
47
|
+
## Parameters
|
|
48
|
+
|
|
49
|
+
| Parameter | Required | Description |
|
|
50
|
+
|-----------|----------|-------------|
|
|
51
|
+
| `--objects` | Yes | Comma-separated list of object names (e.g., `ZCL_MY_CLASS,ZIF_MY_INTERFACE`) |
|
|
52
|
+
| `--type` | No | Object type for all objects (CLAS, INTF, TABL, STRU, DTEL). Auto-detected from TADIR if not specified |
|
|
53
|
+
| `--json` | No | Output raw JSON only (for scripting) |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Tasks
|
|
58
|
+
|
|
59
|
+
### 1. Validate Parameters
|
|
60
|
+
|
|
61
|
+
- `--objects` must be specified
|
|
62
|
+
- Object names are converted to uppercase automatically
|
|
63
|
+
|
|
64
|
+
### 2. Load Configuration
|
|
65
|
+
|
|
66
|
+
Read `.abapGitAgent` for credentials
|
|
67
|
+
|
|
68
|
+
### 3. Fetch CSRF Token
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
GET /health (with X-CSRF-Token: fetch)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 4. Make View Request
|
|
75
|
+
|
|
76
|
+
**Endpoint:** `POST /view`
|
|
77
|
+
|
|
78
|
+
**Request Body:**
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"objects": ["ZCL_MY_CLASS", "ZIF_MY_INTERFACE"],
|
|
82
|
+
"type": "CLAS"
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 5. Display Results
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Output
|
|
91
|
+
|
|
92
|
+
### Class Definition (CLAS)
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
📖 ZCL_MY_CLASS (Class)
|
|
96
|
+
Class ZCL_MY_CLASS in $PACKAGE_NAME
|
|
97
|
+
|
|
98
|
+
CLASS zcl_my_class DEFINITION PUBLIC.
|
|
99
|
+
|
|
100
|
+
PUBLIC SECTION.
|
|
101
|
+
INTERFACES: if_interface.
|
|
102
|
+
|
|
103
|
+
METHODS:
|
|
104
|
+
constructor
|
|
105
|
+
IMPORTING
|
|
106
|
+
!iv_name TYPE string OPTIONAL,
|
|
107
|
+
get_value
|
|
108
|
+
RETURNING
|
|
109
|
+
VALUE(rv_result) TYPE string.
|
|
110
|
+
ENDCLASS.
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Interface Definition (INTF)
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
📖 ZIF_MY_INTERFACE (Interface)
|
|
117
|
+
Interface ZIF_MY_INTERFACE in $PACKAGE_NAME
|
|
118
|
+
|
|
119
|
+
INTERFACE zif_my_interface PUBLIC.
|
|
120
|
+
|
|
121
|
+
CONSTANTS:
|
|
122
|
+
gc_value TYPE string VALUE 'test'.
|
|
123
|
+
|
|
124
|
+
METHODS:
|
|
125
|
+
process
|
|
126
|
+
IMPORTING
|
|
127
|
+
!iv_data TYPE any
|
|
128
|
+
RETURNING
|
|
129
|
+
VALUE(rv_result) TYPE abap_bool,
|
|
130
|
+
get_status
|
|
131
|
+
RETURNING
|
|
132
|
+
VALUE(rv_status) TYPE string.
|
|
133
|
+
|
|
134
|
+
ENDINTERFACE.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Table Definition (TABL)
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
📖 SFLIGHT (Table)
|
|
141
|
+
Table SFLIGHT in SAPBC_DATAMODEL
|
|
142
|
+
|
|
143
|
+
TABLE SFLIGHT:
|
|
144
|
+
|------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
|
|
145
|
+
| Field | Key | Type | Length | Data Elem | Description |
|
|
146
|
+
|------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
|
|
147
|
+
| MANDT | X | CLNT | 3 | MANDT | Client |
|
|
148
|
+
| CARRID | X | CHAR | 3 | S_CARR_ID | Airline Code |
|
|
149
|
+
| CONNID | X | NUMC | 4 | S_CONN_ID | Connection Number |
|
|
150
|
+
| FLDATE | X | DATS | 8 | S_DATE | Flight Date |
|
|
151
|
+
| PRICE | | CURR | 16 | S_PRICE | Airfare |
|
|
152
|
+
| CURRENCY | | CUKY | 5 | S_CURR | Airline Currency |
|
|
153
|
+
|------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Structure Definition (STRU)
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
📖 SFLIGHT (Structure)
|
|
160
|
+
Structure SFLIGHT in SAPBC_DATAMODEL
|
|
161
|
+
|
|
162
|
+
STRUCTURE SFLIGHT:
|
|
163
|
+
|------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
|
|
164
|
+
| Field | Key | Type | Length | Data Elem | Description |
|
|
165
|
+
|------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
|
|
166
|
+
| MANDT | X | CLNT | 3 | MANDT | Client |
|
|
167
|
+
| CARRID | X | CHAR | 3 | S_CARR_ID | Airline Code |
|
|
168
|
+
|------------------+-----+----------+----------+--------------------------------+--------------------------------------------------------------|
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Data Element Definition (DTEL)
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
📖 S_CARR_ID (Data Element)
|
|
175
|
+
Airline Code
|
|
176
|
+
|
|
177
|
+
DATA ELEMENT S_CARR_ID:
|
|
178
|
+
┌────────────────────┬──────────────────────────────────────────┐
|
|
179
|
+
│ Property │ Value │
|
|
180
|
+
├────────────────────┼──────────────────────────────────────────┤
|
|
181
|
+
│ Data Type │ CHAR │
|
|
182
|
+
│ Length │ 3 │
|
|
183
|
+
│ Description │ Airline Code │
|
|
184
|
+
│ Domain │ S_CARR_ID │
|
|
185
|
+
└────────────────────┴──────────────────────────────────────────┘
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Multiple Objects
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
📖 Viewing 3 Objects
|
|
192
|
+
|
|
193
|
+
1️⃣ ZCL_CLASS1 (Class)
|
|
194
|
+
└─ Class ZCL_CLASS1 in $PACKAGE
|
|
195
|
+
|
|
196
|
+
2️⃣ ZIF_INTERFACE1 (Interface)
|
|
197
|
+
└─ Interface ZIF_INTERFACE1 in $PACKAGE
|
|
198
|
+
|
|
199
|
+
3️⃣ ZMY_TABLE (Table)
|
|
200
|
+
└─ Table ZMY_TABLE in $PACKAGE
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### JSON Output (Pure Scripting)
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"SUCCESS": true,
|
|
208
|
+
"COMMAND": "VIEW",
|
|
209
|
+
"MESSAGE": "Retrieved 1 object(s)",
|
|
210
|
+
"OBJECTS": [
|
|
211
|
+
{
|
|
212
|
+
"NAME": "ZCL_MY_CLASS",
|
|
213
|
+
"TYPE": "CLAS",
|
|
214
|
+
"TYPE_TEXT": "Class",
|
|
215
|
+
"DESCRIPTION": "Class ZCL_MY_CLASS in $PACKAGE",
|
|
216
|
+
"SOURCE": "CLASS zcl_my_class DEFINITION PUBLIC.\n ...",
|
|
217
|
+
"DEFINITION": "",
|
|
218
|
+
"COMPONENTS": []
|
|
219
|
+
}
|
|
220
|
+
],
|
|
221
|
+
"SUMMARY": {
|
|
222
|
+
"TOTAL": 1,
|
|
223
|
+
"BY_TYPE": ["CLAS"]
|
|
224
|
+
},
|
|
225
|
+
"ERROR": ""
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Response Structure
|
|
232
|
+
|
|
233
|
+
### JSON Response Schema
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
{
|
|
237
|
+
"SUCCESS": boolean,
|
|
238
|
+
"COMMAND": "VIEW",
|
|
239
|
+
"MESSAGE": "string",
|
|
240
|
+
"OBJECTS": [
|
|
241
|
+
{
|
|
242
|
+
"NAME": "string",
|
|
243
|
+
"TYPE": "CLAS|INTF|TABL|STRU|DTEL",
|
|
244
|
+
"TYPE_TEXT": "string",
|
|
245
|
+
"DESCRIPTION": "string",
|
|
246
|
+
"DOMAIN": "string", // For DTEL
|
|
247
|
+
"DOMAIN_TYPE": "string", // For DTEL
|
|
248
|
+
"DOMAIN_LENGTH": number, // For DTEL
|
|
249
|
+
"DOMAIN_DECIMALS": number, // For DTEL
|
|
250
|
+
"SOURCE": "string", // Full ABAP source (CLAS/INTF)
|
|
251
|
+
"NOT_FOUND": boolean, // true if object does not exist
|
|
252
|
+
"COMPONENTS": [ // For TABL/STRU
|
|
253
|
+
{
|
|
254
|
+
"FIELD": "string",
|
|
255
|
+
"KEY": boolean,
|
|
256
|
+
"TYPE": "string",
|
|
257
|
+
"LENGTH": number,
|
|
258
|
+
"DATAELEMENT": "string",
|
|
259
|
+
"DESCRIPTION": "string"
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
"SUMMARY": {
|
|
265
|
+
"TOTAL": number,
|
|
266
|
+
"BY_TYPE": ["string"]
|
|
267
|
+
},
|
|
268
|
+
"ERROR": "string"
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Error Handling
|
|
275
|
+
|
|
276
|
+
| Error | Message |
|
|
277
|
+
|-------|---------|
|
|
278
|
+
| Object not found | `Object not found: ZCL_NONEXISTENT` |
|
|
279
|
+
| Invalid object type | `Unsupported object type: INVALID` |
|
|
280
|
+
|
|
281
|
+
### Error Output
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
❌ Object not found: ZCL_NONEXISTENT
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Object Type Detection
|
|
290
|
+
|
|
291
|
+
### Auto-Detection Rules
|
|
292
|
+
|
|
293
|
+
| Object Name Pattern | Default Type |
|
|
294
|
+
|---------------------|--------------|
|
|
295
|
+
| `ZCL_*` or `zcl_*` | CLAS (Class) |
|
|
296
|
+
| `ZIF_*` or `zif_*` | INTF (Interface) |
|
|
297
|
+
| `ZTY_*` or `zty_*` | DTEL (Data Element) |
|
|
298
|
+
| `ZS__*` or `zs__*` | DTEL (Data Element) |
|
|
299
|
+
| Other `Z*` | CLAS (default fallback) |
|
|
300
|
+
|
|
301
|
+
### Supported Object Types
|
|
302
|
+
|
|
303
|
+
| Type Code | Type Text | Description |
|
|
304
|
+
|-----------|-----------|-------------|
|
|
305
|
+
| `CLAS` | Class | Global ABAP class |
|
|
306
|
+
| `INTF` | Interface | Global interface |
|
|
307
|
+
| `TABL` | Table | Database table |
|
|
308
|
+
| `STRU` | Structure | Structure type |
|
|
309
|
+
| `DTEL` | Data Element | Data element/domain type |
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Example
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
# View a class definition
|
|
317
|
+
abapgit-agent view --objects ZCL_ABGAGT_AGENT
|
|
318
|
+
|
|
319
|
+
# View interface
|
|
320
|
+
abapgit-agent view --objects ZIF_ABGAGT_COMMAND
|
|
321
|
+
|
|
322
|
+
# View table structure
|
|
323
|
+
abapgit-agent view --objects SFLIGHT --type TABL
|
|
324
|
+
|
|
325
|
+
# View data element
|
|
326
|
+
abapgit-agent view --objects S_CARR_ID --type DTEL
|
|
327
|
+
|
|
328
|
+
# View multiple objects
|
|
329
|
+
abapgit-agent view --objects ZCL_CONFIG,ZIF_LOGGER,ZCL_UTILS
|
|
330
|
+
|
|
331
|
+
# JSON for programmatic use
|
|
332
|
+
abapgit-agent view --objects ZCL_MY_CLASS --json
|
|
333
|
+
|
|
334
|
+
# Lowercase support
|
|
335
|
+
abapgit-agent view --objects zcl_my_class
|
|
336
|
+
abapgit-agent view --objects sflight --type tabl
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Implementation
|
|
342
|
+
|
|
343
|
+
### ABAP Tables Used
|
|
344
|
+
|
|
345
|
+
| Table | Purpose |
|
|
346
|
+
|-------|---------|
|
|
347
|
+
| **TADIR** | Object directory (devclass, object type) |
|
|
348
|
+
| **SEOCLASS** | Class/interface metadata |
|
|
349
|
+
| **SEOCOMPODF** | Component definitions |
|
|
350
|
+
| **DD02L** | Table/structure definitions |
|
|
351
|
+
| **DD03L** | Table/structure fields |
|
|
352
|
+
| **DD04L** | Data element definitions |
|
|
353
|
+
|
|
354
|
+
### Class Source Retrieval (CLAS)
|
|
355
|
+
|
|
356
|
+
```abap
|
|
357
|
+
" Get class info from TADIR
|
|
358
|
+
SELECT SINGLE obj_name, devclass FROM tadir
|
|
359
|
+
INTO (lv_obj_name, lv_devclass)
|
|
360
|
+
WHERE obj_name = iv_name
|
|
361
|
+
AND object = 'CLAS'.
|
|
362
|
+
|
|
363
|
+
" Get public section source
|
|
364
|
+
CALL METHOD cl_oo_classname_service=>get_pubsec_name
|
|
365
|
+
EXPORTING clsname = lv_name
|
|
366
|
+
RECEIVING result = lv_prog.
|
|
367
|
+
|
|
368
|
+
READ REPORT lv_prog INTO lt_source.
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Interface Source Retrieval (INTF)
|
|
372
|
+
|
|
373
|
+
```abap
|
|
374
|
+
" Get interface info from TADIR
|
|
375
|
+
SELECT SINGLE obj_name, devclass FROM tadir
|
|
376
|
+
INTO (lv_obj_name, lv_devclass)
|
|
377
|
+
WHERE obj_name = iv_name
|
|
378
|
+
AND object = 'INTF'.
|
|
379
|
+
|
|
380
|
+
" Get interface section source
|
|
381
|
+
CALL METHOD cl_oo_classname_service=>get_intfsec_name
|
|
382
|
+
EXPORTING clsname = lv_name
|
|
383
|
+
RECEIVING result = lv_prog.
|
|
384
|
+
|
|
385
|
+
READ REPORT lv_prog INTO lt_source.
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Table/Structure Retrieval (TABL/STRU)
|
|
389
|
+
|
|
390
|
+
```abap
|
|
391
|
+
" Get fields from DD03L
|
|
392
|
+
SELECT fieldname, keyflag AS key, datatype AS type, leng AS length,
|
|
393
|
+
rollname AS dataelement, ddtext AS description
|
|
394
|
+
FROM dd03l
|
|
395
|
+
INTO TABLE lt_components
|
|
396
|
+
WHERE tabname = iv_name
|
|
397
|
+
AND as4local = 'A'
|
|
398
|
+
ORDER BY position.
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### Data Element Retrieval (DTEL)
|
|
402
|
+
|
|
403
|
+
```abap
|
|
404
|
+
" Get domain info from DD04V
|
|
405
|
+
SELECT SINGLE rollname, ddtext, datatype, leng, decimals
|
|
406
|
+
FROM dd04v
|
|
407
|
+
INTO (lv_domain, lv_desc, lv_type, lv_len, lv_decimals)
|
|
408
|
+
WHERE rollname = iv_name.
|
|
409
|
+
```
|