@linkup-ai/abap-ai 2.0.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.
Files changed (114) hide show
  1. package/README.md +384 -0
  2. package/dist/adt-client.js +364 -0
  3. package/dist/cli/activate.js +113 -0
  4. package/dist/cli/init.js +333 -0
  5. package/dist/cli/remove.js +80 -0
  6. package/dist/cli/status.js +229 -0
  7. package/dist/cli/systems.js +68 -0
  8. package/dist/cli.js +81 -0
  9. package/dist/index.js +1318 -0
  10. package/dist/knowledge/abap/abap-dictionary.md +199 -0
  11. package/dist/knowledge/abap/abap-sql.md +296 -0
  12. package/dist/knowledge/abap/amdp.md +273 -0
  13. package/dist/knowledge/abap/clean-code.md +293 -0
  14. package/dist/knowledge/abap/cloud-background-processing.md +250 -0
  15. package/dist/knowledge/abap/cloud-communication.md +265 -0
  16. package/dist/knowledge/abap/cloud-development.md +176 -0
  17. package/dist/knowledge/abap/cloud-extensibility.md +252 -0
  18. package/dist/knowledge/abap/cloud-released-apis.md +261 -0
  19. package/dist/knowledge/abap/constructor-expressions.md +289 -0
  20. package/dist/knowledge/abap/enhancements.md +232 -0
  21. package/dist/knowledge/abap/exceptions.md +271 -0
  22. package/dist/knowledge/abap/internal-tables.md +205 -0
  23. package/dist/knowledge/abap/object-orientation.md +298 -0
  24. package/dist/knowledge/abap/performance.md +216 -0
  25. package/dist/knowledge/abap/rap-abstract-entities.md +206 -0
  26. package/dist/knowledge/abap/rap-business-events.md +216 -0
  27. package/dist/knowledge/abap/rap-draft.md +191 -0
  28. package/dist/knowledge/abap/rap-eml.md +453 -0
  29. package/dist/knowledge/abap/rap-end-to-end.md +486 -0
  30. package/dist/knowledge/abap/rap-feature-control.md +185 -0
  31. package/dist/knowledge/abap/rap-numbering.md +280 -0
  32. package/dist/knowledge/abap/rap-service-exposure.md +163 -0
  33. package/dist/knowledge/abap/rap-unmanaged.md +468 -0
  34. package/dist/knowledge/abap/string-processing.md +180 -0
  35. package/dist/knowledge/abap/unit-testing.md +303 -0
  36. package/dist/knowledge/abap-cds/access-control.md +241 -0
  37. package/dist/knowledge/abap-cds/annotations.md +331 -0
  38. package/dist/knowledge/abap-cds/associations.md +254 -0
  39. package/dist/knowledge/abap-cds/expressions.md +230 -0
  40. package/dist/knowledge/abap-cds/functions.md +245 -0
  41. package/dist/knowledge/abap-cds/metadata-extensions.md +294 -0
  42. package/dist/knowledge/cap/authentication.md +278 -0
  43. package/dist/knowledge/cap/cdl-syntax.md +247 -0
  44. package/dist/knowledge/cap/cql-queries.md +266 -0
  45. package/dist/knowledge/cap/deployment.md +343 -0
  46. package/dist/knowledge/cap/event-handlers.md +287 -0
  47. package/dist/knowledge/cap/fiori-integration.md +303 -0
  48. package/dist/knowledge/cap/service-definitions.md +287 -0
  49. package/dist/knowledge/fiori/annotations.md +347 -0
  50. package/dist/knowledge/fiori/deployment.md +340 -0
  51. package/dist/knowledge/fiori/fiori-elements.md +332 -0
  52. package/dist/knowledge/fiori/fiori-side-effects.md +107 -0
  53. package/dist/knowledge/fiori/fiori-valuelist.md +144 -0
  54. package/dist/knowledge/fiori/ui5-controllers.md +358 -0
  55. package/dist/knowledge/fiori/ui5-data-binding.md +311 -0
  56. package/dist/knowledge/fiori/ui5-fragments-dialogs.md +330 -0
  57. package/dist/knowledge/fiori/ui5-manifest.md +411 -0
  58. package/dist/knowledge/fiori/ui5-routing.md +303 -0
  59. package/dist/knowledge/fiori/ui5-xml-views.md +294 -0
  60. package/dist/logger.js +114 -0
  61. package/dist/system-profile.js +207 -0
  62. package/dist/tools/abap-doc.js +72 -0
  63. package/dist/tools/abapgit.js +161 -0
  64. package/dist/tools/activate.js +68 -0
  65. package/dist/tools/atc-check.js +117 -0
  66. package/dist/tools/auth-object.js +56 -0
  67. package/dist/tools/breakpoints.js +76 -0
  68. package/dist/tools/call-hierarchy.js +84 -0
  69. package/dist/tools/cds-annotations.js +98 -0
  70. package/dist/tools/cds-dependencies.js +65 -0
  71. package/dist/tools/check.js +47 -0
  72. package/dist/tools/code-completion.js +70 -0
  73. package/dist/tools/code-coverage.js +111 -0
  74. package/dist/tools/create-amdp.js +111 -0
  75. package/dist/tools/create-dcl.js +81 -0
  76. package/dist/tools/create-transport.js +38 -0
  77. package/dist/tools/create.js +285 -0
  78. package/dist/tools/data-preview.js +37 -0
  79. package/dist/tools/delete.js +45 -0
  80. package/dist/tools/deploy-bsp.js +298 -0
  81. package/dist/tools/discovery.js +59 -0
  82. package/dist/tools/element-info.js +93 -0
  83. package/dist/tools/enhancements.js +186 -0
  84. package/dist/tools/extract-method.js +44 -0
  85. package/dist/tools/function-group.js +59 -0
  86. package/dist/tools/knowledge.js +275 -0
  87. package/dist/tools/lock-object.js +75 -0
  88. package/dist/tools/message-class.js +67 -0
  89. package/dist/tools/navigate.js +80 -0
  90. package/dist/tools/number-range.js +57 -0
  91. package/dist/tools/object-documentation.js +43 -0
  92. package/dist/tools/object-structure.js +78 -0
  93. package/dist/tools/object-versions.js +57 -0
  94. package/dist/tools/package-contents.js +60 -0
  95. package/dist/tools/pretty-printer.js +35 -0
  96. package/dist/tools/publish-binding.js +49 -0
  97. package/dist/tools/quick-fix.js +69 -0
  98. package/dist/tools/read.js +167 -0
  99. package/dist/tools/refactor-rename.js +60 -0
  100. package/dist/tools/release-transport.js +24 -0
  101. package/dist/tools/released-apis.js +51 -0
  102. package/dist/tools/repository-tree.js +90 -0
  103. package/dist/tools/scaffold-rap.js +642 -0
  104. package/dist/tools/search.js +73 -0
  105. package/dist/tools/shared/data-format.js +101 -0
  106. package/dist/tools/sql-console.js +17 -0
  107. package/dist/tools/system-info.js +270 -0
  108. package/dist/tools/traces.js +66 -0
  109. package/dist/tools/transport-contents.js +83 -0
  110. package/dist/tools/transports.js +67 -0
  111. package/dist/tools/unit-test.js +135 -0
  112. package/dist/tools/where-used.js +59 -0
  113. package/dist/tools/write.js +101 -0
  114. package/package.json +49 -0
