below is some sample code to delete a workflow on the host web from your app web. This would be useful in the event you want your App to remove a workflow that you have deployed to the host web.
NOTE: you must include a reference to “/_layouts/15/SP.WorkflowServices.js”
this file can be downloaded here
1: var deleteWorkflow = function (workflowName) {
2:
3: //Using the App Web as the client context
4: clientContext = new SP.ClientContext.get_current();
5:
6: //Get the host web URL from the query string params
7: //I have a function getHostWebUrl() - which is not included.
8: //http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
9: var hostWebUrl = getHostWebUrl();
10:
11: //Using the hostWebContext as an AppContextSite
12: hostWebContext = new SP.AppContextSite(clientContext, hostWebUrl);
13:
14: //Get the Workflow Services Manager for the Host web, NOTE: you initialize it with the clientContext & the hostWebContext Web)
15: var hostWebWorkflowServicesManager = new SP.WorkflowServices.WorkflowServicesManager.newObject(clientContext, hostWebContext.get_web());
16: var hostWebWorkflowDeploymentService = hostWebWorkflowServicesManager.getWorkflowDeploymentService();
17: var hostWebDefinitionsCollection = hostWebWorkflowDeploymentService.enumerateDefinitions(false);
18:
19: //load all the workflow definitions from the host web
20: clientContext.load(hostWebDefinitionsCollection);
21: clientContext.executeQueryAsync(function () {
22:
23: //get the enumerator for all the workflow definitions
24: var workflowDefinitions = hostWebDefinitionsCollection.getEnumerator();
25: while (workflowDefinitions.moveNext()) {
26:
27: //set the current definition to a variable
28: var workflowDefinition = workflowDefinitions.get_current();
29:
30: //uncomment to see all the workflows that it finds
31: //console.log("Found Workflow : " + workflowDefinition.get_displayName());
32:
33: //looking for a match on the name of the workflow
34: if (workflowDefinition.get_displayName() === workflowName) {
35: //using the host web workflow deployment service to delete the workflow definition
36:
37: hostWebWorkflowDeploymentService.deleteDefinition(workflowDefinition.get_id());
38: //this comment will just display what workflow WILL BE deleted
39: console.log("Deleted workflow : " + workflowName + ", " + workflowDefinition.get_id().toString());
40:
41: //if more than one workflow with the same name is found it will delete all of them
42: //the delete will get queued up and executed by the .executeQueryAsync
43: //if you don't want that then you have to break out of the while loop
44: }
45: }
46: //this query will execute the delete action
47: clientContext.executeQueryAsync(function () {
48: //Successfully deleted the workflow
49: }, function (sender, args) {
50: console.log("Unable to delete workflow : " + workflowName);
51: console.log("<span style='color:red'>Reason : " + args.get_message() + "</span>");
52: });
53: }, function (sender, args) {
54: console.log("Failed to load workflows");
55: console.log("<span style='color:red'>Reason : " + args.get_message() + "</span>");
56: });
57: };