×

Please give details of the problem

Skip to content

Validation of Set of Manual Tasks

Goal : Create a 'my tasks' report and a button to automatically validate the selected tasks.

2012-05-25_164109

Technically, when you validate a RMP manual task, this performs a PUT on the manual task url to change its status and inject the new parameters. After the task is approved the associated process is awaken.

To make this multi-approval feature, we have to inject in the report the manual task urls (different from the name column), and when we'll click on the 'approve selected requests' button, this will trigger a javascript code that
gets the selected rows of the report (including manual tasks links)
updates each manual task (passing a parameter choice="approved' in our example) via ajax calls
* reloads the report when this is done

1) Build the manual task link

Go into your process, click on the manual task activity (1) and open functional tab

2012-05-25_165224

You get the id of the activity : "1" (2). Now click on Input Variables (3):

2012-05-25_165550

create a variable name = task_url (4) and value = https://live.runmyprocess.com/live/${P_customer}/request/${P_request}/task/ACTIVITY_ID/0 (5)

where ACTIVITY_ID is the id of the activity = 1 in our example.
So the url becomes :
https://live.runmyprocess.com/live/${P_customer}/request/${P_request}/task/1/0

this variable will be automatically computed when the process reaches this step. To make this variable appear in reports, click on Measures (1)

2012-05-25_170756

Add a new measure (2) and create a new measure task_url = ${task_url} (3)

2012-05-25_170909

Click on OK and save your process.

2) Configure the report

As the measure has been created, you can add a new column task_url in your tasks report:

2012-05-25_171150

Note : do check your report displays only manual tasks that are PENDING (="start') in the right approval screen ('Validation' in this example)

If you click on 'Search results', you should see:

2012-05-25_171615

Save your report as 'My Tasks - TEST'.

3) Configure the webinterface containing the report

3.1) Configure the report widget

Now your report is well configured, add it to the 'Report' web interface (1). Put the identifier 'id_report_my_tasks' to the widget (2).

2012-05-25_174340

Then click on the configuration key (3) and untick the task_url column to make it unvisible (4):

2012-05-25_174608

3.2) Configure the javascript

We'll perform ajax calls to update the manual tasks. Let's add the jquery library to our webinterface. Go to the 'Javascript' tab (1) and add in the footer https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js (2):

2012-05-25_173025

Now come back to the design tab and add a hidden javascript widget at the bottom of the webinterface (1). Then click on 'View or edit script' (2):

2012-05-25_174047

2012-05-25_173324

And copy paste source code below:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
function approve_request(my_task_url){

 string_feed = '<feed xmlns="http://www.w3.org/2005/Atom" xmlns:p="http://www.runmyprocess.com/live/" xml:base="https://live.runmyprocess.com/"><title>Process update request</title><link rel="self" href="' + my_task_url + '"/><rights>(c) RunMyProcess</rights><category term="event" label="COMPLETE"/><entry> <title>New parameters</title><id>0</id><category term="computed"/><content type="text/base64">eyJjaG9pY2UiOiJhcHByb3ZlZCJ9</content></entry> </feed>';

 $.ajax({
  type:"PUT" 
  ,url: my_task_url
  ,data:string_feed
  ,cache:true
  ,async: false
  ,headers:{"RMPData-Version":"v1_0"}
  ,contentType: "application/xml"
  ,error: function(){alert('Error while approving request : ' + my_task_url);}
 });

}

Note : This function will perform a PUT call on the manual task url, passing a xml as content (string_feed). You can pass any variable as BASE64 encoded in the content tag. Here the BASE64 content is eyJjaG9pY2UiOiJhcHByb3ZlZCJ9. Decoded value is {"choice":"approved"}

To encode/decode strings, you can use http://www.motobit.com/util/base64-decoder-encoder.asp

3.3) Configure the button 'Approve selected requests'

Add a button (1) Action 'Execute script' (2) and click on 'View or edit script' (3):

2012-05-25_174839

Then copy paste the code below:

1
2
3
4
5
var a_selected_tasks = id_report_my_tasks.getSelectedLinesValues();  
for(i=0;i<a_selected_tasks.length;i++) {  
approve_request(a_selected_tasks[i].measure_9);  
}  
setTimeout("id_report_my_tasks.refresh();",2000);

Note :
This code will get the selected rows of the id_report_my_tasks widget, then will make a loop and call the approve_request function previously defined.

You're done, give it a try!