Overview
ProcessMaker provides connection to other applications though REST API. To see more information about REST API in ProcessMaker, for example registering a new application or generating an access token, please follow this wiki page. In this wiki page we are going to describe the endpoints in the sections below that are used to obtain information about cases and control when running cases.
- Overview
- Filters For Listing Cases
- Calling
/home/{case_status}
endpoints - Get To Do Cases:
GET /home/todo
- Get Draft Cases:
GET /home/draft
- Get Unassigned Cases:
GET /home/unassigned
- Get Paused Cases:
GET /home/paused
- Get Participated Cases:
GET /home/mycases
- Get Searched Cases:
GET /home/search
- Get Case Information:
GET /cases/{app_uid}
- Get Case's Current Tasks:
GET /cases/{app_uid}/current-task
- Get Case's Tasks:
GET /cases/{app_uid}/tasks
- Get Starting Tasks:
GET /case/start-cases
- Get Sub-Process Cases:
GET /cases/{app_uid}/sub-process-cases
- New Case:
POST /cases
- Format of Variables
- New Case Impersonate:
POST /cases/impersonate
- Reassign Case:
PUT /cases/{app_uid}/reassign-case
- Batch Reassigning Cases:
POST /cases/reassign
- Route Case:
PUT /cases/{app_uid}/route-case
- Cancel Case:
PUT /cases/{app_uid}/cancel
- Pause Case:
PUT /cases/{app_uid}/pause
- Unpause Case:
PUT /cases/{app_uid}/unpause
- Execute Trigger:
PUT /cases/{app_uid}/execute-trigger/{tri_uid}
- Delete Case:
DELETE /cases/{app_uid}
Filters For Listing Cases
Regarding to the case status or search, the following endpoints return a list of cases:
- GET /home/todo
- GET /home/draft
- GET /home/unassigned
- GET /home/paused
- GET /home/mycases
- GET /home/search
Any of those endpoints return fifteen cases by default and they are sort by case number, which means that cases created recently display first. Aditionally, diferent GET parameters could be included in the URL.
The table in the section below table describes details about the shared URL parameters when listing cases. The other parameters are explained in every endpoint section.
Parameter | Description | Default value | Example |
---|---|---|---|
caseNumber={integer} | Receives an integer that is the Number of the case. | 0 | /api/1.0/workflow/home/todo?caseNumber=297 |
process={integer} | Receives an integer that is the Process UID. | 0 | /api/1.0/workflow/home/todo?process=1234567890 |
task={integer} | Receives an integer that is the Task UID. | 0 | /api/1.0/workflow/home/todo?task=1234567890 |
limit={integer} | Receives an integer with the limit number. | 0 | /api/1.0/workflow/home/todo?limit=5 |
offset={integer} | Receives an integer with the offset number. | 0 | /api/1.0/workflow/home/todo?offset=5 |
caseTitle={string} | Receives a case title string. | /api/1.0/workflow/home/todo?caseTitle=CaseTitle |
Calling /home/{case_status}
endpoints
After calling a GET /home/{case_status}
endpoint, decode the JSON string returned by the endpoint with a function such as JSON.parse(), eval() in JavaScript or json_decode() in PHP.
It returns an object with a data array containing the case objects and a total with the total cases number value.
Case Object
The GET endpoints which return cases enclose the information about each case in the following case object:
Element | Description | Example |
---|---|---|
{ | Begin case object. | |
APP_NUMBER | The Case Number, which counts cases in the workspace, starting from 1. | 220 |
DEL_TITLE | The delegation process title. | #220 |
PRO_TITLE | The title for the case process. | PROCESS EMAIL LINK TO CASE |
TAS_TITLE | The title for the current case task. | Path2 Task |
USR_USERNAME | john | |
USR_FIRSTNAME | The username for the current user in the process. | John |
USR_LASTNAME | The user last name for the current user in the process. | Doe |
DEL_TASK_DUE_DATE | Datetime in "YYYY-MM-DD HH:MM:SS" format when the current task is due (scheduled to be completed). | 2021-03-03 09:00:30 |
DEL_DELEGATE_DATE | Datetime in "YYYY-MM-DD HH:MM:SS" format when case was routed to the current task. | 2021-03-02 09:00:30 |
DEL_PRIORITY | The case's delegation priority index which can be "VERY LOW" (1), "LOW" (2), "NORMAL" (3), "HIGH" (4) and "VERY HIGH" (5). | 3 |
DEL_PREVIOUS | The previous delegation index. | 2 |
APP_UID | Unique ID of case. | 684564696603e44c4e4a902023288322 |
DEL_INDEX | Delegation index of case, which counts tasks executed in the case, starting from 1. | 4 |
PRO_UID | Unique ID of the case's process. | 3574616336037a51b480613060686372 |
TAS_UID | Unique ID of current task in case. | 2504790786037a51b7e6654038512745 |
DEL_PRIORITY_LABEL | The case's delegation priority label which can be "VERY LOW" (1), "LOW" (2), "NORMAL" (3), "HIGH" (4) and "VERY HIGH" (5). | NORMAL |
TAS_COLOR | Color of the current task diferenced by status. | 2 |
TAS_COLOR_LABEL | Color label of the current task diferenced by status. | red |
TAS_STATUS | Current status of the task. | OVERDUE |
DELAY | Current task delay that displays in Days, Hours and seconds. | 173 Day(s) 03 Hr(s) 02 min 05 s |
DEL_TASK_DUE_DATE_LABEL | Date in "MM.DD.YY" format when the delegation task started with the due. | 03.03.21 |
DEL_DELEGATE_DATE_LABEL | Date in "MM.DD.YY" format when the task was delegated. | 03.02.21 |
SEND_BY_INFO | Object with the previous delegation index and the user tooltip array. | {"del_previous": 2, "user_tooltip": []} |
} | End case object. |
Returning a list of cases
The GET endpoints which return a list of cases, return an object with a data array of case objects and a total value with the following structure:
"data": [
{ // first case object
"APP_NUMBER": "298",
...
},
{ // second case object
"APP_NUMBER": "297",
...
}
... // additional case objects
],
"total": 90
Reading a list of cases with JavaScript:
req.open("GET", "https://example.com/api/1.0/workflow/home/todo", true);
req.setRequestHeader("Authorization", "Bearer " + accessToken);
req.onreadystatechange = function() {
if (req.readyState==4 && req.status==200) { //if a successful request
//use JSON.parse() to decode string if browser supports it:
var reqtData = (JSON) ? JSON.parse(req.responseText) : eval(req.responseText);
var aCasesTotal = reqData.total;
var aCases = reqData.data;
//loop through array of cases and print when each one is due in the <body>
for (var i = 0; i < aCases.length; i++) {
var p = document.createElement('p');
p.innerHTML = "Case number '" + aCases[i].APP_NUMBER + "' in task '" + aCases[i].TAS_TITLE +
"' is due " + aCases[i].DEL_TASK_DUE_DATE_LABEL + ".";
document.body.appendChild(p);
}
}
};
req.send(null);
Reading a list of cases with PHP:
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer " . $accessToken));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$reqData = json_decode(curl_exec($ch));
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($statusCode == 200) { //if successful request
//loop through array of cases and print when each one is due:
$aCasesTotal = $reqData->total;
$aCases = $reqData->data;
foreach ($aCases as $oCase) {
print "<p>Case number '{$oCase->APP_NUMBER}' in task '{$oCase->TAS_TITLE}' is due {$oCase->DEL_TASK_DUE_DATE_LABEL}.</p>\n";
}
}
Get To Do Cases: GET /home/todo
This endpoint get the list of the To Do cases for the logged on user. The following is the syntax when calling the endpoint:
- GET /api/1.0/{workspace}/home/todo?{param1=value}&{param2=value2}
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/home/todo filters For further information, check the Filters for Listing To Do cases section. /api/1.0/workflow/home/todo?limit=7
Result:
When calling the endpoint successfully, the HTTP status code is set to 200 and an object with a data array of case objects and a total value is returned. Check the example below.
"data": [
{
"APP_NUMBER": 298,
"DEL_TITLE": "# 298",
"PRO_TITLE": "PMCORE-3126",
"TAS_TITLE": "t1 4h",
"USR_USERNAME": null,
"USR_FIRSTNAME": null,
"USR_LASTNAME": null,
"DEL_TASK_DUE_DATE": "2021-08-18 15:02:33",
"DEL_DELEGATE_DATE": "2021-08-17 15:02:33",
"DEL_PRIORITY": "3",
"DEL_PREVIOUS": 4,
"APP_UID": "576293895611c0533f38754023459753",
"DEL_INDEX": 5,
"PRO_UID": "932791136611be1231ef8f9057005581",
"TAS_UID": "icte-6801611be14eab3ed4087280461",
"DEL_PRIORITY_LABEL": "NORMAL",
"TAS_COLOR": 2,
"TAS_COLOR_LABEL": "red",
"TAS_STATUS": "OVERDUE",
"DELAY": " 5 Day(s) 06 Hr(s) 17 min 56 s",
"DEL_TASK_DUE_DATE_LABEL": "08.18.21",
"DEL_DELEGATE_DATE_LABEL": "08.17.21",
"SEND_BY_INFO": {
"del_previous": 4,
"user_tooltip": []
}
}, {
...
}
],
"total": 85
}
If an error occurred, then the HTTP status code is set with the 400 code or above and an error object is returned. Check the example below.
"error": {
"code": 400,
"message": "Bad Request: Invalid value specified for `limit`. Expecting integer value"
}
}
Filters For Listing Todo Cases
In addition to the filter parameters described in a previous section, these are the filters when working with To Do cases:
Parameter | Description | Default value | Example |
---|---|---|---|
delegateFrom={string} | Receives a delegate from string value. | /api/1.0/workflow/home/todo?delegateFrom=DelegateFrom | |
delegateTo={string} | Receives a delegate to string value. | /api/1.0/workflow/home/todo?delegateTo=DelegateTo |
JavaScript Example
This example prints a list of To Do cases which are overdue. It compares the due date of the current task with the current datetime. The two datetimes are instantiating as Date() objects so they can be compared. (Note that the date comparison will only be exact if the time of the local computer is the same as the time on the ProcessMaker server.) In order to instantiate the due date as a Date
object, the replace(/-/g, ' '))
method is used to convert its value from YYYY-MM-DD HH:MM:SS to YYYY MM DD HH:MM:SS.
var accessToken = getCookie("access_token"); // custom function to get a stored cookie
if (!accessToken) {
accessToken = getAccessToken(); //custom function to get a new access token
}
var req = new XMLHttpRequest();
req.open("GET", apiServer + "/api/1.0/workflow/home/todo", true);
req.setRequestHeader("Authorization", "Bearer " + accessToken);
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) { //if a successful request
//use JSON.parse() to decode response text if the web browser supports it:
var getData = (JSON) ? JSON.parse(req.responseText) : eval(req.responseText);
var aCasesTotal = getData.total;
var aCases = getData.data;
//loop through array of cases and print each one which is overdue in the <body>
for (var i = 0; i < aCases.length; i++) {
var dueDate = new Date(aCases[i].DEL_TASK_DUE_DATE.replace(/-/g, ' '));
var currentDate = new Date(); // this may need to be adjusted to match time on server
if (dueDate.getTime() < currentDate.getTime()) {
var p = document.createElement('p');
p.innerHTML = "Case number '" + aCases[i].APP_NUMBER + "' in task '" + aCases[i].TAS_TITLE +
"' was due " + aCases[i].DEL_TASK_DUE_DATE + ".";
document.body.appendChild(p);
}
}
}
else if (req.readyState == 4 && req.status != 0) {
var oErr = (JSON) ? JSON.parse(req.responseText) : eval(req.responseText);
if (oErr)
alert("Error code: " + oErr.error.code + "\nMessage: " + oErr.error.message);
else
alert("HTTP status error: " + req.status);
}
}
req.send(null);
The above JavaScript code should add text to the bottom of the web page, such as:
Case '#10' in task 'Company protocol training' was due 2021-02-02 13:16:17.
Case '#7' in task 'Practice safety with trainer' was due 2021-02-02 11:15:14.
Case '#5' in task 'Written safety test' was due 2021-01-30 12:41:35.
Case '#5' in task 'Practice safety with trainer' was due 2021-01-30 12:41:36.
Case '#3' in task 'Practice safety with trainer' was due 2021-01-30 09:45:10.
PHP Example
This example prints a list of To Do cases which are overdue. It compares the due date of the current task with the current datetime which is obtained using the date('Y-m-d H:i:s') function. Note that it compares the two dates as strings, which works because both are in standard YYYY-MM-DD HH:MM:SS format.
$accessToken = isset($_COOKIE['access_token']) ? $_COOKIE['access_token'] : getAccessToken(); // custom function to get a new access token
$ch = curl_init($apiServer . "/api/1.0/workflow/home/todo");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer " . $accessToken));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$aCases = json_decode(curl_exec($ch));
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($statusCode != 200) {
if (isset ($aCases) and isset($aCases->error))
print "Error code: {$aCases->error->code}\nMessage: {$aCases->error->message}\n";
else
print "Error: HTTP status code: $statusCode\n";
}
else {
print "<font color=red>Overdue Cases:</font><br>\n";
$zCases = $aCases->data;
foreach ($zCases as $oCase) {
//if the due date is before the current datetime, then print it.
if ($oCase->DEL_TASK_DUE_DATE < date('Y-m-d H:i:s')) {
print "Case '{$oCase->app_title}' was due on {$oCase->DEL_TASK_DUE_DATE}.<br>\n";
}
}
}
The above PHP code print text, such as:
Case '#12' was due on 2021-02-05 17:00:00.
Case '#10' was due on 2021-02-02 13:16:17.
Case '#7' was due on 2021-02-02 11:15:14.
Case '#5' was due on 2021-01-30 12:41:35.
Case '#5' was due on 2021-01-30 12:41:36.
Case '#3' was due on 2021-01-30 09:45:10.
Get Draft Cases: GET /home/draft
This endpoint get the list of the To Do cases for the logged on user. The following is the syntax when calling the endpoint:
- GET /api/1.0/{workspace}/home/draft?{param1=value}&{param2=value2}
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/home/draft filters See Filters for Listing draft cases. /api/1.0/workflow/home/draft?limit=1
Result:
When calling the endpoint successfully, the HTTP status code is set to 200 and an object with a data array of case objects and a total value is returned. Check the example below.
"data": [
{
"APP_NUMBER": 172,
"DEL_TITLE": "# 172",
"PRO_TITLE": "PMCORE-985: Replicate Bug Notifications",
"TAS_TITLE": "Task 4",
"DEL_TASK_DUE_DATE": "2021-02-03 13:34:54",
"DEL_DELEGATE_DATE": "2021-02-02 13:34:54",
"DEL_PRIORITY": "3",
"DEL_PREVIOUS": 1,
"APP_UID": "42985128560199b4a8b7f96064834917",
"DEL_INDEX": 2,
"PRO_UID": "6516103415d541866d26b15085318914",
"TAS_UID": "619746171601981e4a58e55072232126",
"DEL_PRIORITY_LABEL": "NORMAL",
"TAS_COLOR": 2,
"TAS_COLOR_LABEL": "red",
"TAS_STATUS": "OVERDUE",
"DELAY": " 201 Day(s) 07 Hr(s) 48 min 23 s",
"DEL_TASK_DUE_DATE_LABEL": "02.03.21",
"DEL_DELEGATE_DATE_LABEL": "02.02.21",
"SEND_BY_INFO": {
"del_previous": 1,
"user_tooltip": {
"usr_id": 1,
"usr_username": "admin",
"usr_firstname": "Administrator",
"usr_lastname": "admin",
"usr_email": "admin@processmaker.com",
"usr_position": "Administrator"
}
}
}, {
...
}
],
"total": 9
}
If an error occurred, then the HTTP status code is set with the 400 code or above and an error object is returned. Check the example below.
"error": {
"code": 400,
"message": "Bad Request: Invalid value specified for `limit`. Expecting integer value"
}
}
Filters For Listing Draft Cases
To see more details, check the filter parameters section.
Get Unassigned Cases: GET /home/unassigned
This endpoint get the list of the Unassigned cases for the logged on user. The following is the syntax when calling the endpoint:
- GET /api/1.0/{workspace}/home/unassigned?{param1=value}&{param2=value2}
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/home/unassigned filters For further information, check the Filters for Listing Unassigned cases section. /api/1.0/workflow/home/unassigned?limit=7
Result:
When calling the endpoint successfully, the HTTP status code is set to 200 and an object with a data array of case objects and a total value is returned. Check the example below.
"data": [
{
"APP_NUMBER": 298,
"DEL_TITLE": "# 298",
"PRO_TITLE": "PMCORE-3126",
"TAS_TITLE": "t1 4h",
"USR_USERNAME": null,
"USR_FIRSTNAME": null,
"USR_LASTNAME": null,
"DEL_TASK_DUE_DATE": "2021-08-18 15:02:33",
"DEL_DELEGATE_DATE": "2021-08-17 15:02:33",
"DEL_PRIORITY": "3",
"DEL_PREVIOUS": 4,
"APP_UID": "576293895611c0533f38754023459753",
"DEL_INDEX": 5,
"PRO_UID": "932791136611be1231ef8f9057005581",
"TAS_UID": "icte-6801611be14eab3ed4087280461",
"DEL_PRIORITY_LABEL": "NORMAL",
"TAS_COLOR": 2,
"TAS_COLOR_LABEL": "red",
"TAS_STATUS": "OVERDUE",
"DELAY": " 5 Day(s) 06 Hr(s) 17 min 56 s",
"DEL_TASK_DUE_DATE_LABEL": "08.18.21",
"DEL_DELEGATE_DATE_LABEL": "08.17.21",
"SEND_BY_INFO": {
"del_previous": 4,
"user_tooltip": []
}
}, {
...
}
],
"total": 85
}
If an error occurred, then the HTTP status code is set with the 400 code or above and an error object is returned. Check the example below.
"error": {
"code": 400,
"message": "Bad Request: Invalid value specified for `limit`. Expecting integer value"
}
}
Filters For Listing Todo Cases
In addition to the filter parameters described in a previous section, these are the filters when working with Unassigned cases:
Parameter | Description | Default value | Example |
---|---|---|---|
delegateFrom={string} | Receives a delegate from string value. | /api/1.0/workflow/home/unassigned?delegateFrom=DelegateFrom | |
delegateTo={string} | Receives a delegate to string value. | /api/1.0/workflow/home/unassigned?delegateTo=DelegateTo |
Get Paused Cases: GET /home/paused
This endpoint get the list of the Paused cases for the logged on user. The following is the syntax when calling the endpoint:
- GET /api/1.0/{workspace}/home/paused?{param1=value}&{param2=value2}
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/home/paused filters For further information, check the Filters for Listing Paused cases section. /api/1.0/workflow/home/paused?limit=7
Result:
When calling the endpoint successfully, the HTTP status code is set to 200 and an object with a data array of case objects and a total value is returned. Check the example below.
"data": [
{
"APP_NUMBER": 298,
"DEL_TITLE": "# 298",
"PRO_TITLE": "PMCORE-3126",
"TAS_TITLE": "t1 4h",
"USR_USERNAME": null,
"USR_FIRSTNAME": null,
"USR_LASTNAME": null,
"DEL_TASK_DUE_DATE": "2021-08-18 15:02:33",
"DEL_DELEGATE_DATE": "2021-08-17 15:02:33",
"DEL_PRIORITY": "3",
"DEL_PREVIOUS": 4,
"APP_UID": "576293895611c0533f38754023459753",
"DEL_INDEX": 5,
"PRO_UID": "932791136611be1231ef8f9057005581",
"TAS_UID": "icte-6801611be14eab3ed4087280461",
"DEL_PRIORITY_LABEL": "NORMAL",
"TAS_COLOR": 2,
"TAS_COLOR_LABEL": "red",
"TAS_STATUS": "OVERDUE",
"DELAY": " 5 Day(s) 06 Hr(s) 17 min 56 s",
"DEL_TASK_DUE_DATE_LABEL": "08.18.21",
"DEL_DELEGATE_DATE_LABEL": "08.17.21",
"SEND_BY_INFO": {
"del_previous": 4,
"user_tooltip": []
}
}, {
...
}
],
"total": 85
}
If an error occurred, then the HTTP status code is set with the 400 code or above and an error object is returned. Check the example below.
"error": {
"code": 400,
"message": "Bad Request: Invalid value specified for `limit`. Expecting integer value"
}
}
Filters For Listing Paused Cases
In addition to the filter parameters described in a previous section, these are the filters when working with Paused cases:
Parameter | Description | Default value | Example |
---|---|---|---|
delegateFrom={string} | Receives a delegate from string value. | /api/1.0/workflow/home/paused?delegateFrom=DelegateFrom | |
delegateTo={string} | Receives a delegate to string value. | /api/1.0/workflow/home/paused?delegateTo=DelegateTo |
Get Participated Cases: GET /home/mycases
This endpoint get the list of the Participated cases for the logged on user. The following is the syntax when calling the endpoint:
- GET /api/1.0/{workspace}/home/mycases?{param1=value}&{param2=value2}
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/home/mycases filters For further information, check the Filters for Listing Participated cases section. /api/1.0/workflow/home/mycases?limit=7
Result:
When calling the endpoint successfully, the HTTP status code is set to 200 and an object with a data array of case objects and a total value is returned. Check the example below.
"data": [
{
"APP_NUMBER": 298,
"DEL_TITLE": "# 298",
"PRO_TITLE": "PMCORE-3126",
"TAS_TITLE": "t1 4h",
"USR_USERNAME": null,
"USR_FIRSTNAME": null,
"USR_LASTNAME": null,
"DEL_TASK_DUE_DATE": "2021-08-18 15:02:33",
"DEL_DELEGATE_DATE": "2021-08-17 15:02:33",
"DEL_PRIORITY": "3",
"DEL_PREVIOUS": 4,
"APP_UID": "576293895611c0533f38754023459753",
"DEL_INDEX": 5,
"PRO_UID": "932791136611be1231ef8f9057005581",
"TAS_UID": "icte-6801611be14eab3ed4087280461",
"DEL_PRIORITY_LABEL": "NORMAL",
"TAS_COLOR": 2,
"TAS_COLOR_LABEL": "red",
"TAS_STATUS": "OVERDUE",
"DELAY": " 5 Day(s) 06 Hr(s) 17 min 56 s",
"DEL_TASK_DUE_DATE_LABEL": "08.18.21",
"DEL_DELEGATE_DATE_LABEL": "08.17.21",
"SEND_BY_INFO": {
"del_previous": 4,
"user_tooltip": []
}
}, {
...
}
],
"total": 85
}
If an error occurred, then the HTTP status code is set with the 400 code or above and an error object is returned. Check the example below.
"error": {
"code": 400,
"message": "Bad Request: Invalid value specified for `limit`. Expecting integer value"
}
}
Filters For Listing Participated Cases
In addition to the filter parameters described in a previous section, these are the filters when working with Participated cases:
Parameter | Description | Default value | Example |
---|---|---|---|
filterCases={string} | Receives a filter case string value. | /api/1.0/workflow/home/mycases?filterCases=filterCases | |
filter={string} | Receives a filter string value. | /api/1.0/workflow/home/mycases?filter=filter | |
caseStatus={string} | Receives a case status string value. | /api/1.0/workflow/home/mycases?caseStatus=caseStatus | |
startCaseFrom={string} | Receives a start case from date in string format. | /api/1.0/workflow/home/mycases?startCaseFrom=startCaseFrom | |
startCaseTo={string} | Receives a start case to date in string format. | /api/1.0/workflow/home/mycases?startCaseTo=startCaseTo | |
finishCaseFrom={string} | Receives a finish case from date in string format. | /api/1.0/workflow/home/mycases?finishCaseFrom=01-01-2021 | |
finishCaseTo={string} | Receives a finish case to date in string format. | /api/1.0/workflow/home/mycases?finishCaseTo=01-01-2021 |
Get Searched Cases: GET /home/search
This endpoint get the list of the Searched cases for the logged on user. The following is the syntax when calling the endpoint:
- GET /api/1.0/{workspace}/home/search?{param1=value}&{param2=value2}
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/home/search filters For further information, check the Filters for Listing Searched cases section. /api/1.0/workflow/home/search?limit=7
Result:
When calling the endpoint successfully, the HTTP status code is set to 200 and an object with a data array of case objects and a total value is returned. Check the example below.
"data": [
{
"APP_NUMBER": 207,
"DEL_TITLE": "#207",
"PRO_TITLE": "PMCORE-2838: Populate multiple file grid",
"APP_STATUS": "DRAFT",
"APP_CREATE_DATE": "2021-02-17 13:38:08",
"APP_FINISH_DATE": null,
"APP_UID": "941231572602d62902fb000023298879",
"PRO_UID": "64520145960218deb33e252044547615",
"APP_CREATE_DATE_LABEL": "02.17.21",
"APP_FINISH_DATE_LABEL": null,
"DURATION": " 187 Day(s) 08 Hr(s) 45 min 53 s",
"CASE_NOTES_COUNT": 0,
"DEL_INDEX": 1,
"TAS_UID": "66043584360218e88439bb4025779674",
"THREAD_TASKS": [
{
"tas_uid": "66043584360218e88439bb4025779674",
"tas_title": "Task 1",
"user_id": 1,
"due_date": "2021-02-18 13:38:08",
"delay": " 186 Day(s) 08 Hr(s) 45 min 53 s",
"tas_color": 2,
"tas_color_label": "red",
"tas_status": "OVERDUE",
"unassigned": false,
"user_tooltip": {
"usr_id": 1,
"usr_username": "admin",
"usr_firstname": "Administrator",
"usr_lastname": "admin",
"usr_email": "admin@processmaker.com",
"usr_position": "Administrator"
}
}
],
"THREAD_USERS": [
{
"user_tooltip": {
"usr_id": 1,
"usr_username": "admin",
"usr_firstname": "Administrator",
"usr_lastname": "admin",
"usr_email": "admin@processmaker.com",
"usr_position": "Administrator"
},
"user_id": 1,
"usr_username": "admin",
"usr_lastname": "admin",
"usr_firstname": "Administrator"
}
],
"THREAD_TITLES": [
{
"del_id": 410,
"del_index": 1,
"thread_title": "# 207"
}
]
}
],
"total": 0
}
If an error occurred, then the HTTP status code is set with the 400 code or above and an error object is returned. Check the example below.
"error": {
"code": 400,
"message": "Bad Request: Invalid value specified for `limit`. Expecting integer value"
}
}
Filters For Listing Searched Cases
In addition to the filter parameters described in a previous section, these are the filters when working with Searched cases:
Parameter | Description | Default value | Example |
---|---|---|---|
filterCases={string} | Receives a filter case string value. | /api/1.0/workflow/home/search?filterCases=filterCases | |
caseStatuses={string} | Receives a case status string value. | /api/1.0/workflow/home/search?caseStatus=caseStatuses | |
startCaseFrom={string} | Receives a start case from date in string format. | /api/1.0/workflow/home/search?startCaseFrom=startCaseFrom | |
startCaseTo={string} | Receives a start case to date in string format. | /api/1.0/workflow/home/search?startCaseTo=startCaseTo | |
finishCaseFrom={string} | Receives a finish case from date in string format. | /api/1.0/workflow/home/search?finishCaseFrom=01-01-2021 | |
finishCaseTo={string} | Receives a finish case to date in string format. | /api/1.0/workflow/home/search?finishCaseTo=01-01-2021 | |
category={string} | Receives a category string value. | /api/1.0/workflow/home/search?category=category | |
user={string} | Receives a username string value. | /api/1.0/workflow/home/search?user=myUser | |
userCompleted={string} | Receives the user that completed the process string value. | /api/1.0/workflow/home/search?userCompleted=myUser | |
userStarted={string} | Receives a the user that started the process string value. | /api/1.0/workflow/home/search?userStarted=myUser |
Get Case Information: GET /cases/{app_uid}
Get Information about a specified case.
Permission:
- As of ProcessMaker 3.3.0, if users do not participate in the case, they must have Process Permissions like the Summary Form or ALL.
Structure:
- GET /api/1.0/{workspace}/cases/{app_uid}
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/51382566154f7180953b5e1028461947 {app_uid} The unique ID of the case to get information about. /api/1.0/workflow/cases/51382566154f7180953b5e1028461947
Result:
If a successful, then the HTTP status code is set to 200 and the following information about the case and its current task(s) are returned. For example:
"app_uid": "36722263554ca70b82c52e8020802754",
"app_number": "5",
"app_name": "#5",
"app_status": "TO_DO",
"app_init_usr_uid": "00000000000000000000000000000001",
"app_init_usr_username": "Administrator",
"pro_uid": "35648267754ca36d119ecc1014698225",
"pro_name": "Safety training course",
"app_create_date": "2015-01-29 12:41:12",
"app_update_date": "2015-01-29 13:21:55",
"current_task":
(
{
"usr_uid": "00000000000000000000000000000001",
"usr_name": "Administrator",
"tas_uid": "89626647354ca3c43743e66000804527",
"tas_title": "Written safety test",
"del_index": 2,
"del_thread": 2,
"del_thread_status": "OPEN"
},
{
"usr_uid": "00000000000000000000000000000001",
"usr_name": "Administrator",
"tas_uid": "60687790754ca3c434b57d5092245736",
"tas_title": "Practice safety with trainer",
"del_index": 3,
"del_thread": 3,
"del_thread_status": "OPEN"
}
)
}
If an error occurred, then the HTTP status code will be set to 400 or greater and an error object will be returned, such as:
"error": {
"code": 400,
"message": "Bad Request: The Application row '37213410154d375de3e3620044382558' doesn't exist!"
}
}
PHP Example:
This example prints information about a particular case:
$oRet = pmRestRequest("GET", '/api/1.0/workflow/cases/' . $caseId);
if ($oRet == 200 and !empty($oRet->response)) {
print "Case {$oRet->response->app_name} was started by {$oRet->response->app_init_usr_username} " .
"on {$oRet->response->app_create_date} and was last updated on {$oRet->response->app_update_date}\n";
foreach ($oRet->response->current_task as $oTask) {
print "Task {$oTask->tas_title} is assigned to {$oTask->usr_name}.\n";
}
}
Get Case's Current Tasks: GET /cases/{app_uid}/current-task
Get the current task(s) of a case. Note that if this endpoint is called for a case that has already been completed, then there is no current task and an error will be returned. Note that the logged-in user must either be currently assigned to work on the case or have Process Permissions to access the task(s).
- GET /api/1.0/{workspace}/cases/{app_uid}/current-task
URL Parameters:
-
Parameter Description Example workspace Workspace name which by default is "workflow". /api/1.0/workflow/cases/37213410154d375de3e3620044382558/current-task app_uid Case's unique ID. /api/1.0/workflow/cases/37213410154d375de3e3620044382558/current-task
Result:
If successful, then sets the HTTP status code to 200 and returns an array of task objects, such as:
{
"tas_uid": "53643749052af5bdef3ca79050192707",
"tas_title": "Advise Loan Officer",
"del_index": "2"
},
{
"tas_uid": "740892399532b1da90901a9001372427",
"tas_title": "Credit Check",
"del_index": "3"
}
]
Otherwise, the HTTP status code is set to 400 or greater and a error is returned, such as:
"error": {
"code": 400,
"message": "Bad Request: Incorrect or unavailable information about this case: 37213410154d375de3e3620044382558"
}
}
Note: If a case has "COMPLETED", "PAUSED", "CANCELLED" or "DELETED" status, then the above error object is returned.
PHP Example:
$oRet = pmRestRequest("GET", "/api/1.0/workflow/cases/$caseId/current-task");
if ($oRet == 200 and !empty($oRet->response)) {
print "Current Tasks:\n";
foreach ($oRet->response as $oTask) {
print "Task {$oTask->tas_title}.\n";
}
}
Get Case's Tasks: GET /cases/{app_uid}/tasks
Get all the tasks of a case, including completed, current and future tasks.
- GET /api/1.0/{workspace}/cases/{app_uid}/tasks
Method: workflow/engine/src/ProcessMaker/Services/Api/Cases.php: doGetTasks($app_uid)
Note: This endpoint will not indicate whether a case has been canceled, paused or completed. The task's status
property it returns can be deceptive, since it lists "TASK_COMPLETED"
when all the steps are completed but before routing to the next task. If needing to know the overall status of a case or to be sure which is the current task, is recommended to call another endpoint such as GET api/1.0/{workspace}/cases/{app_uid} and check its app_status
and current_task
.
URL Parameters:
-
Parameter Description Example workspace Workspace name which by default is "workflow". /api/1.0/workflow/cases/37213410154d375de3e3620044382558/tasks app_uid Case's unique ID. /api/1.0/workflow/cases/37213410154d375de3e3620044382558/tasks
Result:
If successful, then sets the HTTP status code to 200
and returns an array of task objects:
[ | Start array of task objects |
{ | Start task object |
"tas_uid": | Unique ID of the task |
"tas_title": | Title of the task |
"tas_description": | Description of the task |
"tas_start": | Set to 1 if the task has already been opened to start working on it. If not yet opened, then set to 0 |
"tas_type": | Type of task, which can be: "NORMAL", "ADHOC" (if task can be reassigned to an ad hoc user) or "SUBPROCESS" |
"tas_derivation": | Type of derivation which is always "NORMAL" |
"tas_assign_type": | Task's assignment rule, which can be: "BALANCED" (cyclical assignment) "MANUAL" (Manual assignment) "EVALUATE" (Value Based Assignment) "REPORT_TO" (Reports to) "SELF_SERVICE" (Self Service) "SELF_SERVICE_EVALUATE" (Self Service Value Based Assignment) |
"usr_uid": | Unique ID of user assigned to work on the task |
"usr_username": | Username of user assigned to work on the task |
"usr_firstname": | First name of user assigned to work on the task |
"usr_lastname": | Last name of user assigned to work on the task |
"element_uid": | Available Version: As of ProcessMaker 3.3.0 If the task is a dummy, it returns the EVN_UID. Otherwise it returns the corresponding tas_uid |
"route": | Object with information about next task to route to in the process |
{ | |
"type": | Type of routing, which can be: "SEQUENTIAL", "SELECT", "EVALUATE", "PARALLEL", "PARALLEL-BY-EVALUATION", "SEC-JOIN" or "DISCRIMINATOR" |
"to": | An array of routes. If "type" is not "PARALLEL", then only one route |
[ | |
{ | |
"rou_number": | Route number. The first route is 1 , the second route is 2 , etc |
"rou_condition": | If the route has a condition which needs to evaluate to true to execute the route, then the text of the route, such as "@@FIELD1 == 3" |
"tas_uid": | The unique ID of the next task in the process |
}, | |
... | Any additional routes if type is "PARALLEL" or "PARALLEL-BY-EVALUATION" |
] | |
}, | |
"delegations": | An array which has one delegation object which holds information about the routing. For future tasks (i.e., status is set to "TASK_PENDING_NOT_EXECUTED"), this will be an empty array |
[ | |
{ | |
"del_index": | The delegation index number, which starts counting from 1 . Each time a case is routed to any task, the delegation index is incremented, so the first task is 1 , the second is 2 , etc |
"del_init_date": | The datetime in YYYY-MM-DD HH:MM:SS format when the task is first opened to work on it. If never opened, then set to "Case not started yet" |
"del_task_due_date": | The datetime in YYYY-MM-DD HH:MM:SS format when the task is due to be finished, calculated from the time when routed and the expected time to complete it, taking into account its calendar |
"del_finish_date": | The datetime in YYYY-MM-DD HH:MM:SS format when the task was completed. If not yet completed, then set to "Not finished" |
"del_duration": | The time it took to complete the task in X Hours X Minutes X Seconds format. If not yet completed, then set to "Not finished" |
"usr_uid": | The unique ID of the user assigned to work on the task |
"usr_username": | The username of the user assigned to task |
"usr_firstname": | The first name of the user assigned to the task |
"usr_lastname": | The last name of the user assigned to the task |
} | |
], | |
"status": | The task's status, which can be: "TASK_IN_PROGRESS" (a current task in the case, which is not yet completed) "TASK_COMPLETED" (a task which has finished all of its steps, but the user may still have to click on the Continue button to route to the next task in the process), "TASK_PENDING_NOT_EXECUTED" (a future task in the process) "TASK_PARALLEL" (multiple tasks executed in parallel between a split and a join) |
}, | |
... | Any additional tasks. |
] |
For example:
{
"tas_uid": "64109086255b6822b4aaa00042124344",
"tas_title": "Register Client",
"tas_description": "Task to register a new client",
"tas_start": 1,
"tas_type": "NORMAL",
"tas_derivation": "NORMAL",
"tas_assign_type": "BALANCED",
"usr_uid": "24175319155b67db9cb2b77069631302",
"usr_username": "wendy",
"usr_firstname": "Wendy",
"usr_lastname": "Smith",
"element_uid": "64109086255b6822b4aaa00042124344",
"route":
{
"type": "PARALLEL",
"to":
[
{
"rou_number": 1,
"rou_condition": "",
"tas_uid": "71294923755b67a04a06590067310340",
},
{
"rou_number": 2,
"rou_condition": "",
"tas_uid": "81106116155b679c396cd47013780044",
}
]
},
"delegations":
[
{
"del_index": 1,
"del_init_date": "2015-07-27 15:15:39",
"del_task_due_date": "2015-07-28 15:15:39",
"del_finish_date": "2015-07-27 15:16:16",
"del_duration": "0 Hours 0 Minutes 37 Seconds",
"usr_uid": "24175319155b67db9cb2b77069631302",
"usr_username": "wendy",
"usr_firstname": "Wendy",
"usr_lastname": "Smith",
}
],
"status": "TASK_COMPLETED"
},
{
"tas_uid": "71294923755b67a04a06590067310340",
"tas_title": "Check Financial Records",
"tas_description": "Verify credit history and credit limits",
"tas_start": 0,
"tas_type": "NORMAL",
"tas_derivation": "NORMAL",
"tas_assign_type": "BALANCED"
"usr_uid": "28764296455b67dddd0b292072145342",
"usr_username": "silvia",
"usr_firstname": "Silvia",
"usr_lastname": "Pajoli",
"element_uid": "71294923755b67a04a06590067310340",
"route":
{
"type": "SEC-JOIN",
"to":
[
{
"rou_number": 1,
"rou_condition": "",
"tas_uid": -1
}
],
},
"delegations":
[
{
"del_index": 3,
"del_init_date": "Case not started yet",
"del_task_due_date": "2015-07-28 15:16:41",
"del_finish_date": "Not finished",
"del_duration": "Not finished",
"usr_uid": "28764296455b67dddd0b292072145342",
"usr_username": "silvia",
"usr_firstname": "Silvia",
"usr_lastname": "Pajoli"
}
],
"status": "TASK_IN_PROGRESS"
},
{
"tas_uid": "icte-25865963885e8aba81022732901",
"tas_title": "INTERMEDIATE-CATCH-TIMER-EVENT",
"tas_description": "",
"tas_start": 0,
"tas_type": "INTERMEDIATE-CATCH-TIMER-EVENT",
"tas_derivation": "NORMAL",
"tas_assign_type": "BALANCED",
"usr_uid": "",
"usr_username": "",
"usr_firstname": "",
"usr_lastname": "",
"element_uid": "62245879259638859b55592054170245",
"route": {
"type": "SEQUENTIAL",
"to": [
{
"rou_number": 1,
"rou_condition": "",
"tas_uid": "434299217596387e1330779028176296"
}
]
},
"delegations": [],
"status": "TASK_PENDING_NOT_EXECUTED"
}
]
Otherwise, the HTTP status code is set to 400 or greater and a error is returned, such as:
"error": {
"code": 400,
"message": "Bad Request: Incorrect or unavailable information about this case: 37213410154d375de3e3620044382558"
}
}
PHP Example:
$oRet = pmRestRequest("GET", "/api/1.0/workflow/cases/$caseId/tasks");
if ($oRet == 200 and !empty($oRet->response)) {
print "Tasks in case:\n";
foreach ($oRet->response as $oTask) {
print "Task {$oTask->tas_title} status: {$oTask->status}.\n";
}
}
Get Starting Tasks: GET /case/start-cases
Get a list of the starting tasks to which the logged-in user is assigned. This endpoint can be called to discover to the processes and tasks where the logged-in user can start cases. Then, call POST /cases
to start the new case.
- GET /api/1.0/{workspace}/case/start-cases
URL Parameters:
-
Parameter Description Example {workspace} Workspace name. https://example.com/api/1.0/workflow/cases
Result:
If successful, then the HTTP status code is set to 200
and the following object is returned:
-
Example element Description [ Start array of objects. { Start object with information about starting task & process. "tas_uid": "758892601578418e53c3000032096252", Unique ID of the starting task. "pro_title": "Leave Request (Petition for Leave)", Title of the process, with the title of the starting task in parentheses. "pro_uid": "9509036465784173c9f2c38084957729" Unique ID of the process. }, End task. ... Any additional objects. ] End array.
Example:
Response:
[
{
"tas_uid": "758892601578418e53c3000032096252",
"pro_title": "Leave Request (Petition for Leave)",
"pro_uid": "9509036465784173c9f2c38084957729"
},
{
"tas_uid": "3609934335775a15491fb93026385324",
"pro_title": "Audit Expenses (Collect Data)",
"pro_uid": "5102810345775a127c4b089064023755"
},
{
"tas_uid": "37439823957314102c66d78026868117",
"pro_title": "New employee onboarding (Safety Training)",
"pro_uid": "798659366573140bc117490080056441"
}
]
Get Sub-Process Cases: GET /cases/{app_uid}/sub-process-cases
Available Version: As of ProcessMaker 3.3.4.
Get a cases list of a sub-process. Take into account the endpoint doesn't display information for a sub-process' cases for another sub-process.
Permission:
- Users must have the PM_CASES permission assigned to their role to perform this action.
Structure:
- GET /api/1.0/{workspace}/cases/{app_uid}/sub-process-cases
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/51382566154f7180953b5e1028461947/sub-process-cases {app_uid} The unique ID of the parent case to obtain the children cases in the sub-process. /api/1.0/workflow/cases/51382566154f7180953b5e1028461947/sub-process-cases
Result:
If successful, then the HTTP status code is set to 200 and the response is an array of all sub-process children cases of the parent case provided in the parameters. Each item in the array is a sub-process case that shows the same case information as the same data is returned in the endpoint GET /cases/{app_uid}. For example:
Content-Type: application/json
{
"app_uid": "6706682895a29a71612d965010391969",
"app_number": 1098,
"app_name": "#1098",
"app_status": "TO_DO",
"app_init_usr_uid": "95198418458763f3e5cf263045961212",
"app_init_usr_username": "John Doe",
"pro_uid": "257072085595f8b3a132b64086222304",
"pro_name": "[P SubProcess",
"app_create_date": "2017-12-07 20:39:50",
"app_update_date": "2017-12-07 20:39:51",
"current_task":
[
{
"delStatus": "TO_DO",
"delInitDate": null,
"delTaskDueDate": "2017-12-08 20:39:50",
"usr_uid": "95198418458763f3e5cf263045961212",
"usr_name": "John Doe",
"tas_uid": "570530924595f8b601e41e4062567245",
"tas_title": "Ciclical",
"del_index": "1",
"del_thread": "1",
"del_thread_status": "OPEN",
"del_init_date": "",
"del_task_due_date": "2017-12-08 20:39:50"
}
]
}
If an error occurs, then the HTTP status code sets to 400 or greater and an error object returns:
"error": {
"code": 400,
"message": "Bad Request: The Application row '37213410154d375de3e3620044382558' doesn't exist!"
}
}
New Case: POST /cases
Start a new case and assign the logged-in user to work on the initial task in the case. Note that the logged-in user must be in the pool of assigned users for the initial task. Also note that the new case's status will be set to "DRAFT", not "TO_DO". If wishing to change the new case's status to "TO_DO", then create the following trigger in the process and use PUT /cases/{app_uid}/execute-trigger/{tri_uid} to execute it.
Permission:
- Users must have the PM_CASES permission assigned to their role to perform this action.
Structure:
- POST /api/1.0/{workspace}/cases
URL Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases
POST Parameters:
-
Parameter Type Description Example pro_uid String Unique ID of process/project. "11703471254f718165880f2035616306" tas_uid String Unique ID of the initial task to start the case. This should be a task with a start event. "33432552454f5c38aa3a620081949840" variables Array Optional. An object of case variables inside an array that will be set in the new case. These variables can be used in Dynaform fields, triggers and the templates for email notifications and Output Documents. See Format of Variables below. It is recommended to send the _label variable. To display fields correctly, it is mandatory to send the _label variable when using Checkgroup, Dropdown, Radio and Suggest in a Grid. [{
"client": "Acme Inc.",
"amount": 23456.99,
"dateDue": "2015-12-31 23:59:59",
"contractCheckbox": ["1"],
"contactCheckgroup": ["fax","email","phone"],
"gridVar001": {
1:{
"text02":"test textbox 1",
"text02_label":"test textbox 1",
"textarea02":"test textarea 1",
"textarea02_label":"test textarea 1",
"dropdown02":"NY",
"dropdown02_label":"New York",
"checkbox02":1,
"checkbox02_label":true,
"datetime02": "2020-11-10",
"datetime02_label": "2020-11-10",
"suggest01":"NY",
"suggest01_label":"New York",
"hidden02":"test hidden 1",
"hidden02_label":"test hidden 1"
}
}]
Result:
If a new case was created, then the HTTP status code is set to 200 and the following object is returned:
"app_uid": "72820966053275dc14650d6041630056",
"app_number": 49
}
If an error occurred, then the HTTP status code is set to 400 or greater and an error object, such as the following is returned:
"error": {
"code": 400,
"message": "Bad Request: `tas_uid` is required but missing."
}
}
Format of Variables
The case variables to be set in the new case passed are placed in a object, which is enclosed in an array in this format:
Note: It is recommended to send the _label variable. To display fields correctly, it is mandatory send the _label variable when using Checkgroup, Dropdown, Radio and Suggest in a Grid.
The variable names in the object are case sensitive and must start with a letter or underscore. Numbers may be used in variable names as long as they are not the first letter, but spaces and symbols are not allowed. Variable names may contain international letters with a value of less than 256 are allowed, but they aren't recommended, because they can cause character set translation problems.
ProcessMaker will save the variables to a MySQL database which uses the UTF-8 character set, so strings which are in other character sets need to be converted to UTF-8. mb_convert_encoding() in PHP or iconv-lite in JavaScript can be used to convert to UTF-8.
Boolean values of true
and false
will automatically be converted to "1"
and "0"
when passed to ProcessMaker, and all numbers will automatically be converted to strings. If the value is a floating point number (i.e., real number with decimal), remember to NOT use a thousands separator and to use a dot for the decimal point.
If setting the value of a dropdown box or radiogroup, remember to set the variable to the value, and not its label. The value(s) of checkboxes and checkbox groups are enclosed inside an array, but when a field inside a grid, the values of checkboxes are enclosed inside an array. If a checkbox is based on boolean variable, then use ["0"]
(unmarked) or ["1"]
(marked). If a checkbox is based on a string variable, then use [""]
to unmark it or ["value"]
to mark it. For a checkbox group (i.e., multiple checkboxes), use an array of the values of the marked options: ["value1", "value2", ...]
To set the value of a datetime field, use "YYYY-MM-DD" or "YYYY-MM-DD HH:MM:SS" format, such as "2015-12-31 23:59:59"
Most types of DynaForm input fields have an associated variable
and a corresponding variable_label
. For textboxes and textareas, the variable_label
holds the same value as the variable
. For dropdown boxes and radiogroups, the variable_label
holds the label of the selected option. For checkboxes and checkbox groups, variable_label
holds a JSON string of the labels of the selected option(s): '["label1", "label2", ...]'
For datetimes, variable_label
holds the formatted datetime
according to its Format property.
DynaForm fields only use the variable
and ignore the variable_label
when setting their values, so it isn't necessary to set the variable_label
for DynaForms, although if may be necessary if using variable_label
in triggers, Output Document templates or email notification templates.
To set the contents of a grid, use an object of row objects. Each row in the grid is numbered starting from 1
and each row object contains properties which are the IDs of the fields in the grid:
1
and the IDs of the fields in the grid are the keys in the inner associative arrays:
If using PHP, associative arrays will automatically be converted to objects when passed to a REST endpoint since JSON doesn't support associative arrays, but ProcessMaker can read either objects or associative arrays when loading values in a DynaForm grid. The only problem is if using trigger code to access a grid which is stored in ProcessMaker as an object rather than an associative array, because this will NOT work:
$grd = array();
foreach(@=mygrid as $rowNo => $oRow) {
$grd[$rowNo] = get_object_vars($oRow);
}
@=mygrid = $grd;
}
$var = @=mygrid[1]["myfield"];
PHP Example:
To create a new case without setting new variables in the case:
'pro_uid' => '325089587550b34ab5471f8086074839',
'tas_uid' => '491406639550b34b27f0b34088369199'
);
$oRet = pmRestRequest('POST', '/api/1.0/workflow/cases', $aVars);
if ($oRet->status == 200) {
print "New Case {$oRet->response->app_number} created.\n";
}
This example shows how to create a new case which contains different types of fields and different types of variables. Note that the variables are placed inside an associative array, which is inside an array. The grid is a numbered array of associative arrays.
"client" => 'Acme Inc.', //textbox with string variable
"amount" => 23456.99, //textbox with float variable
"address" => "245 Stars Av.\nHollywood CA 12345",//textarea with string variable
"dateDue" => '2015-12-31', //datetime
"dateDue_label" => '12/31/2015', //datetime label in MM/DD/YYYY format
"deliveryTime" => '2015-11-25 17:55:38', //datetime
"serviceType" => 'accounting', //dropdown with string variable
"serviceType_label" => 'Accounting Review', //dropdown label
"hasContract" => array('1'), //checkbox with boolean variable
"hasContract_label" => 'yes', //checkbox label
"howContact" => array('fax', 'email', 'telephone'), //checkbox group with string variable
"howContact_label" => '["Fax","Send Email","Telephone"]', //checkbox group label in JSON string
"contactsGrid" => array(
'1' => array('fullName' => 'Jane Doe', 'canCall' => '1', 'canCall_label' => 'Yes'),
'2' => array('fullName' => 'Bill Hill', 'canCall' => '0', 'canCall_label' => 'No'),
'3' => array('fullName' => 'Sally Slim', 'canCall' => '1', 'canCall_label' => 'Yes')
)
));
$aVars = array(
'pro_uid' => '325089587550b34ab5471f8086074839',
'tas_uid' => '491406639550b34b27f0b34088369199',
'variables' => $aCaseVars
);
$oRet = pmRestRequest('POST', '/api/1.0/workflow/cases', $aVars);
if ($oRet->status == 200) {
print "New Case {$oRet->response->app_number} created.\n";
}
JavaScript Example:
'pro_uid' : '325089587550b34ab5471f8086074839',
'tas_uid' : '491406639550b34b27f0b34088369199',
'variables': [{
"client": 'Acme Inc.', //textbox with string variable
"amount": 23456.99, //textbox with float variable
"address": '245 Stars Av.\nHollywood CA 12345',//textarea with string variable
"dateDue" '2015-12-31', //datetime
"dateDue_label" '12/31/2015', //datetime label in MM/DD/YYYY format
"deliveryTime": '2015-11-25 17:55:38', //datetime
"serviceType": 'accounting', //dropdown with string variable
"serviceType_label": 'Accounting Review', //dropdown label
"hasContract": ['1'], //checkbox with boolean variable
"hasContract_label": 'yes', //checkbox label
"howContact": ['fax', 'email', 'telephone'], //checkbox group with string variable
"howContact_label": '["Fax","Send Email","Telephone"]', //checkbox group label in JSON string
"contactsGrid": {
'1': {'fullName': 'Jane Doe', 'canCall': '1', 'canCall_label': 'Yes'},
'2': {'fullName': 'Bill Hill', 'canCall': '0', 'canCall_label': 'No'},
'3': {'fullName': 'Sally Slim', 'canCall': '1', 'canCall_label': 'Yes'}
}
}]
};
pmRestRequest("POST","/api/1.0/workflow/cases", oVars, false);
if (httpStatus == 200 && oResponse) {
alert("Case " + oResponse->app_number + " created.");
}
New Case Impersonate: POST /cases/impersonate
Creates a new case. It is similar to POST /cases, but it allows cases to be created which are assigned to other users. It also impersonates the session variables, so it is more robust than POST /cases. Note that the specified user to work on the case must be assigned to the pool of users for the initial task. Also note that the new case's status will be set to "DRAFT", not "TO_DO". If wishing to change the new case's status to "TO_DO", then create the following trigger in the process and use PUT /cases/{app_uid}/execute-trigger/{tri_uid} to execute it.
Permission:
- Users must have the PM_CASES permission assigned to their role to perform this action.
Structure:
- POST /api/1.0/{workspace}/cases/impersonate
URL Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/impersonate
POST Parameters:
-
Parameter Type Description Example pro_uid String Unique ID of process/project. "11703471254f718165880f2035616306" usr_uid String Unique ID of user who will be assigned to initial task in case. "51382566154f7180953b5e1028461947" tas_uid String Unique ID of the initial task to start the case. This should be a task with a start event. "33432552454f5c38aa3a620081949840" variables Array Optional. Variables that are set in the new case. See New Case: POST /cases
for more information. It is recommended to send the _label variable. To display fields correctly, it is mandatory send the _label variable when using Checkgroup, Dropdown, Radio and Suggest in a Grid.[{"client": "Acme Inc.", "client_label": "Acme Inc.", "amount": 23456.99}, "amount_label": 23456.99},"gridVar001": {
1:{
"text02":"test textbox 1",
"text02_label":"test textbox 1",
"textarea02":"test textarea 1",
"textarea02_label":"test textarea 1",
"dropdown02":"NY",
"dropdown02_label":"New York",
"checkbox02":1,
"checkbox02_label":true,
"datetime02": "2020-11-10",
"datetime02_label": "2020-11-10",
"suggest01":"NY",
"suggest01_label":"New York",
"hidden02":"test hidden 1",
"hidden02_label":"test hidden 1"
}]
Result:
If a new case was created, then the HTTP status code is set to 200 and the following object is returned:
"app_uid": "72820966053275dc14650d6041630056",
"app_number": 49
}
If an error occurred, then the HTTP status code is set to 400 or greater and an error object, such as the following is returned:
"error": {
"code": 400,
"message": "`usr_uid` is required but missing."
}
}
PHP Example:
'pro_uid' => '605620179552bf966f19e04097908938',
'tas_uid' => '444632093552bf96dd52ad3017304502',
'usr_uid' => '548701171552bfeb017dc68013956351'
);
$url = "/api/1.0/workflow/cases/impersonate";
$method = "POST";
$oRet = pmRestRequest($method, $url, $aVars);
if ($oRet->status == 200) {
print "New Case {$oRet->response->app_number} created.\n";
}
Reassign Case: PUT /cases/{app_uid}/reassign-case
Reassign a case to a different user.
Permission:
- Users must have the PM_REASSIGNCASE or PM_REASSIGNCASE_SUPERVISOR permission assigned to their role to perform this action.
Structure:
- PUT /api/1.0/{workspace}/cases/{app_uid}/reassign-case
URL Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/reassign-case app_uid Case's unique ID. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/reassign-case
PUT Parameters:
-
Parameter Type Description Example usr_uid_source String Required. Unique ID of user currently assigned to case. "41089101154de3b97536fc0077548396" usr_uid_target String Required. Unique ID of user to be assigned to case. Make sure that this user is in the pool of assigned users or ad hoc users for the case's current task. "98883020754dd1f052ee1f1034403381" del_index integer Optional. The delegation index of the task which will be reassigned. If not specified, then automatically set to the most recent open task in the case. Only needs to be specified if there are multiple open tasks in the case. 5
Result:
If successful, then the HTTP status code will be set to 200 and there will be no return value. If unsuccessful, then the HTTP status code will be 400 or higher and an error object will be returned.
Example:
Request
{
"usr_uid_source": "23063198853206b666e2bd0085065170",
"usr_uid_target": "00000000000000000000000000000001"
}
Response
Batch Reassigning Cases: POST /cases/reassign
Reassign multiple cases to a specified user.
Remember that paused cases can't be reassigned and a case can't be reassigned to the same user that is currently assigned.
Permission:
- Users needs to be Supervisor of the processes to which the cases belong to or needs to have the PM_REASSIGNCASE permission assigned to their role to perform this action.
Structure:
- POST /api/1.0/{workspace}/cases/reassign
URL Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/reassign
POST Parameters:
-
Parameter Type Description Example APP_UID String Required. Unique ID of the case. "775512695580a23a40d7bb6035424645" DEL_INDEX Integer Required. The delegation index of a current task which will be reassigned. The delegation index counts a case starting from 1. The first task in a process has a delegation index of 1, the second task is 2, etc. 3 usr_uid_target String Required. Unique ID of user to be assigned to case. Make sure that this user is in the pool of assigned users or ad hoc users for the case's current task. "98883020754dd1f052ee1f1034403381"
Example:
Request
{
"cases": [
{
"APP_UID":"775512695580a23a40d7bb6035424645",
"DEL_INDEX":2
},
{
"APP_UID":"175994873580a23f3da1670048245491",
"DEL_INDEX":2
}
],
"usr_uid_target": "418853759580927a093f456004300548"
}
Response
If successful, then the HTTP status code is set to 200 and there is a return object:
"{
\"cases\":
{
\"0\":
{
\"APP_UID\":\"775512695580a23a40d7bb6035424645\",
\"DEL_INDEX\":2
},
\"1\":
{
\"APP_UID\":\"175994873580a23f3da1670048245491\",
\"DEL_INDEX\":2
},
\"USR_UID\":
{
\"result\":1,
\"status\":\"SUCCESS\"
}
}
}"
Notice that the endpoint response is individual for each case. If a case reassignment fails, the reassignment of other cases won't be interrupted.
Examples:
If the delegation index or the case UID of one of the cases doesn't exist, then the HTTP status code is set to 200 and an error object is returned, such as:
"cases": [
{
"app_uid": "175994873580a23f3da1670048245491",
"del_index": 2,
"result": 0,
"status": "DELEGATION_NOT_EXISTS"
}
]
}
If the user is not included in the assignment pool, the following error object is returned:
"cases": [
{
"app_uid": "775512695580a23a40d7bb6035424645",
"del_index": 2,
"result": 0,
"status": "USER_NOT_ASSIGNED_TO_TASK"
},
{
"app_uid": "175994873580a23f3da1670048245491",
"del_index": 2,
"result": 0,
"status": "USER_NOT_ASSIGNED_TO_TASK"
}
]
}
Route Case: PUT /cases/{app_uid}/route-case
Route a case (i.e., move the case to the next task in the process according to the routing rules). Cases may only be routed if the logged-in user is the case's currently assigned user. If needing to route a case which is assigned to another user, then first reassign the case to the logged-in user and then route the case. Note that "routing" is also known as "derivating" in ProcessMaker.
Permission:
- Users must have the PM_CASES permission assigned to their role to perform this action.
Structure:
- PUT /api/1.0/{workspace}/cases/{app_uid}/route-case
Method: workflow/engine/src/ProcessMaker/Services/Api/Cases.php: doPutRouteCase($app_uid, $del_index = null)
URL Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/route-case app_uid Case's unique ID. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/route-case
PUT Parameters:
-
Parameter Description del_index Optional. Specify the delegation index of a current task which will be routed. The delegation index counts the routings for a case starting from 1. The first task in a process has a delegation index of 1, the second task is 2, etc. If this parameter is not included, then the current task with the highest delegation index will be routed. executeTriggersBeforeAssignment Optional. By default, it is set as false. If set to true, any triggers before assignment will be executed. It is not recommended to set the value to true, because then the API will generate an infinite loop.
Result:
If successful, then the HTTP status code is set to 200
and there is no return object. If an error occurred, then the HTTP status code is set to 400 or greater and an error object is returned, such as:
"error": {
"code": 400,
"message: "Bad Request: This case delegation is already closed or does not exist"
}
}
PHP example:
In this example, there are 3 parallel current tasks, so the delegation index 5
will be specified to route the case:
$caseId = '19862001855b935d6eeafc6001433267';
$aParams = array(
"del_index" => 5
);
$oRet = pmRestRequest($method, $url, $aParams);
if ($oRet and $oRet->status == 200) {
print "Case routed.\n";
}
Cancel Case: PUT /cases/{app_uid}/cancel
Allows a logged in user to cancel an assigned case that is in "TO DO" status. The case's status is changed to "CANCELLED" and it is no longer possible to open or change the case, but all the data for the case remains in the database. As of ProcessMaker 3.3.0, if there are parallel threads, the delegation index of the current task in the case needs to be opened in one thread.
Permission:
- Users must have the PM_CANCELCASE permission assigned to their role to perform this action.
- Users must have the permission over the case permission (Current user or Supervisor over the process).
Structure:
- PUT /api/1.0/{workspace}/cases/{app_uid}/cancel
Warning: The Cancel Case mobile lightendpoint is not implemented yet.
Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/cancel app_uid Case's unique ID. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/cancel
Result:
If successful, the HTTP status code is set to 200 and there is no return value. If an error occurred, then the HTTP status code is set to 300 or greater, and an error object is returned, such as:
"error": {
"code": 400,
"message": "Bad Request: The case '54645427555b94ac7c633d4062829308' is already canceled"
}
}
PHP example:
$url = "/api/1.0/workflow/cases/$caseId/cancel";
$oRet = pmRestRequest("PUT", $url);
if ($oRet and $oRet->status == 200) {
print "Case $caseId canceled.\n";
}
Pause Case: PUT /cases/{app_uid}/pause
Pause a case.
Permission:
- Users must have the PM_CASES permission assigned to their role to perform this action.
Structure:
- PUT /api/1.0/{workspace}/cases/{app_uid}/pause
Warning: To pause a case, the logged-in user should either be currently assigned to work on the case or should have access to the case as a Process Supervisor.
URL Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/pause app_uid Case's unique ID. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/pause
PUT Parameters:
-
Parameter Description Example unpaused_date Date in "YYYY-MM-DD" or "YYYY-MM-DD HH:MM:SS" format when the case will be unpaused. If the case will be paused indefinitely, then set this parameter as "" (empty string). "2015-05-21 23:59:59"
Result:
If successful, then the HTTP status code will be set to 200 and there will be no return value. If an error occurred, then the HTTP status code will be 300 or greater and an error object will be returned, such as:
"error": {
"code": 400,
"message": "Bad Request: The application with $app_uid: '55519601555ba4b4bd5a3c9097861253' does not exist."
}
}
PHP example:
"unpaused_date" => "2016-12-31"
);
$caseId = '55519601555ba4b4bd5a3c9097861253';
$url = "/api/1.0/workflow/cases/$caseId/pause";
$method = "PUT";
$oRet = pmRestRequest($method, $url, $aVars);
if ($oRet->status == 200) {
print "Case $caseId paused.\n";
}
Unpause Case: PUT /cases/{app_uid}/unpause
Unpause a case which was previously paused. After being unpaused, the case may be opened and worked on again.
Permission:
- Users must have the PM_CASES permission assigned to their role to perform this action.
Structure:
- PUT /api/1.0/{workspace}/cases/{app_uid}/unpause
Warning: In order to unpause a case, the logged-in user should either be currently assigned to work on the case or should have access to the case as a Process Supervisor.
URL Parameters:
-
Parameter Description Example {workspace} Workspace name. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/unpause app_uid Case's unique ID. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/unpause
PUT Parameters:
-
Parameter Description Example unpaused_date Optional. The date in "YYYY-MM-DD" or "YYYY-MM-DD HH:MM:SS" format when the cases will be unpaused. If not included or set to "" (empty string), then the case will be immediately unpaused. "2015-12-31"
Result:
If successful, then the HTTP status code is set to 200 and there is no return object. Otherwise, the HTTP status code is set to 300 or higher and an error object is returned, such as:
"error": {
"code": 400,
"message": "Bad Request: The application with $app_uid: '55519601555ba4b4bd5a3c9097861253' does not exist."
}
}
PHP example:
$url = "/api/1.0/workflow/cases/$caseId/unpause";
$method = "PUT";
$oRet = pmRestRequest($method, $url, $aVars);
if ($oRet->status == 200) {
print "Case $caseId unpaused.\n";
}
Execute Trigger: PUT /cases/{app_uid}/execute-trigger/{tri_uid}
Execute a trigger in a case.
Permission:
- Users must have the PM_CASES permission assigned to their role to perform this action.
Structure:
- PUT /api/1.0/{workspace}/cases/{app_uid}/execute-trigger/{tri_uid}
URL Parameters:
-
Parameter Description Example workspace Workspace name. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/execute-trigger/11985271254f9b9ff1319c2032433674 app_uid Unique ID of the case where the trigger will be executed. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/execute-trigger/11985271254f9b9ff1319c2032433674 tri_uid Unique ID of the trigger to execute. To find a trigger's UID, search in the wf_{workspace}.TRIGGERS.TRI_UID field in the database. Note that the trigger can be executed, even if it is not assigned to fire in the case's process. /api/1.0/workflow/cases/55324179754ca442baeb994077387342/execute-trigger/11985271254f9b9ff1319c2032433674
Result:
If successful, then the HTTP status code is set to 200 and there is no return object. If an error occurred, then the HTTP status code is set to 400 or greater and an error object is returned, such as:
"error": {
"code": 400,
"message": "Bad Request: The application with $app_uid: '55519601555ba4b4bd5a3c9097861253' does not exist."
}
}
PHP Example:
A trigger with the ID "37823572555ba5891041136049273220" contains the code:
$triggerId = '37823572555ba5891041136049273220';
$url = "/api/1.0/workflow/cases/$caseId/execute-trigger/$triggerId";
$method = "PUT";
$oRet = pmRestRequest($method, $url);
if ($oRet->status == 200) {
$url = "/api/1.0/workflow/cases/$caseId/variables";
$varRet = pmRestRequest("GET", $url);
if ($varRet == 200) {
$dueDate = $varRet->response->dueDate;
if (count($firstUser = $varRet->response->usersQuery) >= 1) {
//convert to stdClass object to array:
$aUsers = get_object_vars($varRet->response->usersQuery);
$firstUser = $aUsers[1]->USR_USERNAME;
}
}
}
Note: The endpoint has a condition: only the user assigned to the case can execute the trigger. The putExecuteTriggerCase() method validates this condition from cases class.
Delete Case: DELETE /cases/{app_uid}
Delete a case, which means that its record is removed from the wf_<WORKSPACE>.APPLICATION table, so its case data is deleted. Other information may remain about the case in other database tables, such as APP_DELEGATION, APP_DOCUMENT, APP_MESSAGE, etc., plus any files uploaded or generated in the case will remain in the shared directory on the ProcessMaker server. Only cases in their initial task may be deleted by the currently assigned user to the case. For all other cases, it is recommended to cancel them using PUT /cases/{app_uid}/cancel.
Permission:
- Users must have the PM_CASES permission assigned to their role to perform this action.
Structure:
- DELETE /api/1.0/{workspace}/cases/{app_uid}/
URL Parameters:
-
Parameter Description Example workspace Workspace name which by default is "workflow". /api/1.0/workflow/cases/37213410154d375de3e3620044382558 app_uid Case's unique ID. /api/1.0/workflow/cases/37213410154d375de3e3620044382558
Result:
If the case was deleted, the HTTP status code is set to 200 and there is no response. If an error occurs, the HTTP status code is 400 or greater and an error object is returned, such as:
"error": {
"code": 400,
"message": "Bad Request: The application with $app_uid: '526107075552bffba498007040759388' does not exist."
}
}
PHP Example:
$url = "/api/1.0/workflow/cases/$caseId";
$oRet = pmRestRequest("DELETE", $url);
if (!isset($oRet) or $oRet->status != 200) {
print "Unable to delete case '$caseId'.\n";
}