Interested in a ServiceNow event built for developers? Registration for now[dev]26 is officially open!

TroyP0581187515
ServiceNow Employee

 

Audience: ServiceNow Developers & Technical Consultants  

Product: Finance Case Management (FCM) | sn_fin_ops framework

 

Why Extend FCM for General Accounting?

Out of the box, ServiceNow Finance Case Management ships with a shared Finance Case table (sn_fin_ops_finance_case) that covers common workstreams — AP, AR, Treasury, and Procurement. In larger GBS or shared services deployments, General Accounting teams often have distinct requirements:

  • Dedicated case numbering (e.g. GA prefix)
  • Role separation between GL specialists, requesters, and task owners
  • Custom case types such as GL Coding Review, Journal Entry Query, or Period-End Adjustment
  • Controlled visibility — an accountant should not see a Treasury case

 

The cleanest way to solve this is a scoped child table that extends the Finance Case table, with its own roles, ACLs, catalog item, and Employee Center wiring. This post walks through exactly that.

 

What You're Building

Artefact

Detail

Scoped App

GA Case Management (scope: x_snc_ga_case_m_0)

Case table

x_snc_ga_case_m_0_ga_case → extends Finance Case

Task table

x_snc_ga_case_m_0_ga_task → extends Finance Task

Roles

admin, specialist, requester, task_owner

Case type

GA Inquiry (value: ga_inquiry)

Catalog item

Copied from Finance inquiry, pointed at GA Case table

ACLs

Allow-If + Deny-Unless pattern, 11 on case / 9 on task

Employee Center

Request filter + open/completed to-do lists

Cross-scope

Write access granted from Finance Case Management scope

 

Licensing Considerations

Finance Case Management (sn_fin_ops) is a separately entitled ServiceNow Store application — it is not a capability unlocked purely by assigning roles. Before installation, your instance must carry valid entitlements for the application and its associated Store applications. The Store listing is the authoritative source for subscription requirements and release compatibility.

 

⚠  Important: Licensing metrics, package inclusions, and what is or is not bundled vary by contract, product tier, and ServiceNow release. Nothing in this section should be treated as a definitive licensing model. Always validate with your ServiceNow account team and your order form before activating in production.

 

What sn_fin_ops Installs

Installing Finance Case Management (sn_fin_ops) also installs or depends on the following applications. Confirm all are covered by your entitlement before activating in production:

  • Finance Operations Workspace (sn_fin_ops_ws): The agent-facing workspace where specialists route, update, and resolve cases.
  • Common Service Delivery (sn_spend_sdc): Shared platform services underpinning FCM case and task handling. Several ACL scripts in this guide call sn_spend_sdc.ServiceTaskUtil — this dependency must be present for those scripts to work.

 

Role-to-Access Mapping

The sn_fin_ops roles below describe access levels within the application. They do not define or determine license consumption — that is governed by the commercial metric in your order form.

 

Role

Access granted

Typical user

sn_fin_ops.requester

Creates finance cases via Employee Center

Employee submitting a finance request

sn_fin_ops.specialist

Views and updates finance cases; includes Finance Operations Workspace access

GL analyst, finance ops team member

sn_fin_ops.task_owner

Works tasks associated with finance cases

Accountant assigned to a task

sn_fin_ops.admin

Administrative access including Finance Operations Workspace

FCM application administrator

 

ℹ  Note: Your scoped GA roles (x_snc_ga_case_m_0.*) each inherit one of the above sn_fin_ops roles via the Contains Roles configuration. The access boundaries above therefore apply equally to your GA extension.

 

Questions to Ask Your Account Team

Before activating sn_fin_ops or your GA extension in production, get written answers to the following from your ServiceNow account team:

 

Area

Question to ask

Entitlement package

Which SKU or subscription covers Finance Case Management on our order form, and does it include a GA extension?

Subscription metric

How is consumption measured — by employee headcount, named Fulfiller users, case volume, or another metric?

