abapgit-agent 1.3.0 → 1.5.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.
@@ -0,0 +1,289 @@
1
+ # list Command Requirements
2
+
3
+ ## Overview
4
+
5
+ List ABAP objects in a package with filtering and pagination capabilities. This command provides a flat list of objects with support for filtering by type, name pattern, and pagination.
6
+
7
+ ## Command
8
+
9
+ ```bash
10
+ # List all objects in a package
11
+ abapgit-agent list --package $ZMY_PACKAGE
12
+
13
+ # Filter by object type
14
+ abapgit-agent list --package $ZMY_PACKAGE --type CLAS,INTF
15
+
16
+ # Filter by name pattern
17
+ abapgit-agent list --package $ZMY_PACKAGE --name ZCL_*
18
+
19
+ # Limit results
20
+ abapgit-agent list --package $ZMY_PACKAGE --limit 50
21
+
22
+ # Paginate results
23
+ abapgit-agent list --package $ZMY_PACKAGE --offset 100 --limit 50
24
+
25
+ # JSON output for scripting
26
+ abapgit-agent list --package $ZMY_PACKAGE --json
27
+ ```
28
+
29
+ ## Prerequisite
30
+
31
+ - `.abapGitAgent` exists with valid credentials
32
+ - Package must exist in the ABAP system
33
+
34
+ ## Parameters
35
+
36
+ | Parameter | Required | Default | Description |
37
+ |-----------|----------|---------|-------------|
38
+ | `--package` | Yes | - | Package name (e.g., `$ZMY_PACKAGE`, `ZMY_PACKAGE`) |
39
+ | `--type` | No | All types | Comma-separated object types (e.g., `CLAS,INTF,PROG`) |
40
+ | `--name` | No | - | Name pattern with wildcard support (e.g., `ZCL_*`) |
41
+ | `--limit` | No | 100 | Maximum objects to return (max: 1000) |
42
+ | `--offset` | No | 0 | Number of objects to skip |
43
+ | `--json` | No | false | Output raw JSON only |
44
+
45
+ ---
46
+
47
+ ## Tasks
48
+
49
+ ### 1. Validate Parameters
50
+
51
+ - `--package` must be specified
52
+ - Package name must be valid (1-30 characters)
53
+ - `--limit` must be between 1 and 1000
54
+
55
+ ### 2. Load Configuration
56
+
57
+ Read `.abapGitAgent` for credentials
58
+
59
+ ### 3. Fetch CSRF Token
60
+
61
+ ```bash
62
+ GET /health (with X-CSRF-Token: fetch)
63
+ ```
64
+
65
+ ### 4. Make List Request
66
+
67
+ **Endpoint:** `POST /list`
68
+
69
+ **Request Body:**
70
+ ```json
71
+ {
72
+ "package": "$ZMY_PACKAGE",
73
+ "type": "CLAS,INTF",
74
+ "name": "ZCL_*",
75
+ "limit": 100,
76
+ "offset": 0
77
+ }
78
+ ```
79
+
80
+ ### 5. Display Results
81
+
82
+ ---
83
+
84
+ ## Output
85
+
86
+ ### Human-Readable Output
87
+
88
+ ```
89
+ 📋 Objects in $ZMY_PACKAGE (Total: 15)
90
+
91
+ CLAS (5)
92
+ ZCL_CLASS1
93
+ ZCL_CLASS2
94
+ ZCL_CLASS3
95
+ ZCL_CLASS4
96
+ ZCL_CLASS5
97
+
98
+ INTF (2)
99
+ ZIF_INTERFACE1
100
+ ZIF_INTERFACE2
101
+
102
+ PROG (3)
103
+ ZPROG1
104
+ ZPROG2
105
+ ZPROG3
106
+
107
+ TABL (5)
108
+ ZTABLE1
109
+ ZTABLE2
110
+ ZTABLE3
111
+ ZTABLE4
112
+ ZTABLE5
113
+ ```
114
+
115
+ ### With Type Filter
116
+
117
+ ```
118
+ 📋 Objects in $ZMY_PACKAGE (CLAS only, Total: 5)
119
+
120
+ CLAS (5)
121
+ ZCL_CLASS1
122
+ ZCL_CLASS2
123
+ ZCL_CLASS3
124
+ ZCL_CLASS4
125
+ ZCL_CLASS5
126
+ ```
127
+
128
+ ### JSON Output
129
+
130
+ ```json
131
+ {
132
+ "SUCCESS": true,
133
+ "COMMAND": "LIST",
134
+ "PACKAGE": "$ZMY_PACKAGE",
135
+ "TOTAL": 15,
136
+ "LIMIT": 100,
137
+ "OFFSET": 0,
138
+ "OBJECTS": [
139
+ { "TYPE": "CLAS", "NAME": "ZCL_CLASS1" },
140
+ { "TYPE": "CLAS", "NAME": "ZCL_CLASS2" },
141
+ { "TYPE": "CLAS", "NAME": "ZCL_CLASS3" },
142
+ { "TYPE": "CLAS", "NAME": "ZCL_CLASS4" },
143
+ { "TYPE": "CLAS", "NAME": "ZCL_CLASS5" },
144
+ { "TYPE": "INTF", "NAME": "ZIF_INTERFACE1" },
145
+ { "TYPE": "INTF", "NAME": "ZIF_INTERFACE2" },
146
+ { "TYPE": "PROG", "NAME": "ZPROG1" },
147
+ { "TYPE": "PROG", "NAME": "ZPROG2" },
148
+ { "TYPE": "PROG", "NAME": "ZPROG3" },
149
+ { "TYPE": "TABL", "NAME": "ZTABLE1" },
150
+ { "TYPE": "TABL", "NAME": "ZTABLE2" },
151
+ { "TYPE": "TABL", "NAME": "ZTABLE3" },
152
+ { "TYPE": "TABL", "NAME": "ZTABLE4" },
153
+ { "TYPE": "TABL", "NAME": "ZTABLE5" }
154
+ ],
155
+ "BY_TYPE": [
156
+ { "TYPE": "CLAS", "COUNT": 5 },
157
+ { "TYPE": "INTF", "COUNT": 2 },
158
+ { "TYPE": "PROG", "COUNT": 3 },
159
+ { "TYPE": "TABL", "COUNT": 5 }
160
+ ],
161
+ "ERROR": ""
162
+ }
163
+ ```
164
+
165
+ **Response Fields:**
166
+
167
+ | Field | Type | Description |
168
+ |-------|------|-------------|
169
+ | `SUCCESS` | boolean | Whether the request succeeded |
170
+ | `COMMAND` | string | Command name ("LIST") |
171
+ | `PACKAGE` | string | Package name |
172
+ | `TOTAL` | number | Total objects matching filter |
173
+ | `LIMIT` | number | Requested limit |
174
+ | `OFFSET` | number | Requested offset |
175
+ | `OBJECTS` | array | List of objects [{TYPE, NAME}] |
176
+ | `BY_TYPE` | array | Object counts by type [{TYPE, COUNT}] |
177
+ | `ERROR` | string | Error message (empty if success) |
178
+
179
+ ---
180
+
181
+ ## Error Handling
182
+
183
+ | Error | Message |
184
+ |-------|---------|
185
+ | Package not specified | `Package parameter is required` |
186
+ | Package not found | `Package <name> does not exist` |
187
+ | Invalid type | `Invalid object type: <type>` |
188
+ | Limit too high | `Limit value too high (max: 1000)` |
189
+
190
+ ### Error Output
191
+
192
+ ```
193
+ ❌ Package not found: $ZNONEXISTENT
194
+
195
+ Error: Package $ZNONEXISTENT does not exist in the system.
196
+ ```
197
+
198
+ ---
199
+
200
+ ## Example
201
+
202
+ ```bash
203
+ # List all objects
204
+ abapgit-agent list --package $ZMY_PACKAGE
205
+
206
+ # Filter by type
207
+ abapgit-agent list --package $ZMY_PACKAGE --type CLAS,INTF
208
+
209
+ # Filter by name pattern
210
+ abapgit-agent list --package $ZMY_PACKAGE --name ZCL_*
211
+
212
+ # Paginate
213
+ abapgit-agent list --package $ZMY_PACKAGE --limit 50 --offset 50
214
+
215
+ # JSON for scripting
216
+ abapgit-agent list --package $ZMY_PACKAGE --json > objects.json
217
+
218
+ # CI/CD: Count classes
219
+ CLASS_COUNT=$(abapgit-agent list --package $ZMY_PACKAGE --type CLAS --json | jq '.TOTAL')
220
+ echo "Package has $CLASS_COUNT classes"
221
+ ```
222
+
223
+ ---
224
+
225
+ ## Implementation
226
+
227
+ ### ABAP Tables Used
228
+
229
+ | Table | Purpose |
230
+ |-------|---------|
231
+ | **TDEVC** | Package definitions (validate package exists) |
232
+ | **TADIR** | Object directory (fetch objects in package) |
233
+
234
+ ### Supported Object Types
235
+
236
+ | Type | Description |
237
+ |------|-------------|
238
+ | CLAS | Class |
239
+ | INTF | Interface |
240
+ | PROG | Program |
241
+ | FUGR | Function Group |
242
+ | TABL | Table |
243
+ | STRU | Structure |
244
+ | DTEL | Data Element |
245
+ | TTYP | Table Type |
246
+ | DDLS | CDS View |
247
+ | DDLX | CDS View Entity |
248
+
249
+ ### Query Logic
250
+
251
+ ```abap
252
+ " Validate package exists
253
+ SELECT SINGLE devclass FROM tdevc
254
+ INTO lv_package
255
+ WHERE devclass = iv_package.
256
+
257
+ " Get objects with filters
258
+ SELECT object obj_name FROM tadir
259
+ INTO TABLE lt_objects
260
+ WHERE devclass = iv_package
261
+ AND object IN lt_types
262
+ AND obj_name LIKE lv_name_pattern
263
+ ORDER BY object obj_name
264
+ LIMIT iv_limit
265
+ OFFSET iv_offset.
266
+
267
+ " Get counts by type (for summary)
268
+ SELECT object COUNT(*) AS count FROM tadir
269
+ INTO TABLE lt_counts
270
+ WHERE devclass = iv_package
271
+ AND object IN lt_types
272
+ GROUP BY object.
273
+ ```
274
+
275
+ ### Files to Create
276
+
277
+ | File | Description |
278
+ |------|-------------|
279
+ | `zcl_abgagt_command_list.clas.abap` | Command implementation |
280
+ | `zcl_abgagt_command_list.clas.xml` | Class metadata |
281
+ | `zcl_abgagt_resource_list.clas.abap` | REST resource handler |
282
+ | `zcl_abgagt_resource_list.clas.xml` | Resource metadata |
283
+
284
+ ### Files to Modify
285
+
286
+ | File | Description |
287
+ |------|-------------|
288
+ | `zif_abgagt_command.intf.abap` | Add LIST constant |
289
+ | `zcl_abgagt_cmd_factory.clas.abap` | Add LIST command mapping |