Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
efbfce9
#9 first draft at adding filter definitions
JoernBerkefeld Apr 12, 2021
7b1208d
Merge branch 'develop' into feature/i9-Add-support-for-filterDefiniti…
JoernBerkefeld Jan 14, 2022
e6a80f9
Merge branch 'develop' into feature/9-Add-filterDefinition-&-resolve-…
JoernBerkefeld Apr 14, 2022
d4a0e53
#9: make branch ready for 4.0.0 release
JoernBerkefeld Apr 17, 2022
7c41b1b
Merge branch 'develop' into feature/9-Add-filterDefinition-&-resolve-…
JoernBerkefeld Apr 19, 2022
2fb794e
Merge branch 'develop' into feature/9-Add-filterDefinition-&-resolve-…
JoernBerkefeld Apr 22, 2022
ba2ff2b
Merge branch 'develop' into feature/9-Add-filterDefinition-&-resolve-…
JoernBerkefeld May 7, 2022
9de5793
Merge branch 'feature/310-add-optional-key-parameter-to-deploy' into …
JoernBerkefeld May 18, 2022
9687068
Merge branch 'develop' into feature/9-Add-filterDefinition-&-resolve-…
JoernBerkefeld Jul 5, 2022
11c0341
Merge branch 'develop' into feature/9-Add-filterDefinition-&-resolve-…
JoernBerkefeld Dec 15, 2022
9aa53bf
Merge branch 'develop' into feature/9-Add-filterDefinition-&-resolve-…
JoernBerkefeld Aug 28, 2023
0e519db
#9: ran lint:fix
JoernBerkefeld Aug 29, 2023
a742713
#9: improve retrieve filterDefinition
JoernBerkefeld Aug 29, 2023
15548a6
#9: switch to folder-based collection retrieve; resolve all filterDef…
JoernBerkefeld Aug 30, 2023
8cb78b0
#9: make filters available to type automation
JoernBerkefeld Aug 30, 2023
45f8657
#325: save notificationEmailAddress as array of emails to enhance UX
JoernBerkefeld Aug 30, 2023
d962bab
Merge branch 'develop' into feature/9-Add-filterDefinition-&-resolve-…
JoernBerkefeld Aug 30, 2023
e0a4655
#325: adapt tests to change in 45f8657ba77f75fa8f5f9f7d74b7dad9dc9d02cb
JoernBerkefeld Aug 30, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
342 changes: 340 additions & 2 deletions docs/dist/documentation.md

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions lib/MetadataTypeDefinitions.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ const MetadataTypeDefinitions = {
fileLocation: require('./metadataTypes/definitions/FileLocation.definition'),
fileTransfer: require('./metadataTypes/definitions/FileTransfer.definition'),
filter: require('./metadataTypes/definitions/Filter.definition'),
filterDefinition: require('./metadataTypes/definitions/FilterDefinition.definition'),
filterDefinitionHidden: require('./metadataTypes/definitions/FilterDefinitionHidden.definition'),
folder: require('./metadataTypes/definitions/Folder.definition'),
importFile: require('./metadataTypes/definitions/ImportFile.definition'),
journey: require('./metadataTypes/definitions/Journey.definition'),
Expand Down
2 changes: 2 additions & 0 deletions lib/MetadataTypeInfo.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ const MetadataTypeInfo = {
fileLocation: require('./metadataTypes/FileLocation'),
fileTransfer: require('./metadataTypes/FileTransfer'),
filter: require('./metadataTypes/Filter'),
filterDefinition: require('./metadataTypes/FilterDefinition'),
filterDefinitionHidden: require('./metadataTypes/FilterDefinitionHidden'),
folder: require('./metadataTypes/Folder'),
importFile: require('./metadataTypes/ImportFile'),
journey: require('./metadataTypes/Journey'),
Expand Down
2 changes: 1 addition & 1 deletion lib/metadataTypes/DataExtension.js
Original file line number Diff line number Diff line change
Expand Up @@ -1341,7 +1341,7 @@ class DataExtension extends MetadataType {
* @returns {Promise.<{metadata: TYPE.DataExtensionMap, type: string}>} Promise
*/
static async retrieveForCache() {
return this.retrieve(null, ['ObjectID', 'CustomerKey', 'Name'], this.buObject, null, null);
return this.retrieve(null, ['ObjectID', 'CustomerKey', 'Name']);
}
/**
* Retrieves dataExtension metadata in template format.
Expand Down
179 changes: 178 additions & 1 deletion lib/metadataTypes/Filter.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

const TYPE = require('../../types/mcdev.d');
const MetadataType = require('./MetadataType');
const Util = require('../util/util');
const cache = require('../util/cache');

const dataTypes = {
1: 'List',
2: 'DataExtension',
3: 'Group Wizard',
4: 'Behavioral Data',
};

/**
* Filter MetadataType
Expand All @@ -19,11 +28,179 @@ class Filter extends MetadataType {
* @param {void} [_] unused parameter
* @param {void} [__] unused parameter
* @param {string} [key] customer key of single item to retrieve
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
* @returns {Promise.<{metadata: TYPE.FilterMap, type: string}>} Promise of items
*/
static async retrieve(retrieveDir, _, __, key) {
return super.retrieveREST(retrieveDir, '/automation/v1/filters/', null, key);
}
/**
* parses retrieved Metadata before saving
*
* @param {TYPE.FilterItem} metadata a single record
* @returns {TYPE.FilterItem} parsed metadata definition
*/
static postRetrieveTasks(metadata) {
// folder
this.setFolderPath(metadata);

try {
// filterDefinition
metadata.r__filterDefinition_CustomerKey = cache.searchForField(
'filterDefinition',
metadata.filterDefinitionId,
'id',
'key'
);
delete metadata.filterDefinitionId;
} catch {
try {
// filterDefinition
metadata.r__filterDefinition_CustomerKey = cache.searchForField(
'filterDefinitionHidden',
metadata.filterDefinitionId,
'id',
'key'
);
delete metadata.filterDefinitionId;
} catch {
// ignore
}
}
try {
// source
if (metadata.sourceTypeId === 1) {
// list
} else if (metadata.sourceTypeId === 2) {
// dataExtension
metadata.r__source_dataExtension_CustomerKey = cache.searchForField(
'dataExtension',
metadata.sourceObjectId,
'ObjectID',
'CustomerKey'
);
delete metadata.sourceObjectId;
delete metadata.sourceTypeId;
} else {
Util.logger.warn(
` - Filter '${metadata.name}' (${
metadata.customerKey
}): Unsupported source type ${metadata.sourceTypeId}=${
dataTypes[metadata.sourceTypeId]
}`
);
}
} catch (ex) {
Util.logger.warn(
` - filter '${metadata.name}' (${metadata.customerKey}): Destination not found (${ex.message})`
);
}
try {
// target
if (metadata.destinationTypeId === 1) {
// list
} else if (metadata.destinationTypeId === 2) {
// dataExtension
metadata.r__destination_dataExtension_CustomerKey = cache.searchForField(
'dataExtension',
metadata.destinationObjectId,
'ObjectID',
'CustomerKey'
);
delete metadata.destinationObjectId;
delete metadata.destinationTypeId;
} else {
Util.logger.warn(
` - filter '${metadata.name}' (${
metadata.customerKey
}): Unsupported destination type ${metadata.destinationTypeId}=${
dataTypes[metadata.destinationTypeId]
}`
);
}
} catch (ex) {
Util.logger.warn(
` - filter '${metadata.name}' (${metadata.customerKey}): Source not found (${ex.message})`
);
}
return metadata;
}
/**
* prepares a record for deployment
*
* @param {TYPE.FilterItem} metadata a single record
* @returns {Promise.<TYPE.FilterItem>} Promise of updated single record
*/
static async preDeployTasks(metadata) {
// folder
if (metadata.r__folder_Path) {
metadata.categoryId = cache.searchForField(
'folder',
metadata.r__folder_Path,
'Path',
'ID'
);
delete metadata.r__folder_Path;
}

// filterDefinition
if (metadata.r__filterDefinition_CustomerKey) {
metadata.filterDefinitionId = cache.searchForField(
'filterDefinition',
metadata.r__filterDefinition_CustomerKey,
'CustomerKey',
'ObjectID'
);
delete metadata.r__filterDefinition_CustomerKey;
}

// source
if (metadata.sourceTypeId === 1) {
// list
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if list then?

} else if (metadata.r__source_dataExtension_CustomerKey) {
// dataExtension
metadata.sourceObjectId = cache.searchForField(
'dataExtension',
metadata.r__source_dataExtension_CustomerKey,
'CustomerKey',
'ObjectID'
);
metadata.sourceTypeId = 2;
delete metadata.r__source_dataExtension_CustomerKey;
} else {
// assume the type id is still in the metadata
throw new Error(
` - Filter '${metadata.name}' (${metadata.customerKey}): Unsupported source type ${
metadata.sourceTypeId
}=${dataTypes[metadata.sourceTypeId]}`
);
}

// target
if (metadata.destinationTypeId === 1) {
// list
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

then?

} else if (metadata.r__destination_dataExtension_CustomerKey) {
// dataExtension
metadata.destinationObjectId = cache.searchForField(
'dataExtension',
metadata.r__destination_dataExtension_CustomerKey,
'CustomerKey',
'ObjectID'
);
metadata.destinationTypeId = 2;
delete metadata.r__destination_dataExtension_CustomerKey;
} else {
// assume the type id is still in the metadata
throw new Error(
` - Filter '${metadata.name}' (${
metadata.customerKey
}): Unsupported destination type ${metadata.destinationTypeId}=${
dataTypes[metadata.destinationTypeId]
}`
);
}

return metadata;
}
}

// Assign definition to static attributes
Expand Down
Loading