@@ -0,0 +1,216 @@
1
+ # RAP Business Events — event-driven architecture, async processing
2
+
3
+ ## Define Event in BDEF
4
+
5
+ ```abap
6
+ managed implementation in class ZBP_I_ORDER unique;
7
+ strict ( 2 );
8
+
9
+ define behavior for ZI_Order alias Order
10
+ persistent table ztab_order
11
+ lock master
12
+ {
13
+ create; update; delete;
14
+
15
+ " Event raised when order is created
16
+ event OrderCreated parameter ZA_OrderEventData;
17
+
18
+ " Event raised on status change
19
+ event OrderStatusChanged parameter ZA_OrderStatusEvent;
20
+
21
+ " Event without parameter (just notification)
22
+ event OrderDeleted;
23
+ }
24
+ ```
25
+
26
+ ## Define Event Parameter (Abstract Entity)
27
+
28
+ ```abap
29
+ @EndUserText.label: 'Order Event Data'
30
+ define abstract entity ZA_OrderEventData
31
+ {
32
+ OrderID : abap.numc(10);
33
+ CustomerID : kunnr;
34
+ TotalAmount : abap.curr(17,2);
35
+ CurrencyCode : abap.cuky(5);
36
+ }
37
+
38
+ @EndUserText.label: 'Order Status Change Event'
39
+ define abstract entity ZA_OrderStatusEvent
40
+ {
41
+ OrderID : abap.numc(10);
42
+ OldStatus : abap.char(1);
43
+ NewStatus : abap.char(1);
44
+ }
45
+ ```
46
+
47
+ ## Raise Event in Handler
48
+
49
+ ```abap
50
+ METHOD create FOR MODIFY IMPORTING entities FOR CREATE Order.
51
+ " ... create logic ...
52
+
53
+ " Raise event after creation
54
+ LOOP AT entities ASSIGNING FIELD-SYMBOL(<entity>).
55
+ RAISE ENTITY EVENT ZI_Order~OrderCreated
56
+ FROM VALUE #( (
57
+ %key = VALUE #( OrderID = <entity>-OrderID )
58
+ %param = VALUE ZA_OrderEventData(
59
+ OrderID = <entity>-OrderID
60
+ CustomerID = <entity>-CustomerID
61
+ TotalAmount = <entity>-TotalAmount
62
+ CurrencyCode = <entity>-CurrencyCode ) ) ).
63
+ ENDLOOP.
64
+ ENDMETHOD.
65
+
66
+ METHOD acceptOrder FOR MODIFY IMPORTING keys FOR ACTION Order~acceptOrder RESULT result.
67
+ " ... update status to 'A' ...
68
+
69
+ " Raise status change event
70
+ LOOP AT keys ASSIGNING FIELD-SYMBOL(<key>).
71
+ RAISE ENTITY EVENT ZI_Order~OrderStatusChanged
72
+ FROM VALUE #( (
73
+ %key = VALUE #( OrderID = <key>-OrderID )
74
+ %param = VALUE ZA_OrderStatusEvent(
75
+ OrderID = <key>-OrderID
76
+ OldStatus = 'O'
77
+ NewStatus = 'A' ) ) ).
78
+ ENDLOOP.
79
+ ENDMETHOD.
80
+ ```
81
+
82
+ ## Consume Event — Local Handler
83
+
84
+ ```abap
85
+ " In another behavior pool or same pool
86
+ CLASS lhc_event_handler DEFINITION INHERITING FROM cl_abap_behavior_handler.
87
+ PRIVATE SECTION.
88
+ METHODS on_order_created FOR ENTITY EVENT
89
+ OrderCreated FOR Order.
90
+ ENDCLASS.
91
+
92
+ CLASS lhc_event_handler IMPLEMENTATION.
93
+ METHOD on_order_created.
94
+ LOOP AT created ASSIGNING FIELD-SYMBOL(<event>).
95
+ " Process event
96
+ DATA(ls_data) = <event>-%param.
97
+ " Example: create follow-up document, send notification
98
+ ENDLOOP.
99
+ ENDMETHOD.
100
+ ENDCLASS.
101
+ ```
102
+
103
+ ## Consume Event — Event Consumption Model (Cross-BO)
104
+
105
+ ```abap
106
+ " Separate BDEF for event consumption
107
+ abstract;
108
+
109
+ define behavior for ZA_OrderEventData alias OrderEvent
110
+ {
111
+ " Defines a consumer for the OrderCreated event
112
+ }
113
+ ```
114
+
115
+ ## Event Binding to SAP Event Mesh
116
+
117
+ ```json
118
+ // Communication arrangement for Event Mesh
119
+ // In the event binding (ADT), map RAP events to Event Mesh topics:
120
+ // ZI_Order.OrderCreated → sap/s4/beh/order/v1/Order/Created/v1
121
+ // ZI_Order.OrderStatusChanged → sap/s4/beh/order/v1/Order/StatusChanged/v1
122
+ ```
123
+
124
+ ### Event Mesh Topic Naming Convention
125
+
126
+ ```
127
+ <namespace>/<bo>/<version>/<entity>/<event>/<event-version>
128
+ sap/s4/beh/order/v1/Order/Created/v1
129
+ ```
130
+
131
+ ## CloudEvents Format (Event Mesh Payload)
132
+
133
+ ```json
134
+ {
135
+ "specversion": "1.0",
136
+ "type": "sap.s4.beh.order.v1.Order.Created.v1",
137
+ "source": "/default/sap.s4.beh/S4H",
138
+ "id": "abc-123-def-456",
139
+ "time": "2026-03-15T14:30:00Z",
140
+ "datacontenttype": "application/json",
141
+ "data": {
142
+ "OrderID": "0000001234",
143
+ "CustomerID": "0000100000",
144
+ "TotalAmount": 5000.00,
145
+ "CurrencyCode": "EUR"
146
+ }
147
+ }
148
+ ```
149
+
150
+ ## Consume from External (CAP / Node.js)
151
+
152
+ ```js
153
+ // CAP consuming SAP Event Mesh events
154
+ const messaging = await cds.connect.to('messaging');
155
+
156
+ messaging.on('sap/s4/beh/order/v1/Order/Created/v1', async (msg) => {
157
+ const { OrderID, CustomerID, TotalAmount } = msg.data;
158
+ console.log(`Order ${OrderID} created for customer ${CustomerID}`);
159
+ // Process event
160
+ });
161
+ ```
162
+
163
+ ```json
164
+ // package.json — Event Mesh config
165
+ {
166
+ "cds": {
167
+ "requires": {
168
+ "messaging": {
169
+ "kind": "enterprise-messaging",
170
+ "format": "cloudevents"
171
+ }
172
+ }
173
+ }
174
+ }
175
+ ```
176
+
177
+ ## Additional Save with Event Raising
178
+
179
+ ```abap
180
+ " For managed BOs: raise events in additional save
181
+ managed implementation in class ZBP_I_ORDER unique;
182
+ with additional save;
183
+
184
+ " In saver class:
185
+ METHOD save_modified.
186
+ " Access created/updated/deleted records
187
+ LOOP AT create-order INTO DATA(ls_created).
188
+ RAISE ENTITY EVENT ZI_Order~OrderCreated
189
+ FROM VALUE #( (
190
+ %key = VALUE #( OrderID = ls_created-OrderID )
191
+ %param = VALUE ZA_OrderEventData(
192
+ OrderID = ls_created-OrderID
193
+ CustomerID = ls_created-CustomerID ) ) ).
194
+ ENDLOOP.
195
+ ENDMETHOD.
196
+ ```
197
+
198
+ ## Rules
199
+ - Events declared in BDEF with `event <name> parameter <abstract_entity>`
200
+ - Event parameter is an abstract entity (no persistence)
201
+ - `RAISE ENTITY EVENT` in handler or saver methods
202
+ - Events are transactional — raised only if save succeeds (COMMIT)
203
+ - Event Mesh: configure via communication arrangement + event binding in ADT
204
+ - CloudEvents format is the standard for Event Mesh payloads
205
+ - Event consumers can be: local handler, other RAP BO, CAP app, external system
206
+ - Events without parameter: just `event OrderDeleted;` (notification only)
207
+
208
+ ## Anti-Patterns
209
+ | Anti-Pattern | Correct |
210
+ |---|---|
211
+ | Raising event before save completes | Events are transactional — only raised on COMMIT |
212
+ | Direct HTTP call instead of event | Use events for async, decoupled communication |
213
+ | Large payload in event parameter | Keep events lightweight — consumer reads details via API |
214
+ | Event without abstract entity when data needed | Define abstract entity with relevant fields |
215
+ | Hardcoded Event Mesh topic in code | Configure via event binding in ADT |
216
+ | Synchronous processing of events | Events are async by nature — design consumers accordingly |
@@ -0,0 +1,191 @@
1
+ # RAP Draft — enable, edit, activate, discard, etag, lock
2
+
3
+ ## Ciclo de vida
4
+
5
+ ```
6
+ [Active] --Edit--> [Draft] --Activate--> [Active]
7
+ |
8
+ Discard --> [Deleted]
9
+ |
10
+ Resume --> [Draft restored]
11
+ ```
12
+
13
+ Fiori Elements V4 exige draft para operacoes de escrita.
14
+
15
+ ## BDEF Interface — habilitar draft
16
+
17
+ ```abap
18
+ managed implementation in class ZBP_I_ROOT unique;
19
+ strict ( 2 );
20
+ with draft;
21
+
22
+ define behavior for ZI_Root alias Root
23
+ persistent table zroot
24
+ draft table zroot_d
25
+ etag master LocalLastChangedAt
26
+ lock master total etag LastChangedAt
27
+ authorization master ( global )
28
+ {
29
+ create; update; delete;
30
+
31
+ draft action Edit;
32
+ draft action Activate optimized;
33
+ draft action Discard;
34
+ draft action Resume;
35
+ draft determine action Prepare { validation val1; validation val2; }
36
+
37
+ association _Child { create; with draft; }
38
+ }
39
+
40
+ define behavior for ZI_Child alias Child
41
+ persistent table zchild
42
+ draft table zchild_d
43
+ etag master LocalLastChangedAt
44
+ lock dependent by _Root
45
+ authorization dependent by _Root
46
+ {
47
+ update; delete;
48
+ association _Root { with draft; }
49
+ }
50
+ ```
51
+
52
+ ## BDEF Projection — expor draft
53
+
54
+ ```abap
55
+ projection;
56
+ strict ( 2 );
57
+ use draft;
58
+
59
+ define behavior for ZC_Root alias Root
60
+ use etag
61
+ {
62
+ use create; use update; use delete;
63
+ use action Edit; use action Activate; use action Discard;
64
+ use action Resume; use action Prepare;
65
+ use association _Child { create; with draft; }
66
+ }
67
+
68
+ define behavior for ZC_Child alias Child
69
+ use etag
70
+ {
71
+ use update; use delete;
72
+ use association _Root { with draft; }
73
+ }
74
+ ```
75
+
76
+ ## Draft tables
77
+
78
+ Geradas automaticamente ao ativar o BDEF. Convencao: `<tabela>_d`.
79
+ Contem todos os campos da tabela ativa + `%is_draft`, `%draft_uuid`, `%draft_owner`.
80
+
81
+ ## ETag
82
+
83
+ ```abap
84
+ " Root — controle de concorrencia + total etag para draft
85
+ etag master LocalLastChangedAt
86
+ lock master total etag LastChangedAt
87
+
88
+ " Child — herda do root
89
+ etag master LocalLastChangedAt
90
+ lock dependent by _Root
91
+ ```
92
+
93
+ - `etag master` → campo `@Semantics.systemDateTime.lastChangedAt` — concorrencia otimista por registro
94
+ - `total etag` → campo `@Semantics.systemDateTime.localInstanceLastChangedAt` — detecta se ativo mudou desde criacao do draft
95
+
96
+ ## Draft actions
97
+
98
+ | Action | Trigger | Efeito |
99
+ |--------|---------|--------|
100
+ | `Edit` | Usuario clica Edit | Copia ativo → draft table. Adquire lock |
101
+ | `Activate optimized` | Usuario clica Save | Valida + move draft → tabela ativa. So campos modificados |
102
+ | `Discard` | Usuario clica Cancel | Apaga draft. Libera lock |
103
+ | `Resume` | Usuario reabre draft | Restaura draft para edicao |
104
+ | `Prepare` | Antes do Activate | Executa validacoes listadas. Tambem trigado por side effects |
105
+
106
+ ## Prepare — validacao pre-activate
107
+
108
+ ```abap
109
+ draft determine action Prepare
110
+ {
111
+ validation validateDates;
112
+ validation validateCustomer;
113
+ determination calculateTotal;
114
+ }
115
+ ```
116
+
117
+ Validacoes listadas em Prepare rodam quando:
118
+ 1. Usuario clica Save (antes do Activate)
119
+ 2. Side effect com `determine action Prepare executed on field X`
120
+
121
+ ## EML com draft
122
+
123
+ ```abap
124
+ " Criar draft a partir do ativo
125
+ MODIFY ENTITIES OF ZI_Travel ENTITY Travel
126
+ EXECUTE Edit FROM VALUE #( ( TravelID = '00000001' ) )
127
+ MAPPED DATA(mapped).
128
+
129
+ " Modificar draft
130
+ MODIFY ENTITIES OF ZI_Travel ENTITY Travel
131
+ UPDATE FIELDS ( Description )
132
+ WITH VALUE #( ( %is_draft = if_abap_behv=>mk-on
133
+ TravelID = '00000001'
134
+ Description = 'Updated' ) ).
135
+
136
+ " Prepare (validar)
137
+ MODIFY ENTITIES OF ZI_Travel ENTITY Travel
138
+ EXECUTE Prepare FROM VALUE #( ( %is_draft = if_abap_behv=>mk-on TravelID = '00000001' ) )
139
+ REPORTED DATA(reported).
140
+
141
+ " Activate (salvar)
142
+ MODIFY ENTITIES OF ZI_Travel ENTITY Travel
143
+ EXECUTE Activate FROM VALUE #( ( %is_draft = if_abap_behv=>mk-on TravelID = '00000001' ) )
144
+ FAILED DATA(failed) REPORTED reported.
145
+ COMMIT ENTITIES.
146
+
147
+ " Ler draft
148
+ READ ENTITIES OF ZI_Travel ENTITY Travel ALL FIELDS
149
+ WITH VALUE #( ( %is_draft = if_abap_behv=>mk-on TravelID = '00000001' ) )
150
+ RESULT DATA(drafts).
151
+ ```
152
+
153
+ ## Campos administrativos obrigatorios
154
+
155
+ ```abap
156
+ @Semantics.user.createdBy: true
157
+ created_by as CreatedBy, " abp_creation_user
158
+ @Semantics.systemDateTime.createdAt: true
159
+ created_at as CreatedAt, " abp_creation_tstmpl
160
+ @Semantics.user.localInstanceLastChangedBy: true
161
+ last_changed_by as LastChangedBy, " abp_locinst_lastchange_user
162
+ @Semantics.systemDateTime.localInstanceLastChangedAt: true
163
+ last_changed_at as LastChangedAt, " abp_locinst_lastchange_tstmpl → total etag
164
+ @Semantics.systemDateTime.lastChangedAt: true
165
+ local_last_changed_at as LocalLastChangedAt, " abp_lastchange_tstmpl → etag master
166
+ ```
167
+
168
+ ## Draft lock
169
+
170
+ - Um draft por instancia por vez
171
+ - Outros usuarios veem "Locked by user X"
172
+ - Drafts orfaos: cleanup automatico (default 28 dias)
173
+
174
+ ## Regras
175
+ - `with draft` no topo do BDEF interface
176
+ - `draft table` para cada entidade (root + filhos)
177
+ - Todas as 5 draft actions obrigatorias: Edit, Activate, Discard, Resume, Prepare
178
+ - `association _Child { create; with draft; }` — propaga draft para filhos
179
+ - `use draft` na projection BDEF
180
+ - Todas as draft actions expostas na projection BDEF
181
+ - `Activate optimized` — grava so campos modificados (melhor performance)
182
+
183
+ ## Anti-patterns
184
+ | Errado | Correto |
185
+ |--------|---------|
186
+ | `with draft` sem `draft table` | Ambos obrigatorios |
187
+ | Esquecer `with draft` na association | `association _Child { create; with draft; }` |
188
+ | Esquecer `use draft` na projection | Draft nao funciona sem isso |
189
+ | Nao listar validacoes no Prepare | Validacoes nao rodam antes do Activate |
190
+ | `lock master` no child | `lock dependent by _Root` |
191
+ | `Activate` sem `optimized` | Funciona mas grava todos os campos (pior performance) |