verified
Retrieve Script Activity historyLearn how to retrieve a Script Activity's history in Salesforce Marketing Cloud (SFMC) with SSJS (server-side JavaScript). Code snippets include the WSProxy method.
WSProxy
var api = new Script.Util.WSProxy();
var customerKey = "S0M3-GU1D-K3Y-G03SR1G4T-H3R3";
var cols = [
"Name",
"CustomerKey",
"StatusMessage",
"Status",
"CreatedDate",
"ModifiedDate",
"StatusLastUpdate"
];
var filter = {
Property: "CustomerKey",
SimpleOperator: "equals",
Value: customerKey
};
var result = [],
moreData = true,
reqID = data = null;
while (moreData) {
moreData = false;
if (reqID == null) {
data = api.retrieve("ActivityInstance", cols, filter);
} else {
data = api.getNextBatch("ActivityInstance", reqID);
}
if (data != null) {
moreData = data.HasMoreRows;
reqID = data.RequestID;
for (var k in data.Results) {
var item = data.Results[k];
var o = {
Status: item.Status,
StatusMessage: item.StatusMessage,
StatusLastUpdate: DateTime.SystemDateToLocalDate(item.StatusLastUpdate)
}
result.push(o);
}
}
}
result.sort(function (a, b) {
return (new Date(a.StatusLastUpdate) < new Date(b.StatusLastUpdate)) ? 1 : -1
});
<script runat="server">
Platform.Load("Core","1");
var api = new Script.Util.WSProxy();
try {
var name = "MyAutomation";
var request = api.retrieve("Automation", ["ProgramID"], {
Property: "Name",
SimpleOperator: "equals",
Value: name
});
var objId = request.Results[0].ObjectID;
var cols = [
"CustomerKey",
"Name",
"Description",
"ObjectID",
"IsActive",
"CreatedDate",
"ModifiedDate",
"Definition",
"Sequence"
];
var filter = {
Property: "Program.ObjectID",
SimpleOperator: "equals",
Value: objId
};
var request = api.retrieve("Activity", cols, filter);
var activities = request.Results;
var result = [];
for(var k in activities) {
var item = activities[k];
var o = {
Name: item.Name,
Sequence: item.Sequence,
Statuses: retrieveActivityHistory(item.CustomerKey)
}
result.push(o);
}
result.sort(function (a, b) {
return (new Date(a.Statuses[0].StatusLastUpdate) > new Date(b.Statuses[0].StatusLastUpdate)) ? 1 : -1
});
Write(Stringify(result));
} catch(err) {
Write(Stringify(err));
}
function retrieveActivityHistory(key, limit) {
var limit = limit || null;
var cols = [
"Name",
"CustomerKey",
"StatusMessage",
"Status",
"CreatedDate",
"ModifiedDate",
"StatusLastUpdate"
];
var filter = {
Property: "CustomerKey",
SimpleOperator: "equals",
Value: key
};
var records = [],
moreData = true,
reqID = data = null;
while (moreData) {
moreData = false;
if (reqID == null) {
data = api.retrieve("ActivityInstance", cols, filter);
} else {
data = api.getNextBatch("ActivityInstance", reqID);
}
if (data != null) {
moreData = data.HasMoreRows;
reqID = data.RequestID;
for (var k in data.Results) {
var item = data.Results[k];
var o = {
Status: item.Status,
StatusMessage: item.StatusMessage,
StatusLastUpdate: DateTime.SystemDateToLocalDate(item.StatusLastUpdate)
}
records.push(o);
}
}
}
records.sort(function (a, b) { return (new Date(a.StatusLastUpdate) < new Date(b.StatusLastUpdate)) ? 1 : -1 });
var num = (limit != null && limit <= records.length) ? limit : records.length;
return records.slice(0, num);
}
</script>
[
{
"Name": "MyAutomationActivity",
"Sequence": 0,
"Statuses": [
{
"Status": 1,
"StatusMessage": "Complete",
"StatusLastUpdate": "2022-10-12T22:04:19.616"
},
{
"Status": 1,
"StatusMessage": "Complete",
"StatusLastUpdate": "2022-10-12T21:04:22.903"
},
{
"Status": 1,
"StatusMessage": "Complete",
"StatusLastUpdate": "2022-10-12T20:03:54.773"
}
]
}
]
WARNING
Activity history can only be retrieved from an active Automation. CustomerKey in the snippet refers to the key of the Activity run within the Automation and not to the actual Activity that can be found in the Automation Studio.
Help me turn coffee into code
This website is provided to you free of charge. However, a lot of time and effort are spent to write, test and mainain the code. Please consider supporting my work by buying me a cup of coffee.