Skip to content

Instantly share code, notes, and snippets.

@MyCueCards
Last active November 10, 2024 00:17
Show Gist options
  • Save MyCueCards/4c6327699b517775700533487d2c0ea4 to your computer and use it in GitHub Desktop.
Save MyCueCards/4c6327699b517775700533487d2c0ea4 to your computer and use it in GitHub Desktop.
In Salesforce Marketing Cloud Engagement (aka SFMC or MCE), run the below as a script activity in automation studio. The activity is meant to update file names within the data extract activity.
/* ************************************************************************
Unable to find specific documentation for the endpoint. Listing these references instead:
Supported Operations for Objects and Methods (SOAP API)
https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/supported_operations_for_objects_and_methods.html
DataExtractActivity (SOAP API Object)
https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/dataextractactivity.html
Create via WSProxy (giving similar endpoint, but for POST)
https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/ssjs_WSProxy_create.html?q=automation%2Fv1%2Fdataextracts#example-create-and-start-a-data-extract
Stack Exchange Reference
https://salesforce.stackexchange.com/questions/370272/unable-to-update-data-extract-activity-via-automation-v1-dataextracts-dataext
************************************************************************ */
<script runat="server">
Platform.Load("Core","1");
var payload = {
"grant_type": "client_credentials",
"client_id": "XXXX", // found in Setup > Platform Tools > Apps > Installed Packages
"client_secret": "XXXX" // found in Setup > Platform Tools > Apps > Installed Packages
};
var tenantSubdomain = "XXXX" // found in Setup > Platform Tools > Apps > Installed Packages
var authurl = "https://" + tenantSubdomain + ".auth.marketingcloudapis.com/v2/token";
var result = HTTP.Post(authurl, 'application/json', Stringify(payload));
if (result.StatusCode == 200) {
var responseJson = Platform.Function.ParseJSON(result.Response[0]);
var accessToken = responseJson.access_token;
var restUrl = responseJson.rest_instance_url;
Variable.SetValue("@accessTokenFinal", accessToken);
var accessTokenFinal = accessToken;
var dataExtractOneObjectId = "XXXX"; // found in url of the activity
var dataExtractOneTypeId = "XXXX"; // found in picklist within the activity
var dataExtractTwoObjectId = "XXXX"; // found in url of the activity
var dataExtractTwoTypeId = "XXXX"; // found in picklist within the activity
var fileTransferObjectId = "XXXX"; // found in url of the activity
var fileTransferLocationId = "XXXX"; // found in picklist within the activity
var setFileNameToday = Format(Now(), 'yyyyMMdd');
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
var setYesterday = yesterday.getFullYear() + ('0' + (yesterday.getMonth() + 1)).slice(-2) + ('0' + yesterday.getDate()).slice(-2);
var setZipFileNamePreviousDay = "statictext_" + setYesterday + ".zip";
var setCsvFileName = "differentstatictext_" + setYesterday + "_" + setFileNameToday + ".csv";
var restapi_url_dataextractactivityOne = "https://" + tenantSubdomain + ".rest.marketingcloudapis.com/automation/v1/dataextracts/" + dataExtractOneObjectId;
var restapi_payloadOne = "{\"dataExtractTypeId\": \"" + dataExtractOneTypeId + "\", \"intervalType\": 1, \"fileSpec\": \"" + setCsvFileName + "\"}";
var headerNames = ["Authorization"];
var s1="Bearer ";
var headerValues = "Bearer " + accessToken;
var reqdeaOne = new Script.Util.HttpRequest(restapi_url_dataextractactivityOne);
reqdeaOne.contentType = "application/json"
reqdeaOne.setHeader("Authorization", headerValues);
reqdeaOne.method = "PATCH";
reqdeaOne.postData = restapi_payloadOne;
var restapi_result = reqdeaOne.send();
var restapi_url_dataextractactivityTwo = "https://" + tenantSubdomain + ".rest.marketingcloudapis.com/automation/v1/dataextracts/" + dataExtractTwoObjectId;
var restapi_payloadTwo = "{\"dataExtractTypeId\": \"" + dataExtractTwoTypeId + "\", \"intervalType\": 0, \"fileSpec\": \"" + setZipFileNamePreviousDay + "\", \"dataFields\": [{\"name\": \"ArchiveFolder\", \"type\": \"string\", \"value\": \"\"}, {\"name\": \"DeleteFiles\", \"type\": \"bool\", \"value\": \"False\"}, {\"name\": \"FileFilter\", \"type\": \"string\", \"value\": \"" + setCsvFileName + "\"}, {\"name\": \"ImportFolder\", \"type\": \"string\", \"value\": \"Import\"}, {\"name\": \"OutputFolder\", \"type\": \"string\", \"value\": \"Import\"}]}";
var headerNames = ["Authorization"];
var s1="Bearer ";
var headerValues = "Bearer " + accessToken;
var reqdeaTwo = new Script.Util.HttpRequest(restapi_url_dataextractactivityTwo);
reqdeaTwo.contentType = "application/json"
reqdeaTwo.setHeader("Authorization", headerValues);
reqdeaTwo.method = "PATCH";
reqdeaTwo.postData = restapi_payloadTwo;
var restapi_result = reqdeaTwo.send();
var restapi_url_filetransfer = "https://" + tenantSubdomain + ".rest.marketingcloudapis.com/automation/v1/filetransfers/" + fileTransferObjectId;
var restapi_payload = '{"id": "' + fileTransferObjectId + '", "fileTransferLocationId": "' + fileTransferLocationId + '", "fileSpec": "' + setZipFileNamePreviousDay + '"}';
var headerNames = ["Authorization"];
var s1="Bearer ";
var headerValues = "Bearer " + accessToken;
var reqft = new Script.Util.HttpRequest(restapi_url_filetransfer);
reqft.contentType = "application/json"
reqft.setHeader("Authorization", headerValues);
reqft.method = "PATCH";
reqft.postData = restapi_payload;
var restapi_result = reqft.send();
} else {
throw new Error("Error: No access token.");
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment