Run a Schedule

{ runSchedule }

Trigger and execute of an existing schedule

Method

/API2/tasks/runSchedule

  • API Section: /API2/tasks
  • API Version: 2.0
  • From Release: 2018.5
  • Can be used by Non-admin accounts
  • Method operates via POST actions only.
  • Input Parameters

    Name

    ExecuteScheduleApiData

    Object Type

    Description

    An object for settings the execution parameters of a schedule.

    Output Response

    Successful Result Code

    200

    Description of Response Type

    Returns the executionId for the created execution

    Notes

    This effectively triggers and runs the schedule immediately, creating a job to execute on the server.

    Examples
    Find and Run a scheduled task (JavaScript):

    This example demonstrates how to find a item's schedule and then run it programmatically.

    The example uses API authentication driven from JavaScript. See Authentication APIs for alternatives.

    // URL of the Pyramid installation and the path to the API 2.0 REST methods
    var pyramidURL = "http://mysite.com/api2/";
    
    // step 1: authenticate admin account and get token
    // NOTE: callApi method is a generic REST method shown below.
    let token = callApi("auth/authenticateUser",{
    	"data":{
    		"userName":"adminUser",
    		"password":"abc123!"
    	}
    },false);
    log("got token "+token);
    
    // step 2: get all the schedules in the system based on name search
    let findSchedule= callApi("tasks/findSchedule ",{
    	"searchCriteria": {
    		"searchCriteria":{
    			"searchValue":"My Demo Schedule",
    			"searchMatchType":2
    		},
    		"scheduleType":1
    	},
    	"auth": token
    });
    
    // step 3: extract the schedule ID property from the returned schedule that matches "My Demo Schedule"
    let scheduleId = findSchedule.data[0].scheduleId
    
    // step 4: launch a run of the chosen schedule now, without triggers
    let runSchedule = callApi("tasks/runSchedule ",{
    	"data":{"scheduleId": scheduleId,"checkTriggers":"false"},
    	"auth": token
    });
    
    if(runSchedule.error!=null){
    	throw new Error(runSchedule.error);
    }
    				
    				
    
    // step 5A: OPTIONAL: get details to check running status of scheduled event. First, get execution ID
    let executionId=runSchedule.data;
    				
    //stet 5B: get execution item's status. 
    let taskData= callApi("tasks/getScheduleExecutionStatus ",{
    	"executionId": executionId,
    	"auth": token
    });
    log("executionId status is "+executionStatus[taskData.data.status]);
    
    //step 5C: check status every 3 seconds
    if(taskData.data.status!=1){
    	setTimeout(getStatus,3000);
    }
    			
    				
    ////############ alternative approach #################
    //step 6a: get task items in that execution. 
    let tasks= callApi("tasks/getTasksIds ",{
    	"executionId": executionId,
    	"auth": token
    });
    
    //step 6B: get the ID of the single task in that execution. 
    let taskId = tasks.data[0].id
    log("got task "+taskId);
    
    //step 6C: get status of the task. 
    getStatus();
    
    
    
    function getStatus(){
    	let taskData= callApi("tasks/getTaskData ",{
    		"taskId": taskId,
    		"auth": token
    	});
    	log("task status is "+taskData.data.status);
    	if(taskData.data.status!=1){
    		setTimeout(getStatus,3000);
    	}
    }
    				
    ////############ other methods #################
    
    //step 7: pause the schedule
    let suspend= callApi("tasks/suspendSchedule",{
    	"scheduleId": scheduleId,
    	"auth": token
    });
    
    //step 8: restart the schedule
    let resume= callApi("tasks/resumeSchedule",{
    	"scheduleId": scheduleId,
    	"auth": token
    });
    
    
    
    // ##### optional generic login method for debugging ##############
    function log(msg){
    	document.write(msg);
    	console.log(msg);
    }
    
    // ##### generic REST API calling method ##############
    function callApi(path,data,parseResult=true){
    	var xhttp = new XMLHttpRequest();
    	xhttp.open("POST", pyramidURL+path, false);
    	xhttp.send(JSON.stringify(data));
    	if(parseResult){
    		return JSON.parse(xhttp.responseText);
    	}else{
    		return xhttp.responseText;
    	}
    }