Josh Sutton
ServiceNow Employee

The Demand Conversion to EAP entities is available out-of-the-box from the 2025 December store release. For more details, please review:

 

DISCLAIMER — Original Workaround

  • This article originally described a proposed workaround for a product gap that has since been resolved natively. The steps below are provided to help customers who implemented this workaround safely revert to the OOB solution.
  • ServiceNow does not provide support, defect fixes, or upgrade impact review for custom workaround configurations. Customers are responsible for evaluating and executing this revert in their own environments.
  • The scripting steps in this guide are provided as reference. Test thoroughly in a non-production environment before applying to production.

 

Does This Apply to YOU?

If you did NOT implement the workaround described in the original article, no action is required. The OOB Demand-to-EAP conversion capability is available in Strategic Planning version 4.10.1+ (4Q 2025 / Zurich). Skip this article and refer to the product documentation linked above to start using the feature.

 

If you DID implement the workaround, continue below. The revert steps are required to avoid conflicts between the custom configuration and the OOB solution.

 

Overview

This guide walks you through reverting each workaround component, including custom fields, UI Actions, Script Includes, Business Rules, and CSM Table Maps, and migrating data to the OOB equivalents.

 

The revert process has two categories of work:

  • Configuration Deactivation: disabling or hiding the workaround components
  • Data Migration: moving data from workaround fields to OOB fields via script

 

Prerequisites BEFORE You Start

Before beginning the revert, confirm the following in your instance:

  • Strategic Planning version 4.10.1+ (4Q 2025 / Zurich December store release) has been applied
  • The OOB UI Actions for EAP Epic and EAP Feature conversion are present on the Demand table
  • The OOB CSM Table Maps for EAP Epic and EAP Feature exist and are active
  • The OOB eap_team and converted_to fields are present on dmn_demand table (distinct from the workaround u_eap_team field)
  • The OOB converted_from field exists on sn_align_core_eap_planning_item

 

Configuration Deactivation Steps

Step 1 — Retire Workaround EAP Type Choice Records

The workaround added custom Choice records to the Demand type field for core_feature and core_scrum_epic. These are now replaced by three OOB choice records delivered with Strategic Planning v4.11.

 

Important: Due to the way ServiceNow handles Choice records, if the workaround choices were modified after import, the upgrade will not automatically create the new OOB choices. You must import the three OOB choice records manually using the XML files attached to this article.

 

The three OOB choice records to import are:

 

Label

Value

Dependent Value

Table

Scope

EAP Epic

eap_epic

strategic

dmn_demand

Global

EAP Feature

eap_feature

strategic

dmn_demand

Global

EAP Capability

eap_capability

strategic

dmn_demand

Global

 

To import: Use the XML files attached to this article. Do not create these records manually. The XML files contain the product sys_ids, which allows the platform to recognize these as OOB records. Creating them manually would generate new sys_ids and the platform would treat them as customizations.

  • Navigate to sys_choice.list and import each XML file directly
  • Once the OOB choices are confirmed active, set the workaround choices (core_feature, core_scrum_epic) to Inactive = True

 

DO NOT delete the workaround choice records – the Data Migration section below uses these to help filter and map to the new.

 

Step 2 — Disable Workaround Demand Field-Level ACLs

The workaround included custom field-level ACLs on the Demand type and category fields. These are now replaced by OOB ACLs.

  • Navigate to System Security > Access Control (ACL)
  • Locate the workaround ACLs for dmn_demand.type, dmn_demand.category, and dmn_demand.u_eap_team
  • Set each to Active = False

 

Confirm the OOB ACLs are active and functioning before disabling the workaround ACLs.

 

Step 3 — Disable Workaround UI Actions

  • Navigate to System Definition > UI Actions
  • Locate the workaround UI Actions for converting Demands to EAP Epic and EAP Feature
  • Set each to Active = False

Before disabling, confirm:

  • The OOB UI Actions for EAP conversion are present and active
  • UI Policies or Client Scripts are correctly exposing those OOB actions based on demand type value

Step 4 — Deactivate Workaround CSM Table Maps

  • Navigate to csm_table_map.list
  • Locate the workaround Table Maps for Demand to EAP Epic and Demand to EAP Feature
  • Set Active = False on each

If additional custom field mappings were added to these workaround Table Maps, replicate those mappings on the corresponding OOB Table Maps before deactivating.

 

Step 5 — Update the Story CSM Table Map (EAP Team Field)

Note: This step only applies if your workaround implementation included Story conversion with an EAP Team field mapping. If you did not configure Story conversion and do not intend to convert Demands to Stories, skip this step. Performing it unnecessarily will modify an OOB record.

 

