mcdev 3.1.1 → 4.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.
- package/.eslintrc.json +67 -7
- package/.github/ISSUE_TEMPLATE/bug.yml +5 -1
- package/.github/ISSUE_TEMPLATE/task.md +1 -1
- package/.github/PULL_REQUEST_TEMPLATE.md +5 -3
- package/.github/dependabot.yml +14 -0
- package/.github/workflows/code-analysis.yml +57 -0
- package/.husky/commit-msg +10 -0
- package/.husky/post-checkout +5 -0
- package/.husky/pre-commit +2 -1
- package/.prettierrc +8 -0
- package/.vscode/settings.json +1 -1
- package/LICENSE +2 -2
- package/README.md +134 -45
- package/boilerplate/config.json +5 -11
- package/boilerplate/files/.prettierrc +8 -0
- package/boilerplate/files/.vscode/extensions.json +0 -1
- package/boilerplate/files/.vscode/settings.json +28 -2
- package/boilerplate/files/README.md +2 -2
- package/boilerplate/forcedUpdates.json +10 -0
- package/boilerplate/npm-dependencies.json +5 -5
- package/docs/dist/documentation.md +2795 -1724
- package/jsconfig.json +1 -1
- package/lib/Builder.js +166 -75
- package/lib/Deployer.js +244 -96
- package/lib/MetadataTypeDefinitions.js +2 -0
- package/lib/MetadataTypeInfo.js +2 -0
- package/lib/Retriever.js +61 -84
- package/lib/cli.js +133 -25
- package/lib/index.js +242 -563
- package/lib/metadataTypes/AccountUser.js +101 -95
- package/lib/metadataTypes/Asset.js +677 -248
- package/lib/metadataTypes/AttributeGroup.js +23 -12
- package/lib/metadataTypes/Automation.js +456 -357
- package/lib/metadataTypes/Campaign.js +33 -93
- package/lib/metadataTypes/ContentArea.js +31 -11
- package/lib/metadataTypes/DataExtension.js +391 -376
- package/lib/metadataTypes/DataExtensionField.js +131 -54
- package/lib/metadataTypes/DataExtensionTemplate.js +22 -4
- package/lib/metadataTypes/DataExtract.js +67 -50
- package/lib/metadataTypes/DataExtractType.js +14 -8
- package/lib/metadataTypes/Discovery.js +21 -16
- package/lib/metadataTypes/Email.js +32 -12
- package/lib/metadataTypes/EmailSendDefinition.js +85 -80
- package/lib/metadataTypes/EventDefinition.js +69 -47
- package/lib/metadataTypes/FileTransfer.js +78 -54
- package/lib/metadataTypes/Filter.js +11 -4
- package/lib/metadataTypes/Folder.js +149 -117
- package/lib/metadataTypes/FtpLocation.js +14 -8
- package/lib/metadataTypes/ImportFile.js +69 -69
- package/lib/metadataTypes/Interaction.js +19 -4
- package/lib/metadataTypes/List.js +54 -13
- package/lib/metadataTypes/MetadataType.js +687 -479
- package/lib/metadataTypes/MobileCode.js +46 -0
- package/lib/metadataTypes/MobileKeyword.js +114 -0
- package/lib/metadataTypes/Query.js +204 -103
- package/lib/metadataTypes/Role.js +76 -61
- package/lib/metadataTypes/Script.js +146 -82
- package/lib/metadataTypes/SetDefinition.js +20 -8
- package/lib/metadataTypes/TriggeredSendDefinition.js +78 -58
- package/lib/metadataTypes/definitions/Asset.definition.js +21 -10
- package/lib/metadataTypes/definitions/AttributeGroup.definition.js +12 -0
- package/lib/metadataTypes/definitions/Automation.definition.js +10 -5
- package/lib/metadataTypes/definitions/Campaign.definition.js +44 -1
- package/lib/metadataTypes/definitions/DataExtension.definition.js +4 -0
- package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +6 -0
- package/lib/metadataTypes/definitions/DataExtract.definition.js +18 -14
- package/lib/metadataTypes/definitions/Discovery.definition.js +12 -0
- package/lib/metadataTypes/definitions/EmailSendDefinition.definition.js +4 -0
- package/lib/metadataTypes/definitions/EventDefinition.definition.js +22 -0
- package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
- package/lib/metadataTypes/definitions/Filter.definition.js +4 -0
- package/lib/metadataTypes/definitions/Folder.definition.js +6 -0
- package/lib/metadataTypes/definitions/FtpLocation.definition.js +4 -0
- package/lib/metadataTypes/definitions/ImportFile.definition.js +10 -5
- package/lib/metadataTypes/definitions/Interaction.definition.js +4 -0
- package/lib/metadataTypes/definitions/MobileCode.definition.js +163 -0
- package/lib/metadataTypes/definitions/MobileKeyword.definition.js +253 -0
- package/lib/metadataTypes/definitions/Query.definition.js +4 -0
- package/lib/metadataTypes/definitions/Role.definition.js +5 -0
- package/lib/metadataTypes/definitions/Script.definition.js +4 -0
- package/lib/metadataTypes/definitions/SetDefinition.definition.js +28 -0
- package/lib/metadataTypes/definitions/TriggeredSendDefinition.definition.js +4 -0
- package/lib/retrieveChangelog.js +7 -6
- package/lib/util/auth.js +117 -0
- package/lib/util/businessUnit.js +55 -66
- package/lib/util/cache.js +194 -0
- package/lib/util/cli.js +90 -116
- package/lib/util/config.js +302 -0
- package/lib/util/devops.js +240 -50
- package/lib/util/file.js +120 -191
- package/lib/util/init.config.js +195 -69
- package/lib/util/init.git.js +45 -50
- package/lib/util/init.js +72 -59
- package/lib/util/init.npm.js +48 -39
- package/lib/util/util.js +280 -564
- package/package.json +44 -33
- package/test/dataExtension.test.js +152 -0
- package/test/mockRoot/.mcdev-auth.json +8 -0
- package/test/mockRoot/.mcdevrc.json +67 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/childBU_dataextension_test.dataExtension-meta.json +39 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testDataExtension.dataExtension-meta.json +23 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.sql +4 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.sql +4 -0
- package/test/query.test.js +149 -0
- package/test/resourceFactory.js +142 -0
- package/test/resources/1111111/dataFolder/retrieve-response.xml +43 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +18 -0
- package/test/resources/9999999/automation/v1/queries/get-response.json +24 -0
- package/test/resources/9999999/automation/v1/queries/post-response.json +18 -0
- package/test/resources/9999999/dataExtension/build-expected.json +51 -0
- package/test/resources/9999999/dataExtension/create-expected.json +23 -0
- package/test/resources/9999999/dataExtension/create-response.xml +54 -0
- package/test/resources/9999999/dataExtension/retrieve-expected.json +51 -0
- package/test/resources/9999999/dataExtension/retrieve-response.xml +47 -0
- package/test/resources/9999999/dataExtension/template-expected.json +51 -0
- package/test/resources/9999999/dataExtension/update-expected.json +55 -0
- package/test/resources/9999999/dataExtension/update-response.xml +52 -0
- package/test/resources/9999999/dataExtensionField/retrieve-response.xml +93 -0
- package/test/resources/9999999/dataExtensionTemplate/retrieve-response.xml +303 -0
- package/test/resources/9999999/dataFolder/retrieve-response.xml +65 -0
- package/test/resources/9999999/query/build-expected.json +8 -0
- package/test/resources/9999999/query/get-expected.json +11 -0
- package/test/resources/9999999/query/patch-expected.json +11 -0
- package/test/resources/9999999/query/post-expected.json +11 -0
- package/test/resources/9999999/query/template-expected.json +8 -0
- package/test/resources/auth.json +32 -0
- package/test/resources/rest404-response.json +5 -0
- package/test/resources/retrieve-response.xml +21 -0
- package/test/utils.js +107 -0
- package/types/mcdev.d.js +301 -0
- package/CHANGELOG.md +0 -126
- package/PULL_REQUEST_TEMPLATE.md +0 -19
- package/test/util/file.js +0 -51
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
const fs = require('fs-extra');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const { XMLParser } = require('fast-xml-parser');
|
|
4
|
+
const parser = new XMLParser();
|
|
5
|
+
const attributeParser = new XMLParser({ ignoreAttributes: false });
|
|
6
|
+
/**
|
|
7
|
+
* gets mock SOAP metadata for responding
|
|
8
|
+
*
|
|
9
|
+
* @param {string} mcdevAction SOAP action
|
|
10
|
+
* @param {string} type metadata Type
|
|
11
|
+
* @param {string} mid of Business Unit
|
|
12
|
+
* @returns {string} relevant metadata stringified
|
|
13
|
+
*/
|
|
14
|
+
exports.loadSOAPRecords = async (mcdevAction, type, mid) => {
|
|
15
|
+
type = type[0].toLowerCase() + type.slice(1);
|
|
16
|
+
const testPath = path.join(
|
|
17
|
+
'test',
|
|
18
|
+
'resources',
|
|
19
|
+
mid.toString(),
|
|
20
|
+
type,
|
|
21
|
+
mcdevAction + '-response.xml'
|
|
22
|
+
);
|
|
23
|
+
return (await fs.pathExists(testPath))
|
|
24
|
+
? fs.readFile(testPath, {
|
|
25
|
+
encoding: 'utf8',
|
|
26
|
+
})
|
|
27
|
+
: fs.readFile(path.join('test', 'resources', mcdevAction + '-response.xml'), {
|
|
28
|
+
encoding: 'utf8',
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* based on request, respond with different soap data
|
|
33
|
+
*
|
|
34
|
+
* @param {object} config mock api request object
|
|
35
|
+
* @returns {Promise.<Array>} status code plus response in string form
|
|
36
|
+
*/
|
|
37
|
+
exports.handleSOAPRequest = async (config) => {
|
|
38
|
+
const jObj = parser.parse(config.data);
|
|
39
|
+
const fullObj = attributeParser.parse(config.data);
|
|
40
|
+
let responseXML;
|
|
41
|
+
|
|
42
|
+
switch (config.headers.SOAPAction) {
|
|
43
|
+
case 'Retrieve': {
|
|
44
|
+
responseXML = await this.loadSOAPRecords(
|
|
45
|
+
config.headers.SOAPAction.toLocaleLowerCase(),
|
|
46
|
+
jObj.Envelope.Body.RetrieveRequestMsg.RetrieveRequest.ObjectType,
|
|
47
|
+
jObj.Envelope.Header.fueloauth
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case 'Create': {
|
|
53
|
+
responseXML = await this.loadSOAPRecords(
|
|
54
|
+
config.headers.SOAPAction.toLocaleLowerCase(),
|
|
55
|
+
fullObj.Envelope.Body.CreateRequest.Objects['@_xsi:type'],
|
|
56
|
+
jObj.Envelope.Header.fueloauth
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
case 'Update': {
|
|
62
|
+
responseXML = await this.loadSOAPRecords(
|
|
63
|
+
config.headers.SOAPAction.toLocaleLowerCase(),
|
|
64
|
+
fullObj.Envelope.Body.UpdateRequest.Objects['@_xsi:type'],
|
|
65
|
+
jObj.Envelope.Header.fueloauth
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
default: {
|
|
71
|
+
throw new Error('This SOAP Action is not supported by test handler');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return [200, responseXML];
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* helper to return soap base URL
|
|
79
|
+
*
|
|
80
|
+
* @returns {string} soap URL
|
|
81
|
+
*/
|
|
82
|
+
exports.soapUrl = 'https://mct0l7nxfq2r988t1kxfy8sc4xxx.soap.marketingcloudapis.com/Service.asmx';
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* based on request, respond with different soap data
|
|
86
|
+
*
|
|
87
|
+
* @param {object} config mock api request object
|
|
88
|
+
* @returns {Promise.<Array>} status code plus response in string form
|
|
89
|
+
*/
|
|
90
|
+
exports.handleRESTRequest = async (config) => {
|
|
91
|
+
try {
|
|
92
|
+
// check if filtered
|
|
93
|
+
const urlObj = new URL(config.baseURL + config.url.slice(1));
|
|
94
|
+
let filterName;
|
|
95
|
+
if (urlObj.searchParams.get('$filter')) {
|
|
96
|
+
filterName = urlObj.searchParams.get('$filter').split(' eq ')[1];
|
|
97
|
+
}
|
|
98
|
+
const testPath = path.join(
|
|
99
|
+
'test',
|
|
100
|
+
'resources',
|
|
101
|
+
config.headers.Authorization.replace('Bearer ', ''),
|
|
102
|
+
urlObj.pathname,
|
|
103
|
+
config.method + '-response.json'
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
if (await fs.pathExists(testPath)) {
|
|
107
|
+
// build filter logic to ensure templating works
|
|
108
|
+
if (filterName) {
|
|
109
|
+
const response = JSON.parse(
|
|
110
|
+
await fs.readFile(testPath, {
|
|
111
|
+
encoding: 'utf8',
|
|
112
|
+
})
|
|
113
|
+
);
|
|
114
|
+
response.items = response.items.filter((def) => def.name == filterName);
|
|
115
|
+
response.count = response.items.length;
|
|
116
|
+
return [200, JSON.stringify(response)];
|
|
117
|
+
} else {
|
|
118
|
+
return [
|
|
119
|
+
200,
|
|
120
|
+
await fs.readFile(testPath, {
|
|
121
|
+
encoding: 'utf8',
|
|
122
|
+
}),
|
|
123
|
+
];
|
|
124
|
+
}
|
|
125
|
+
} else {
|
|
126
|
+
return [
|
|
127
|
+
404,
|
|
128
|
+
fs.readFile(path.join('test', 'resources', 'rest404-response.json'), {
|
|
129
|
+
encoding: 'utf8',
|
|
130
|
+
}),
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
} catch {
|
|
134
|
+
return [500, {}];
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* helper to return rest base URL
|
|
139
|
+
*
|
|
140
|
+
* @returns {string} test URL
|
|
141
|
+
*/
|
|
142
|
+
exports.restUrl = 'https://mct0l7nxfq2r988t1kxfy8sc4xxx.rest.marketingcloudapis.com/';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
|
3
|
+
<soap:Header>
|
|
4
|
+
<wsa:Action>RetrieveResponse</wsa:Action>
|
|
5
|
+
<wsa:MessageID>urn:uuid:f36f3303-3b5a-4641-8109-b26447634d91</wsa:MessageID>
|
|
6
|
+
<wsa:RelatesTo>urn:uuid:33983968-28c4-4379-bb5f-f80ae32eb988</wsa:RelatesTo>
|
|
7
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
|
8
|
+
<wsse:Security>
|
|
9
|
+
<wsu:Timestamp wsu:Id="Timestamp-32ecc81b-6020-473c-9e99-4b5338921220">
|
|
10
|
+
<wsu:Created>2022-04-19T20:03:41Z</wsu:Created>
|
|
11
|
+
<wsu:Expires>2022-04-19T20:08:41Z</wsu:Expires>
|
|
12
|
+
</wsu:Timestamp>
|
|
13
|
+
</wsse:Security>
|
|
14
|
+
</soap:Header>
|
|
15
|
+
<soap:Body>
|
|
16
|
+
<RetrieveResponseMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
|
|
17
|
+
<OverallStatus>OK</OverallStatus>
|
|
18
|
+
<RequestID>02cd5ccb-8f84-4651-826f-71169eeecf05</RequestID>
|
|
19
|
+
<Results xsi:type="DataFolder">
|
|
20
|
+
<Client>
|
|
21
|
+
<ID>1111111</ID>
|
|
22
|
+
</Client>
|
|
23
|
+
<PartnerKey xsi:nil="true" />
|
|
24
|
+
<CreatedDate>2016-07-22T11:52:19.6</CreatedDate>
|
|
25
|
+
<ModifiedDate>2016-07-22T11:52:19.6</ModifiedDate>
|
|
26
|
+
<ID>1</ID>
|
|
27
|
+
<ObjectID xsi:nil="true" />
|
|
28
|
+
<CustomerKey>dataextension_default</CustomerKey>
|
|
29
|
+
<ParentFolder>
|
|
30
|
+
<PartnerKey xsi:nil="true" />
|
|
31
|
+
<ID>0</ID>
|
|
32
|
+
<ObjectID xsi:nil="true" />
|
|
33
|
+
</ParentFolder>
|
|
34
|
+
<Name>Data Extensions</Name>
|
|
35
|
+
<Description />
|
|
36
|
+
<ContentType>dataextension</ContentType>
|
|
37
|
+
<IsActive>true</IsActive>
|
|
38
|
+
<IsEditable>false</IsEditable>
|
|
39
|
+
<AllowChildren>true</AllowChildren>
|
|
40
|
+
</Results>
|
|
41
|
+
</RetrieveResponseMsg>
|
|
42
|
+
</soap:Body>
|
|
43
|
+
</soap:Envelope>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"queryDefinitionId": "549f0568-607c-4940-afef-437965094dat",
|
|
3
|
+
"name": "testExistingQuery",
|
|
4
|
+
"key": "testExistingQuery",
|
|
5
|
+
"description": "updated",
|
|
6
|
+
"queryText": "SELECT\n SubscriberKey as testField\nFROM\n _Subscribers ",
|
|
7
|
+
"targetName": "childBU_dataextension_test",
|
|
8
|
+
"targetKey": "childBU_dataextension_test",
|
|
9
|
+
"targetId": "30400c03-0ec4-ec11-b83c-48df37d1de8a",
|
|
10
|
+
"targetDescription": "",
|
|
11
|
+
"createdDate": "2022-04-26T15:21:16.453",
|
|
12
|
+
"modifiedDate": "2022-04-26T16:04:15.88",
|
|
13
|
+
"targetUpdateTypeId": 0,
|
|
14
|
+
"targetUpdateTypeName": "Overwrite",
|
|
15
|
+
"validatedQueryText": "SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;\r\n\r\nINSERT INTO C518001158.[testDataExtension] ([testField])\r\nSELECT querydef.[testField]\r\nFROM (SELECT SubscriberKey as testField FROM C518001158._Subscribers ) AS querydef \r\nSELECT @rcInsert = @@ROWCOUNT;;\r\n",
|
|
16
|
+
"categoryId": 999,
|
|
17
|
+
"isFrozen": false
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"count": 1,
|
|
3
|
+
"page": 1,
|
|
4
|
+
"pageSize": 50,
|
|
5
|
+
"items": [
|
|
6
|
+
{
|
|
7
|
+
"queryDefinitionId": "549f0568-607c-4940-afef-437965094dat",
|
|
8
|
+
"name": "testExistingQuery",
|
|
9
|
+
"key": "testExistingQuery",
|
|
10
|
+
"description": "",
|
|
11
|
+
"queryText": "SELECT\n SubscriberKey as testField\nFROM\n _Subscribers ",
|
|
12
|
+
"targetName": "childBU_dataextension_test",
|
|
13
|
+
"targetKey": "childBU_dataextension_test",
|
|
14
|
+
"targetId": "30400c03-0ec4-ec11-b83c-48df37d1de8a",
|
|
15
|
+
"targetDescription": "",
|
|
16
|
+
"createdDate": "2022-04-26T15:21:16.453",
|
|
17
|
+
"modifiedDate": "2022-04-26T16:02:44.01",
|
|
18
|
+
"targetUpdateTypeId": 0,
|
|
19
|
+
"targetUpdateTypeName": "Overwrite",
|
|
20
|
+
"categoryId": 999,
|
|
21
|
+
"isFrozen": false
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"queryDefinitionId": "549f0568-607c-4940-afef-437965094dae",
|
|
3
|
+
"name": "testQuery",
|
|
4
|
+
"key": "testQuery",
|
|
5
|
+
"description": "",
|
|
6
|
+
"queryText": "SELECT\n SubscriberKey as testField\nFROM\n _Subscribers ",
|
|
7
|
+
"targetName": "childBU_dataextension_test",
|
|
8
|
+
"targetKey": "childBU_dataextension_test",
|
|
9
|
+
"targetId": "30400c03-0ec4-ec11-b83c-48df37d1de8a",
|
|
10
|
+
"targetDescription": "",
|
|
11
|
+
"createdDate": "2022-04-26T15:21:16.453",
|
|
12
|
+
"modifiedDate": "2022-04-26T16:04:15.88",
|
|
13
|
+
"targetUpdateTypeId": 0,
|
|
14
|
+
"targetUpdateTypeName": "Overwrite",
|
|
15
|
+
"validatedQueryText": "SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;\r\n\r\nINSERT INTO C518001158.[testDataExtension] ([testField])\r\nSELECT querydef.[testField]\r\nFROM (SELECT SubscriberKey as testField FROM C518001158._Subscribers ) AS querydef \r\nSELECT @rcInsert = @@ROWCOUNT;;\r\n",
|
|
16
|
+
"categoryId": 999,
|
|
17
|
+
"isFrozen": false
|
|
18
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"CustomerKey": "childBU_dataextension_test",
|
|
3
|
+
"Name": "childBU_dataextension_test",
|
|
4
|
+
"Description": "Container for my test emails",
|
|
5
|
+
"IsSendable": true,
|
|
6
|
+
"IsTestable": true,
|
|
7
|
+
"SendableDataExtensionField": { "Name": "ContactKey" },
|
|
8
|
+
"SendableSubscriberField": { "Name": "Subscriber Key" },
|
|
9
|
+
"DataRetentionPeriodLength": 6,
|
|
10
|
+
"DataRetentionPeriodUnitOfMeasure": 5,
|
|
11
|
+
"RowBasedRetention": true,
|
|
12
|
+
"ResetRetentionPeriodOnImport": false,
|
|
13
|
+
"DeleteAtEndOfRetentionPeriod": false,
|
|
14
|
+
"RetainUntil": "",
|
|
15
|
+
"Fields": [
|
|
16
|
+
{
|
|
17
|
+
"Name": "FirstName",
|
|
18
|
+
"DefaultValue": "",
|
|
19
|
+
"MaxLength": 50,
|
|
20
|
+
"IsRequired": false,
|
|
21
|
+
"IsPrimaryKey": false,
|
|
22
|
+
"FieldType": "Text"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"Name": "LastName",
|
|
26
|
+
"DefaultValue": "",
|
|
27
|
+
"MaxLength": 50,
|
|
28
|
+
"IsRequired": false,
|
|
29
|
+
"IsPrimaryKey": false,
|
|
30
|
+
"FieldType": "Text"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"Name": "EmailAddress",
|
|
34
|
+
"DefaultValue": "",
|
|
35
|
+
"MaxLength": 254,
|
|
36
|
+
"IsRequired": true,
|
|
37
|
+
"IsPrimaryKey": false,
|
|
38
|
+
"FieldType": "EmailAddress"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"Name": "ContactKey",
|
|
42
|
+
"DefaultValue": "",
|
|
43
|
+
"MaxLength": 50,
|
|
44
|
+
"IsRequired": true,
|
|
45
|
+
"IsPrimaryKey": true,
|
|
46
|
+
"FieldType": "Text"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"r__folder_ContentType": "dataextension",
|
|
50
|
+
"r__folder_Path": "Data Extensions"
|
|
51
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"CustomerKey": "testDataExtension",
|
|
3
|
+
"Name": "testDataExtension",
|
|
4
|
+
"Description": "",
|
|
5
|
+
"IsSendable": false,
|
|
6
|
+
"IsTestable": false,
|
|
7
|
+
"RowBasedRetention": false,
|
|
8
|
+
"ResetRetentionPeriodOnImport": false,
|
|
9
|
+
"DeleteAtEndOfRetentionPeriod": false,
|
|
10
|
+
"RetainUntil": "",
|
|
11
|
+
"Fields": [
|
|
12
|
+
{
|
|
13
|
+
"Name": "testField",
|
|
14
|
+
"DefaultValue": "",
|
|
15
|
+
"MaxLength": 254,
|
|
16
|
+
"IsRequired": true,
|
|
17
|
+
"IsPrimaryKey": false,
|
|
18
|
+
"FieldType": "Text"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"r__folder_ContentType": "dataextension",
|
|
22
|
+
"r__folder_Path": "Data Extensions"
|
|
23
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
|
3
|
+
<soap:Header>
|
|
4
|
+
<wsa:Action>CreateResponse</wsa:Action>
|
|
5
|
+
<wsa:MessageID>urn:uuid:3a5f1edf-dacb-4d19-a0d3-4e0dcc9f507d</wsa:MessageID>
|
|
6
|
+
<wsa:RelatesTo>urn:uuid:fb395987-bf45-42d6-af73-f51816c7b73f</wsa:RelatesTo>
|
|
7
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
|
8
|
+
<wsse:Security>
|
|
9
|
+
<wsu:Timestamp wsu:Id="Timestamp-b5d88471-97ad-4070-a18f-4c148a52da96">
|
|
10
|
+
<wsu:Created>2022-04-24T20:35:10Z</wsu:Created>
|
|
11
|
+
<wsu:Expires>2022-04-24T20:40:10Z</wsu:Expires>
|
|
12
|
+
</wsu:Timestamp>
|
|
13
|
+
</wsse:Security>
|
|
14
|
+
</soap:Header>
|
|
15
|
+
<soap:Body>
|
|
16
|
+
<CreateResponse xmlns="http://exacttarget.com/wsdl/partnerAPI">
|
|
17
|
+
<Results>
|
|
18
|
+
<StatusCode>OK</StatusCode>
|
|
19
|
+
<StatusMessage>Data Extension created.</StatusMessage>
|
|
20
|
+
<OrdinalID>0</OrdinalID>
|
|
21
|
+
<NewID>0</NewID>
|
|
22
|
+
<NewObjectID>30400c03-0ec4-ec11-b83c-48df37d1de8a</NewObjectID>
|
|
23
|
+
<Object xsi:type="DataExtension">
|
|
24
|
+
<PartnerKey xsi:nil="true" />
|
|
25
|
+
<ObjectID>30400c03-0ec4-ec11-b83c-48df37d1de8a</ObjectID>
|
|
26
|
+
<CustomerKey>testDataExtension</CustomerKey>
|
|
27
|
+
<Name>testDataExtension</Name>
|
|
28
|
+
<Description />
|
|
29
|
+
<IsSendable>false</IsSendable>
|
|
30
|
+
<IsTestable>false</IsTestable>
|
|
31
|
+
<RowBasedRetention>false</RowBasedRetention>
|
|
32
|
+
<ResetRetentionPeriodOnImport>false</ResetRetentionPeriodOnImport>
|
|
33
|
+
<DeleteAtEndOfRetentionPeriod>false</DeleteAtEndOfRetentionPeriod>
|
|
34
|
+
<RetainUntil />
|
|
35
|
+
<Fields>
|
|
36
|
+
<Field>
|
|
37
|
+
<PartnerKey xsi:nil="true" />
|
|
38
|
+
<ObjectID xsi:nil="true" />
|
|
39
|
+
<Name>testField</Name>
|
|
40
|
+
<DefaultValue />
|
|
41
|
+
<MaxLength>254</MaxLength>
|
|
42
|
+
<IsRequired>true</IsRequired>
|
|
43
|
+
<IsPrimaryKey>false</IsPrimaryKey>
|
|
44
|
+
<FieldType>Text</FieldType>
|
|
45
|
+
</Field>
|
|
46
|
+
</Fields>
|
|
47
|
+
<CategoryID>2</CategoryID>
|
|
48
|
+
</Object>
|
|
49
|
+
</Results>
|
|
50
|
+
<RequestID>c41aa55a-90e3-4021-9f82-103796aae6da</RequestID>
|
|
51
|
+
<OverallStatus>OK</OverallStatus>
|
|
52
|
+
</CreateResponse>
|
|
53
|
+
</soap:Body>
|
|
54
|
+
</soap:Envelope>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"CustomerKey": "childBU_dataextension_test",
|
|
3
|
+
"Name": "childBU_dataextension_test",
|
|
4
|
+
"Description": "Container for my test emails",
|
|
5
|
+
"IsSendable": true,
|
|
6
|
+
"IsTestable": true,
|
|
7
|
+
"SendableDataExtensionField": { "Name": "ContactKey" },
|
|
8
|
+
"SendableSubscriberField": { "Name": "Subscriber Key" },
|
|
9
|
+
"DataRetentionPeriodLength": 6,
|
|
10
|
+
"DataRetentionPeriodUnitOfMeasure": 5,
|
|
11
|
+
"RowBasedRetention": true,
|
|
12
|
+
"ResetRetentionPeriodOnImport": false,
|
|
13
|
+
"DeleteAtEndOfRetentionPeriod": false,
|
|
14
|
+
"RetainUntil": "",
|
|
15
|
+
"Fields": [
|
|
16
|
+
{
|
|
17
|
+
"Name": "FirstName",
|
|
18
|
+
"DefaultValue": "",
|
|
19
|
+
"MaxLength": 50,
|
|
20
|
+
"IsRequired": false,
|
|
21
|
+
"IsPrimaryKey": false,
|
|
22
|
+
"FieldType": "Text"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"Name": "LastName",
|
|
26
|
+
"DefaultValue": "",
|
|
27
|
+
"MaxLength": 50,
|
|
28
|
+
"IsRequired": false,
|
|
29
|
+
"IsPrimaryKey": false,
|
|
30
|
+
"FieldType": "Text"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"Name": "EmailAddress",
|
|
34
|
+
"DefaultValue": "",
|
|
35
|
+
"MaxLength": 254,
|
|
36
|
+
"IsRequired": true,
|
|
37
|
+
"IsPrimaryKey": false,
|
|
38
|
+
"FieldType": "EmailAddress"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"Name": "ContactKey",
|
|
42
|
+
"DefaultValue": "",
|
|
43
|
+
"MaxLength": 50,
|
|
44
|
+
"IsRequired": true,
|
|
45
|
+
"IsPrimaryKey": true,
|
|
46
|
+
"FieldType": "Text"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"r__folder_ContentType": "dataextension",
|
|
50
|
+
"r__folder_Path": "Data Extensions"
|
|
51
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
|
3
|
+
<soap:Header>
|
|
4
|
+
<wsa:Action>RetrieveResponse</wsa:Action>
|
|
5
|
+
<wsa:MessageID>urn:uuid:c198cc12-c34c-4d1d-90b0-5b785a342efc</wsa:MessageID>
|
|
6
|
+
<wsa:RelatesTo>urn:uuid:a0506b59-1847-4405-8231-6a15e26bbcc9</wsa:RelatesTo>
|
|
7
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
|
8
|
+
<wsse:Security>
|
|
9
|
+
<wsu:Timestamp wsu:Id="Timestamp-52fe9187-6f22-4701-bd57-d0eaa4aef215">
|
|
10
|
+
<wsu:Created>2022-04-21T19:21:50Z</wsu:Created>
|
|
11
|
+
<wsu:Expires>2022-04-21T19:26:50Z</wsu:Expires>
|
|
12
|
+
</wsu:Timestamp>
|
|
13
|
+
</wsse:Security>
|
|
14
|
+
</soap:Header>
|
|
15
|
+
<soap:Body>
|
|
16
|
+
<RetrieveResponseMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
|
|
17
|
+
<OverallStatus>OK</OverallStatus>
|
|
18
|
+
<RequestID>d175de6e-c8e4-4f5d-9c1d-ad64426ff4b7</RequestID>
|
|
19
|
+
<Results xsi:type="DataExtension">
|
|
20
|
+
<PartnerKey xsi:nil="true" />
|
|
21
|
+
<CreatedDate>2022-04-21T06:56:27.927</CreatedDate>
|
|
22
|
+
<ModifiedDate>2022-04-21T06:56:27.927</ModifiedDate>
|
|
23
|
+
<ObjectID>21711373-72c1-ec11-b83b-48df37d1deb7</ObjectID>
|
|
24
|
+
<CustomerKey>childBU_dataextension_test</CustomerKey>
|
|
25
|
+
<Name>childBU_dataextension_test</Name>
|
|
26
|
+
<Description>Container for my test emails</Description>
|
|
27
|
+
<IsSendable>true</IsSendable>
|
|
28
|
+
<IsTestable>true</IsTestable>
|
|
29
|
+
<SendableDataExtensionField>
|
|
30
|
+
<PartnerKey xsi:nil="true" />
|
|
31
|
+
<ObjectID xsi:nil="true" />
|
|
32
|
+
<Name>ContactKey</Name>
|
|
33
|
+
</SendableDataExtensionField>
|
|
34
|
+
<SendableSubscriberField>
|
|
35
|
+
<Name>_SubscriberKey</Name>
|
|
36
|
+
</SendableSubscriberField>
|
|
37
|
+
<DataRetentionPeriodLength>6</DataRetentionPeriodLength>
|
|
38
|
+
<DataRetentionPeriodUnitOfMeasure>5</DataRetentionPeriodUnitOfMeasure>
|
|
39
|
+
<RowBasedRetention>true</RowBasedRetention>
|
|
40
|
+
<ResetRetentionPeriodOnImport>false</ResetRetentionPeriodOnImport>
|
|
41
|
+
<DeleteAtEndOfRetentionPeriod>false</DeleteAtEndOfRetentionPeriod>
|
|
42
|
+
<RetainUntil />
|
|
43
|
+
<CategoryID>2</CategoryID>
|
|
44
|
+
</Results>
|
|
45
|
+
</RetrieveResponseMsg>
|
|
46
|
+
</soap:Body>
|
|
47
|
+
</soap:Envelope>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"CustomerKey": "childBU_dataextension{{{suffix}}}",
|
|
3
|
+
"Name": "childBU_dataextension{{{suffix}}}",
|
|
4
|
+
"Description": "Container for my test emails",
|
|
5
|
+
"IsSendable": true,
|
|
6
|
+
"IsTestable": true,
|
|
7
|
+
"SendableDataExtensionField": { "Name": "ContactKey" },
|
|
8
|
+
"SendableSubscriberField": { "Name": "Subscriber Key" },
|
|
9
|
+
"DataRetentionPeriodLength": 6,
|
|
10
|
+
"DataRetentionPeriodUnitOfMeasure": 5,
|
|
11
|
+
"RowBasedRetention": true,
|
|
12
|
+
"ResetRetentionPeriodOnImport": false,
|
|
13
|
+
"DeleteAtEndOfRetentionPeriod": false,
|
|
14
|
+
"RetainUntil": "",
|
|
15
|
+
"Fields": [
|
|
16
|
+
{
|
|
17
|
+
"Name": "FirstName",
|
|
18
|
+
"DefaultValue": "",
|
|
19
|
+
"MaxLength": 50,
|
|
20
|
+
"IsRequired": false,
|
|
21
|
+
"IsPrimaryKey": false,
|
|
22
|
+
"FieldType": "Text"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"Name": "LastName",
|
|
26
|
+
"DefaultValue": "",
|
|
27
|
+
"MaxLength": 50,
|
|
28
|
+
"IsRequired": false,
|
|
29
|
+
"IsPrimaryKey": false,
|
|
30
|
+
"FieldType": "Text"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"Name": "EmailAddress",
|
|
34
|
+
"DefaultValue": "",
|
|
35
|
+
"MaxLength": 254,
|
|
36
|
+
"IsRequired": true,
|
|
37
|
+
"IsPrimaryKey": false,
|
|
38
|
+
"FieldType": "EmailAddress"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"Name": "ContactKey",
|
|
42
|
+
"DefaultValue": "",
|
|
43
|
+
"MaxLength": 50,
|
|
44
|
+
"IsRequired": true,
|
|
45
|
+
"IsPrimaryKey": true,
|
|
46
|
+
"FieldType": "Text"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"r__folder_ContentType": "dataextension",
|
|
50
|
+
"r__folder_Path": "Data Extensions"
|
|
51
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"CustomerKey": "childBU_dataextension_test",
|
|
3
|
+
"Name": "childBU_dataextension_test",
|
|
4
|
+
"Description": "",
|
|
5
|
+
"IsSendable": false,
|
|
6
|
+
"IsTestable": false,
|
|
7
|
+
"RowBasedRetention": true,
|
|
8
|
+
"ResetRetentionPeriodOnImport": false,
|
|
9
|
+
"DeleteAtEndOfRetentionPeriod": false,
|
|
10
|
+
"RetainUntil": "",
|
|
11
|
+
"Fields": [
|
|
12
|
+
{
|
|
13
|
+
"Name": "FirstName",
|
|
14
|
+
"DefaultValue": "",
|
|
15
|
+
"MaxLength": 50,
|
|
16
|
+
"IsRequired": false,
|
|
17
|
+
"IsPrimaryKey": false,
|
|
18
|
+
"FieldType": "Text"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"Name": "LastName",
|
|
22
|
+
"DefaultValue": "",
|
|
23
|
+
"MaxLength": 55,
|
|
24
|
+
"IsRequired": false,
|
|
25
|
+
"IsPrimaryKey": false,
|
|
26
|
+
"FieldType": "Text"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"Name": "EmailAddress",
|
|
30
|
+
"DefaultValue": "",
|
|
31
|
+
"MaxLength": 254,
|
|
32
|
+
"IsRequired": true,
|
|
33
|
+
"IsPrimaryKey": false,
|
|
34
|
+
"FieldType": "EmailAddress"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"Name": "ContactKey",
|
|
38
|
+
"DefaultValue": "",
|
|
39
|
+
"MaxLength": 50,
|
|
40
|
+
"IsRequired": true,
|
|
41
|
+
"IsPrimaryKey": true,
|
|
42
|
+
"FieldType": "Text"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"Name": "testField",
|
|
46
|
+
"DefaultValue": "",
|
|
47
|
+
"MaxLength": 254,
|
|
48
|
+
"IsRequired": false,
|
|
49
|
+
"IsPrimaryKey": false,
|
|
50
|
+
"FieldType": "Text"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"r__folder_ContentType": "dataextension",
|
|
54
|
+
"r__folder_Path": "Data Extensions"
|
|
55
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
|
3
|
+
<soap:Header>
|
|
4
|
+
<wsa:Action>UpdateResponse</wsa:Action>
|
|
5
|
+
<wsa:MessageID>urn:uuid:994e213d-1125-450d-b187-32e3870147d1</wsa:MessageID>
|
|
6
|
+
<wsa:RelatesTo>urn:uuid:f1fc86ef-c0c8-4c17-a901-a15fc2631f76</wsa:RelatesTo>
|
|
7
|
+
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
|
|
8
|
+
<wsse:Security>
|
|
9
|
+
<wsu:Timestamp wsu:Id="Timestamp-88cf0bce-bf0f-4d5f-90a6-2897708181b5">
|
|
10
|
+
<wsu:Created>2022-04-26T20:49:03Z</wsu:Created>
|
|
11
|
+
<wsu:Expires>2022-04-26T20:54:03Z</wsu:Expires>
|
|
12
|
+
</wsu:Timestamp>
|
|
13
|
+
</wsse:Security>
|
|
14
|
+
</soap:Header>
|
|
15
|
+
<soap:Body>
|
|
16
|
+
<UpdateResponse xmlns="http://exacttarget.com/wsdl/partnerAPI">
|
|
17
|
+
<Results>
|
|
18
|
+
<StatusCode>OK</StatusCode>
|
|
19
|
+
<StatusMessage>Data Extension updated.</StatusMessage>
|
|
20
|
+
<OrdinalID>0</OrdinalID>
|
|
21
|
+
<Object xsi:type="DataExtension">
|
|
22
|
+
<PartnerKey xsi:nil="true" />
|
|
23
|
+
<ObjectID>30400c03-0ec4-ec11-b83c-48df37d1de8b</ObjectID>
|
|
24
|
+
<CustomerKey>childBU_dataextension_test</CustomerKey>
|
|
25
|
+
<Name>childBU_dataextension_test</Name>
|
|
26
|
+
<Description />
|
|
27
|
+
<IsSendable>false</IsSendable>
|
|
28
|
+
<IsTestable>false</IsTestable>
|
|
29
|
+
<RowBasedRetention>false</RowBasedRetention>
|
|
30
|
+
<ResetRetentionPeriodOnImport>false</ResetRetentionPeriodOnImport>
|
|
31
|
+
<DeleteAtEndOfRetentionPeriod>false</DeleteAtEndOfRetentionPeriod>
|
|
32
|
+
<RetainUntil />
|
|
33
|
+
<Fields>
|
|
34
|
+
<Field>
|
|
35
|
+
<PartnerKey xsi:nil="true" />
|
|
36
|
+
<ObjectID xsi:nil="true" />
|
|
37
|
+
<Name>testField</Name>
|
|
38
|
+
<DefaultValue />
|
|
39
|
+
<MaxLength>254</MaxLength>
|
|
40
|
+
<IsRequired>true</IsRequired>
|
|
41
|
+
<IsPrimaryKey>false</IsPrimaryKey>
|
|
42
|
+
<FieldType>Text</FieldType>
|
|
43
|
+
</Field>
|
|
44
|
+
</Fields>
|
|
45
|
+
<CategoryID>2</CategoryID>
|
|
46
|
+
</Object>
|
|
47
|
+
</Results>
|
|
48
|
+
<RequestID>dbfedcb6-a809-4101-b314-a7b920c9fb1e</RequestID>
|
|
49
|
+
<OverallStatus>OK</OverallStatus>
|
|
50
|
+
</UpdateResponse>
|
|
51
|
+
</soap:Body>
|
|
52
|
+
</soap:Envelope>
|