Dependent applications

Are Finance Operations Workspace (sn_fin_ops_ws) and Common Service Delivery (sn_spend_sdc) included, or separately entitled?

Requester access

How is access for employees submitting finance requests (sn_fin_ops.requester) licensed — is it included, a lower tier, or a separate SKU?

Integrations and Store apps

Are any integrations or dependent Store applications separately entitled under our contract?

Non-production instances

Are there any constraints on activating sn_fin_ops in development, test, or UAT instances?

Release compatibility

What ServiceNow release versions are supported under our current subscription, and are there upgrade constraints?

 

Before You Go Live — Three Steps

  1.   Verify the entitlement in the instance.

Check Application Manager or the Store application listing to confirm the entitlement is valid on the target instance before activation.

  1.   Separate requester and fulfiller access.

Do not assign sn_fin_ops.specialist (or x_snc_ga_case_m_0.specialist) to employees who only need to submit requests. Requester and fulfiller roles must be kept separate for both least-privilege security and licence hygiene.

  1.   Test with least-privilege roles in non-production.

Validate end-to-end access in a non-production instance before promoting to production. Do not assume an existing Employee Center, CSM, or HRSD subscription automatically includes sn_fin_ops — confirm explicitly.

Step 1 — Create the Scoped Application

Navigate to App Engine > ServiceNow Studio and create a new App.

  • Name: GA Case Management | Scope: Scoped
  • On the roles page, delete the two default roles — you'll create precise ones next.
  • Select Continue, then Go to app dashboard.

 

ℹ  Note: Verify the app scope x_snc_ga_case_m_0 is active in the top-right scope switcher before proceeding. Every table, role, and ACL must land in this scope.

 

Step 2 — Create Roles

Navigate to System Security > Users and Groups > Roles and create four roles with the following suffixes. The platform prepends the scope prefix automatically.

 

Suffix

Full Role Name

Contains Role

admin

x_snc_ga_case_m_0.admin

x_snc_ga_case_m_0.specialist + sn_fin_ops.admin

specialist

x_snc_ga_case_m_0.specialist

sn_fin_ops.specialist

requester

x_snc_ga_case_m_0.requester

sn_fin_ops.requester

task_owner

x_snc_ga_case_m_0.task_owner

sn_fin_ops.task_owner

 

For each role, open it, navigate to the Contains Roles tab and add the mapped sn_fin_ops role via Edit. This cascades the OOB FCM permissions correctly — your custom roles sit on top of the framework without duplicating logic.

 

Step 3 — Create Case and Task Tables

3.1 GA Case Table

In Studio, create a new Table file under GA Case Management:

 

Field

Value

Label

GA Case

Name

x_snc_ga_case_m_0_ga_case (auto-filled)

Extends table

Finance Case

Auto-number

Enabled

Prefix

GA

User role (Controls tab)

x_snc_ga_case_m_0.specialist

Accessible from

All application scopes

Can read / create / update

All selected

 

Extending Finance Case gives your table the full FCM data model — short description, priority, assignment group, state machine, work notes, and SLA fields — with no custom schema work.

 

3.2 GA Task Table

 

Field

Value

Label

GA Task

Name

x_snc_ga_case_m_0_ga_task (auto-filled)

Extends table

Finance Task

Prefix

GATSK

User role

x_snc_ga_case_m_0.specialist

 

3.3 Related List and New Action

  1.   Navigate to All > GA > GA Cases, open a new case form, right-click the title bar and go to Configure > Related Lists.
  2.   Remove Finance Task -> Related case from Selected. Add GA Task -> Related case to the top of Selected. Save.
  3.   Navigate to Now Experience Framework > Declarative Actions > Related List Actions and create a New action:
  • Implemented as: UXF Client Action
  • Specify client action: Create New Record
  • Table: GA Task [x_snc_ga_case_m_0_ga_task]

 

