Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@jacksonpchen
Last active January 12, 2023 15:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jacksonpchen/d976d7086540754fea01aeeb27ba78a6 to your computer and use it in GitHub Desktop.
Save jacksonpchen/d976d7086540754fea01aeeb27ba78a6 to your computer and use it in GitHub Desktop.
Marketing Cloud SSJS Run Automation
/*
AMPscript.com
https://ampscript.com/how-to-run-automations-more-frequently-using-ssjs/
*/
<script runat="server">
Platform.Load("Core","1.1.1");
var automationCustomerKey = "[Customer Key Goes Here]"
var rr = Platform.Function.CreateObject("RetrieveRequest");
Platform.Function.SetObjectProperty(rr, "ObjectType", "Automation");
Platform.Function.AddObjectArrayItem(rr, "Properties", "ProgramID");
Platform.Function.AddObjectArrayItem(rr, "Properties", "CustomerKey");
Platform.Function.AddObjectArrayItem(rr, "Properties", "Status");
var sfp = Platform.Function.CreateObject("SimpleFilterPart");
Platform.Function.SetObjectProperty(sfp, "Property", "CustomerKey");
Platform.Function.SetObjectProperty(sfp, "SimpleOperator", "equals");
Platform.Function.AddObjectArrayItem(sfp, "Value", automationCustomerKey);
Platform.Function.SetObjectProperty(rr, "Filter", sfp);
var retrieveStatus = [0,0,0];
var automationResultSet = Platform.Function.InvokeRetrieve(rr, retrieveStatus);
var ObjectID = automationResultSet[0]["ObjectID"];
var Status = automationResultSet[0]["Status"];
if (ObjectID != "null") {
/*
Code Status
-1 Error
0 BuildingError
1 Building
2 Ready
3 Running
4 Paused
5 Stopped
6 Scheduled
7 Awaiting Trigger
8 InactiveTrigger
*/
if (Status == 2) {
var obj = Platform.Function.CreateObject("Automation");
Platform.Function.SetObjectProperty(obj, "ObjectID", ObjectID);
var po = Platform.Function.CreateObject("PerformOptions");
var performResult = [0,0,0];
var performStatus = Platform.Function.InvokePerform(obj, "start", performResult, po);
} else {
// already running
}
} else {
// automation not found
}
</script>
@merlino1964
Copy link

It's seems do not start anything, how can I debug it? Thanks

Merlin

@fib-at-isobar
Copy link

Hello @merlino1964,
I was just facing the same problem.
Debugging: SSJS does not offer any logging solution, so I suggest you to develop in landing page and print out your logs using Write().
Running Automation: If you want to have your automation running only on demand, then you can add a Schedule without setup and just save it.
I was trying to set the Schedule to run once in the future, but the SSJS was setting the automation to "Paused" after one execute.

Hope it helps!

@Romeroc3
Copy link

Romeroc3 commented Jan 14, 2021

Hello @merlino1964,
I was just facing the same problem.
Debugging: SSJS does not offer any logging solution, so I suggest you to develop in landing page and print out your logs using Write().
Running Automation: If you want to have your automation running only on demand, then you can add a Schedule without setup and just save it.
I was trying to set the Schedule to run once in the future, but the SSJS was setting the automation to "Paused" after one execute.

Hope it helps!

Thanks for the solution, it helped me!) I am currently doing my marketing assignment and I needed help with that. I study in a business school, so I often use https://assignmentbro.com/us/marketing-assignment-help, because now I have decided to separately study various operations that are carried out in the marketing department. It's actually very interesting, but not very simple)

@Raghuramg92
Copy link

Raghuramg92 commented Jan 19, 2021

[@Merlino, @fib-at-isobar nad @Romeroc3

Please change the status value based on your automation. In provided code status is 2 and in my code status is 6 likewise.
If you guys want to start an automation using SSJS, In backend(in SFMC org) you have to "create and activate" automation with required activities and then giving automation key in SSJS code(var automationCustomerKey = "e40XXX45-XXXX-XXXX-XXXX-Xde48faXX") from cloud page you can run

Below code may give idea to retrieve status

`<script runat="server">
Platform.Load("Core","1.1.1");
var automationCustomerKey = "XXXXXXXXXXXXXXXXXXXXXXXX"
var rr = Platform.Function.CreateObject("RetrieveRequest");
Platform.Function.SetObjectProperty(rr, "ObjectType", "Automation");
Platform.Function.AddObjectArrayItem(rr, "Properties", "ProgramID");
Platform.Function.AddObjectArrayItem(rr, "Properties", "CustomerKey");
Platform.Function.AddObjectArrayItem(rr, "Properties", "Status");

var sfp = Platform.Function.CreateObject("SimpleFilterPart");
Platform.Function.SetObjectProperty(sfp, "Property", "CustomerKey");
Platform.Function.SetObjectProperty(sfp, "SimpleOperator", "equals");
Platform.Function.AddObjectArrayItem(sfp, "Value", automationCustomerKey);

Platform.Function.SetObjectProperty(rr, "Filter", sfp);

var retrieveStatus = [0,0,0];

var automationResultSet = Platform.Function.InvokeRetrieve(rr, retrieveStatus);

var ObjectID = automationResultSet[0]["ObjectID"];

var Status = automationResultSet[0]["Status"];

if (ObjectID != "null") {

/*
    Code Status
        -1   Error
             0   BuildingError
                  1   Building
                       2   Ready
                            3   Running
                                 4   Paused
                                      5   Stopped
                                           6   Scheduled
                                                7   Awaiting Trigger
                                                     8   _InactiveTrigger_
                                                         */

if (Status == 6) {

    var obj = Platform.Function.CreateObject("Automation");
    Platform.Function.SetObjectProperty(obj, "ObjectID", ObjectID);
    var po = Platform.Function.CreateObject("PerformOptions");
    
    var performResult = [0,0,0];
    var performStatus = Platform.Function.InvokePerform(obj, "start", performResult, po);
    Write(Stringify(performStatus));
        } else {
            Write("Error")
            
              }
              } 
              </script>](url)`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment