Skip to content

Commit

Permalink
#1189: enhance retrieveAsTemplate for importFile
Browse files Browse the repository at this point in the history
  • Loading branch information
JoernBerkefeld committed Jan 26, 2024
1 parent d100576 commit 790bf7f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 12 deletions.
30 changes: 18 additions & 12 deletions lib/metadataTypes/ImportFile.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ class ImportFile extends MetadataType {
* @returns {Promise.<TYPE.MetadataTypeItemObj>} Promise
*/
static async retrieveAsTemplate(templateDir, name, templateVariables) {
const res = await this.client.rest.get(
'/automation/v1/imports/?$filter=name%20eq%20' + encodeURIComponent(name)
);
if (Array.isArray(res?.items) && res?.items.length) {
// using '?$filter=name%20eq%20' + encodeURIComponent(name) would also work but that just retrieves more data for no reason
const cache = await this.retrieveForCache(null, null, 'name:' + name);
const metadataArr = Object.values(cache?.metadata);
if (Array.isArray(metadataArr) && metadataArr.length) {
// eq-operator returns a similar, not exact match and hence might return more than 1 entry
const metadata = res.items.find((item) => item.name === name);
const metadata = metadataArr.find((item) => item.name === name);
if (!metadata) {
Util.logger.error(`No ${this.definition.typeName} found with name "${name}"`);
return;
Expand All @@ -93,13 +93,13 @@ class ImportFile extends MetadataType {
);
Util.logger.info(`- templated ${this.definition.type}: ${name}`);
return { metadata: val, type: this.definition.type };
} else if (res?.items) {
} else if (metadataArr) {
Util.logger.error(`No ${this.definition.typeName} found with name "${name}"`);
} else {
throw new Error(
`Encountered unknown error when retrieveing ${
this.definition.typeName
} "${name}": ${JSON.stringify(res)}`
} "${name}": ${JSON.stringify(metadataArr)}`
);
}
}
Expand All @@ -112,11 +112,17 @@ class ImportFile extends MetadataType {
*/
static async _getObjectIdForSingleRetrieve(key) {
const response = await this.client.soap.retrieve('ImportDefinition', ['ObjectID'], {
filter: {
leftOperand: 'CustomerKey',
operator: 'equals',
rightOperand: key,
},
filter: key.startsWith('name:')
? {
leftOperand: 'Name',
operator: 'equals',
rightOperand: key.slice(5),
}
: {
leftOperand: 'CustomerKey',
operator: 'equals',
rightOperand: key,
},
});
return response?.Results?.length ? response.Results[0].ObjectID : null;
}
Expand Down
1 change: 1 addition & 0 deletions lib/metadataTypes/definitions/ImportFile.definition.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ export default {
template: true,
},
encodingName: {
// only visible if retrieved with ID
isCreateable: true,
isUpdateable: true,
retrieving: true,
Expand Down

0 comments on commit 790bf7f

Please sign in to comment.