Skip to content

Commit

Permalink
#1020: pause journey
Browse files Browse the repository at this point in the history
  • Loading branch information
phjulia committed Oct 8, 2023
1 parent 4165dd2 commit d869912
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 65 deletions.
38 changes: 18 additions & 20 deletions docs/dist/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,9 +240,6 @@ helper for <a href="DataExtension.#fixShared_item">DataExtension.#fixShared_item
<dd><p>delete the field added by <a href="DataExtension.#fixShared_item_addField">DataExtension.#fixShared_item_addField</a>
helper for <a href="DataExtension.#fixShared_item">DataExtension.#fixShared_item</a></p>
</dd>
<dt><a href="#Journey.">Journey.(metadata, definitionKey, versionNumber)</a> ⇒ <code>Promise.&lt;object&gt;</code></dt>
<dd><p>helper for <a href="#Journey.pause">pause</a></p>
</dd>
<dt><a href="#getUserName">getUserName(userList, item, fieldname)</a> ⇒ <code>string</code></dt>
<dd></dd>
<dt><a href="#setupSDK">setupSDK(sessionKey, authObject)</a> ⇒ <code><a href="#SDK">SDK</a></code></dt>
Expand Down Expand Up @@ -3170,7 +3167,7 @@ definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version
* [.postRetrieveTasks(metadata)](#Journey.postRetrieveTasks) ⇒ <code>TYPE.MetadataTypeItem</code>
* [.preDeployTasks(metadata)](#Journey.preDeployTasks) ⇒ <code>TYPE.MetadataTypeItem</code>
* [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#Journey.createOrUpdate) ⇒ <code>&#x27;create&#x27;</code> \| <code>&#x27;update&#x27;</code> \| <code>&#x27;skip&#x27;</code>
* [.pause(keyArr)](#Journey.pause) ⇒ <code>Promise.&lt;boolean&gt;</code>
* [.pause(definitionIDs, versionNumber)](#Journey.pause) ⇒ <code>Promise.&lt;boolean&gt;</code>

<a name="Journey.retrieve"></a>

Expand Down Expand Up @@ -3307,15 +3304,16 @@ helper for [upsert](#MetadataType.upsert)

<a name="Journey.pause"></a>

### Journey.pause(keyArr) ⇒ <code>Promise.&lt;boolean&gt;</code>
### Journey.pause(definitionIDs, versionNumber) ⇒ <code>Promise.&lt;boolean&gt;</code>
a function to pause journey via API

**Kind**: static method of [<code>Journey</code>](#Journey)
**Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true if all items were executed successfully, otherwise false

| Param | Type | Description |
| --- | --- | --- |
| keyArr | <code>Array.&lt;string&gt;</code> | customerkey of the metadata |
| definitionIDs | <code>Array.&lt;string&gt;</code> | definitionIDs of the metadata |
| versionNumber | <code>string</code> | versionNumber of the journey |

<a name="List"></a>

Expand Down Expand Up @@ -3441,6 +3439,7 @@ Provides default functionality that can be overwritten by child metadata type cl
* [.retrieveRESTcollection(urlArray, [concurrentRequests], [logAmountOfUrls])](#MetadataType.retrieveRESTcollection) ⇒ <code>Promise.&lt;{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}&gt;</code>
* [.handleRESTErrors(ex, id)](#MetadataType.handleRESTErrors) ⇒ <code>null</code>
* [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ <code>Promise.&lt;{key:string, response:string}&gt;</code>
* [.pauseREST(uri, id)](#MetadataType.pauseREST) ⇒ <code>Promise.&lt;{key:string, response:string}&gt;</code>
* [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ <code>Promise.&lt;{key:string, response:object}&gt;</code>
* [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ <code>Promise.&lt;void&gt;</code>
* [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ <code>TYPE.MetadataTypeMap</code>
Expand Down Expand Up @@ -3956,6 +3955,19 @@ Used to execute a query/automation etc.
| uri | <code>string</code> | REST endpoint where the POST request should be sent |
| key | <code>string</code> | item key |

<a name="MetadataType.pauseREST"></a>

### MetadataType.pauseREST(uri, id) ⇒ <code>Promise.&lt;{key:string, response:string}&gt;</code>
Used to pause a journey etc.

**Kind**: static method of [<code>MetadataType</code>](#MetadataType)
**Returns**: <code>Promise.&lt;{key:string, response:string}&gt;</code> - metadata id and API response (OK or error)

| Param | Type | Description |
| --- | --- | --- |
| uri | <code>string</code> | REST endpoint where the POST request should be sent |
| id | <code>string</code> | item id |

<a name="MetadataType.executeSOAP"></a>

### MetadataType.executeSOAP([metadataEntry]) ⇒ <code>Promise.&lt;{key:string, response:object}&gt;</code>
Expand Down Expand Up @@ -8445,20 +8457,6 @@ helper for [DataExtension.#fixShared_item](DataExtension.#fixShared_item)
| deKey | <code>string</code> | dataExtension key |
| fieldObjectID | <code>string</code> | field ObjectID |

<a name="Journey."></a>

## Journey.(metadata, definitionKey, versionNumber) ⇒ <code>Promise.&lt;object&gt;</code>
helper for [pause](#Journey.pause)

**Kind**: global function
**Returns**: <code>Promise.&lt;object&gt;</code> - response: no errors in case of success

| Param | Type | Description |
| --- | --- | --- |
| metadata | <code>TYPE.JourneyItem</code> | journey metadata |
| definitionKey | <code>TYPE.JourneyItem</code> | journey definitionKey |
| versionNumber | <code>TYPE.JourneyItem</code> | journey versionNumber |

<a name="getUserName"></a>

## getUserName(userList, item, fieldname) ⇒ <code>string</code>
Expand Down
68 changes: 23 additions & 45 deletions lib/metadataTypes/Journey.js
Original file line number Diff line number Diff line change
Expand Up @@ -936,54 +936,32 @@ class Journey extends MetadataType {
/**
* a function to pause journey via API
*
* @param {string[]} keyArr customerkey of the metadata
* @param {string[]} definitionIDs definitionIDs of the metadata
* @param {string} versionNumber versionNumber of the journey
* @returns {Promise.<boolean>} Returns true if all items were executed successfully, otherwise false
*/
static async pause(keyArr) {
const metadataMap = {};
const promiseResults = [];
Util.logger.info(`Pausing journeys: ${Object.keys(metadataMap).length}`);
for (const key of keyArr) {
promiseResults.push(await this.#pauseItem(null, key));
} // a51e3ff3-7cdd-4fe5-92cb-8711c5bb7149
// const successCounter = (await Promise.all(promiseResults))
// .filter(Boolean)
// .filter((r) => r.OverallStatus === 'OK').length;

// Util.logger.info(`Paused ${successCounter} of ${keyArr.length} items`);
// return successCounter === keyArr.length;
return true;
}
/**
* helper for {@link Journey.pause}
*
* @param {TYPE.JourneyItem} metadata journey metadata
* @param {TYPE.JourneyItem} definitionKey journey definitionKey
* @param {TYPE.JourneyItem} versionNumber journey versionNumber
* @returns {Promise.<object>} response: no errors in case of success
*/
static async #pauseItem(metadata, definitionKey, versionNumber) {
let response;
try {
response = await (versionNumber
? this.client.rest.post(
`/interaction/v1/interactions/pause/key:${definitionKey}?versionNumber=${versionNumber}`,
metadata
)
: this.client.rest.post(
`/interaction/v1/interactions/pause/key:${definitionKey}`,
metadata
));
Util.logger.info(
` - paused ${this.definition.type}: ${metadata[this.definition.keyField]} / ${
metadata[this.definition.nameField]
}`
);
return response;
} catch {
// this._handleSOAPErrors(ex, 'pausing', metadata, false);
return null;
static async pause(definitionIDs, versionNumber) {
const results = [];
Util.logger.info(`Pausing journeys: ${definitionIDs.length}`);
for (const id of definitionIDs) {
if (versionNumber) {
results.push(
super.pauseREST(
`/interaction/v1/interactions/pause/${id}?versionNumber=${versionNumber}`,
id
)
);
} else {
results.push(
super.pauseREST(`/interaction/v1/interactions/pause/${id}?AllVersions=true`, id)
);
}
}
const pausedKIDsArr = (await Promise.all(results))
.filter((r) => r.response === 'OK')
.map((r) => r.id);
Util.logger.info(`Paused ${pausedKIDsArr.length} of ${definitionIDs.length} items`);
return results;
}
}

Expand Down
19 changes: 19 additions & 0 deletions lib/metadataTypes/MetadataType.js
Original file line number Diff line number Diff line change
Expand Up @@ -1166,6 +1166,25 @@ class MetadataType {
Util.logger.error(`Failed to execute ${this.definition.type} ${key}: ${ex.message}`);
}
}
/**
* Used to pause a journey etc.
*
* @param {string} uri REST endpoint where the POST request should be sent
* @param {string} id item id
* @returns {Promise.<{key:string, response:string}>} metadata id and API response (OK or error)
*/
static async pauseREST(uri, id) {
let response;
try {
await this.client.rest.post(uri, {}); // payload is empty for this request
response = 'OK';
Util.logger.info(` - paused ${this.definition.type}: ${id}`);
} catch (ex) {
response = ex.message;
Util.logger.error(`Failed to pause ${this.definition.type} ${id}: ${ex.message}`);
}
return { id, response };
}

/**
* Used to execute a query/automation etc.
Expand Down

0 comments on commit d869912

Please sign in to comment.