Business Rule Commands¶
Business rules can be manipulated from a Repository level and from an Entity level.
The commands that can be performed against a business rule (or rules) are as follows:
Command | Purpose |
---|---|
get | Get a list of rules that match the filter criteria |
add | Add a new business rule |
edit | Edit an existing business rule |
run | Run a business rule |
Glossary¶
Abbreviations used in this document:
Term | Meaning |
---|---|
EID | Entity ID (integer) |
AID | Attribute ID (integer) |
RID | Rule ID (integer) |
Columns¶
The business rule view has the following columns:
Human Name | Column Name | Description |
---|---|---|
Name | actual_name | Test name |
Description | actual_description | Test Description |
Threshold | _actual_threshold | Compliance Threshold Percentage |
Derived | _inheriting | Is this rule derived from a library entity |
Library | _eLibName | Associated library entity containing this rule |
Enabled | _check | True if the test is enabled |
Priority | actual_priority | Priority of the rule |
Priority Description | _priority_description | Description of the priority |
Index Control | _index_control | Compliance Threshold Percentage |
Index Threshold | _index_threshold | Compliance Threshold Percentage |
Result | _result | Result of the test |
Passing Fraction | _actual_fraction | Percentage of rows that pass the test |
Status | _dirty_flag | Indicates whether the test is out of date |
Expression | _predicate | The Business Rule Test |
Filtering | _is_filtering | Are the rows being filtered |
Filter Expression | _filter_predicate | The Business Rule Filter |
Filter Error Count | _filter_error_count | Number of rows that caused an error while running the filter |
Filter First Error Row | _filter_first_error_row | First row that caused a filter error |
Filter First Error | _filter_first_error | Error message for first row failing the filter |
Grouping | _is_grouping | Are the rows being grouped |
Group Count | _group_count | Number of groups found |
Group Function | _group_function | Business Rule Group-by function |
Group Error Count | _group_error_count | Number of rows that caused an error in the group function |
Group First Error Row | _group_first_error_row | First row that caused a group function error |
Group First Error | _group_first_error | Error message for first row failing the group function |
Aggregating | _is_aggregating | Are the rows being aggregated |
Passing Aggregate | _aggregate_pass | Aggregate value across the passing rows |
Failing Aggregate | _aggregate_fail | Aggregate value across the failng rows |
Aggregate Method | _aggregate_method | Method used to aggregate |
Aggregate Function | _aggregate_function | Business Rule Aggregate function |
Aggregate Error Count | _aggregate_error_count | Number of rows that caused an error in the aggregate function |
Aggregate First Error Row | _aggregate_first_error_row | First row that caused an aggregate function error |
Aggregate First Error | _aggregate_first_error | Error message for first row failing the aggregate function |
Fail Count | _row_fail_count | Number of Rows that Fail the Test |
Pass Count | _row_pass_count | Number of Rows that Pass the Test |
Rows Processed | _row_total | Number of Rows processed |
Row Total | row_total | Total Number of Rows |
Created By | CREATED_BY | Who created this business rule |
Date Created | _created_date | When this business rule was created |
Edited By | EDITED_BY | Who changed this business rule |
Date Changed | _edited_date | When this business rule was changed |
Error Count | _row_error_count | Number of rows that caused an error while running the test |
First Error Row | _first_fail_row | First row that caused an error |
First Error | _first_error | Error message for first failing row |
Referenced Attributes | refd_atts | A list of the attributes referenced by this rule |
XML | actual_predicate | Business Rule represented in XML |
Sequence Number | seqno | Sequence number identifying the rule |
Identifier | actual_uuid | The rule identifier |
Local identifier | _local_identifier | A unique identifier for the rule |
Rule Categories | _rule_categories | Business Rule categories |
Index Control¶
Index Control is optional; if it is specified, it must be one of the following values:
Value | Description |
---|---|
0 | Normal |
1 | Unlimited |
2 | Limited |
If Index Control is 2 (Limited), the Index Threshold must also be specified.
Aggregate Method¶
Possible values for the aggregate method are:
Value | Description |
---|---|
0 | Sum |
1 | Average |
2 | Maximum |
3 | Maximum |
4 | Count |
Get¶
An individual business rule can be retrieved using a GET with the rule ID.
If the rule ID is unknown, or if more than one rule is required, various filters can be used to limit the number of rules listed.
{
"command": "get",
"options": {
"where": "where clause",
"in": [
"column_name1 value1",
"column_nameN valueN"
],
"keyPattern": "key pattern",
"keyPatternList": [
"key pattern 1",
"key pattern N"
]
}
}
The options key is required.
keyPattern
and keyPatternList
cannot be specified at the same time.
The where
clause is an expression used to filter the business rules. The expression for the where
clause uses “Human Name” to specify the column names.
For example:
{
"where": "'Sequence Number' > 15"
}
The in
clause is an array of column names and values. The column names should be taken from “Column Name”.
For example:
{
"in": [
"_inheriting 1",
"_actual_threshold 10"
]
}
Add¶
To add a business rule, the request may contain the fields below:
{
"command": "add",
"data": {
"name": "Rule4",
"description": "description",
"threshold": "100",
"enabled": "1",
"expression": "attr2>0",
"filterExpression": "new2>9",
"groupExpression": "new5=0",
"groupLimit": "0",
"aggregateExpression": "acc_id<0",
"aggregateMethod": "0",
"priority": "1",
"threshold": "100",
"ruleKeywordIdList": "1 0: 2 1"
}
}
The required fields for adding a rule are:
expression
threshold
name
The additional expressions (aggregateExpression
, filterExpression
, groupExpression
) are optional; it is possible to add a business rule without specifying any of these expressions.
Field | Description | Values |
---|---|---|
expression | Humanized expression | |
threshold | Numerical threshold value | Between 0 to 100 |
enabled | Name of the library rule | 0 or 1 |
description | Description of the library rule | |
filterExpression | Humanized expression for filter | |
aggregateExpression | Humanized aggregate expression | |
groupExpression | Humanized group expression | |
groupLimit | Numerical value for group limit | |
aggregateMethod | Name of aggregate method | A number indicating the aggregate method to be used (see above) |
indexControl | Numeric value | A number indicating how indexes are controlled (see above) |
indexThreshold | Valid only if indexControl is 2 | |
priority | Numeric value between 1 and 10 | |
ruleKeywordIdList | Array of keyword IDs | List of <category_id keyword_id> separated by colon. a value of 0 in keyword_id fields specify that the rule is attached to all the keywords of that category. |
Edit¶
{
"command": "edit",
"data": {
"entity": 1,
"ruleId": 2,
"name": "Rule4",
"description": "description",
"enabled": "1",
"expression": "attr2>0",
"filterExpression": "new2>9",
"groupExpression": "new5=0",
"groupLimit": "0",
"aggregateExpression": "acc_id < 0",
"aggregateMethod": "0",
"priority": "1",
"threshold": "100",
"ruleKeywordIdList": "1 0: 2 1"
}
}
The table below shows all the fields that are available for edit.
Field | Description | Values |
---|---|---|
expression | Humanized expression | |
threshold | Numerical threshold value | Between 0 to 100 |
enabled | Name of the library rule | 0 or 1 |
description | Description of the library rule | |
filterExpression | Humanized expression for filter | |
aggregateExpression | Humanized aggregate expression | |
groupExpression | Humanized group expression | |
groupLimit | Numerical value for group limit | |
aggregateMethod | Name of aggregate method | A number indicating the aggregate method to be used (see above) |
indexControl | Numeric value | A number indicating how indexes are controlled (see above) |
indexThreshold | Valid only if indexControl is 2 | |
priority | Numeric value between 1 and 10 | |
ruleKeywordIdList | Array of keyword IDs | List of <categoryId keywordId> separated by colon. A value of 0 in keywordId fields specify that the rule is attached to all the keywords of that category. |
The entity
and ruleId
must be specified, either in the URL or the body. All other fields are optional.
Run¶
To run a business rule, the request will look like:
{
"command": "run",
"data": {
"entity": "EID",
"option": "Analysis options (see below)",
"ruleIds": [
"EID AID RID"
]
}
}
The entity
field is optional see options table below:
- where Entity ID is required, it can be given as
entity
field or within a URL link.- where Entity ID is optional, it can be given if you want to only run rules for a given entity.
The option
field is required.
The analysis options (for the option
field) are as follows:
Option | Purpose |
---|---|
-all | Run all rules for a given entity (Entity ID is required) |
-dirty | Run all updated rules for a given entity (Entity ID is required) |
-selected | Run all selected rules for a given entity (Entity ID is required) |
-allentity | Run all entity rules (Entity ID is ignored) |
-selectedentity | Run the selected entity (Entity ID is ignored) |
-dirtyentity | Run all updated entity rules (Entity ID is optional) |
The ruleIds
field is optional:
- It is only required if using the following options: “-selected” or “-selectedentity”.
- The
ruleIds
field not required when a rule ID is given in the URL link.- If
ruleIds
field is present it must contain one or more key patterns for the rules to be run. The key patterns for an individual rule are dependent upon the option used.
When using the “-selected” option, the API expects list of key patterns containing just the Rule ID. For example, to run several business rules (1 0 4, 1 0 5) for a single entity, you would use the following:
{
"command": "run",
"data": {
"entity": "EID",
"option": "-selected",
"ruleIds": [
"4",
"5"
]
}
}
When using the “-selectedentity” option, the API expects list of key patterns containing Entity ID, Attribute ID and Rule ID. For example, to run several business rules (1 0 4, 2 0 5, 3 0 7) for different entities, you would use the following:
{
"command": "run",
"data": {
"option": "-selectedentity",
"ruleIds": [
"1 0 4",
"2 0 5",
"3 0 7"
]
}
}
When using the “-allentity” option without using the “where” clause, a separate analysis job is scheduled for each entity.
The response will be dependent on number of separate jobs scheduled.
If multiple jobs were scheduled then response is a list of job urls:
{
"urls": [
"/api/repositories/jupiter/scheduler/52",
"/api/repositories/jupiter/scheduler/53",
"/api/repositories/jupiter/scheduler/54"
]
}
If a single job is scheduled then the response is a single job url:
{
"url": "/api/repositories/jupiter/scheduler/55"
}
Using “where” clause with Run command¶
The “where” clause is only supported when running entity business rule, the request will look like:
-
POST
/api/repositories/
(string: repository)/entities/
(int: entityID)/businessrules
¶ Run a list of entity business rules for all Entity that match various criteria.
JSON Parameters: - body – The request body
POST /api/repositories/test/entities/0/businessrules HTTP/1.1
Content-Type: application/json
{
"command": "run",
"data": {
"option": "-allentity",
"where": "Threshold >= 10"
}
}
The following conditions will apply to run a entity business rule using “where” clause:
- It is supported only when calling
/api/repositories/test/entities/0/businessrules
endpoint. - The
entityId
in the endpoint must be set to 0. - The
option
field is required and must be set as “-allentity”. - The
where
field is required and must contain a humanised expression required to match required criteria.
The response will be dependent on the number of separate jobs scheduled. One job will be scheduled for each entity where the where clause is applicable.
If multiple jobs were scheduled then response is a list of job urls:
{
"urls": [
"/api/repositories/jupiter/scheduler/56",
"/api/repositories/jupiter/scheduler/57",
"/api/repositories/jupiter/scheduler/58"
]
}
If a single job is scheduled then the response is a single job url:
{
"url": "/api/repositories/jupiter/scheduler/59"
}