Step 4 — Create the GA Inquiry Case Type

  1.   In Studio, open the GA Case table and search fields for case_type.
  2.   Open the side panel gear icon → Choices > Edit > See all choice configurations.
  3.   On the Choices tab of the Dictionary Entry, select New and add:

 

Field

Value

Label

GA Inquiry

Value

ga_inquiry

Table

GA Case [x_snc_ga_case_m_0_ga_case]

 

ℹ  Note: The value ga_inquiry must match exactly in both this Choice record and the catalog item script below. A mismatch creates cases with a blank case type.

 

Step 5 — Create the Catalog Item

  1.   Navigate to Service Catalog > Catalog Definitions > My Catalogs > Service Catalog.
  2.   Search for Finance inquiry in the Catalog Items tab and open it.
  3.   Select Copy and update the copy:

 

Field

Value

Name

GA Inquiry

Table name

GA Case [x_snc_ga_case_m_0_ga_case]

Short description

Raise a General Accounting inquiry

 

  1.   In the Scripts section, update lines 18–19:
//Setting case type as "GA Inquiry"
current.case_type = "ga_inquiry";

 

 

  1.   Save, then scroll to Assigned Topics > Add and assign to the Finance topic under the Employee taxonomy.

 

Step 6 — Configure Access Controls

Elevate to security_admin first via Avatar > Elevate role.

 

The ACL Pattern

FCM uses a two-layer ACL model:

  • Allow-If ACLs — grant access based on role + data condition (e.g. requester can only read their own cases)
  • Deny-Unless ACLs — lock out anyone without a recognised role, even if an Allow-If somewhere else would have passed

Both layers are required. Skip the Deny-Unless ACLs and users with unrelated roles may still read GA cases through inherited Finance Case ACLs.

 

GA Case Table — Target: 11 ACL Records

 

Operation

Decision Type

Role(s)

Condition / Script

read

Allow If

requester

Opened by = Me (dynamic)

read

Allow If

task_owner

Script: task assigned to user or group

write

Allow If

requester

State not in: Closed Cancelled/Rejected/Completed

write

Allow If

task_owner

Script: task assigned to user + state not closed

create

Allow If

specialist

(no condition)

write

Allow If

specialist

Auto-created on table creation

read

Allow If

specialist

Auto-created on table creation

delete

Allow If

specialist

Auto-created on table creation

create

Deny Unless

specialist

(no condition)

read

Deny Unless

specialist + requester + task_owner

(no condition)

write

Deny Unless

specialist + requester + task_owner

(no condition)

 

Advanced Condition script for the task_owner read ACL:

 

var table_name = 'x_snc_ga_case_m_0_ga_task';
var isAnyTaskAssignedToTheUser = function(caseRecord) {
    var tasks = sn_spend_sdc.ServiceTaskUtil.getTasks(
        'service_request=' + caseRecord.getUniqueValue() +
        '^assigned_to=' + gs.getUserID(), table_name);
    return tasks.hasNext();
};

var isAnyTaskAssignedToTheUserGroup = function(caseRecord) {
    var tasks = sn_spend_sdc.ServiceTaskUtil.getTasks(
        'service_request=' + caseRecord.getUniqueValue() +
        '^assignment_groupDYNAMIC<YOUR_ONE_OF_MY_GROUPS_SYS_ID>',
        table_name);
    return tasks.hasNext();
};
answer = isAnyTaskAssignedToTheUser(current) ||
         isAnyTaskAssignedToTheUserGroup(current);

 

ℹ  Note: Replace <YOUR_ONE_OF_MY_GROUPS_SYS_ID> with the sys_id of the "One of my groups" dynamic filter on your instance. Navigate to System Security > Dynamic Filter Options, search for "One of my groups", and copy the sys_id from that record.

 

GA Task Table — Target: 9 ACL Records

4 auto-created ACLs for specialist, plus:

 

Operation

Decision Type

Role

Condition

read

Allow If

task_owner

Assigned to = Me OR Assignment group = One of my groups

write

Allow If

task_owner

Assigned to = Me OR State not in closed states

create

Deny Unless

specialist

read

Deny Unless

specialist + task_owner

write

Deny Unless

specialist + task_owner

 

De-elevate security_admin when done.

 

Step 7 — Configure Employee Center

Request Filter

Navigate to Service Catalog > Catalog Administration > My Request Filter and create a new filter:

 

Field

Value

Title

GA Cases

Table

GA Case [x_snc_ga_case_m_0_ga_case]

Applies to

Desktop/Service Portal

Filter condition

Opened by = Me OR Requested by = Me

Primary field

Short description

Secondary fields

Priority, Number

 

To-Do Lists

Navigate to Employee Center > Administration > To-dos Configuration and create two records:

 

GA Tasks — Open

  • Tab: Open
  • Conditions: State is one of Pending/Open/Work in Progress AND Assigned to = Me AND Task type = GA Task
  • Title row: Short description | Detail row: Number
  • Task Configuration: Name = GA Task | Common Info fields = Number, Priority, Due date, State
  • Primary Info title = Description | Action group = Finance Task Actions
  • Tab Configuration: Type = Activity Stream | Source = Task | Display name = Activity

 

GA Tasks — Completed

  • Tab: Completed
  • Conditions: State is one of Closed Complete/Incomplete/Skipped AND Assigned to = Me AND Task type = GA Task
  • Same Title row, Detail row, Task Configuration, and Tab Configuration as above

 

Step 8 — Cross-Scope Access

Switch scope to Finance Case Management, then navigate to System Applications > Application Cross-Scope Access and create:

 

Field

Value

Target Scope

GA Case Management

Target Name

x_snc_ga_case_m_0_ga_case

Target Type

Table

Operation

Write

Status

Allowed

 

This allows the Finance Case Management scope (where the catalog item script runs) to write to your scoped GA Case table. Without it the record producer fails silently on the current.case_type assignment.

 

Verification

Follow these steps to confirm the implementation end to end:

  • Assign x_snc_ga_case_m_0.requester to a test user.
  • Assign x_snc_ga_case_m_0.specialist to a specialist user.
  • As the requester, navigate to Employee Center > Finance and submit a GA Inquiry.
  • Confirm the case number carries a GA prefix.
  • As the specialist, open Finance Operations Workspace > All work > Cases, sort by Number descending — the GA case should appear with Case type = GA Inquiry.
  • Assign to the specialist, save, and confirm My assigned cases by type on the workspace home now shows the GA Inquiry slice.

 

Key Things to Get Right

 

Risk

What to check

Wrong scope on artefacts

Confirm x_snc_ga_case_m_0 is active in the scope switcher before creating tables, roles, or ACLs.

Entitlement not confirmed

Do not activate sn_fin_ops in production without written confirmation of your SKU and subscription metric from your account team.

Specialist role over-assigned

Do not assign sn_fin_ops.specialist (or the GA equivalent) to requesters. Requester and fulfiller access must be separated for least privilege and licence hygiene.

Missing Deny-Unless ACLs

Without them, users with unrelated roles may read GA cases through inherited Finance Case ACLs.

Cross-scope write missing

The catalog item script runs in the Finance Case Management scope — without the privilege, case_type won't populate.

ga_inquiry value mismatch

The Choice record value and the catalog item script must match exactly. A typo creates cases with a blank case type.

DYNAMIC GUID is instance-specific

The group filter GUID in the task_owner ACL script must be replaced with your instance's correct value.

Group role assignments are instance data

Script them or document as a post-deploy step — they are not captured in update sets.

sn_spend_sdc dependency

The ACL scripts call sn_spend_sdc.ServiceTaskUtil. Confirm Common Service Delivery is installed and entitled before deploying.

 

 

Licensing information is provided for guidance only. Always validate entitlements with your ServiceNow account team and order form before activating in production.

Version history
Last update:
an hour ago
Updated by:
Contributors