QPR ProcessAnalyzer API: Difference between revisions

From QPR ProcessAnalyzer Wiki
Jump to navigation Jump to search
 
(128 intermediate revisions by 3 users not shown)
Line 1: Line 1:
QPR ProcessAnalyzer Web Service API (Application Programming Interface) can be used to automate operations and to create integration with other applications. All Web Service operations only accept HTTP POST method (HTTP GET is not allowed).
QPR ProcessAnalyzer API can be used to build integrations with other applications and automate operations in the process mining system.


== Functions in the Web Service API ==
QPR ProcessAnalyzer API is a JSON based API following the REST design principles. All methods (except the [[Web_API:_Token|token]] and [[Web_API:_Serverinfo|serverinfo]]) require a prior login to establish a session. The session is initialized with the [[Web_API:_Token|token]] call with username and password, and the access token is returned as a response for a successful login. The methods requiring prior authenticated session, need to have a HTTP request header ''Authorization'' with value ''Bearer <access token>'' to identify the session.
The following functions are available:
* [[QPR ProcessAnalyzer API: Authenticate|Authenticate]]: Tries to authenticate given user with given password and authentication parameters.
* [[QPR ProcessAnalyzer API: GetModel|GetModel]]: Can be used to query QPR ProcessAnalyzer model related information.
* [[QPR ProcessAnalyzer API: QueryObjectProperties|QueryObjectProperties]] returns all the listed properties queried for all the listed objects identified by unique identifiers.
* [[QPR ProcessAnalyzer API: ResetModelCache|ResetModelCache]]: Can be used to clear all cached model information of the given model.
* [[QPR ProcessAnalyzer API: SetModel|SetModel]]: Can be used to set model related information.
* [[QPR ProcessAnalyzer API: ValidateModel|ValidateModel]] can be used to perform all the pending tasks stored in the work queue of the given model.


== Common Properties for all Object Types ==
Url for calling the API has the following form (replace the server hostname with a correct one):
The following properties are supported by all ProcessAnalyzer object types. These properties are used in the '''properties''' parameter of the [[QPR ProcessAnalyzer API: QueryObjectProperties|QueryObjectProperties]] function:
* '''typename''': Name of the type of the object.
* '''name''': Name of the given object.
* '''properties''': List of all the supported properties for given object.
* '''relatedcount''': Integer number of how many child nodes there are in the next level of given hierarchy. This is 0 if the element doesn't support the relation or there are no child objects for the given object in given hierarchy. Requires hierarchy-parameter to be defined.
 
