Complete guide to configuring catalog approval rules, multi-level approvals, delegation, and escalation
45:T3d45,
This skill covers approval management for service catalog items:
When to use: When setting up approval processes for catalog items, troubleshooting stuck approvals, or implementing complex approval routing.
catalog_admin, approval_admin, or admincatalog/item-creationApproval Tables:
| Table | Purpose |
|---|---|
| sysapproval_approver | Individual approval records (one per approver) |
| sysapproval_group | Group-based approvals |
| sc_ic_aprvl_type_defn | Catalog approval type definitions |
| sc_ic_aprvl_defn | Catalog-specific approval definitions |
| sys_approval_rule | System-wide approval rules |
Approval Flow:
Request Submitted
↓
Approval Rule Evaluated
↓
Approval Records Created (sysapproval_approver)
↓
Approvers Notified
↓
Approver Takes Action
↓
Next Level (if multi-level) OR Complete
Approval States:
| State | Value | Description |
|---|---|---|
| Not Yet Requested | not yet requested | Approval not triggered |
| Requested | requested | Waiting for approver action |
| Approved | approved | Approver approved |
| Rejected | rejected | Approver rejected |
| Cancelled | cancelled | Approval cancelled |
| Duplicate | duplicate | Duplicate approval skipped |
| Not Required | not_required | Approval waived |
Find pending approvals for a request:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: sysapproval=[ritm_sys_id]
fields: sys_id,approver,state,due_date,source_table,sys_created_on
limit: 50
Find all pending approvals for a user:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: approver=[user_sys_id]^state=requested
fields: sys_id,sysapproval,document_id,source_table,sys_created_on
limit: 100
Find overdue approvals:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: state=requested^due_date<javascript:gs.nowDateTime()
fields: sys_id,approver,sysapproval,due_date,source_table
limit: 100
Note: This uses the legacy approval rule system. For new implementations, consider using Flow Designer or Catalog Builder approval types.
Create basic approval rule:
Tool: SN-Create-Record
Parameters:
table_name: sys_approval_rule
data:
name: "Manager Approval for Hardware > $1000"
active: true
table: sc_req_item
condition: cat_item.price>1000^cat_item.category.title=Hardware
approval_type: "single"
approver_field: "opened_by.manager"
order: 100
Catalog approval types define reusable approval patterns.
Query existing approval types:
Tool: SN-Query-Table
Parameters:
table_name: sc_ic_aprvl_type_defn
query: active=true
fields: sys_id,name,description,approval_type
limit: 50
Create approval type definition:
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_type_defn
data:
name: "Manager Approval"
description: "Requires approval from requester's manager"
active: true
approval_type: "approver_user_field"
approver_user_field: "requested_for.manager"
wait_for: "everyone" # everyone, anyone
mandatory: true
Approval Type Options:
| approval_type | Description |
|---|---|
| approver_user_field | User from field on record |
| approver_group_field | Group from field on record |
| specific_user | Hardcoded user |
| specific_group | Hardcoded group |
| script | Custom script determines approver |
Multi-level approvals execute in sequence based on order.
Create Level 1 - Manager Approval:
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "Manager Approval"
approval_type_definition: [manager_approval_type_sys_id]
order: 100
active: true
condition: "" # Always apply
Create Level 2 - Director Approval (for high-value requests):
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "Director Approval"
approval_type_definition: [director_approval_type_sys_id]
order: 200
active: true
condition: "price>5000" # Only for requests over $5000
Create Level 3 - Finance Approval (for very high value):
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "Finance Approval"
approval_type_definition: [finance_approval_type_sys_id]
order: 300
active: true
condition: "price>10000"
Parallel approvals execute simultaneously at the same level.
Create Parallel Approvers (same order = parallel):
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "IT Security Review"
approval_type_definition: [security_approval_type_sys_id]
order: 100 # Same order as other parallel approval
active: true
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [catalog_item_sys_id]
name: "Legal Review"
approval_type_definition: [legal_approval_type_sys_id]
order: 100 # Same order = parallel execution
active: true
Wait For Options:
everyone - All approvers must approveanyone - First approval completes the levelmajority - Majority of approvers must approveCreate group-based approval type:
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_type_defn
data:
name: "Change Advisory Board"
description: "CAB approval required for major changes"
active: true
approval_type: "specific_group"
approver_group: [cab_group_sys_id]
wait_for: "everyone"
Query group approval status:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_group
query: parent=[ritm_sys_id]
fields: sys_id,group,approval,sys_created_on
Delegation allows users to assign approval authority to others during absence.
Query existing delegations:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_delegate
query: delegate=[user_sys_id]^active=true
fields: sys_id,user,delegate,starts,ends,approval
limit: 50
Create delegation record:
Tool: SN-Create-Record
Parameters:
table_name: sys_user_delegate
data:
user: [original_approver_sys_id]
delegate: [delegate_user_sys_id]
starts: "2026-02-10"
ends: "2026-02-24"
approval: true # Delegate approvals
active: true
Approval with Due Date:
Tool: SN-Update-Record
Parameters:
table_name: sysapproval_approver
sys_id: [approval_sys_id]
data:
due_date: "2026-02-13 17:00:00"
Create Escalation via SLA: Configure through SLA Definitions (sla) table:
Tool: SN-Create-Record
Parameters:
table_name: contract_sla
data:
name: "Approval Escalation - 48 Hours"
table: sysapproval_approver
condition: "state=requested"
duration: "2 00:00:00" # 48 hours
workflow: [escalation_workflow_sys_id]
active: true
Approve a request:
Tool: SN-Update-Record
Parameters:
table_name: sysapproval_approver
sys_id: [approval_sys_id]
data:
state: "approved"
comments: "Approved - budget verified and manager confirmed need"
Reject a request:
Tool: SN-Update-Record
Parameters:
table_name: sysapproval_approver
sys_id: [approval_sys_id]
data:
state: "rejected"
comments: "Rejected - request exceeds department budget. Please resubmit next quarter."
Cancel pending approvals:
Tool: SN-Update-Record
Parameters:
table_name: sysapproval_approver
sys_id: [approval_sys_id]
data:
state: "cancelled"
comments: "Approval cancelled - request withdrawn by user"
Count pending approvals by group:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: state=requested^sys_created_on>=javascript:gs.beginningOfLastMonth()
fields: sys_id,approver.u_group,state
limit: 1000
Find approval bottlenecks:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: state=requested^sys_created_onRELATIVELE@dayofweek@ago@5
fields: sys_id,approver,sysapproval,sys_created_on
limit: 100
# 1. Create Manager Approval Type
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_type_defn
data:
name: "Requester Manager"
description: "Approval from requester's direct manager"
active: true
approval_type: "approver_user_field"
approver_user_field: "requested_for.manager"
wait_for: "everyone"
mandatory: true
# Result: sys_id = "type_manager"
# 2. Create IT Director Approval Type
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_type_defn
data:
name: "IT Director"
description: "IT Director approval for large hardware purchases"
active: true
approval_type: "specific_user"
specific_user: [it_director_sys_id]
wait_for: "everyone"
mandatory: true
# Result: sys_id = "type_director"
# 3. Create Level 1 Approval Definition (always required)
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [hardware_item_sys_id]
name: "Manager Approval"
approval_type_definition: "type_manager"
order: 100
active: true
condition: ""
# 4. Create Level 2 Approval Definition (only for > $2000)
Tool: SN-Create-Record
Parameters:
table_name: sc_ic_aprvl_defn
data:
catalog_item: [hardware_item_sys_id]
name: "IT Director Approval"
approval_type_definition: "type_director"
order: 200
active: true
condition: "price>2000"
# 5. Verify configuration
Tool: SN-Query-Table
Parameters:
table_name: sc_ic_aprvl_defn
query: catalog_item=[hardware_item_sys_id]
fields: name,approval_type_definition,order,condition,active
┌──────────────────┐
│ not yet requested│
└─────────┬────────┘
│ Workflow triggers
┌─────────▼────────┐
│ requested │
└─────────┬────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
┌─────────▼────────┐ ┌─────────▼────────┐ ┌─────────▼────────┐
│ approved │ │ rejected │ │ cancelled │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│
│ All approvals approved
┌─────────▼──────────────────────┐
│ Request proceeds to fulfillment│
└────────────────────────────────┘
| Operation | MCP Tool | Table |
|---|---|---|
| Query approvals | SN-Query-Table | sysapproval_approver |
| Process approval | SN-Update-Record | sysapproval_approver |
| Create approval type | SN-Create-Record | sc_ic_aprvl_type_defn |
| Create approval definition | SN-Create-Record | sc_ic_aprvl_defn |
| Configure delegation | SN-Create-Record | sys_user_delegate |
| Query group approvals | SN-Query-Table | sysapproval_group |
Symptom: Request submitted but no approval record created Causes:
Tool: SN-Query-Table
Parameters:
table_name: sc_ic_aprvl_defn
query: catalog_item=[item_sys_id]^active=true
fields: name,condition,active,order
Symptom: Approval pending but approver claims to have acted Causes:
Tool: SN-Query-Table
Parameters:
table_name: sysapproval_approver
query: sysapproval=[ritm_sys_id]
fields: sys_id,approver,state,order,sys_updated_on
Symptom: Request continues despite rejection Cause: Business rule or workflow not honoring rejection Solution: Check workflow for proper rejection handling
Symptom: Delegate not receiving approval requests Causes:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_delegate
query: user=[original_user_sys_id]^active=true
fields: delegate,starts,ends,approval,active
catalog/item-creation - Creating catalog items (prerequisite)catalog/request-fulfillment - Processing approved requestsadmin/workflow-management - Building approval workflowsadmin/notification-management - Approval notification setup