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
|
@@ -1,41 +1,47 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const TYPE = require('../../types/mcdev.d');
|
|
3
4
|
const MetadataType = require('./MetadataType');
|
|
4
5
|
const Util = require('../util/util');
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* ImportFile MetadataType
|
|
9
|
+
*
|
|
8
10
|
* @augments MetadataType
|
|
9
11
|
*/
|
|
10
12
|
class Discovery extends MetadataType {
|
|
11
13
|
/**
|
|
12
14
|
* Retrieves API endpoint
|
|
13
15
|
* documentation: https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/routes.htm
|
|
14
|
-
*
|
|
15
|
-
* @param {
|
|
16
|
-
* @param {
|
|
17
|
-
* @
|
|
16
|
+
*
|
|
17
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
18
|
+
* @param {void} [_] not used
|
|
19
|
+
* @param {TYPE.BuObject} buObject properties for auth
|
|
20
|
+
* @param {void} [___] unused parameter
|
|
21
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
22
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
18
23
|
*/
|
|
19
|
-
static async retrieve(retrieveDir, _, buObject) {
|
|
24
|
+
static async retrieve(retrieveDir, _, buObject, ___, key) {
|
|
25
|
+
if (key) {
|
|
26
|
+
Util.logger.error('Discovery.retrieve() does not support key parameter');
|
|
27
|
+
}
|
|
20
28
|
if (buObject.eid !== buObject.mid) {
|
|
21
29
|
// don't run for BUs other than Parent BU
|
|
22
|
-
Util.logger.warn('Skipping Discovery retrieval on non-parent BU');
|
|
30
|
+
Util.logger.warn(' - Skipping Discovery retrieval on non-parent BU');
|
|
23
31
|
return;
|
|
24
32
|
} else {
|
|
25
|
-
const res = await
|
|
26
|
-
Object.keys(this.definition.endPointMapping).map(
|
|
27
|
-
this.
|
|
28
|
-
uri: this.definition.endPointMapping[endpoint],
|
|
29
|
-
headers: {},
|
|
30
|
-
})
|
|
33
|
+
const res = await this.client.rest.getCollection(
|
|
34
|
+
Object.keys(this.definition.endPointMapping).map(
|
|
35
|
+
(endpoint) => this.definition.endPointMapping[endpoint]
|
|
31
36
|
)
|
|
32
37
|
);
|
|
38
|
+
|
|
33
39
|
const metadataStructure = {};
|
|
34
40
|
for (const [i, v] of res.entries()) {
|
|
35
|
-
v.
|
|
36
|
-
metadataStructure[v.
|
|
41
|
+
v.key = Object.keys(this.definition.endPointMapping)[i];
|
|
42
|
+
metadataStructure[v.key] = v;
|
|
37
43
|
}
|
|
38
|
-
await
|
|
44
|
+
await super.saveResults(metadataStructure, retrieveDir, null);
|
|
39
45
|
Util.logger.info('Downloaded: ' + this.definition.type);
|
|
40
46
|
return { metadata: metadataStructure, type: this.definition.type };
|
|
41
47
|
}
|
|
@@ -44,6 +50,5 @@ class Discovery extends MetadataType {
|
|
|
44
50
|
|
|
45
51
|
// Assign definition to static attributes
|
|
46
52
|
Discovery.definition = require('../MetadataTypeDefinitions').discovery;
|
|
47
|
-
Discovery.client = undefined;
|
|
48
53
|
|
|
49
54
|
module.exports = Discovery;
|
|
@@ -1,43 +1,63 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const TYPE = require('../../types/mcdev.d');
|
|
3
4
|
const MetadataType = require('./MetadataType');
|
|
4
5
|
const Util = require('../util/util');
|
|
6
|
+
const cache = require('../util/cache');
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Email MetadataType
|
|
10
|
+
*
|
|
8
11
|
* @augments MetadataType
|
|
9
12
|
*/
|
|
10
13
|
class Email extends MetadataType {
|
|
11
14
|
/**
|
|
12
15
|
* Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
|
|
13
|
-
*
|
|
14
|
-
* @
|
|
16
|
+
*
|
|
17
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
18
|
+
* @param {void} [_] unused parameter
|
|
19
|
+
* @param {void} [__] unused parameter
|
|
20
|
+
* @param {void} [___] unused parameter
|
|
21
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
22
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
15
23
|
*/
|
|
16
|
-
static retrieve(retrieveDir) {
|
|
24
|
+
static retrieve(retrieveDir, _, __, ___, key) {
|
|
17
25
|
Util.logger.warn(
|
|
18
|
-
'Classic E-Mails are deprecated and will be discontinued by SFMC in the near future. Ensure that you migrate any existing E-Mails to Content Builder as soon as possible.'
|
|
26
|
+
' - Classic E-Mails are deprecated and will be discontinued by SFMC in the near future. Ensure that you migrate any existing E-Mails to Content Builder as soon as possible.'
|
|
19
27
|
);
|
|
28
|
+
/** @type {TYPE.SoapRequestParams} */
|
|
29
|
+
let requestParams = null;
|
|
30
|
+
if (key) {
|
|
31
|
+
requestParams = {
|
|
32
|
+
filter: {
|
|
33
|
+
leftOperand: 'CustomerKey',
|
|
34
|
+
operator: 'equals',
|
|
35
|
+
rightOperand: key,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
20
39
|
// !dont activate `await File.initPrettier('html');` as we only want to retrieve for migration and formatting might mess with the outcome
|
|
21
|
-
return super.
|
|
40
|
+
return super.retrieveSOAP(retrieveDir, null, requestParams);
|
|
22
41
|
}
|
|
23
42
|
/**
|
|
24
43
|
* manages post retrieve steps
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
44
|
+
*
|
|
45
|
+
* @param {TYPE.MetadataTypeItem} metadata a single query
|
|
46
|
+
* @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string
|
|
27
47
|
*/
|
|
28
48
|
static postRetrieveTasks(metadata) {
|
|
29
49
|
return this.parseMetadata(metadata);
|
|
30
50
|
}
|
|
31
51
|
/**
|
|
32
52
|
* parses retrieved Metadata before saving
|
|
33
|
-
*
|
|
34
|
-
* @
|
|
53
|
+
*
|
|
54
|
+
* @param {TYPE.MetadataTypeItem} metadata a single query activity definition
|
|
55
|
+
* @returns {TYPE.MetadataTypeItem} Array with one metadata object and one sql string
|
|
35
56
|
*/
|
|
36
57
|
static parseMetadata(metadata) {
|
|
37
58
|
// folder
|
|
38
59
|
try {
|
|
39
|
-
metadata.r__folder_Path =
|
|
40
|
-
this.cache,
|
|
60
|
+
metadata.r__folder_Path = cache.searchForField(
|
|
41
61
|
'folder',
|
|
42
62
|
metadata.CategoryID,
|
|
43
63
|
'ID',
|
|
@@ -46,7 +66,7 @@ class Email extends MetadataType {
|
|
|
46
66
|
delete metadata.CategoryID;
|
|
47
67
|
} catch (ex) {
|
|
48
68
|
Util.logger.warn(
|
|
49
|
-
`Classic E-Mail '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
|
|
69
|
+
` - Classic E-Mail '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
|
|
50
70
|
);
|
|
51
71
|
}
|
|
52
72
|
|
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const TYPE = require('../../types/mcdev.d');
|
|
3
4
|
const MetadataType = require('./MetadataType');
|
|
4
5
|
const Util = require('../util/util');
|
|
6
|
+
const cache = require('../util/cache');
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* MessageSendActivity MetadataType
|
|
10
|
+
*
|
|
8
11
|
* @augments MetadataType
|
|
9
12
|
*/
|
|
10
13
|
class EmailSendDefinition extends MetadataType {
|
|
11
14
|
/**
|
|
12
15
|
* Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
|
|
13
|
-
*
|
|
14
|
-
* @param {
|
|
15
|
-
* @param {
|
|
16
|
-
* @
|
|
16
|
+
*
|
|
17
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
18
|
+
* @param {void} [_] unused parameter
|
|
19
|
+
* @param {void} [__] unused parameter
|
|
20
|
+
* @param {void} [___] unused parameter
|
|
21
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
22
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
17
23
|
*/
|
|
18
|
-
static retrieve(retrieveDir, _,
|
|
19
|
-
|
|
24
|
+
static retrieve(retrieveDir, _, __, ___, key) {
|
|
25
|
+
/** @type {TYPE.SoapRequestParams} */
|
|
26
|
+
let requestParams = {
|
|
20
27
|
filter: {
|
|
21
28
|
leftOperand: {
|
|
22
29
|
// somehow that parameter controls visible (non deleted?) email send activities
|
|
@@ -32,12 +39,27 @@ class EmailSendDefinition extends MetadataType {
|
|
|
32
39
|
},
|
|
33
40
|
},
|
|
34
41
|
};
|
|
35
|
-
|
|
42
|
+
if (key) {
|
|
43
|
+
// move original filter down one level into rightOperand and add key filter into leftOperand
|
|
44
|
+
requestParams = {
|
|
45
|
+
filter: {
|
|
46
|
+
leftOperand: {
|
|
47
|
+
leftOperand: 'CustomerKey',
|
|
48
|
+
operator: 'equals',
|
|
49
|
+
rightOperand: key,
|
|
50
|
+
},
|
|
51
|
+
operator: 'AND',
|
|
52
|
+
rightOperand: requestParams.filter,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return super.retrieveSOAP(retrieveDir, null, requestParams);
|
|
36
57
|
}
|
|
37
58
|
|
|
38
59
|
/**
|
|
39
60
|
* Updates a single item
|
|
40
|
-
*
|
|
61
|
+
*
|
|
62
|
+
* @param {TYPE.MetadataTypeItem} metadataItem a single item
|
|
41
63
|
* @returns {Promise} Promise
|
|
42
64
|
*/
|
|
43
65
|
static update(metadataItem) {
|
|
@@ -46,62 +68,54 @@ class EmailSendDefinition extends MetadataType {
|
|
|
46
68
|
|
|
47
69
|
/**
|
|
48
70
|
* Creates a single item
|
|
49
|
-
*
|
|
71
|
+
*
|
|
72
|
+
* @param {TYPE.MetadataTypeItem} metadataItem a single item
|
|
50
73
|
* @returns {Promise} Promise
|
|
51
74
|
*/
|
|
52
75
|
static create(metadataItem) {
|
|
53
76
|
return super.createSOAP(metadataItem);
|
|
54
77
|
}
|
|
55
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Delete a metadata item from the specified business unit
|
|
81
|
+
*
|
|
82
|
+
* @param {TYPE.BuObject} buObject references credentials
|
|
83
|
+
* @param {string} customerKey Identifier of data extension
|
|
84
|
+
* @returns {Promise.<boolean>} deletion success status
|
|
85
|
+
*/
|
|
86
|
+
static deleteByKey(buObject, customerKey) {
|
|
87
|
+
return super.deleteByKeySOAP(buObject, customerKey, false);
|
|
88
|
+
}
|
|
89
|
+
|
|
56
90
|
/**
|
|
57
91
|
* prepares a single item for deployment
|
|
58
|
-
*
|
|
59
|
-
* @
|
|
92
|
+
*
|
|
93
|
+
* @param {TYPE.MetadataTypeItem} metadata a single script activity definition
|
|
94
|
+
* @returns {Promise.<TYPE.MetadataTypeItem>} Promise
|
|
60
95
|
*/
|
|
61
96
|
static async preDeployTasks(metadata) {
|
|
62
97
|
// re-add IsPlatformObject, required for visibility
|
|
63
98
|
metadata.IsPlatformObject = false;
|
|
64
99
|
// folder
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
this.cache,
|
|
68
|
-
'folder',
|
|
69
|
-
metadata.r__folder_Path,
|
|
70
|
-
'Path',
|
|
71
|
-
'ID'
|
|
72
|
-
);
|
|
73
|
-
delete metadata.r__folder_Path;
|
|
74
|
-
} catch (ex) {
|
|
75
|
-
Util.logger.error(`${this.definition.typeName} '${metadata.key}': ${ex.message}`);
|
|
76
|
-
}
|
|
100
|
+
metadata.CategoryID = cache.searchForField('folder', metadata.r__folder_Path, 'Path', 'ID');
|
|
101
|
+
delete metadata.r__folder_Path;
|
|
77
102
|
// email
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
this.cache,
|
|
95
|
-
'asset',
|
|
96
|
-
metadata.r__assetMessage_Key,
|
|
97
|
-
'customerKey',
|
|
98
|
-
'legacyData.legacyId'
|
|
99
|
-
);
|
|
100
|
-
delete metadata.r__assetMessage_Key;
|
|
101
|
-
delete metadata.r__assetMessage_Name;
|
|
102
|
-
}
|
|
103
|
-
} catch (ex) {
|
|
104
|
-
Util.logger.error(`${this.definition.typeName} '${metadata.key}': ${ex.message}`);
|
|
103
|
+
metadata.Email = {};
|
|
104
|
+
if (metadata.r__email_Name) {
|
|
105
|
+
// classic
|
|
106
|
+
metadata.Email.ID = cache.searchForField('email', metadata.r__email_Name, 'Name', 'ID');
|
|
107
|
+
delete metadata.r__email_Name;
|
|
108
|
+
} else if (metadata.r__assetMessage_Key) {
|
|
109
|
+
// content builder
|
|
110
|
+
// * this ignores r__assetMessage_Name on purpose as that is only unique per parent folder but useful during PR reviews
|
|
111
|
+
metadata.Email.ID = cache.searchForField(
|
|
112
|
+
'asset',
|
|
113
|
+
metadata.r__assetMessage_Key,
|
|
114
|
+
'customerKey',
|
|
115
|
+
'legacyData.legacyId'
|
|
116
|
+
);
|
|
117
|
+
delete metadata.r__assetMessage_Key;
|
|
118
|
+
delete metadata.r__assetMessage_Name;
|
|
105
119
|
}
|
|
106
120
|
// Target Audience DataExtension
|
|
107
121
|
// normalize first because this can be an array
|
|
@@ -121,8 +135,7 @@ class EmailSendDefinition extends MetadataType {
|
|
|
121
135
|
`Skipping ${metadata.Name} (${metadata.CustomerKey}): Expecting DataSourceTypeID to equal 'CustomObject' when r__dataExtension_Key is defined; Found '${sdl.DataSourceTypeID}'`
|
|
122
136
|
);
|
|
123
137
|
}
|
|
124
|
-
sdl.CustomObjectID =
|
|
125
|
-
this.cache,
|
|
138
|
+
sdl.CustomObjectID = cache.searchForField(
|
|
126
139
|
'dataExtension',
|
|
127
140
|
sdl.r__dataExtension_Key,
|
|
128
141
|
'CustomerKey',
|
|
@@ -137,7 +150,7 @@ class EmailSendDefinition extends MetadataType {
|
|
|
137
150
|
// get List (required)
|
|
138
151
|
if (sdl.r__list_PathName) {
|
|
139
152
|
sdl.List = {
|
|
140
|
-
ID:
|
|
153
|
+
ID: cache.getListObjectId(sdl.r__list_PathName, 'ID'),
|
|
141
154
|
};
|
|
142
155
|
delete sdl.r__list_PathName;
|
|
143
156
|
} else {
|
|
@@ -152,24 +165,25 @@ class EmailSendDefinition extends MetadataType {
|
|
|
152
165
|
|
|
153
166
|
/**
|
|
154
167
|
* manages post retrieve steps
|
|
155
|
-
*
|
|
156
|
-
* @
|
|
168
|
+
*
|
|
169
|
+
* @param {TYPE.MetadataTypeItem} metadata a single query
|
|
170
|
+
* @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string
|
|
157
171
|
*/
|
|
158
172
|
static postRetrieveTasks(metadata) {
|
|
159
173
|
return this.parseMetadata(metadata);
|
|
160
174
|
}
|
|
161
175
|
/**
|
|
162
176
|
* parses retrieved Metadata before saving
|
|
163
|
-
*
|
|
164
|
-
* @
|
|
177
|
+
*
|
|
178
|
+
* @param {TYPE.MetadataTypeItem} metadata a single query activity definition
|
|
179
|
+
* @returns {TYPE.MetadataTypeItem} Array with one metadata object and one sql string
|
|
165
180
|
*/
|
|
166
181
|
static parseMetadata(metadata) {
|
|
167
182
|
// remove IsPlatformObject, always has to be 'false'
|
|
168
183
|
delete metadata.IsPlatformObject;
|
|
169
184
|
// folder
|
|
170
185
|
try {
|
|
171
|
-
metadata.r__folder_Path =
|
|
172
|
-
this.cache,
|
|
186
|
+
metadata.r__folder_Path = cache.searchForField(
|
|
173
187
|
'folder',
|
|
174
188
|
metadata.CategoryID,
|
|
175
189
|
'ID',
|
|
@@ -178,34 +192,26 @@ class EmailSendDefinition extends MetadataType {
|
|
|
178
192
|
delete metadata.CategoryID;
|
|
179
193
|
} catch (ex) {
|
|
180
194
|
Util.logger.warn(
|
|
181
|
-
|
|
195
|
+
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
|
|
182
196
|
);
|
|
183
197
|
}
|
|
184
198
|
// email
|
|
185
199
|
try {
|
|
186
200
|
// classic
|
|
187
|
-
const classicEmail =
|
|
188
|
-
this.cache,
|
|
189
|
-
'email',
|
|
190
|
-
metadata.Email.ID,
|
|
191
|
-
'ID',
|
|
192
|
-
'Name'
|
|
193
|
-
);
|
|
201
|
+
const classicEmail = cache.searchForField('email', metadata.Email.ID, 'ID', 'Name');
|
|
194
202
|
metadata.r__email_Name = classicEmail;
|
|
195
203
|
delete metadata.Email;
|
|
196
|
-
} catch
|
|
204
|
+
} catch {
|
|
197
205
|
try {
|
|
198
206
|
// content builder
|
|
199
|
-
const contentBuilderEmailName =
|
|
200
|
-
this.cache,
|
|
207
|
+
const contentBuilderEmailName = cache.searchForField(
|
|
201
208
|
'asset',
|
|
202
209
|
metadata.Email.ID,
|
|
203
210
|
'legacyData.legacyId',
|
|
204
211
|
'name'
|
|
205
212
|
);
|
|
206
213
|
metadata.r__assetMessage_Name = contentBuilderEmailName;
|
|
207
|
-
const contentBuilderEmailKey =
|
|
208
|
-
this.cache,
|
|
214
|
+
const contentBuilderEmailKey = cache.searchForField(
|
|
209
215
|
'asset',
|
|
210
216
|
metadata.Email.ID,
|
|
211
217
|
'legacyData.legacyId',
|
|
@@ -213,9 +219,9 @@ class EmailSendDefinition extends MetadataType {
|
|
|
213
219
|
);
|
|
214
220
|
metadata.r__assetMessage_Key = contentBuilderEmailKey;
|
|
215
221
|
delete metadata.Email;
|
|
216
|
-
} catch
|
|
222
|
+
} catch {
|
|
217
223
|
Util.logger.warn(
|
|
218
|
-
|
|
224
|
+
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find email with ID ${metadata.Email.ID} in Classic nor in Content Builder.`
|
|
219
225
|
);
|
|
220
226
|
}
|
|
221
227
|
}
|
|
@@ -231,27 +237,26 @@ class EmailSendDefinition extends MetadataType {
|
|
|
231
237
|
// get DataExtension keys
|
|
232
238
|
if (sdl.CustomObjectID) {
|
|
233
239
|
try {
|
|
234
|
-
sdl.r__dataExtension_Key =
|
|
235
|
-
this.cache,
|
|
240
|
+
sdl.r__dataExtension_Key = cache.searchForField(
|
|
236
241
|
'dataExtension',
|
|
237
242
|
sdl.CustomObjectID,
|
|
238
243
|
'ObjectID',
|
|
239
244
|
'CustomerKey'
|
|
240
245
|
);
|
|
241
246
|
delete sdl.CustomObjectID;
|
|
242
|
-
} catch
|
|
247
|
+
} catch {
|
|
243
248
|
Util.logger.warn(
|
|
244
|
-
|
|
249
|
+
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find Target Audience (DataExtension) with ObjectID ${sdl.CustomObjectID}.`
|
|
245
250
|
);
|
|
246
251
|
}
|
|
247
252
|
}
|
|
248
253
|
// List
|
|
249
254
|
try {
|
|
250
|
-
sdl.r__list_PathName =
|
|
255
|
+
sdl.r__list_PathName = cache.getListPathName(sdl.List.ID, 'ID');
|
|
251
256
|
delete sdl.List;
|
|
252
257
|
} catch (ex) {
|
|
253
258
|
Util.logger.warn(
|
|
254
|
-
|
|
259
|
+
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
|
|
255
260
|
);
|
|
256
261
|
}
|
|
257
262
|
}
|