-
Notifications
You must be signed in to change notification settings - Fork 56
Expand file tree
/
Copy pathstopWorkflow.js
More file actions
86 lines (79 loc) · 4.52 KB
/
stopWorkflow.js
File metadata and controls
86 lines (79 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import getWorkflowID from './getWorkflowID.js'
import ajax from '../utils/ajax.js'
/**
* @name $SP().list.stopWorkflow
* @function
* @description Stop/Terminate a Workflow 2010 instance (this is only for Workflow 2010)
*
* @param {Object} setup
* @param {Number} setup.ID The item ID that is tied to the workflow
* @param {String} setup.workflowName The name of the workflow
* @return {Promise} resolve(), reject(error)
*
* @example
* $SP().list("List Name").stopWorkflow({ID:42, workflowName:"My workflow"});
*/
export default function stopWorkflow(setup) {
if (!this.url) throw "[SharepointPlus 'stopWorkflow'] not able to find the URL!";
setup = setup || {};
if (!setup.workflowName && !setup.workflowID) throw "[SharepointPlus 'stopWorkflow'] Please provide the workflow name"
if (!setup.ID) throw "[SharepointPlus 'stopWorkflow'] Please provide the item ID"
// retrieve the workflow instances
return getWorkflowID.call(this, {ID:setup.ID, workflowName:setup.workflowName})
.then(async wrkflw => {
let lenInstances = wrkflw.instances.length;
if (lenInstances===0) return Promise.reject("[SharepointPlus 'stopWorkflow'] No instances found for this workflow");
let lastInstance = wrkflw.instances[lenInstances-1];
let html = await ajax.call(this, {url:lastInstance.StatusPageUrl});
let requestDigest = html.match(/<input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value=".*" \/>/g);
if (!requestDigest) throw "[SharepointPlus 'stopWorkflow'] Unable to find the __REQUESTDIGEST from the Workflow Status page";
requestDigest = requestDigest[0].match(/<input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value="(.*)" \/>/)[1];
let viewState = html.match(/<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value=".*" \/>/g);
if (!viewState) throw "[SharepointPlus 'stopWorkflow'] Unable to find the __VIEWSTATE from the Workflow Status page";
viewState = viewState[0].match(/<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*)" \/>/)[1];
let viewStateGenerator = html.match(/<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value=".*" \/>/g);
if (!viewStateGenerator) throw "[SharepointPlus 'stopWorkflow'] Unable to find the __VIEWSTATEGENERATOR from the Workflow Status page";
viewStateGenerator = viewStateGenerator[0].match(/<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="(.*)" \/>/)[1];
let eventValidation = html.match(/<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value=".*" \/>/g);
if (!eventValidation) throw "[SharepointPlus 'stopWorkflow'] Unable to find the __EVENTVALIDATION from the Workflow Status page";
eventValidation = eventValidation[0].match(/<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*)" \/>/)[1];
let params = {};
params.MSOWebPartPage_PostbackSource = '';
params.MSOTlPn_SelectedWpId = '';
params.MSOTlPn_View = 0;
params.MSOTlPn_ShowSettings = "False";
params.MSOGallery_SelectedLibrary = '';
params.MSOGallery_FilterString = '';
params.MSOTlPn_Button = "none";
params.__EVENTTARGET = "ctl00$PlaceHolderMain$HtmlAnchorEnd";
params.__EVENTARGUMENT = "";
params.MSOSPWebPartManager_DisplayModeName = "Browse";
params.MSOSPWebPartManager_ExitingDesignMode = 'false';
params.MSOWebPartPage_Shared = '';
params.MSOLayout_LayoutChanges = '';
params.MSOLayout_InDesignMode = '';
params.MSOSPWebPartManager_OldDisplayModeName = 'Browse';
params.MSOSPWebPartManager_StartWebPartEditingName = 'false';
params.MSOSPWebPartManager_EndWebPartEditing = 'false';
params._maintainWorkspaceScrollPosition = 0;
params.__REQUESTDIGEST = requestDigest;
params.__VIEWSTATE = viewState;
params.__VIEWSTATEGENERATOR = viewStateGenerator;
params.__SCROLLPOSITIONX = 0;
params.__SCROLLPOSITIONY = 0;
params.__EVENTVALIDATION = eventValidation;
params["ctl00$PlaceHolderMain$WorkflowInstanceID"] = lastInstance.Id;
params["ctl00$PlaceHolderMain$WorkflowInstanceName"] = '';
params["ctl00$PlaceHolderMain$CachedTaskQueryString"] = '';
params["ctl00$PlaceHolderMain$CachedHistoryQueryString"] = '';
// call the page to stop the workflow
await ajax.call(this, {
url:lastInstance.StatusPageUrl,
method:'POST',
headers:{
'Content-Type': 'application/x-www-form-urlencoded'
},
body:Object.keys(params).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`).join('&')
});
});
}