== Object Types ==
=== DataTable ===
The following properties are supported by the DataTable object type:
* '''typename''': "DataTable"
* '''<column identifier>''': A Data Table column name converted to script name and also prefixed with"custom_" when used as an object property name in QueryObjectProperties. For example: when the Data Table column name is "Actual", the column identifier is "custom_actual".
* All [[QPR ProcessAnalyzer Web Service API#Common Properties for all Object Types|common properties]]
 
=== Product ===
Properties of Product object type:
* '''typename''': "product"
* '''name''': Name of the product (QPR ProcessAnalyzer)
* '''version''': Dll version of the Qpr.ProcessAnalyzer.Core.dll
* All [[QPR ProcessAnalyzer Web Service API#Common Properties for all Object Types|common properties]]
 
Relations of Product object type:
* '''related''': Returns the related objects. Supported relation hierarchies is '''datatable''' which returns all the projects available for the user.
 
=== Project ===
Properties of the Project object type:
* '''typename''': "Project"
* All [[QPR ProcessAnalyzer Web Service API#Common Properties for all Object Types|common properties]]
 
Relations of the Project object type:
* '''related''': Returns the related objects. Supported relation hierarchies: '''datatable''' which returns all the data tables in given project available for the user.
 
== Identifying QPR ProcessAnalyzer Objects ==
QPR ProcessAnalyzer unique identifiers are used to uniquely identify any object in QPR ProcessAnalyzer. The format of a unique identifier is:
 
'''PA.<type>.<object>'''
 
In the format, '''<type>''' can be any of the following:
* '''0''': undefined (reserved, do not use)
* '''1''': project
* '''2''': data table
* '''3''': model
* '''4''': filter
* '''5''': bookmark
 
== Example Usage==
<pre>
<pre>
//login               
https://customer.onqpr.com/qprpa/api/<methodName>
$.ajax({
</pre>
  "method": "POST",
  "url": "http://localhost/qprpa/Mainservice.svc/webHttp/Authenticate",
  "dataType": "json", "contentType": "application/json; charset=utf-8",
  "data": JSON.stringify({
    'logOnName': '<username>',
    'password': '<password>',
    'parameters': ''
  })
});                     


//create user
Following methods are available:
$.ajax({
{| class="wikitable"
  "method": "POST",
!'''Method'''
  "url": "http://localhost/qprpa/Mainservice.svc/webHttp/SetUser",
! '''Description'''
  "dataType": "json", "contentType": "application/json; charset=utf-8",
|-
  "data": JSON.stringify({
||[[Web_API:_Token|token]]
    "sessionId": "547c1aa5-e85b-4642-bbb1-8cb656015002",
||Login user using username and password and get a session token as a response.
    "user": {"Name": "user", "FullName": "first last" },
|-
    "parameters": [{"Key": "Password", "Value": "demo"}]
||[[Web_API:_Signout|api/signout]]
  })
||Logs out a user session.
});
|-
||[[Web_API:_Expression|api/expression]]
||Runs an expression.
|-
||[[Web_API:_Expression/query|api/expression/query]]
||Runs query written using the expression language and returns result data as response.
|-
||[[Web_API:_Filters|api/filters]]
||Get filters for all models or filters for a single model.
|-
||[[Web_API:_Serverinfo|api/serverinfo]]
||Returns common system information needed by UI, such as the default UI language and in whether SSO has been configured.
|-
||[[Web_API:_Importfile|api/importfile]]
||Import data into datatable from .csv, .xes or .pacm file.
|-
||[[Web_API:_Usersettings|api/usersettings]]
||Save user specific settings to the server.
|-
||[[Web_API:_Operations/terminate|api/operations/terminate]]
||Stops the defined tasks (by the task id) to save computing resources.
|-
||[[Web_API:_Cancel|api/analysis/cancel]]
||Stops currently running tasks (by the task identifier) to save computing resources.
|-
||[[Web_API:_saml2/acs|api/saml2/acs]]
||Identity provider (IdP) will send the SAML 2.0 assertion to this endpoint, which responses with 302 to redirect to QPR ProcessAnalyzer UI.
|-
||[[Web_API:_saml2|api/saml2]]
||Returns the SAML 2.0 service provider (SP) metadata, if SAML 2.0 authentication has been configured.
|}


//add user to group, value 8:12:0 is user:group:member type
In addition, there are methods for
$.ajax({
* [[Web API for Workspace Elements|moving and deleting workspace elements]]
  "method": "POST",
* [[Web_API_for_Projects|projects]]
  "url": "http://localhost/qprpa/Mainservice.svc/webHttp/ModifyUserRelations",
* [[Web_API_for_Dashboards|dashboards]]
  "dataType": "json", "contentType": "application/json; charset=utf-8",
* [[Web_API_for_Models|models]]
  "data": JSON.stringify({
* [[Web_API_for_Datatables|datatables]]
    "sessionId": "749dcbdb-e57b-434b-a739-1f4ddc7ebc30",
* [[Web_API_for_Scripts|scripts]]
    "parameters": [{"Key": "AddGroups", "Value": "8:12:0"}]
* [[Web_API_for_User_Management|users, groups and roles]]
  })
});


//log off
== Examples ==
$.ajax({
Following function written in Python starts a script in QPR ProcessAnalyzer by calling the REST API. The function does following: (1) login to QPR ProcessAnalyzer, (2) start the script, and (3) log out. The call just starts the script without waiting for it to complete (asynchronous behavior).
  "method": "POST",
  "url": "http://localhost/qprpa/Mainservice.svc/webHttp/LogOff",
  "dataType": "json", "contentType": "application/json; charset=utf-8",
  "data": JSON.stringify({
    "sessionId":"75aa3d08-5ad9-4b0b-8981-7daca98348cd"
  })
});
</pre>


== PowerShell example of listing users ==
<syntaxhighlight lang="python" line>
<pre>
def startQprProcessAnalyzerScript(serverUrl: str, username: str, password: str, scriptId: int):
$paService=New-WebServiceProxy –Uri "http://localhost/qprpa/MainService.svc"
  loginData = {
$connection=$paService.Authenticate("username", "password", @())
      "grant_type": "password",
$token=$connection.GetValue(0).Value
      "username": username,
      "password": password
  }
  loginResponse = requests.post(
    url = serverUrl + "/token",
    data = loginData
  )
  loginResponse.raise_for_status()
  sessionToken = loginResponse.json().get("access_token")
 
  startScriptResponse = requests.post(
    url = serverUrl + "/api/scripts/run/" + str(scriptId),
    headers = {
      "Authorization": "Bearer " + sessionToken,
      "Content-type": "application/json"
    }
  )
  startScriptResponse.raise_for_status()


$param=@()
  logOutResponse = requests.post(
$users=$paService.GetUsers($token, $null, $param)
      url = serverUrl + "/api/signout",
$users
      headers = {
$paService | get-member | ? {$_.definition -match "GetAnalysis"}
        "Authorization": "Bearer " + sessionToken,
</pre>
        "Content-type": "application/json"
      }
    )
  logOutResponse.raise_for_status()
</syntaxhighlight>


== PowerShell example update model configuration ==
The function can be called as follows:
<pre>
<syntaxhighlight lang="python" line>
$paService=New-WebServiceProxy –Uri "http://localhost/qprpa/MainService.svc"
startQprProcessAnalyzerScript(
$connection=$paService.Authenticate("username", "password", @())
  serverUrl = "https://server.onqpr.com/qprpa",
$token=$connection.GetValue(0).Value
  username = "qpr",
$param=@()
  password = "demo",
$modelId =@(2)
  scriptId = 1
$model=$paService.GetModels($token,$modelId, $param)
)
</syntaxhighlight>
The script id can be found in the scripts list in the Workspace.


$model[0]
__NOTOC__
$model[0].ConfigurationJson = "{}"


$paService.SetModel($token,$model[0], $param)
[[Category: QPR ProcessAnalyzer]]
</pre>

Latest revision as of 20:06, 14 December 2023

QPR ProcessAnalyzer API can be used to build integrations with other applications and automate operations in the process mining system.

QPR ProcessAnalyzer API is a JSON based API following the REST design principles. All methods (except the token and serverinfo) require a prior login to establish a session. The session is initialized with the token call with username and password, and the access token is returned as a response for a successful login. The methods requiring prior authenticated session, need to have a HTTP request header Authorization with value Bearer <access token> to identify the session.

Url for calling the API has the following form (replace the server hostname with a correct one):

https://customer.onqpr.com/qprpa/api/<methodName>

Following methods are available:

Method Description
token Login user using username and password and get a session token as a response.
api/signout Logs out a user session.
api/expression Runs an expression.
api/expression/query Runs query written using the expression language and returns result data as response.
api/filters Get filters for all models or filters for a single model.
api/serverinfo Returns common system information needed by UI, such as the default UI language and in whether SSO has been configured.
api/importfile Import data into datatable from .csv, .xes or .pacm file.
api/usersettings Save user specific settings to the server.
api/operations/terminate Stops the defined tasks (by the task id) to save computing resources.
api/analysis/cancel Stops currently running tasks (by the task identifier) to save computing resources.
api/saml2/acs Identity provider (IdP) will send the SAML 2.0 assertion to this endpoint, which responses with 302 to redirect to QPR ProcessAnalyzer UI.
api/saml2 Returns the SAML 2.0 service provider (SP) metadata, if SAML 2.0 authentication has been configured.

In addition, there are methods for

Examples

Following function written in Python starts a script in QPR ProcessAnalyzer by calling the REST API. The function does following: (1) login to QPR ProcessAnalyzer, (2) start the script, and (3) log out. The call just starts the script without waiting for it to complete (asynchronous behavior).

def startQprProcessAnalyzerScript(serverUrl: str, username: str, password: str, scriptId: int):
  loginData = {
      "grant_type": "password",
      "username": username,
      "password": password
  }
  loginResponse = requests.post(
    url = serverUrl + "/token",
    data = loginData
  )
  loginResponse.raise_for_status()
  sessionToken = loginResponse.json().get("access_token")
  
  startScriptResponse = requests.post(
    url = serverUrl + "/api/scripts/run/" + str(scriptId),
    headers = {
      "Authorization": "Bearer " + sessionToken,
      "Content-type": "application/json"
    }
  )
  startScriptResponse.raise_for_status()

  logOutResponse = requests.post(
      url = serverUrl + "/api/signout",
       headers = {
         "Authorization": "Bearer " + sessionToken,
         "Content-type": "application/json"
       }
    )
  logOutResponse.raise_for_status()

The function can be called as follows:

startQprProcessAnalyzerScript(
  serverUrl = "https://server.onqpr.com/qprpa",
  username = "qpr",
  password = "demo",
  scriptId = 1
)

The script id can be found in the scripts list in the Workspace.