@mcp-abap-adt/adt-clients 10.0.1 → 10.0.2
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/dist/core/accessControl/activation.d.ts +3 -0
- package/dist/core/accessControl/activation.d.ts.map +1 -1
- package/dist/core/accessControl/activation.js +2 -34
- package/dist/core/appendStructure/activation.d.ts.map +1 -1
- package/dist/core/appendStructure/activation.js +2 -34
- package/dist/core/authorizationField/activation.d.ts.map +1 -1
- package/dist/core/authorizationField/activation.js +2 -35
- package/dist/core/dataElement/activation.d.ts +3 -0
- package/dist/core/dataElement/activation.d.ts.map +1 -1
- package/dist/core/dataElement/activation.js +2 -34
- package/dist/core/featureToggle/activation.d.ts.map +1 -1
- package/dist/core/featureToggle/activation.js +2 -35
- package/dist/core/metadataExtension/activate.d.ts +2 -2
- package/dist/core/metadataExtension/activate.js +2 -2
- package/dist/core/metadataExtension/check.d.ts +2 -2
- package/dist/core/metadataExtension/check.js +2 -2
- package/dist/core/metadataExtension/create.d.ts +2 -2
- package/dist/core/metadataExtension/create.js +2 -2
- package/dist/core/metadataExtension/delete.d.ts +2 -2
- package/dist/core/metadataExtension/delete.js +2 -2
- package/dist/core/metadataExtension/lock.d.ts +2 -2
- package/dist/core/metadataExtension/lock.js +2 -2
- package/dist/core/metadataExtension/read.d.ts +4 -4
- package/dist/core/metadataExtension/read.js +4 -4
- package/dist/core/metadataExtension/unlock.d.ts +2 -2
- package/dist/core/metadataExtension/unlock.js +2 -2
- package/dist/core/metadataExtension/update.d.ts +3 -3
- package/dist/core/metadataExtension/update.js +3 -3
- package/dist/core/scalarFunction/activation.d.ts.map +1 -1
- package/dist/core/scalarFunction/activation.js +2 -34
- package/dist/core/scalarFunctionImplementation/activation.d.ts.map +1 -1
- package/dist/core/scalarFunctionImplementation/activation.js +2 -34
- package/dist/core/serviceDefinition/activation.d.ts +3 -0
- package/dist/core/serviceDefinition/activation.d.ts.map +1 -1
- package/dist/core/serviceDefinition/activation.js +2 -34
- package/dist/core/shared/groupActivation.d.ts +2 -2
- package/dist/core/shared/groupActivation.js +2 -2
- package/dist/core/transformation/activation.d.ts +3 -0
- package/dist/core/transformation/activation.d.ts.map +1 -1
- package/dist/core/transformation/activation.js +2 -34
- package/dist/utils/activationUtils.d.ts +21 -0
- package/dist/utils/activationUtils.d.ts.map +1 -1
- package/dist/utils/activationUtils.js +45 -9
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/accessControl/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe9E;;GAEG;AAEH;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.activateAccessControl = activateAccessControl;
|
|
4
|
-
const
|
|
4
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
5
5
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
6
6
|
const timeouts_1 = require("../../utils/timeouts");
|
|
7
7
|
/**
|
|
@@ -16,35 +16,6 @@ function buildActivationXml(accessControlName) {
|
|
|
16
16
|
/**
|
|
17
17
|
* Parse activation response
|
|
18
18
|
*/
|
|
19
|
-
function parseActivationResponse(response) {
|
|
20
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
21
|
-
ignoreAttributes: false,
|
|
22
|
-
attributeNamePrefix: '',
|
|
23
|
-
});
|
|
24
|
-
try {
|
|
25
|
-
const result = parser.parse(response.data);
|
|
26
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
27
|
-
if (properties) {
|
|
28
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
29
|
-
properties.activationExecuted === true;
|
|
30
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
31
|
-
properties.checkExecuted === true;
|
|
32
|
-
return {
|
|
33
|
-
success: activated && checked,
|
|
34
|
-
message: activated
|
|
35
|
-
? 'Access control activated successfully'
|
|
36
|
-
: 'Activation failed',
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
return { success: false, message: 'Unknown activation status' };
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
return {
|
|
43
|
-
success: false,
|
|
44
|
-
message: `Failed to parse activation response: ${error}`,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
19
|
/**
|
|
49
20
|
* Activate access control
|
|
50
21
|
*/
|
|
@@ -62,9 +33,6 @@ async function activateAccessControl(connection, accessControlName) {
|
|
|
62
33
|
data: xmlBody,
|
|
63
34
|
headers,
|
|
64
35
|
});
|
|
65
|
-
|
|
66
|
-
if (!activationResult.success) {
|
|
67
|
-
throw new Error(`Access control activation failed: ${activationResult.message}`);
|
|
68
|
-
}
|
|
36
|
+
(0, activationUtils_1.assertActivationSucceeded)('Access control', response.data);
|
|
69
37
|
return response;
|
|
70
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/appendStructure/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/appendStructure/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAY9E,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAWvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.activateAppendStructure = activateAppendStructure;
|
|
4
|
-
const
|
|
4
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
5
5
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
6
6
|
const timeouts_1 = require("../../utils/timeouts");
|
|
7
7
|
function buildActivationXml(name) {
|
|
@@ -10,35 +10,6 @@ function buildActivationXml(name) {
|
|
|
10
10
|
<adtcore:objectReference adtcore:uri="/sap/bc/adt/ddic/structures/${(0, internalUtils_1.encodeSapObjectName)(name.toLowerCase())}" adtcore:name="${name.toUpperCase()}"/>
|
|
11
11
|
</adtcore:objectReferences>`;
|
|
12
12
|
}
|
|
13
|
-
function parseActivationResponse(response) {
|
|
14
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
15
|
-
ignoreAttributes: false,
|
|
16
|
-
attributeNamePrefix: '',
|
|
17
|
-
});
|
|
18
|
-
try {
|
|
19
|
-
const result = parser.parse(response.data);
|
|
20
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
21
|
-
if (properties) {
|
|
22
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
23
|
-
properties.activationExecuted === true;
|
|
24
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
25
|
-
properties.checkExecuted === true;
|
|
26
|
-
return {
|
|
27
|
-
success: activated && checked,
|
|
28
|
-
message: activated
|
|
29
|
-
? 'Append structure activated successfully'
|
|
30
|
-
: 'Activation failed',
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return { success: false, message: 'Unknown activation status' };
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
return {
|
|
37
|
-
success: false,
|
|
38
|
-
message: `Failed to parse activation response: ${error}`,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
13
|
async function activateAppendStructure(connection, name) {
|
|
43
14
|
const url = `/sap/bc/adt/activation?method=activate&preauditRequested=true`;
|
|
44
15
|
const response = await connection.makeAdtRequest({
|
|
@@ -48,9 +19,6 @@ async function activateAppendStructure(connection, name) {
|
|
|
48
19
|
data: buildActivationXml(name),
|
|
49
20
|
headers: { Accept: 'application/xml', 'Content-Type': 'application/xml' },
|
|
50
21
|
});
|
|
51
|
-
|
|
52
|
-
if (!activationResult.success) {
|
|
53
|
-
throw new Error(`Append structure activation failed: ${activationResult.message}`);
|
|
54
|
-
}
|
|
22
|
+
(0, activationUtils_1.assertActivationSucceeded)('Append structure', response.data);
|
|
55
23
|
return response;
|
|
56
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/authorizationField/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/authorizationField/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAc9E;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAsBvB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.activateAuthorizationField = activateAuthorizationField;
|
|
7
|
-
const
|
|
7
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
8
8
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
9
9
|
const timeouts_1 = require("../../utils/timeouts");
|
|
10
10
|
function buildActivationXml(name) {
|
|
@@ -15,36 +15,6 @@ function buildActivationXml(name) {
|
|
|
15
15
|
<adtcore:objectReference adtcore:uri="/sap/bc/adt/aps/iam/auth/${encoded}" adtcore:name="${upper}"/>
|
|
16
16
|
</adtcore:objectReferences>`;
|
|
17
17
|
}
|
|
18
|
-
function parseActivationResponse(response) {
|
|
19
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
20
|
-
ignoreAttributes: false,
|
|
21
|
-
attributeNamePrefix: '',
|
|
22
|
-
});
|
|
23
|
-
try {
|
|
24
|
-
const result = parser.parse(response.data);
|
|
25
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
26
|
-
if (properties) {
|
|
27
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
28
|
-
properties.activationExecuted === true;
|
|
29
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
30
|
-
properties.checkExecuted === true;
|
|
31
|
-
return {
|
|
32
|
-
success: activated && checked,
|
|
33
|
-
message: activated
|
|
34
|
-
? 'Authorization field activated successfully'
|
|
35
|
-
: 'Activation failed',
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
// When the response body is empty, SAP treats activation as successful.
|
|
39
|
-
return { success: true, message: 'Authorization field activated' };
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
return {
|
|
43
|
-
success: false,
|
|
44
|
-
message: `Failed to parse activation response: ${error}`,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
18
|
/**
|
|
49
19
|
* Activate an authorization field.
|
|
50
20
|
*/
|
|
@@ -64,9 +34,6 @@ async function activateAuthorizationField(connection, name) {
|
|
|
64
34
|
'Content-Type': 'application/xml',
|
|
65
35
|
},
|
|
66
36
|
});
|
|
67
|
-
|
|
68
|
-
if (!activationResult.success) {
|
|
69
|
-
throw new Error(`Authorization field activation failed: ${activationResult.message}`);
|
|
70
|
-
}
|
|
37
|
+
(0, activationUtils_1.assertActivationSucceeded)('Authorization field', response.data);
|
|
71
38
|
return response;
|
|
72
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/dataElement/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/dataElement/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe9E;;GAEG;AAEH;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAC3B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.activateDataElement = activateDataElement;
|
|
7
|
-
const
|
|
7
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
8
8
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
9
9
|
const timeouts_1 = require("../../utils/timeouts");
|
|
10
10
|
/**
|
|
@@ -19,35 +19,6 @@ function buildActivationXml(dataElementName) {
|
|
|
19
19
|
/**
|
|
20
20
|
* Parse activation response
|
|
21
21
|
*/
|
|
22
|
-
function parseActivationResponse(response) {
|
|
23
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
24
|
-
ignoreAttributes: false,
|
|
25
|
-
attributeNamePrefix: '',
|
|
26
|
-
});
|
|
27
|
-
try {
|
|
28
|
-
const result = parser.parse(response.data);
|
|
29
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
30
|
-
if (properties) {
|
|
31
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
32
|
-
properties.activationExecuted === true;
|
|
33
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
34
|
-
properties.checkExecuted === true;
|
|
35
|
-
return {
|
|
36
|
-
success: activated && checked,
|
|
37
|
-
message: activated
|
|
38
|
-
? 'Data element activated successfully'
|
|
39
|
-
: 'Activation failed',
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return { success: false, message: 'Unknown activation status' };
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
return {
|
|
46
|
-
success: false,
|
|
47
|
-
message: `Failed to parse activation response: ${error}`,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
22
|
/**
|
|
52
23
|
* Activate data element
|
|
53
24
|
* Makes data element active and usable in SAP system
|
|
@@ -66,9 +37,6 @@ async function activateDataElement(connection, dataElementName) {
|
|
|
66
37
|
data: xmlBody,
|
|
67
38
|
headers,
|
|
68
39
|
});
|
|
69
|
-
|
|
70
|
-
if (!activationResult.success) {
|
|
71
|
-
throw new Error(`Data element activation failed: ${activationResult.message}`);
|
|
72
|
-
}
|
|
40
|
+
(0, activationUtils_1.assertActivationSucceeded)('Data element', response.data);
|
|
73
41
|
return response;
|
|
74
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/featureToggle/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/featureToggle/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAc9E;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAsBvB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.activateFeatureToggle = activateFeatureToggle;
|
|
7
|
-
const
|
|
7
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
8
8
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
9
9
|
const timeouts_1 = require("../../utils/timeouts");
|
|
10
10
|
function buildActivationXml(name) {
|
|
@@ -15,36 +15,6 @@ function buildActivationXml(name) {
|
|
|
15
15
|
<adtcore:objectReference adtcore:uri="/sap/bc/adt/sfw/featuretoggles/${encoded}" adtcore:name="${name.toUpperCase()}"/>
|
|
16
16
|
</adtcore:objectReferences>`;
|
|
17
17
|
}
|
|
18
|
-
function parseActivationResponse(response) {
|
|
19
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
20
|
-
ignoreAttributes: false,
|
|
21
|
-
attributeNamePrefix: '',
|
|
22
|
-
});
|
|
23
|
-
try {
|
|
24
|
-
const result = parser.parse(response.data);
|
|
25
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
26
|
-
if (properties) {
|
|
27
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
28
|
-
properties.activationExecuted === true;
|
|
29
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
30
|
-
properties.checkExecuted === true;
|
|
31
|
-
return {
|
|
32
|
-
success: activated && checked,
|
|
33
|
-
message: activated
|
|
34
|
-
? 'Feature toggle activated successfully'
|
|
35
|
-
: 'Activation failed',
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
// When the response body is empty, SAP treats activation as successful.
|
|
39
|
-
return { success: true, message: 'Feature toggle activated' };
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
return {
|
|
43
|
-
success: false,
|
|
44
|
-
message: `Failed to parse activation response: ${error}`,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
18
|
/**
|
|
49
19
|
* Activate a feature toggle.
|
|
50
20
|
*/
|
|
@@ -64,9 +34,6 @@ async function activateFeatureToggle(connection, name) {
|
|
|
64
34
|
'Content-Type': 'application/xml',
|
|
65
35
|
},
|
|
66
36
|
});
|
|
67
|
-
|
|
68
|
-
if (!activationResult.success) {
|
|
69
|
-
throw new Error(`Feature toggle activation failed: ${activationResult.message}`);
|
|
70
|
-
}
|
|
37
|
+
(0, activationUtils_1.assertActivationSucceeded)('Feature toggle', response.data);
|
|
71
38
|
return response;
|
|
72
39
|
}
|
|
@@ -8,14 +8,14 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
|
8
8
|
* Activate a metadata extension
|
|
9
9
|
*
|
|
10
10
|
* @param connection - ABAP connection instance
|
|
11
|
-
* @param name - Metadata extension name (e.g., '
|
|
11
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
12
12
|
* @param sessionId - Session ID for request tracking
|
|
13
13
|
* @param preaudit - Request pre-audit before activation (default: true)
|
|
14
14
|
* @returns Axios response with activation result
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
|
-
* await activateMetadataExtension(connection, '
|
|
18
|
+
* await activateMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
export declare function activateMetadataExtension(connection: IAbapConnection, name: string, preaudit?: boolean): Promise<IAdtResponse>;
|
|
@@ -11,14 +11,14 @@ const activationUtils_1 = require("../../utils/activationUtils");
|
|
|
11
11
|
* Activate a metadata extension
|
|
12
12
|
*
|
|
13
13
|
* @param connection - ABAP connection instance
|
|
14
|
-
* @param name - Metadata extension name (e.g., '
|
|
14
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
15
15
|
* @param sessionId - Session ID for request tracking
|
|
16
16
|
* @param preaudit - Request pre-audit before activation (default: true)
|
|
17
17
|
* @returns Axios response with activation result
|
|
18
18
|
*
|
|
19
19
|
* @example
|
|
20
20
|
* ```typescript
|
|
21
|
-
* await activateMetadataExtension(connection, '
|
|
21
|
+
* await activateMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
async function activateMetadataExtension(connection, name, preaudit = true) {
|
|
@@ -8,7 +8,7 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
|
8
8
|
* Check metadata extension syntax
|
|
9
9
|
*
|
|
10
10
|
* @param connection - ABAP connection instance
|
|
11
|
-
* @param name - Metadata extension name (e.g., '
|
|
11
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
12
12
|
* @param sessionId - Session ID for request tracking
|
|
13
13
|
* @param version - Version to check ('active' or 'inactive', default 'inactive')
|
|
14
14
|
* @param sourceCode - Optional source code to validate before saving
|
|
@@ -16,7 +16,7 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
18
18
|
* ```typescript
|
|
19
|
-
* const checkResult = await checkMetadataExtension(connection, '
|
|
19
|
+
* const checkResult = await checkMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
export declare function checkMetadataExtension(connection: IAbapConnection, name: string, version?: 'active' | 'inactive', sourceCode?: string): Promise<IAdtResponse>;
|
|
@@ -11,7 +11,7 @@ const checkRun_1 = require("../../utils/checkRun");
|
|
|
11
11
|
* Check metadata extension syntax
|
|
12
12
|
*
|
|
13
13
|
* @param connection - ABAP connection instance
|
|
14
|
-
* @param name - Metadata extension name (e.g., '
|
|
14
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
15
15
|
* @param sessionId - Session ID for request tracking
|
|
16
16
|
* @param version - Version to check ('active' or 'inactive', default 'inactive')
|
|
17
17
|
* @param sourceCode - Optional source code to validate before saving
|
|
@@ -19,7 +19,7 @@ const checkRun_1 = require("../../utils/checkRun");
|
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```typescript
|
|
22
|
-
* const checkResult = await checkMetadataExtension(connection, '
|
|
22
|
+
* const checkResult = await checkMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
25
|
async function checkMetadataExtension(connection, name, version = 'inactive', sourceCode) {
|
|
@@ -16,9 +16,9 @@ import type { IMetadataExtensionCreateParams } from './types';
|
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
18
|
* const response = await createMetadataExtension(connection, {
|
|
19
|
-
* name: '
|
|
19
|
+
* name: 'ZDEMO_C_CDS_MDE',
|
|
20
20
|
* description: 'First metadata extension',
|
|
21
|
-
* packageName: '
|
|
21
|
+
* packageName: 'ZDEMO_PKG',
|
|
22
22
|
* transportRequest: 'TRLK900123'
|
|
23
23
|
* }, sessionId);
|
|
24
24
|
* ```
|
|
@@ -20,9 +20,9 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
20
20
|
* @example
|
|
21
21
|
* ```typescript
|
|
22
22
|
* const response = await createMetadataExtension(connection, {
|
|
23
|
-
* name: '
|
|
23
|
+
* name: 'ZDEMO_C_CDS_MDE',
|
|
24
24
|
* description: 'First metadata extension',
|
|
25
|
-
* packageName: '
|
|
25
|
+
* packageName: 'ZDEMO_PKG',
|
|
26
26
|
* transportRequest: 'TRLK900123'
|
|
27
27
|
* }, sessionId);
|
|
28
28
|
* ```
|
|
@@ -8,14 +8,14 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
|
8
8
|
* Delete a metadata extension
|
|
9
9
|
*
|
|
10
10
|
* @param connection - ABAP connection instance
|
|
11
|
-
* @param name - Metadata extension name (e.g., '
|
|
11
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
12
12
|
* @param transportRequest - Transport request number (optional for local objects)
|
|
13
13
|
* @param sessionId - Session ID for request tracking
|
|
14
14
|
* @returns Axios response
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
|
-
* await deleteMetadataExtension(connection, '
|
|
18
|
+
* await deleteMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', 'TRLK900123', sessionId);
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
export declare function deleteMetadataExtension(connection: IAbapConnection, name: string, transportRequest: string | undefined): Promise<IAdtResponse>;
|
|
@@ -11,14 +11,14 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
11
11
|
* Delete a metadata extension
|
|
12
12
|
*
|
|
13
13
|
* @param connection - ABAP connection instance
|
|
14
|
-
* @param name - Metadata extension name (e.g., '
|
|
14
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
15
15
|
* @param transportRequest - Transport request number (optional for local objects)
|
|
16
16
|
* @param sessionId - Session ID for request tracking
|
|
17
17
|
* @returns Axios response
|
|
18
18
|
*
|
|
19
19
|
* @example
|
|
20
20
|
* ```typescript
|
|
21
|
-
* await deleteMetadataExtension(connection, '
|
|
21
|
+
* await deleteMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', 'TRLK900123', sessionId);
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
async function deleteMetadataExtension(connection, name, transportRequest) {
|
|
@@ -8,13 +8,13 @@ import type { IAbapConnection } from '@mcp-abap-adt/interfaces';
|
|
|
8
8
|
* Lock a metadata extension for modification
|
|
9
9
|
*
|
|
10
10
|
* @param connection - ABAP connection instance
|
|
11
|
-
* @param name - Metadata extension name (e.g., '
|
|
11
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
12
12
|
* @param sessionId - Session ID for request tracking
|
|
13
13
|
* @returns Lock handle string
|
|
14
14
|
*
|
|
15
15
|
* @example
|
|
16
16
|
* ```typescript
|
|
17
|
-
* const lockHandle = await lockMetadataExtension(connection, '
|
|
17
|
+
* const lockHandle = await lockMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
20
|
export declare function lockMetadataExtension(connection: IAbapConnection, name: string): Promise<string>;
|
|
@@ -13,13 +13,13 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
13
13
|
* Lock a metadata extension for modification
|
|
14
14
|
*
|
|
15
15
|
* @param connection - ABAP connection instance
|
|
16
|
-
* @param name - Metadata extension name (e.g., '
|
|
16
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
17
17
|
* @param sessionId - Session ID for request tracking
|
|
18
18
|
* @returns Lock handle string
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```typescript
|
|
22
|
-
* const lockHandle = await lockMetadataExtension(connection, '
|
|
22
|
+
* const lockHandle = await lockMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sessionId);
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
25
|
async function lockMetadataExtension(connection, name) {
|
|
@@ -10,12 +10,12 @@ import type { IReadOptions } from '../shared/types';
|
|
|
10
10
|
* Read metadata extension metadata
|
|
11
11
|
*
|
|
12
12
|
* @param connection - ABAP connection instance
|
|
13
|
-
* @param name - Metadata extension name (e.g., '
|
|
13
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
14
14
|
* @returns Axios response with metadata extension metadata
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
|
-
* const metadata = await readMetadataExtension(connection, '
|
|
18
|
+
* const metadata = await readMetadataExtension(connection, 'ZDEMO_C_CDS_MDE');
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
export declare function readMetadataExtension(connection: IAbapConnection, name: string, options?: IReadOptions, logger?: ILogger): Promise<IAdtResponse>;
|
|
@@ -23,13 +23,13 @@ export declare function readMetadataExtension(connection: IAbapConnection, name:
|
|
|
23
23
|
* Read metadata extension source code
|
|
24
24
|
*
|
|
25
25
|
* @param connection - ABAP connection instance
|
|
26
|
-
* @param name - Metadata extension name (e.g., '
|
|
26
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
27
27
|
* @param version - Version to read ('active' or 'inactive', default 'active')
|
|
28
28
|
* @returns Axios response with source code as string
|
|
29
29
|
*
|
|
30
30
|
* @example
|
|
31
31
|
* ```typescript
|
|
32
|
-
* const response = await readMetadataExtensionSource(connection, '
|
|
32
|
+
* const response = await readMetadataExtensionSource(connection, 'ZDEMO_C_CDS_MDE');
|
|
33
33
|
* const sourceCode = response.data;
|
|
34
34
|
* ```
|
|
35
35
|
*/
|
|
@@ -16,12 +16,12 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
16
16
|
* Read metadata extension metadata
|
|
17
17
|
*
|
|
18
18
|
* @param connection - ABAP connection instance
|
|
19
|
-
* @param name - Metadata extension name (e.g., '
|
|
19
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
20
20
|
* @returns Axios response with metadata extension metadata
|
|
21
21
|
*
|
|
22
22
|
* @example
|
|
23
23
|
* ```typescript
|
|
24
|
-
* const metadata = await readMetadataExtension(connection, '
|
|
24
|
+
* const metadata = await readMetadataExtension(connection, 'ZDEMO_C_CDS_MDE');
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
async function readMetadataExtension(connection, name, options, logger) {
|
|
@@ -42,13 +42,13 @@ async function readMetadataExtension(connection, name, options, logger) {
|
|
|
42
42
|
* Read metadata extension source code
|
|
43
43
|
*
|
|
44
44
|
* @param connection - ABAP connection instance
|
|
45
|
-
* @param name - Metadata extension name (e.g., '
|
|
45
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
46
46
|
* @param version - Version to read ('active' or 'inactive', default 'active')
|
|
47
47
|
* @returns Axios response with source code as string
|
|
48
48
|
*
|
|
49
49
|
* @example
|
|
50
50
|
* ```typescript
|
|
51
|
-
* const response = await readMetadataExtensionSource(connection, '
|
|
51
|
+
* const response = await readMetadataExtensionSource(connection, 'ZDEMO_C_CDS_MDE');
|
|
52
52
|
* const sourceCode = response.data;
|
|
53
53
|
* ```
|
|
54
54
|
*/
|
|
@@ -10,13 +10,13 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
|
10
10
|
* Unlock a metadata extension after editing
|
|
11
11
|
*
|
|
12
12
|
* @param connection - ABAP connection instance
|
|
13
|
-
* @param name - Metadata extension name (e.g., '
|
|
13
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
14
14
|
* @param lockHandle - Lock handle obtained from lockMetadataExtension
|
|
15
15
|
* @returns Axios response
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
18
18
|
* ```typescript
|
|
19
|
-
* await unlockMetadataExtension(connection, '
|
|
19
|
+
* await unlockMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', lockHandle);
|
|
20
20
|
* connection.setSessionType("stateless");
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
@@ -13,13 +13,13 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
13
13
|
* Unlock a metadata extension after editing
|
|
14
14
|
*
|
|
15
15
|
* @param connection - ABAP connection instance
|
|
16
|
-
* @param name - Metadata extension name (e.g., '
|
|
16
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
17
17
|
* @param lockHandle - Lock handle obtained from lockMetadataExtension
|
|
18
18
|
* @returns Axios response
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```typescript
|
|
22
|
-
* await unlockMetadataExtension(connection, '
|
|
22
|
+
* await unlockMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', lockHandle);
|
|
23
23
|
* connection.setSessionType("stateless");
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
@@ -8,7 +8,7 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
|
8
8
|
* Update metadata extension source code
|
|
9
9
|
*
|
|
10
10
|
* @param connection - ABAP connection instance
|
|
11
|
-
* @param name - Metadata extension name (e.g., '
|
|
11
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
12
12
|
* @param sourceCode - Metadata extension annotation source code
|
|
13
13
|
* @param lockHandle - Lock handle from lockMetadataExtension
|
|
14
14
|
* @returns Axios response
|
|
@@ -16,7 +16,7 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
18
|
* const sourceCode = `@Metadata.layer: #CUSTOMER
|
|
19
|
-
* annotate entity
|
|
19
|
+
* annotate entity ZDEMO_C_CDS_VIEW
|
|
20
20
|
* with
|
|
21
21
|
* {
|
|
22
22
|
* @EndUserText.label: 'Field 1 Label'
|
|
@@ -24,7 +24,7 @@ import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
|
24
24
|
* Fld1;
|
|
25
25
|
* }`;
|
|
26
26
|
*
|
|
27
|
-
* await updateMetadataExtension(connection, '
|
|
27
|
+
* await updateMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sourceCode, lockHandle);
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
30
|
export declare function updateMetadataExtension(connection: IAbapConnection, name: string, sourceCode: string, lockHandle: string, transportRequest?: string): Promise<IAdtResponse>;
|
|
@@ -12,7 +12,7 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
12
12
|
* Update metadata extension source code
|
|
13
13
|
*
|
|
14
14
|
* @param connection - ABAP connection instance
|
|
15
|
-
* @param name - Metadata extension name (e.g., '
|
|
15
|
+
* @param name - Metadata extension name (e.g., 'ZDEMO_C_CDS_MDE')
|
|
16
16
|
* @param sourceCode - Metadata extension annotation source code
|
|
17
17
|
* @param lockHandle - Lock handle from lockMetadataExtension
|
|
18
18
|
* @returns Axios response
|
|
@@ -20,7 +20,7 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
20
20
|
* @example
|
|
21
21
|
* ```typescript
|
|
22
22
|
* const sourceCode = `@Metadata.layer: #CUSTOMER
|
|
23
|
-
* annotate entity
|
|
23
|
+
* annotate entity ZDEMO_C_CDS_VIEW
|
|
24
24
|
* with
|
|
25
25
|
* {
|
|
26
26
|
* @EndUserText.label: 'Field 1 Label'
|
|
@@ -28,7 +28,7 @@ const timeouts_1 = require("../../utils/timeouts");
|
|
|
28
28
|
* Fld1;
|
|
29
29
|
* }`;
|
|
30
30
|
*
|
|
31
|
-
* await updateMetadataExtension(connection, '
|
|
31
|
+
* await updateMetadataExtension(connection, 'ZDEMO_C_CDS_MDE', sourceCode, lockHandle);
|
|
32
32
|
* ```
|
|
33
33
|
*/
|
|
34
34
|
async function updateMetadataExtension(connection, name, sourceCode, lockHandle, transportRequest) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/scalarFunction/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/scalarFunction/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAY9E,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAWvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.activateScalarFunction = activateScalarFunction;
|
|
4
|
-
const
|
|
4
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
5
5
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
6
6
|
const timeouts_1 = require("../../utils/timeouts");
|
|
7
7
|
function buildActivationXml(name) {
|
|
@@ -10,35 +10,6 @@ function buildActivationXml(name) {
|
|
|
10
10
|
<adtcore:objectReference adtcore:uri="/sap/bc/adt/ddic/dsfd/sources/${(0, internalUtils_1.encodeSapObjectName)(name.toLowerCase())}" adtcore:name="${name.toUpperCase()}"/>
|
|
11
11
|
</adtcore:objectReferences>`;
|
|
12
12
|
}
|
|
13
|
-
function parseActivationResponse(response) {
|
|
14
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
15
|
-
ignoreAttributes: false,
|
|
16
|
-
attributeNamePrefix: '',
|
|
17
|
-
});
|
|
18
|
-
try {
|
|
19
|
-
const result = parser.parse(response.data);
|
|
20
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
21
|
-
if (properties) {
|
|
22
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
23
|
-
properties.activationExecuted === true;
|
|
24
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
25
|
-
properties.checkExecuted === true;
|
|
26
|
-
return {
|
|
27
|
-
success: activated && checked,
|
|
28
|
-
message: activated
|
|
29
|
-
? 'Scalar function activated successfully'
|
|
30
|
-
: 'Activation failed',
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return { success: false, message: 'Unknown activation status' };
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
return {
|
|
37
|
-
success: false,
|
|
38
|
-
message: `Failed to parse activation response: ${error}`,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
13
|
async function activateScalarFunction(connection, name) {
|
|
43
14
|
const url = `/sap/bc/adt/activation?method=activate&preauditRequested=true`;
|
|
44
15
|
const response = await connection.makeAdtRequest({
|
|
@@ -48,9 +19,6 @@ async function activateScalarFunction(connection, name) {
|
|
|
48
19
|
data: buildActivationXml(name),
|
|
49
20
|
headers: { Accept: 'application/xml', 'Content-Type': 'application/xml' },
|
|
50
21
|
});
|
|
51
|
-
|
|
52
|
-
if (!activationResult.success) {
|
|
53
|
-
throw new Error(`Scalar function activation failed: ${activationResult.message}`);
|
|
54
|
-
}
|
|
22
|
+
(0, activationUtils_1.assertActivationSucceeded)('Scalar function', response.data);
|
|
55
23
|
return response;
|
|
56
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/scalarFunctionImplementation/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/scalarFunctionImplementation/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAY9E,wBAAsB,oCAAoC,CACxD,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAWvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.activateScalarFunctionImplementation = activateScalarFunctionImplementation;
|
|
4
|
-
const
|
|
4
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
5
5
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
6
6
|
const timeouts_1 = require("../../utils/timeouts");
|
|
7
7
|
function buildActivationXml(name) {
|
|
@@ -10,35 +10,6 @@ function buildActivationXml(name) {
|
|
|
10
10
|
<adtcore:objectReference adtcore:uri="/sap/bc/adt/ddic/dsfi/${(0, internalUtils_1.encodeSapObjectName)(name.toLowerCase())}" adtcore:name="${name.toUpperCase()}"/>
|
|
11
11
|
</adtcore:objectReferences>`;
|
|
12
12
|
}
|
|
13
|
-
function parseActivationResponse(response) {
|
|
14
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
15
|
-
ignoreAttributes: false,
|
|
16
|
-
attributeNamePrefix: '',
|
|
17
|
-
});
|
|
18
|
-
try {
|
|
19
|
-
const result = parser.parse(response.data);
|
|
20
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
21
|
-
if (properties) {
|
|
22
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
23
|
-
properties.activationExecuted === true;
|
|
24
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
25
|
-
properties.checkExecuted === true;
|
|
26
|
-
return {
|
|
27
|
-
success: activated && checked,
|
|
28
|
-
message: activated
|
|
29
|
-
? 'Scalar function implementation activated successfully'
|
|
30
|
-
: 'Activation failed',
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return { success: false, message: 'Unknown activation status' };
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
return {
|
|
37
|
-
success: false,
|
|
38
|
-
message: `Failed to parse activation response: ${error}`,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
13
|
async function activateScalarFunctionImplementation(connection, name) {
|
|
43
14
|
const url = `/sap/bc/adt/activation?method=activate&preauditRequested=true`;
|
|
44
15
|
const response = await connection.makeAdtRequest({
|
|
@@ -48,9 +19,6 @@ async function activateScalarFunctionImplementation(connection, name) {
|
|
|
48
19
|
data: buildActivationXml(name),
|
|
49
20
|
headers: { Accept: 'application/xml', 'Content-Type': 'application/xml' },
|
|
50
21
|
});
|
|
51
|
-
|
|
52
|
-
if (!activationResult.success) {
|
|
53
|
-
throw new Error(`Scalar function implementation activation failed: ${activationResult.message}`);
|
|
54
|
-
}
|
|
22
|
+
(0, activationUtils_1.assertActivationSucceeded)('Scalar function implementation', response.data);
|
|
55
23
|
return response;
|
|
56
24
|
}
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
* ServiceDefinition activation operations
|
|
3
3
|
*/
|
|
4
4
|
import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
5
|
+
/**
|
|
6
|
+
* Parse activation response
|
|
7
|
+
*/
|
|
5
8
|
/**
|
|
6
9
|
* Activate service definition
|
|
7
10
|
* Makes service definition active and usable in SAP system
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/serviceDefinition/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/serviceDefinition/activation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe9E;;GAEG;AAEH;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,eAAe,EAC3B,qBAAqB,EAAE,MAAM,GAC5B,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.activateServiceDefinition = activateServiceDefinition;
|
|
7
|
-
const
|
|
7
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
8
8
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
9
9
|
const timeouts_1 = require("../../utils/timeouts");
|
|
10
10
|
/**
|
|
@@ -19,35 +19,6 @@ function buildActivationXml(serviceDefinitionName) {
|
|
|
19
19
|
/**
|
|
20
20
|
* Parse activation response
|
|
21
21
|
*/
|
|
22
|
-
function parseActivationResponse(response) {
|
|
23
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
24
|
-
ignoreAttributes: false,
|
|
25
|
-
attributeNamePrefix: '',
|
|
26
|
-
});
|
|
27
|
-
try {
|
|
28
|
-
const result = parser.parse(response.data);
|
|
29
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
30
|
-
if (properties) {
|
|
31
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
32
|
-
properties.activationExecuted === true;
|
|
33
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
34
|
-
properties.checkExecuted === true;
|
|
35
|
-
return {
|
|
36
|
-
success: activated && checked,
|
|
37
|
-
message: activated
|
|
38
|
-
? 'Service definition activated successfully'
|
|
39
|
-
: 'Activation failed',
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return { success: false, message: 'Unknown activation status' };
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
return {
|
|
46
|
-
success: false,
|
|
47
|
-
message: `Failed to parse activation response: ${error}`,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
22
|
/**
|
|
52
23
|
* Activate service definition
|
|
53
24
|
* Makes service definition active and usable in SAP system
|
|
@@ -66,9 +37,6 @@ async function activateServiceDefinition(connection, serviceDefinitionName) {
|
|
|
66
37
|
data: xmlBody,
|
|
67
38
|
headers,
|
|
68
39
|
});
|
|
69
|
-
|
|
70
|
-
if (!activationResult.success) {
|
|
71
|
-
throw new Error(`Service definition activation failed: ${activationResult.message}`);
|
|
72
|
-
}
|
|
40
|
+
(0, activationUtils_1.assertActivationSucceeded)('Service definition', response.data);
|
|
73
41
|
return response;
|
|
74
42
|
}
|
|
@@ -26,11 +26,11 @@ import type { IObjectReference } from './types';
|
|
|
26
26
|
* const objects = [
|
|
27
27
|
* {
|
|
28
28
|
* type: 'BDEF/BDO',
|
|
29
|
-
* name: '
|
|
29
|
+
* name: 'ZDEMO_I_CDS_VIEW'
|
|
30
30
|
* },
|
|
31
31
|
* {
|
|
32
32
|
* type: 'DDLS/DF',
|
|
33
|
-
* name: '
|
|
33
|
+
* name: 'ZDEMO_C_CDS_VIEW'
|
|
34
34
|
* }
|
|
35
35
|
* ];
|
|
36
36
|
*
|
|
@@ -97,11 +97,11 @@ async function getActivationResults(connection, runId) {
|
|
|
97
97
|
* const objects = [
|
|
98
98
|
* {
|
|
99
99
|
* type: 'BDEF/BDO',
|
|
100
|
-
* name: '
|
|
100
|
+
* name: 'ZDEMO_I_CDS_VIEW'
|
|
101
101
|
* },
|
|
102
102
|
* {
|
|
103
103
|
* type: 'DDLS/DF',
|
|
104
|
-
* name: '
|
|
104
|
+
* name: 'ZDEMO_C_CDS_VIEW'
|
|
105
105
|
* }
|
|
106
106
|
* ];
|
|
107
107
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/transformation/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../../src/core/transformation/activation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe9E;;GAEG;AAEH;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,eAAe,EAC3B,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.activateTransformation = activateTransformation;
|
|
4
|
-
const
|
|
4
|
+
const activationUtils_1 = require("../../utils/activationUtils");
|
|
5
5
|
const internalUtils_1 = require("../../utils/internalUtils");
|
|
6
6
|
const timeouts_1 = require("../../utils/timeouts");
|
|
7
7
|
/**
|
|
@@ -16,35 +16,6 @@ function buildActivationXml(transformationName) {
|
|
|
16
16
|
/**
|
|
17
17
|
* Parse activation response
|
|
18
18
|
*/
|
|
19
|
-
function parseActivationResponse(response) {
|
|
20
|
-
const parser = new fast_xml_parser_1.XMLParser({
|
|
21
|
-
ignoreAttributes: false,
|
|
22
|
-
attributeNamePrefix: '',
|
|
23
|
-
});
|
|
24
|
-
try {
|
|
25
|
-
const result = parser.parse(response.data);
|
|
26
|
-
const properties = result['chkl:messages']?.['chkl:properties'];
|
|
27
|
-
if (properties) {
|
|
28
|
-
const activated = properties.activationExecuted === 'true' ||
|
|
29
|
-
properties.activationExecuted === true;
|
|
30
|
-
const checked = properties.checkExecuted === 'true' ||
|
|
31
|
-
properties.checkExecuted === true;
|
|
32
|
-
return {
|
|
33
|
-
success: activated && checked,
|
|
34
|
-
message: activated
|
|
35
|
-
? 'Transformation activated successfully'
|
|
36
|
-
: 'Activation failed',
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
return { success: false, message: 'Unknown activation status' };
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
return {
|
|
43
|
-
success: false,
|
|
44
|
-
message: `Failed to parse activation response: ${error}`,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
19
|
/**
|
|
49
20
|
* Activate transformation
|
|
50
21
|
*/
|
|
@@ -62,9 +33,6 @@ async function activateTransformation(connection, transformationName) {
|
|
|
62
33
|
data: xmlBody,
|
|
63
34
|
headers,
|
|
64
35
|
});
|
|
65
|
-
|
|
66
|
-
if (!activationResult.success) {
|
|
67
|
-
throw new Error(`Transformation activation failed: ${activationResult.message}`);
|
|
68
|
-
}
|
|
36
|
+
(0, activationUtils_1.assertActivationSucceeded)('Transformation', response.data);
|
|
69
37
|
return response;
|
|
70
38
|
}
|
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
* 2. Group activation: /sap/bc/adt/activation/runs (for multiple objects)
|
|
7
7
|
*/
|
|
8
8
|
import type { IAbapConnection, IAdtResponse } from '@mcp-abap-adt/interfaces';
|
|
9
|
+
/**
|
|
10
|
+
* Throw unless an activation response is free of error messages.
|
|
11
|
+
*
|
|
12
|
+
* Nine object types each carried a private copy of this check, all written the
|
|
13
|
+
* same way — `activationExecuted && checkExecuted`, with the `<msg>` list never
|
|
14
|
+
* read at all. That shape is wrong twice over:
|
|
15
|
+
*
|
|
16
|
+
* - It refuses a valid response. An object that needs no activation answers
|
|
17
|
+
* `activationExecuted="false"`, so `AdtClient` threw over objects that were
|
|
18
|
+
* already active. See `detectActivationFailure` above for the probed table.
|
|
19
|
+
* - It discards what SAP said. A genuine failure carries the reason in
|
|
20
|
+
* `<msg type="E">` — "Class ZAC_… does not have a TMDIR entry" — and every
|
|
21
|
+
* copy replaced it with the fixed string "Activation failed".
|
|
22
|
+
*
|
|
23
|
+
* One rule in one place, so the nine cannot drift apart again. Callers keep
|
|
24
|
+
* their own prefix, which is the only part that was ever type-specific.
|
|
25
|
+
*
|
|
26
|
+
* @param objectLabel prefix for the thrown message, e.g. `'Scalar function'`
|
|
27
|
+
* @throws when the response carries at least one error-severity message
|
|
28
|
+
*/
|
|
29
|
+
export declare function assertActivationSucceeded(objectLabel: string, responseData: unknown): void;
|
|
9
30
|
/**
|
|
10
31
|
* Build object URI from name and type
|
|
11
32
|
* Used by both individual and group activation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activationUtils.d.ts","sourceRoot":"","sources":["../../src/utils/activationUtils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"activationUtils.d.ts","sourceRoot":"","sources":["../../src/utils/activationUtils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAwG9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,OAAO,GACpB,IAAI,CAKN;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAyGR;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,YAAY,CAAC,CA8BvB"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* 2. Group activation: /sap/bc/adt/activation/runs (for multiple objects)
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.assertActivationSucceeded = assertActivationSucceeded;
|
|
10
11
|
exports.buildObjectUri = buildObjectUri;
|
|
11
12
|
exports.activateObjectInSession = activateObjectInSession;
|
|
12
13
|
const fast_xml_parser_1 = require("fast-xml-parser");
|
|
@@ -36,11 +37,27 @@ function extractActivationMsgText(msg) {
|
|
|
36
37
|
* Inspect an ADT activation response body for an **explicit failure signal**.
|
|
37
38
|
*
|
|
38
39
|
* ADT's `/sap/bc/adt/activation` endpoint returns HTTP 200 even when activation
|
|
39
|
-
* fails
|
|
40
|
-
* `<chkl:messages>` body with `chkl:properties activationExecuted="false"` and/or
|
|
40
|
+
* fails on a syntax error, carrying a `<chkl:messages>` body with
|
|
41
41
|
* `<msg type="E">` entries. Treating "no HTTP error" as success masks these
|
|
42
42
|
* failures (issue #78).
|
|
43
43
|
*
|
|
44
|
+
* **The failure signal is an `E` message, not `activationExecuted="false"`.**
|
|
45
|
+
* This originally treated the flag alone as a failure, which is wrong — probed
|
|
46
|
+
* against a trial system:
|
|
47
|
+
*
|
|
48
|
+
* | scenario | HTTP | activationExecuted | `msg` |
|
|
49
|
+
* |--------------------------------|------|--------------------|-------|
|
|
50
|
+
* | class already active | 200 | `false` | none |
|
|
51
|
+
* | DDIC table already active | 200 | `true` | none |
|
|
52
|
+
* | class does not exist | 200 | `false` | `E` |
|
|
53
|
+
* | locked by another session | 403 | — | — |
|
|
54
|
+
*
|
|
55
|
+
* A class that needs no activation reports `false` with an empty message list —
|
|
56
|
+
* indistinguishable, by the flag alone, from a class that does not exist. So the
|
|
57
|
+
* flag says whether ADT did any work, not whether the work succeeded, and only
|
|
58
|
+
* the messages carry the verdict. The lock case the old wording named is a 403
|
|
59
|
+
* and never reached this function at all.
|
|
60
|
+
*
|
|
44
61
|
* Conservative by design: returns a failure detail string ONLY on a positive
|
|
45
62
|
* error signal. Empty, unparseable, or unrecognized bodies return `null`
|
|
46
63
|
* (success) so the many object types whose success-body shape differs are never
|
|
@@ -67,8 +84,6 @@ function detectActivationFailure(responseData) {
|
|
|
67
84
|
if (!messages) {
|
|
68
85
|
return null;
|
|
69
86
|
}
|
|
70
|
-
const activationExecuted = messages['chkl:properties']?.activationExecuted;
|
|
71
|
-
const executedFalse = activationExecuted === 'false' || activationExecuted === false;
|
|
72
87
|
const rawMsg = messages.msg;
|
|
73
88
|
const msgList = Array.isArray(rawMsg) ? rawMsg : rawMsg ? [rawMsg] : [];
|
|
74
89
|
const errorTexts = msgList
|
|
@@ -78,12 +93,33 @@ function detectActivationFailure(responseData) {
|
|
|
78
93
|
return typeof severity === 'string' && severity.toUpperCase() === 'E';
|
|
79
94
|
})
|
|
80
95
|
.map((m) => extractActivationMsgText(m));
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
96
|
+
return errorTexts.length > 0 ? errorTexts.join('; ') : null;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Throw unless an activation response is free of error messages.
|
|
100
|
+
*
|
|
101
|
+
* Nine object types each carried a private copy of this check, all written the
|
|
102
|
+
* same way — `activationExecuted && checkExecuted`, with the `<msg>` list never
|
|
103
|
+
* read at all. That shape is wrong twice over:
|
|
104
|
+
*
|
|
105
|
+
* - It refuses a valid response. An object that needs no activation answers
|
|
106
|
+
* `activationExecuted="false"`, so `AdtClient` threw over objects that were
|
|
107
|
+
* already active. See `detectActivationFailure` above for the probed table.
|
|
108
|
+
* - It discards what SAP said. A genuine failure carries the reason in
|
|
109
|
+
* `<msg type="E">` — "Class ZAC_… does not have a TMDIR entry" — and every
|
|
110
|
+
* copy replaced it with the fixed string "Activation failed".
|
|
111
|
+
*
|
|
112
|
+
* One rule in one place, so the nine cannot drift apart again. Callers keep
|
|
113
|
+
* their own prefix, which is the only part that was ever type-specific.
|
|
114
|
+
*
|
|
115
|
+
* @param objectLabel prefix for the thrown message, e.g. `'Scalar function'`
|
|
116
|
+
* @throws when the response carries at least one error-severity message
|
|
117
|
+
*/
|
|
118
|
+
function assertActivationSucceeded(objectLabel, responseData) {
|
|
119
|
+
const failure = detectActivationFailure(responseData);
|
|
120
|
+
if (failure) {
|
|
121
|
+
throw new Error(`${objectLabel} activation failed: ${failure}`);
|
|
85
122
|
}
|
|
86
|
-
return null;
|
|
87
123
|
}
|
|
88
124
|
/**
|
|
89
125
|
* Build object URI from name and type
|