@mcp-abap-adt/adt-clients 23.0.3 → 23.0.5
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdtService.d.ts","sourceRoot":"","sources":["../../../src/core/service/AdtService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,eAAe,EAGhB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAuB9D,OAAO,KAAK,EAGV,6BAA6B,EAG7B,6BAA6B,EAE7B,qBAAqB,EACrB,gCAAgC,EAEhC,mBAAmB,EACnB,eAAe,EAEhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAyB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAElE,qBAAa,iBAAiB,CAC5B,CAAC,SAAS,eAAe,GAAG,OAAO,gBAAgB,CACnD,YACE,aAAa,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC9D,YAAY,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAC5D,oBAAoB,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EACtE,aAAa,CAAC,gCAAgC,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACzE,aAAa,CACX,qBAAqB,EACrB,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EACzB,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAC/B,EACD,eAAe,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EACnE,aAAa,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAC5D,eAAe,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EACnE,kBAAkB,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EACrE,YAAY,CAAC,qBAAqB,CAAC;IAoBnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAElD,SAAgB,UAAU,EAAE,MAAM,CAAoB;gBAGpD,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,iBAAiB,EAChB,OAAO,GAAE,CAAoC;IAOhE,iDAAiD;IACjD,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,4BAA4B;IAmCpC,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,gBAAgB;YAOV,oBAAoB;
|
|
1
|
+
{"version":3,"file":"AdtService.d.ts","sourceRoot":"","sources":["../../../src/core/service/AdtService.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,7 +83,12 @@ class AdtServiceBinding {
|
|
|
83
83
|
// carried `IAdtOperationOptions.timeout` all along; this member used to
|
|
84
84
|
// drop it, which left a caller no way to wait longer than the library had
|
|
85
85
|
// decided to.
|
|
86
|
-
timeout
|
|
86
|
+
timeout,
|
|
87
|
+
// **V2 only.** The job resolves the service by name and version, in the query
|
|
88
|
+
// string; the body's `SCGR` reference is not enough for it. Absent for V4,
|
|
89
|
+
// which the same body settles — both measured, see
|
|
90
|
+
// `IServiceBindingPublicationParams`.
|
|
91
|
+
service) {
|
|
87
92
|
// **The document Eclipse sends**, captured on one system: the target is
|
|
88
93
|
// named by *type* — `SCGR`, a service group — and by name, with no
|
|
89
94
|
// `adtcore:uri`. This library used to send the binding's URI instead, and
|
|
@@ -92,12 +97,21 @@ class AdtServiceBinding {
|
|
|
92
97
|
const xml = `<?xml version="1.0" encoding="UTF-8"?><adtcore:objectReferences xmlns:adtcore="http://www.sap.com/adt/core">
|
|
93
98
|
<adtcore:objectReference adtcore:type="SCGR" adtcore:name="${bindingName.toUpperCase()}"/>
|
|
94
99
|
</adtcore:objectReferences>`;
|
|
95
|
-
// **
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
100
|
+
// **A query string for V2, none for V4.** A capture of Eclipse showed none and
|
|
101
|
+
// the job answered `SEVERITY OK`, which is why these two fields were dropped
|
|
102
|
+
// here — measured on one system, and V2 does not behave that way: without them
|
|
103
|
+
// it refuses, naming an empty service and version `0000`. Measured 2026-09-29
|
|
104
|
+
// on one binding per protocol with a known state and a single job each.
|
|
99
105
|
return this.connection.makeAdtRequest({
|
|
100
106
|
url: `/sap/bc/adt/businessservices/${serviceType}/publishjobs`,
|
|
107
|
+
...(service
|
|
108
|
+
? {
|
|
109
|
+
params: {
|
|
110
|
+
servicename: service.name.toUpperCase(),
|
|
111
|
+
serviceversion: service.version,
|
|
112
|
+
},
|
|
113
|
+
}
|
|
114
|
+
: {}),
|
|
101
115
|
method: 'POST',
|
|
102
116
|
// Measured at ~133s in both directions, so the 120s `SAP_TIMEOUT_LONG`
|
|
103
117
|
// default could never have been enough. A caller who knows their system
|
|
@@ -123,7 +137,12 @@ class AdtServiceBinding {
|
|
|
123
137
|
// carried `IAdtOperationOptions.timeout` all along; this member used to
|
|
124
138
|
// drop it, which left a caller no way to wait longer than the library had
|
|
125
139
|
// decided to.
|
|
126
|
-
timeout
|
|
140
|
+
timeout,
|
|
141
|
+
// **V2 only.** The job resolves the service by name and version, in the query
|
|
142
|
+
// string; the body's `SCGR` reference is not enough for it. Absent for V4,
|
|
143
|
+
// which the same body settles — both measured, see
|
|
144
|
+
// `IServiceBindingPublicationParams`.
|
|
145
|
+
service) {
|
|
127
146
|
// **The document Eclipse sends**, captured on one system: the target is
|
|
128
147
|
// named by *type* — `SCGR`, a service group — and by name, with no
|
|
129
148
|
// `adtcore:uri`. This library used to send the binding's URI instead, and
|
|
@@ -132,12 +151,20 @@ class AdtServiceBinding {
|
|
|
132
151
|
const xml = `<?xml version="1.0" encoding="UTF-8"?><adtcore:objectReferences xmlns:adtcore="http://www.sap.com/adt/core">
|
|
133
152
|
<adtcore:objectReference adtcore:type="SCGR" adtcore:name="${bindingName.toUpperCase()}"/>
|
|
134
153
|
</adtcore:objectReferences>`;
|
|
135
|
-
// **
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
154
|
+
// **A query string for V2, none for V4** — the same measurement as `publish`
|
|
155
|
+
// above, taken on the unpublish job: without it, "Local un-publish of service
|
|
156
|
+
// ␠ with version 0000 failed"; with it, `SEVERITY OK` and "service … with
|
|
157
|
+
// version 0001 un-published locally".
|
|
139
158
|
return this.connection.makeAdtRequest({
|
|
140
159
|
url: `/sap/bc/adt/businessservices/${serviceType}/unpublishjobs`,
|
|
160
|
+
...(service
|
|
161
|
+
? {
|
|
162
|
+
params: {
|
|
163
|
+
servicename: service.name.toUpperCase(),
|
|
164
|
+
serviceversion: service.version,
|
|
165
|
+
},
|
|
166
|
+
}
|
|
167
|
+
: {}),
|
|
141
168
|
method: 'POST',
|
|
142
169
|
// Measured at ~133s in both directions, so the 120s `SAP_TIMEOUT_LONG`
|
|
143
170
|
// default could never have been enough. A caller who knows their system
|
|
@@ -280,13 +307,37 @@ class AdtServiceBinding {
|
|
|
280
307
|
// place a caller sees it.
|
|
281
308
|
const serviceType = config.serviceType;
|
|
282
309
|
const desiredPublicationState = config.desiredPublicationState;
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
310
|
+
// **V2 needs the service name and version; V4 does not.** Measured — see
|
|
311
|
+
// `IServiceBindingPublicationParams`. The params type says so per protocol,
|
|
312
|
+
// so the only thing left here is to carry them across from the config, which
|
|
313
|
+
// has them optional because a V4 caller has no use for them. A V2 caller who
|
|
314
|
+
// omits them is refused HERE, by name, rather than by the server answering
|
|
315
|
+
// that a service called nothing does not exist.
|
|
316
|
+
const publication = serviceType === 'odatav2'
|
|
317
|
+
? (() => {
|
|
318
|
+
if (!config.serviceName || !config.serviceVersion) {
|
|
319
|
+
throw new Error(`Publishing ${name} over OData V2 needs serviceName and ` +
|
|
320
|
+
'serviceVersion: the job resolves the service by them, and ' +
|
|
321
|
+
'without them it answers that an unnamed service with version ' +
|
|
322
|
+
'0000 does not exist. V4 does not need either.');
|
|
323
|
+
}
|
|
324
|
+
return {
|
|
325
|
+
bindingName: name,
|
|
326
|
+
desiredPublicationState,
|
|
327
|
+
serviceType: 'odatav2',
|
|
328
|
+
serviceName: config.serviceName,
|
|
329
|
+
serviceVersion: config.serviceVersion,
|
|
330
|
+
timeout: options?.timeout,
|
|
331
|
+
};
|
|
332
|
+
})()
|
|
333
|
+
: {
|
|
334
|
+
bindingName: name,
|
|
335
|
+
desiredPublicationState,
|
|
336
|
+
serviceType: 'odatav4',
|
|
337
|
+
// The contract has always offered this; it used to stop here.
|
|
338
|
+
timeout: options?.timeout,
|
|
339
|
+
};
|
|
340
|
+
return (0, adtResponse_1.answering)(() => this.updateRequest(connection, publication), this.results.updated,
|
|
290
341
|
// A publication change IS this member's write, and the job reports its
|
|
291
342
|
// outcome as `SEVERITY` inside a 200. Reading it is the caller's:
|
|
292
343
|
// `analysePublication` in @mcp-abap-adt/adt-strategies does.
|
|
@@ -524,9 +575,14 @@ class AdtServiceBinding {
|
|
|
524
575
|
// params type requires it rather than this function checking again.
|
|
525
576
|
const serviceType = params.serviceType;
|
|
526
577
|
this.logger?.info?.(`ServiceBinding ${params.desiredPublicationState}: ${params.bindingName}`, { serviceType, timeout: params.timeout });
|
|
578
|
+
// For V2 the job takes the service in the query string; the type guarantees
|
|
579
|
+
// both fields are here when it does.
|
|
580
|
+
const service = params.serviceType === 'odatav2'
|
|
581
|
+
? { name: params.serviceName, version: params.serviceVersion }
|
|
582
|
+
: undefined;
|
|
527
583
|
return params.desiredPublicationState === 'published'
|
|
528
|
-
? this.publishByServiceType(serviceType, params.bindingName, params.timeout)
|
|
529
|
-
: this.unpublishByServiceType(serviceType, params.bindingName, params.timeout);
|
|
584
|
+
? this.publishByServiceType(serviceType, params.bindingName, params.timeout, service)
|
|
585
|
+
: this.unpublishByServiceType(serviceType, params.bindingName, params.timeout, service);
|
|
530
586
|
}
|
|
531
587
|
async deleteRequest(connection, params) {
|
|
532
588
|
return connection.makeAdtRequest({
|
|
@@ -107,22 +107,41 @@ export type IServiceBindingPublicationConfig = Partial<ISBC> & {
|
|
|
107
107
|
/** Selects the endpoint, `odatav2` or `odatav4`. */
|
|
108
108
|
serviceType: GST;
|
|
109
109
|
};
|
|
110
|
-
|
|
110
|
+
/**
|
|
111
|
+
* What a publication job needs, which is not the same for the two protocols.
|
|
112
|
+
*
|
|
113
|
+
* **V2 requires the service name and version; V4 does not.** Measured on a trial,
|
|
114
|
+
* 2026-09-29, on one binding per protocol with a known publication state and a
|
|
115
|
+
* single job each — the only difference being the query string:
|
|
116
|
+
*
|
|
117
|
+
* ```
|
|
118
|
+
* odatav2, no query string : "Local un-publish of service ␠ with version 0000
|
|
119
|
+
* failed — Service ZMCP_PRV_SB version ␠ does not exist."
|
|
120
|
+
* odatav2, with it : 200, SEVERITY OK,
|
|
121
|
+
* "service ZMCP_PRV_SB with version 0001 un-published locally"
|
|
122
|
+
* odatav4, no query string : 200, SEVERITY OK
|
|
123
|
+
* ```
|
|
124
|
+
*
|
|
125
|
+
* The blanks in the V2 refusal are the server saying it had nothing to resolve: the
|
|
126
|
+
* body names the target by type (`SCGR`) and name, and for V2 that is not enough.
|
|
127
|
+
* A capture of Eclipse showed no query string and the job answered `SEVERITY OK`,
|
|
128
|
+
* which is where this package dropped the two fields — a measurement from one
|
|
129
|
+
* system, and it did not hold for V2.
|
|
130
|
+
*
|
|
131
|
+
* So the demand lives in the TYPE, per protocol, rather than as an optional field
|
|
132
|
+
* with a throw a caller cannot see. V4 is left exactly as it was measured working:
|
|
133
|
+
* whether it also accepts the query string was never measured, and a change nobody
|
|
134
|
+
* has measured is not an improvement.
|
|
135
|
+
*/
|
|
136
|
+
export type IServiceBindingPublicationParams = IServiceBindingPublicationV2Params | IServiceBindingPublicationV4Params;
|
|
137
|
+
/** The fields both protocols need. */
|
|
138
|
+
interface IServiceBindingPublicationCommon {
|
|
111
139
|
bindingName: string;
|
|
112
140
|
/**
|
|
113
141
|
* `published` or `unpublished`. `unchanged` is refused: a binding's update
|
|
114
142
|
* *is* its publication, so there is no request that changes nothing.
|
|
115
143
|
*/
|
|
116
144
|
desiredPublicationState: DesiredPublicationState;
|
|
117
|
-
/**
|
|
118
|
-
* Which endpoint the job goes to — `odatav2` or `odatav4`.
|
|
119
|
-
*
|
|
120
|
-
* Required, and required *in the type*: it is the one thing the URL needs
|
|
121
|
-
* that the binding's name does not give, and this package no longer reads the
|
|
122
|
-
* binding to find it out. Optional here with a throw in the implementation
|
|
123
|
-
* would be the same demand made twice, once where a caller cannot see it.
|
|
124
|
-
*/
|
|
125
|
-
serviceType: GeneratedServiceType;
|
|
126
145
|
/**
|
|
127
146
|
* How long to wait for the publication job, in milliseconds.
|
|
128
147
|
*
|
|
@@ -134,6 +153,21 @@ export interface IServiceBindingPublicationParams {
|
|
|
134
153
|
*/
|
|
135
154
|
timeout?: number;
|
|
136
155
|
}
|
|
156
|
+
/** OData V2, where the job resolves the service by name and version. */
|
|
157
|
+
export interface IServiceBindingPublicationV2Params extends IServiceBindingPublicationCommon {
|
|
158
|
+
serviceType: 'odatav2';
|
|
159
|
+
/**
|
|
160
|
+
* `srvb:services/@srvb:name`. **Required**: without it the job answers a
|
|
161
|
+
* refusal naming an empty service and version `0000`.
|
|
162
|
+
*/
|
|
163
|
+
serviceName: string;
|
|
164
|
+
/** `srvb:content/@srvb:version`, e.g. `0001`. Required for the same reason. */
|
|
165
|
+
serviceVersion: string;
|
|
166
|
+
}
|
|
167
|
+
/** OData V4, where the body alone names the target. */
|
|
168
|
+
export interface IServiceBindingPublicationV4Params extends IServiceBindingPublicationCommon {
|
|
169
|
+
serviceType: 'odatav4';
|
|
170
|
+
}
|
|
137
171
|
/**
|
|
138
172
|
* What identifies the OData service group a binding publishes.
|
|
139
173
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/service/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,IAAI,GAAG,EAC3B,eAAe,EACf,qBAAqB,IAAI,IAAI,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAEzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAItC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,sCAAsC,EACtC,4CAA4C,EAC5C,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG;IACrE,WAAW,EAAE,kBAAkB,CAAC;IAChC,cAAc,EAAE,qBAAqB,CAAC;IACtC,eAAe,EAAE,GAAG,GAAG,GAAG,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC;CACnC,CAEA;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3C,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACjD,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3C,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAChD,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,4CAA4C;IAC5C,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACnD;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAgBF,CAAC;AAE5B;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;;;;;GASG;AACH,MAAM,MAAM,gCAAgC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG;IAC7D,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,uBAAuB,EAAE,WAAW,GAAG,aAAa,CAAC;IACrD,oDAAoD;IACpD,WAAW,EAAE,GAAG,CAAC;CAClB,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/service/types.ts"],"names":[],"mappings":"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"}
|
package/docs/usage/ERRATA.md
CHANGED
|
@@ -192,11 +192,20 @@ activated, published and unpublished.
|
|
|
192
192
|
unpublish**, within a second, means the unpublish came too soon after a
|
|
193
193
|
publish. Repeat it minutes later; do not change the request. See
|
|
194
194
|
[below](#an-unpublish-straight-after-a-publish-is-refused).
|
|
195
|
+
- **"…of service ␠ with version 0000 failed — Service <NAME> version ␠ does not
|
|
196
|
+
exist"** on an OData **V2** publish or unpublish means the job was posted
|
|
197
|
+
without `servicename` and `serviceversion`. V4 does not need them; V2 cannot
|
|
198
|
+
resolve the service without them. See
|
|
199
|
+
[below](#a-v2-publication-job-resolves-the-service-by-name-and-version).
|
|
195
200
|
- **A publication takes minutes.** About 133 s on an idle system, longer on a
|
|
196
201
|
loaded one — pass a `timeout` above the 120 s default and wait for the job's
|
|
197
202
|
own answer (`analysePublication`); nothing needs polling.
|
|
198
203
|
- **"You are already editing <BINDING>" on a delete** — the lock an editor holds.
|
|
199
204
|
Close the editor that holds it.
|
|
205
|
+
- **A package walk lists objects the binding's publication generated** —
|
|
206
|
+
`G4BA`, `SCO2`, `SUSH` — that have no ADT address; a group deletion check
|
|
207
|
+
over them refuses the whole group. Leave them out; they go with the binding.
|
|
208
|
+
See [below](#a-package-walk-lists-a-bindings-generated-objects).
|
|
200
209
|
|
|
201
210
|
### Message
|
|
202
211
|
|
|
@@ -225,39 +234,41 @@ Sessions and locks
|
|
|
225
234
|
4. [A service binding is locked to publish it](#a-service-binding-is-locked-to-publish-it)
|
|
226
235
|
5. [A binding publishes only once it is active](#a-binding-publishes-only-once-it-is-active)
|
|
227
236
|
6. [An unpublish straight after a publish is refused](#an-unpublish-straight-after-a-publish-is-refused)
|
|
237
|
+
7. [A V2 publication job resolves the service by name and version](#a-v2-publication-job-resolves-the-service-by-name-and-version)
|
|
228
238
|
|
|
229
239
|
Reading answers
|
|
230
240
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
241
|
+
8. [A refusal can arrive with a 2xx, and an error status names the fix](#a-refusal-can-arrive-with-a-2xx-and-an-error-status-names-the-fix)
|
|
242
|
+
9. [A read answers 200 with an empty body instead of 404](#a-read-answers-200-with-an-empty-body-instead-of-404)
|
|
243
|
+
10. [A successful delete can carry an untyped message](#a-successful-delete-can-carry-an-untyped-message)
|
|
244
|
+
11. [A function module's source answers 500 for a module that does not exist](#a-function-modules-source-answers-500-for-a-module-that-does-not-exist)
|
|
245
|
+
12. [A validation answers a taken name inside a 200](#a-validation-answers-a-taken-name-inside-a-200)
|
|
246
|
+
13. [A deletion check that says no is not a failure](#a-deletion-check-that-says-no-is-not-a-failure)
|
|
247
|
+
14. ["No URI-Mapping defined for URI" inside a 200](#no-uri-mapping-defined-for-uri-inside-a-200)
|
|
248
|
+
15. [A package walk lists a binding's generated objects](#a-package-walk-lists-a-bindings-generated-objects)
|
|
249
|
+
16. [S_ABPLNGVS refuses a create into a package that does not exist](#s_abplngvs-refuses-a-create-into-a-package-that-does-not-exist)
|
|
239
250
|
|
|
240
251
|
Creating and checking objects
|
|
241
252
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
253
|
+
17. [What a bare create leaves depends on the type](#what-a-bare-create-leaves-depends-on-the-type)
|
|
254
|
+
18. [An empty responsible person is refused as "Check of condition failed"](#an-empty-responsible-person-is-refused-as-check-of-condition-failed)
|
|
255
|
+
19. [An object created without a package cannot be deleted](#an-object-created-without-a-package-cannot-be-deleted)
|
|
256
|
+
20. [A check run compiles source for objects that do not exist](#a-check-run-compiles-source-for-objects-that-do-not-exist)
|
|
246
257
|
|
|
247
258
|
Activation
|
|
248
259
|
|
|
249
|
-
|
|
250
|
-
|
|
260
|
+
21. [activationExecuted false is not a failure](#activationexecuted-false-is-not-a-failure)
|
|
261
|
+
22. [Activation settles inside the POST](#activation-settles-inside-the-post)
|
|
251
262
|
|
|
252
263
|
Transports
|
|
253
264
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
265
|
+
23. [The transport list is a saved-configuration search](#the-transport-list-is-a-saved-configuration-search)
|
|
266
|
+
24. [The transport tree has no fixed nesting](#the-transport-tree-has-no-fixed-nesting)
|
|
267
|
+
25. [A hand-made task is Unclassified and refuses objects](#a-hand-made-task-is-unclassified-and-refuses-objects)
|
|
257
268
|
|
|
258
269
|
ATC
|
|
259
270
|
|
|
260
|
-
|
|
271
|
+
26. [ATC takes its check variant from customizing](#atc-takes-its-check-variant-from-customizing)
|
|
261
272
|
|
|
262
273
|
---
|
|
263
274
|
|
|
@@ -582,6 +593,55 @@ in one run.
|
|
|
582
593
|
|
|
583
594
|
---
|
|
584
595
|
|
|
596
|
+
## A V2 publication job resolves the service by name and version
|
|
597
|
+
|
|
598
|
+
**Symptom.** An OData **V2** publish or unpublish answers `200` with
|
|
599
|
+
`<SEVERITY>ERROR</SEVERITY>` and a message whose service name is BLANK and whose
|
|
600
|
+
version is `0000`: *"Local un-publish of service ␠ with version 0000 failed"*,
|
|
601
|
+
long text *"Service <NAME> version ␠ does not exist."* The binding is active,
|
|
602
|
+
`srvb:allowedAction` names the very action asked for, and the same request
|
|
603
|
+
against an OData **V4** binding answers `SEVERITY OK`.
|
|
604
|
+
|
|
605
|
+
**Cause.** The job's body names the target by type and name
|
|
606
|
+
(`<adtcore:objectReference adtcore:type="SCGR" adtcore:name="<BINDING>"/>`), and
|
|
607
|
+
for V2 that is not enough: the service is resolved from the `servicename` and
|
|
608
|
+
`serviceversion` query parameters. The blanks in the message are the server
|
|
609
|
+
saying it had nothing to resolve. V4 settles it from the body alone.
|
|
610
|
+
|
|
611
|
+
**Rule.** A V2 publication job carries `?servicename=<SERVICE>&serviceversion=<VERSION>`.
|
|
612
|
+
A V4 one does not need it. The service is `srvb:services/@srvb:name` — which is
|
|
613
|
+
not the service definition — and the version is `srvb:content/@srvb:version`.
|
|
614
|
+
|
|
615
|
+
**Workaround.** None needed from a caller of this package: the publication params
|
|
616
|
+
are a union per protocol, so `serviceType: 'odatav2'` requires both fields and
|
|
617
|
+
`'odatav4'` accepts neither, and the demand is visible before the call. Until that
|
|
618
|
+
union landed, a V2 publication through `update()` could not succeed at all.
|
|
619
|
+
|
|
620
|
+
**Evidence.** Trial, 2026-09-29, **all four binding variants**, each with a known
|
|
621
|
+
publication state and a single job, the only difference being the query string.
|
|
622
|
+
|
|
623
|
+
| variant | no query string | with it |
|
|
624
|
+
|---|---|---|
|
|
625
|
+
| `ODATA_V2_UI` | *"…of service ␠ with version 0000 failed"* | `SEVERITY OK`, published |
|
|
626
|
+
| `ODATA_V2_WEB_API` | the same refusal | `SEVERITY OK`, published |
|
|
627
|
+
| `ODATA_V4_UI` | `SEVERITY OK` (two bindings) | not measured |
|
|
628
|
+
| `ODATA_V4_WEB_API` | `SEVERITY OK` | not measured |
|
|
629
|
+
|
|
630
|
+
So the axis is the PROTOCOL, not the UI/Web API category: Web API behaves exactly
|
|
631
|
+
as UI does on each. The V2 lines were taken with the query string visible on the
|
|
632
|
+
wire — `POST …/odatav2/publishjobs?servicename=…&serviceversion=0001` → `200 OK` —
|
|
633
|
+
and the V4 one without it, `POST …/odatav4/publishjobs`. Whether V4 also ACCEPTS
|
|
634
|
+
the query string was not measured, so it is not sent there.
|
|
635
|
+
|
|
636
|
+
A capture of Eclipse showed no query string and the job answered `SEVERITY OK` —
|
|
637
|
+
one system, and that is where this package dropped the two fields. It did not
|
|
638
|
+
hold for V2.
|
|
639
|
+
|
|
640
|
+
**Where it bites.** `getServiceBinding().update()` on any `ODATA_V2_*` binding,
|
|
641
|
+
publish or unpublish.
|
|
642
|
+
|
|
643
|
+
---
|
|
644
|
+
|
|
585
645
|
## A refusal can arrive with a 2xx, and an error status names the fix
|
|
586
646
|
|
|
587
647
|
**Symptom.** A deletion check, an activation or a validation answers **`200`**
|
|
@@ -816,7 +876,37 @@ node structure), not from its type code.
|
|
|
816
876
|
|
|
817
877
|
**Evidence.** The package URI built from `DEVC/K`, answered as above.
|
|
818
878
|
|
|
819
|
-
**Where it bites.** `getUtils()` group operations over hand-built references
|
|
879
|
+
**Where it bites.** `getUtils()` group operations over hand-built references,
|
|
880
|
+
and over a package walk that includes a binding's generated objects — see
|
|
881
|
+
[the next entry](#a-package-walk-lists-a-bindings-generated-objects).
|
|
882
|
+
|
|
883
|
+
---
|
|
884
|
+
|
|
885
|
+
## A package walk lists a binding's generated objects
|
|
886
|
+
|
|
887
|
+
**Symptom.** A group deletion check over everything a package walk listed
|
|
888
|
+
answers `200` refusing the group, with `[E]` *"No URI-Mapping defined for
|
|
889
|
+
URI"* on objects that carry no name in the answer. Nothing is deleted.
|
|
890
|
+
|
|
891
|
+
**Cause.** Next to a service binding that has been published, the node
|
|
892
|
+
structure of its package lists what the system generated for it — a `G4BA`
|
|
893
|
+
named like the binding, an `SCO2` `<BINDING>_0001_G4BA`, a `SUSH` with a
|
|
894
|
+
generated name. They are not ADT objects: there is no resource to address, so
|
|
895
|
+
the deletion check cannot place them.
|
|
896
|
+
|
|
897
|
+
**Rule.** A package walk lists more than ADT can act on. What you can delete is
|
|
898
|
+
what you can address.
|
|
899
|
+
|
|
900
|
+
**Workaround.** Leave these types out of a group deletion.
|
|
901
|
+
Delete the binding; its generated objects go with it.
|
|
902
|
+
|
|
903
|
+
**Evidence.** Cloud system, 2026-09-27, cleaning a test package: with the three
|
|
904
|
+
included, the group check refused everything as above; without them, 26 objects
|
|
905
|
+
were checked and deleted, and a walk of the package afterwards listed nothing —
|
|
906
|
+
the generated objects had gone with the binding.
|
|
907
|
+
|
|
908
|
+
**Where it bites.** `getUtils().checkDeletionGroup()` and `deleteObjectsGroup()`
|
|
909
|
+
over references taken from `fetchNodeStructure()` or any package walk.
|
|
820
910
|
|
|
821
911
|
---
|
|
822
912
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-abap-adt/adt-clients",
|
|
3
|
-
"version": "23.0.
|
|
3
|
+
"version": "23.0.5",
|
|
4
4
|
"description": "ADT clients for SAP ABAP systems - AdtClient and AdtRuntimeClient",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
},
|
|
131
131
|
"devDependencies": {
|
|
132
132
|
"@biomejs/biome": "^2.4.4",
|
|
133
|
-
"@mcp-abap-adt/connection": "^9.4.
|
|
133
|
+
"@mcp-abap-adt/connection": "^9.4.2",
|
|
134
134
|
"@mcp-abap-adt/interfaces-auth": "^2.0.1",
|
|
135
135
|
"@mcp-abap-adt/interfaces-auth-sap": "^1.0.1",
|
|
136
136
|
"@types/jest": "^30.0.0",
|