If you are converting Demands to Story and the Story CSM Table Map was updated as part of the workaround:

  • Navigate to csm_table_map.list
  • Locate the Demand to Story Table Map
  • Locate the field mapping for EAP Team
  • Update the target field from u_eap_team (workaround) to eap_team (OOB)

Step 6 — Disable Workaround UI Policies

  • Navigate to System UI > UI Policies (scoped to Global)
  • Locate and set the workaround UI Policies to Active = False

These were controlling visibility of the workaround u_eap_team and u_eap_record fields based on demand type selection.

 

Step 7 – Disable the SNEAPUtil Script Include

  • Navigate to System Definition > Script Includes
  • Locate SNEAPUtil
  • Set to Active = False

Confirm no other active scripts, UI Actions, or Business Rules reference SNEAPUtil before disabling.

 

Step 8 – Disable the "SN - Copy Info to Epic" Business Rule

  • Navigate to System Definition > Business Rules
  • Locate SN - Copy Info to Epic BR
  • Set to Active = False

 

Data Migration Scripts (Step 9)

The following data migrations are required to align existing records to the OOB schema. Run Fix Scripts 1 and 2 first while the workaround type values are still intact, then run Fix Script 3 to remap type values. Fix Script 4 is independent and can run at any point.

 

Migration

From (Workaround)

To (OOB)

EAP Team

dmn_demand.u_eap_team

dmn_demand.eap_team

EAP Record

dmn_demand.u_eap_record

dmn_demand.converted_to

EAP Type choices

core_feature / core_scrum_epic

eap_feature / eap_epic

Demand ref on EAP item

sn_align_core_eap _planning_item.u_demand

sn_align_core_eap _planning_item.converted_from

 

Run order matters for Scripts 1–3: Scripts 1 and 2 qualify on their own source fields while old type values are still present. Script 3 remaps the type values last. Script 4 operates on a separate table and is fully independent.

 

Fix Script 1 — Migrate EAP Team

Table: dmn_demand | Qualifier: u_eap_team IS NOT NULL

var gr = new GlideRecord('dmn_demand');

gr.addNotNullQuery('u_eap_team');

gr.query();

 

var count = 0;

while (gr.next()) {

    var sysId = gr.getValue('u_eap_team');

    if (sysId) {

        gr.setValue('eap_team', sysId);

        gr.update();

        count++;

    }

}

 

gs.info('Fix Script 1 - EAP Team migration complete. Records updated: ' + count);

 

Fix Script 2 — Migrate EAP Record

Table: dmn_demand | Qualifier: u_eap_record IS NOT NULL

var gr = new GlideRecord('dmn_demand');

gr.addNotNullQuery('u_eap_record');

gr.query();

 

var count = 0;

while (gr.next()) {

    var sysId = gr.getValue('u_eap_record');

    if (sysId) {

        gr.setValue('converted_to', sysId);

        gr.update();

        count++;

    }

}

 

gs.info('Fix Script 2 - EAP Record migration complete. Records updated: ' + count);

 

Fix Script 3 — Migrate EAP Type Choices

Table: dmn_demand | Qualifier: type IN (core_feature, core_scrum_epic)

(run AFTER Scripts 1 and 2)

var gr = new GlideRecord('dmn_demand');

gr.addQuery('type', 'IN', 'core_feature,core_scrum_epic');

gr.query();

 

var count = 0;

while (gr.next()) {

    var currentType = gr.getValue('type');

    if (currentType === 'core_feature') {

        gr.setValue('type', 'eap_feature');

    } else if (currentType === 'core_scrum_epic') {

        gr.setValue('type', 'eap_epic');

    }

    gr.update();

    count++;

}

 

gs.info('Fix Script 3 - Type choice migration complete. Records updated: ' + count);

 

Fix Script 4 — Migrate Demand Reference on EAP Planning Item

Table: sn_align_core_eap_planning_item  |  Qualifier: u_demand IS NOT NULL

Note: converted_from is a document_id field. source_table must be set before converted_from for the field to resolve correctly.

 

var gr = new GlideRecord('sn_align_core_eap_planning_item');

gr.addNotNullQuery('u_demand');

gr.query();

 

var count = 0;

while (gr.next()) {

    var sysId = gr.getValue('u_demand');

    if (sysId) {

        gr.setValue('source_table', 'dmn_demand');

        gr.setValue('converted_from', sysId);

        gr.update();

        count++;

    }

}

 

gs.info('Fix Script 4 - Demand reference migration complete. Records updated: ' + count);

 

