Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bugfix/542 emailSendDefinition deploy breaks due to missing email asset #703

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f288e6a
#542 fixing problem with not valid customer key on assets when deploy…
Daniel-Ventura-25 Nov 9, 2022
7112759
#542 fixing the issue: 'if asset key is does not end with the Bu mid'
Daniel-Ventura-25 Nov 10, 2022
5ac5da0
Merge branch 'feature/557-support-transactional-email' into 542-bug-e…
JoernBerkefeld Nov 25, 2022
84f6410
Merge branch 'bugfix/566-if-dependent-list-is-the-global-all-subs-it-…
JoernBerkefeld Dec 6, 2022
9452aa7
Merge remote-tracking branch 'origin/develop' into 542-bug-emailsendd…
JoernBerkefeld Dec 6, 2022
90bdbeb
Merge branch 'develop' into 542-bug-emailsenddefinition-deploy-breaks…
JoernBerkefeld Dec 8, 2022
bbd3019
#542: first run old asset check, then new one with MID suffix
JoernBerkefeld Dec 8, 2022
90b4a0f
Merge branch 'bugfix/566-get-all-subs-from-parent' into 542-bug-email…
JoernBerkefeld Dec 8, 2022
662bc1f
#542: added SendDefinitionList[].CustomObjectID
JoernBerkefeld Dec 8, 2022
dac7f08
Merge branch '594-bug-output-actual-error-message-during-create-via-s…
JoernBerkefeld Dec 8, 2022
bd02b9f
Merge branch '594-bug-output-actual-error-message-during-create-via-s…
JoernBerkefeld Dec 10, 2022
2c27b88
Merge branch 'bugfix/566-get-all-subs-from-parent' into 542-bug-email…
JoernBerkefeld Dec 10, 2022
10c87d2
Merge branch 'bugfix/596-cannot-read-properties-of-undefined-reading-…
JoernBerkefeld Dec 10, 2022
a740ea5
Merge branch 'bugfix/597-some-accountuser-records-broken-during-retri…
JoernBerkefeld Dec 10, 2022
6e8dc9b
#542: remove CreatedDate/Modified before create / update
JoernBerkefeld Dec 12, 2022
38453bd
#542: fix templating fields
JoernBerkefeld Dec 12, 2022
b6d8700
#542: fix 42117 error
JoernBerkefeld Dec 12, 2022
2144326
Merge branch 'develop' into bugfix/542-emailsenddefinition-deploy-bre…
JoernBerkefeld Feb 7, 2023
998f92e
#542: remove not needed buObject param
JoernBerkefeld Feb 7, 2023
bb7d868
#542: equalize log output to other types
JoernBerkefeld Feb 7, 2023
6d298fd
#542: avoid error 42117
JoernBerkefeld Feb 7, 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
66 changes: 51 additions & 15 deletions lib/metadataTypes/EmailSendDefinition.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,33 @@ class EmailSendDefinition extends MetadataType {
delete metadata.r__email_Name;
} else if (metadata.r__assetMessage_Key) {
// content builder
// * this ignores r__assetMessage_Name on purpose as that is only unique per parent folder but useful during PR reviews
metadata.Email.ID = cache.searchForField(
'asset',
metadata.r__assetMessage_Key,
'customerKey',
'legacyData.legacyId'
);
delete metadata.r__assetMessage_Key;
delete metadata.r__assetMessage_Name;
// * this ignores r__assetMessage_Name on purpose\ as that is only unique per parent folder but useful during PR reviews
// will try to find the key with the bu mid at the end, if unable, will try to find the key without it
try {
// check asset key as provided
metadata.Email.ID = cache.searchForField(
'asset',
metadata.r__assetMessage_Key,
'customerKey',
'legacyData.legacyId'
);
delete metadata.r__assetMessage_Key;
delete metadata.r__assetMessage_Name;
} catch {
// if we deploy to another BU, try applying the BU's MID to the end, which we do in preDeployTasks for assets

// get suffix to update customer key at the end
const suffix = '-' + this.buObject.mid;

metadata.Email.ID = cache.searchForField(
'asset',
metadata.r__assetMessage_Key.slice(0, Math.max(0, 36 - suffix.length)) + suffix,
'customerKey',
'legacyData.legacyId'
);
delete metadata.r__assetMessage_Key;
delete metadata.r__assetMessage_Name;
}
}
// Target Audience DataExtension
// normalize first because this can be an array
Expand All @@ -129,7 +147,7 @@ class EmailSendDefinition extends MetadataType {
if (sdl.r__dataExtension_Key) {
if (sdl.DataSourceTypeID !== 'CustomObject') {
throw new Error(
`Skipping ${metadata.Name} (${metadata.CustomerKey}): Expecting DataSourceTypeID to equal 'CustomObject' when r__dataExtension_Key is defined; Found '${sdl.DataSourceTypeID}'`
` ☇ skipping ${this.definition.type} ${metadata.Name} (${metadata.CustomerKey}): Expecting DataSourceTypeID to equal 'CustomObject' when r__dataExtension_Key is defined; Found '${sdl.DataSourceTypeID}'`
);
}
sdl.CustomObjectID = cache.searchForField(
Expand All @@ -141,9 +159,13 @@ class EmailSendDefinition extends MetadataType {
delete sdl.r__dataExtension_Key;
} else if (sdl.DataSourceTypeID === 'CustomObject') {
throw new Error(
`Skipping ${metadata.Name} (${metadata.CustomerKey}): Expecting r__dataExtension_Key to be defined if DataSourceTypeID='CustomObject'`
` ☇ skipping ${this.definition.type} ${metadata.Name} (${metadata.CustomerKey}): Expecting r__dataExtension_Key to be defined if DataSourceTypeID='CustomObject'`
);
}
if (!sdl.SalesForceObjectID || sdl.SalesForceObjectID === '') {
// otherwise this causes error 42117 / invalid ObjectID
delete sdl.SalesForceObjectID;
}
// get List (required)
if (sdl.r__list_PathName) {
sdl.List = {
Expand All @@ -152,7 +174,7 @@ class EmailSendDefinition extends MetadataType {
delete sdl.r__list_PathName;
} else {
throw new Error(
`Field SendDefinitionList.r__list_PathName was not defined. Please try re-retrieving this ESD from your source BU.`
` ☇ skipping ${this.definition.type} ${metadata.Name} (${metadata.CustomerKey}) Field SendDefinitionList.r__list_PathName was not defined. Please try re-retrieving this ESD from your source BU.`
);
}
}
Expand Down Expand Up @@ -208,7 +230,11 @@ class EmailSendDefinition extends MetadataType {
delete metadata.Email;
} catch {
Util.logger.warn(
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find email with ID ${metadata.Email.ID} in Classic nor in Content Builder.`
` - ${this.definition.type} ${metadata[this.definition.nameField]} (${
metadata[this.definition.keyField]
}): Could not find email with ID ${
metadata.Email.ID
} in Classic nor in Content Builder.`
);
}
}
Expand All @@ -234,7 +260,11 @@ class EmailSendDefinition extends MetadataType {
delete sdl.CustomObjectID;
} catch {
Util.logger.warn(
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find Target Audience (DataExtension) with ObjectID ${sdl.CustomObjectID}.`
` - ${this.definition.type} ${metadata[this.definition.nameField]} (${
metadata[this.definition.keyField]
}): Could not find Target Audience (DataExtension) with ObjectID ${
sdl.CustomObjectID
}.`
);
}
}
Expand All @@ -245,10 +275,16 @@ class EmailSendDefinition extends MetadataType {
delete sdl.List;
} catch (ex) {
Util.logger.warn(
` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
` - ${this.definition.type} ${metadata[this.definition.nameField]} (${
metadata[this.definition.keyField]
}): ${ex.message}`
);
}
}
if (!sdl.SalesForceObjectID) {
// otherwise this causes error 42117 / invalid ObjectID
delete sdl.SalesForceObjectID;
}
}

return metadata;
Expand Down
83 changes: 52 additions & 31 deletions lib/metadataTypes/definitions/EmailSendDefinition.definition.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module.exports = {
bodyIteratorField: 'Results',
dependencies: ['folder-userinitiatedsends', 'email', 'asset-message', 'dataExtension', 'list'], // filter, SendClassification, SenderProfile, DeliveryProfile
dependencies: ['folder-userinitiatedsends', 'email', 'asset-message', 'dataExtension', 'list'], // filter(+), sendClassification(+), SenderProfile(n/a), DeliveryProfile(n/a)
folderType: 'userinitiatedsends',
hasExtended: false,
idField: 'ObjectID',
Expand All @@ -22,31 +22,31 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
AutoBccEmail: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
BccEmail: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
CategoryID: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
CCEmail: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'Client.ID': {
isCreateable: false,
Expand All @@ -61,28 +61,28 @@ module.exports = {
templating: false,
},
CreatedDate: {
isCreateable: true,
isUpdateable: true,
isCreateable: false,
isUpdateable: false,
retrieving: true,
templating: false,
},
CustomerKey: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
DeduplicateByEmail: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'DeliveryProfile.CustomerKey': {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'DeliveryProfile.DomainType': {
isCreateable: false,
Expand Down Expand Up @@ -130,13 +130,13 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'DeliveryProfile.PrivateIP': {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'DeliveryProfile.SourceAddressType': {
isCreateable: false,
Expand All @@ -154,7 +154,7 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
DomainType: {
isCreateable: false,
Expand All @@ -166,13 +166,13 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'Email.ID': {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'Email.ObjectID': {
isCreateable: false,
Expand All @@ -186,17 +186,35 @@ module.exports = {
retrieving: false,
templating: false,
},
'Email.Name': {
isCreateable: true,
isUpdateable: true,
retrieving: false,
templating: false,
},
'Email.Subject': {
isCreateable: true,
isUpdateable: true,
retrieving: false,
templating: false,
},
'Email.Status': {
isCreateable: true,
isUpdateable: true,
retrieving: false,
templating: false,
},
EmailSubject: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
ExclusionFilter: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
FooterContentArea: {
isCreateable: false,
Expand Down Expand Up @@ -256,7 +274,7 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
IsPlatformObject: {
isCreateable: true,
Expand All @@ -280,7 +298,7 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
Keyword: {
isCreateable: false,
Expand All @@ -295,16 +313,16 @@ module.exports = {
templating: false,
},
ModifiedDate: {
isCreateable: true,
isUpdateable: true,
isCreateable: false,
isUpdateable: false,
retrieving: true,
templating: false,
},
Name: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
ObjectID: {
isCreateable: false,
Expand Down Expand Up @@ -376,7 +394,7 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'SendClassification.ObjectID': {
isCreateable: false,
Expand All @@ -400,7 +418,7 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'SendDefinitionList[].ObjectID': {
isCreateable: false,
Expand All @@ -414,6 +432,9 @@ module.exports = {
retrieving: false,
templating: false,
},
'SendDefinitionList[].CustomObjectID': {
skipValidation: true, // cannot be asked for but will be retrieved
},
'SendDefinitionList[].SendDefinitionListType': {
skipValidation: true, // cannot be asked for but will be retrieved
},
Expand Down Expand Up @@ -448,7 +469,7 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
'SenderProfile.FromAddress': {
isCreateable: false,
Expand Down Expand Up @@ -478,13 +499,13 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
SendWindowClose: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
SendWindowDelete: {
isCreateable: false,
Expand All @@ -496,7 +517,7 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
SourceAddressType: {
isCreateable: false,
Expand All @@ -508,13 +529,13 @@ module.exports = {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
TestEmailAddr: {
isCreateable: true,
isUpdateable: true,
retrieving: true,
templating: false,
templating: true,
},
TimeZone: {
isCreateable: false,
Expand Down