Step 10 – Hide Workaround EAP Fields from the Demand Form

This step is performed last to ensure the workaround fields remain visible during script validation in Steps 1–4.

The workaround added two reference fields to dmn_demand. These should be hidden from the form (not deleted):

  • u_eap_team (EAP Team, workaround)
  • u_eap_record (EAP Record, workaround)

Steps to hide:

  • Open the Demand form in Form Designer or Form Layout
  • Remove u_eap_team and u_eap_record from the form layout

 

Revert Checklist

  • OOB EAP Type choice records (EAP Epic, EAP Feature, EAP Capability) imported or created
  • Workaround choice records (core_feature, core_scrum_epic) set to Inactive
  • Workaround Demand field ACLs (type, category, u_eap_team) disabled
  • Workaround UI Actions disabled; OOB UI Actions confirmed active
  • Workaround CSM Table Maps (Demand to EAP Epic, Demand to EAP Feature) deactivated; OOB maps verified
  • Story CSM Table Map updated to eap_team (OOB), if applicable
  • Workaround UI Policies (scoped to Global) disabled
  • SNEAPUtil Script Include disabled
  • SN - Copy Info to Epic BR disabled
  • Fix Scripts 1–4 executed and validated in non-production
  • Fix Scripts 1–4 executed in production
  • End-to-end Demand to EAP conversion tested in non-production
  • End-to-end Demand to EAP conversion validated in production
  • Workaround fields (u_eap_team, u_eap_record) hidden from Demand form
Comments
Luis Ataide
ServiceNow Employee

Hello. We uploaded a new version of the XML Files.zip with improvements applied to the objects below

8_sys_script_include_SNEAPUtil

14_sys_script_SN _Copy_info_to_Epic

Alpa82
Mega Sage

Hello, @Luis Ataide , @Josh Sutton 
I am looking for a guidance on conversion of Demands to other objects. The above article and steps you provided seem very complex and as you specified it is not included out of the box and may be in the future replaced.

Given that the SAFe and Agile Development modules will not be available for new customers (SAFe has been if I understand correctly already depreaced and Agile Development will be too),  I cannot find any instructions in the official ServiceNow documentation Create an artifact from a demand, on how can be other artefacts created from a Demand (if an Agile Development and SAFe is not in place) - in the documentation there is no mention about the CWM or EAP.

To support the clients, I would like to ask if the documentation can also include information on the use case where the Agile Development 2.0 or SAFe is no longer available as SN is promoting to use the CWM/EAP.

As in the documentation is not specified that for creation of Enhancement or  Defect, the Agile Development is required, could you please confirm that the Enhancement and Defect record can be created without Agile Development ?

Alpa82_2-1764228652123.png

Alpa82_3-1764229150654.png

Thank you

A.

 

 

Luis Ataide
ServiceNow Employee

Hi @Alpa82,

 

Demand conversion to EAP records (Epic, Capability, Feature) is planned for the December store release (in a couple of weeks).

 

Regarding the guidance about EAP and CWM, please review the information available in the CWM guide: https://www.servicenow.com/community/cwm-articles/cwm-amp-eap-agile-guidance/ta-p/3338062

 

First version of EAP and CWM better together is also planned for the December store release.

Alpa82
Mega Sage

Thank you @Luis Ataide  for the response. I am looking forward to the new features.

I could not find any information in the other articles on CWM, about the conversion of Demand to Enhancement, which is currently available in Demand. Since I have not seen in the CWM the option to create 'Enhancement', how this use case will be handled going forward if users will not have Agile Development but only CWM?

 

Thank you

A.

Luis Ataide
ServiceNow Employee

Hi @Alpa82,

 

Thanks for your reply. We don't have a defined strategy for making the Enhancement table available to new customers without Agile development yet. I will discuss it with our product team, and we can follow up on this once we have a clear definition. 

Michelle Alexan
Tera Contributor

We upgraded to Zurich Patch 4, Hotfix 3 with the following plugins:

Strategic Planning 4.10.1

CWM 7.0.0

 

Do not see the new demand type choices for EAP.  What am I missing?

Luis Ataide
ServiceNow Employee

Hi @Michelle Alexan.

 

You probably have non-ootb demand type choices in your instance, and the creation of the new choices for EAP were skipped.

 

Could you confirm if you have non-ootb demand type choices in your instance?

Josh Sutton
ServiceNow Employee

This article has been revised completely. There is no longer a need for a workaround to convert Demands to EAP items. The updated article walks through how to revert that workaround back to Out of Box.

 

Version history
Last update:
yesterday
Updated by: