Missing Advanced Roadmap custom fields

Still need help?

The Atlassian Community is here for you.

Ask the community

Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.

Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

 

Summary

Advanced Roadmap fields are missing from Jira. This makes the functionalities of the Advanced Roadmap for Jira to break. This can happen during migration from Server to Data Center installations.

This article instructs on adding the missing Advanced Roadmap fields to Jira through the Database.

Diagnosis

  • Run the below SQL query in Jira DB to identify the custom fields that are missing in the instance :
advanced roadmap fields
select * from customfield
where customfieldtypekey in
(
'com.atlassian.teams:rm-teams-custom-field-team',
'com.atlassian.jpo:jpo-custom-field-parent',
'com.atlassian.jpo:jpo-custom-field-baseline-start',
'com.atlassian.jpo:jpo-custom-field-baseline-end',
'com.atlassian.jpo:jpo-custom-field-original-story-points'
);
  • Normally, the customfield table should contain the following 5 fields, but in this case, some or all should be missing:

CUSTOMFIELDTYPEKEY

CUSTOMFIELDSEARCHERKEY

CFNAME

DESCRIPTION

com.atlassian.teams:rm-teams-custom-field-teamcom.atlassian.teams:rm-teams-custom-field-team-searcherTeam
com.atlassian.jpo:jpo-custom-field-parentcom.atlassian.jpo:jpo-custom-field-parent-searcherParent Link
com.atlassian.jpo:jpo-custom-field-baseline-startcom.atlassian.jpo:jpo-custom-field-baseline-start-searcherTarget startThe targeted start date. This custom field is created and required by Portfolio for Jira.
com.atlassian.jpo:jpo-custom-field-baseline-endcom.atlassian.jpo:jpo-custom-field-baseline-end-searcherTarget endThe targeted end date. This custom field is created and required by Portfolio for Jira.
com.atlassian.jpo:jpo-custom-field-original-story-pointscom.atlassian.jpo:jpo-custom-field-original-story-points-searcherOriginal story points


Cause

This type of issue is observed when migrating from the Server to Data Center.

Solution

Please make a native database backup before modifying the database.

Step 1: Identify the missing fields from the customfield table

Run the below SQL query to identify the fields that are missing in the instance. The rest of the article will apply to the fields that are missing.

advanced roadmap fields
select * from customfield
where customfieldtypekey in
(
'com.atlassian.teams:rm-teams-custom-field-team',
'com.atlassian.jpo:jpo-custom-field-parent',
'com.atlassian.jpo:jpo-custom-field-baseline-start',
'com.atlassian.jpo:jpo-custom-field-baseline-end',
'com.atlassian.jpo:jpo-custom-field-original-story-points'
);

Step 2: Insert the missing fields into the customfield table

  • Stop Jira
  • Execute the below query to add the fields to the CUSTOMFIELD table 

    • Insert query for Team field 

      INSERT INTO CUSTOMFIELD (ID,CUSTOMFIELDTYPEKEY, CUSTOMFIELDSEARCHERKEY, CFNAME, DESCRIPTION)
      VALUES ((SELECT max(id)+1 FROM CUSTOMFIELD),'com.atlassian.teams:rm-teams-custom-field-team', 'com.atlassian.teams:rm-teams-custom-field-team-searcher', 'Team',null);
    • Insert query for Parent field. 

      INSERT INTO CUSTOMFIELD (ID,CUSTOMFIELDTYPEKEY, CUSTOMFIELDSEARCHERKEY, CFNAME, DESCRIPTION)
      VALUES ((SELECT max(id)+1 FROM CUSTOMFIELD),'com.atlassian.jpo:jpo-custom-field-parent', 'com.atlassian.jpo:jpo-custom-field-parent-searcher', 'Parent Link',null);
    • Insert query for Target start field 

      INSERT INTO CUSTOMFIELD (ID,CUSTOMFIELDTYPEKEY, CUSTOMFIELDSEARCHERKEY, CFNAME, DESCRIPTION)
      VALUES ((SELECT max(id)+1 FROM CUSTOMFIELD),'com.atlassian.jpo:jpo-custom-field-baseline-start', 'com.atlassian.jpo:jpo-custom-field-baseline-start-searcher', 'Target start','The targeted start date. This custom field is created and required by Portfolio for Jira.');
    • Insert query for Target end field 

      INSERT INTO CUSTOMFIELD (ID,CUSTOMFIELDTYPEKEY, CUSTOMFIELDSEARCHERKEY, CFNAME, DESCRIPTION)
      VALUES ((SELECT max(id)+1 FROM CUSTOMFIELD),'com.atlassian.jpo:jpo-custom-field-baseline-end', 'com.atlassian.jpo:jpo-custom-field-baseline-end-searcher', 'Target end','The targeted end date. This custom field is created and required by Portfolio for Jira.');
    • Insert query for Original story points field 

      INSERT INTO CUSTOMFIELD (ID,CUSTOMFIELDTYPEKEY, CUSTOMFIELDSEARCHERKEY, CFNAME, DESCRIPTION)
      VALUES ((SELECT max(id)+1 FROM CUSTOMFIELD),'com.atlassian.jpo:jpo-custom-field-original-story-points', 'com.atlassian.jpo:jpo-custom-field-original-story-points-searcher', 'Original story points',null);
  • Alternatively, you can combine the queries in a single statement (remove the respective sub-queries for fields that are already present in Step 1)


    insert fields to table
    INSERT INTO CUSTOMFIELD (ID,CUSTOMFIELDTYPEKEY, CUSTOMFIELDSEARCHERKEY, CFNAME, DESCRIPTION)
    VALUES ((SELECT max(id)+1 FROM CUSTOMFIELD),'com.atlassian.teams:rm-teams-custom-field-team', 'com.atlassian.teams:rm-teams-custom-field-team-searcher', 'Team',null),
    ((SELECT max(id)+2 FROM CUSTOMFIELD),'com.atlassian.jpo:jpo-custom-field-parent', 'com.atlassian.jpo:jpo-custom-field-parent-searcher', 'Parent Link',null),
    ((SELECT max(id)+3 FROM CUSTOMFIELD),'com.atlassian.jpo:jpo-custom-field-baseline-start', 'com.atlassian.jpo:jpo-custom-field-baseline-start-searcher', 'Target start','The targeted start date. This custom field is created and required by Portfolio for Jira.'),
    ((SELECT max(id)+4 FROM CUSTOMFIELD),'com.atlassian.jpo:jpo-custom-field-baseline-end', 'com.atlassian.jpo:jpo-custom-field-baseline-end-searcher', 'Target end','The targeted end date. This custom field is created and required by Portfolio for Jira.'),
    ((SELECT max(id)+5 FROM CUSTOMFIELD),'com.atlassian.jpo:jpo-custom-field-original-story-points', 'com.atlassian.jpo:jpo-custom-field-original-story-points-searcher', 'Original story points',null);
    
    

Step 3: Check if the fields are inserted properly

Run the select query from Step 1 again, now there should be one field for each type.

Step 4: Check the available contexts

Start Jira and navigate to the Custom Fields menu in administration (/jira/secure/admin/ViewCustomFields.jspa).  Look at the Available Contexts column for the new fields (Parent Link, Team, Target Start, Target End, Original story points). It likely says 0 contexts.

Step 5: Add custom fields to Global Contexts

  • Click the cog next to the issue type, and go to configure

  • On the Configure Page, click on add new context.

  • On the Add Configuration Scheme context page, you need to provide a label. The labels for the built-in ARJ customfields follow this scheme: Default Configuration for (Custom Field Name).

  • Select Any Issue Type, and Global Context from the options below, and then click create.

Step 6: Test out the fields in Advanced Roadmaps

The custom fields should all be working now. Test out :

  • Assigning a parent to an Epic-level issue.

  • Assigning an Estimate from ARJ.

  • Assigning target start/end from ARJ.

  • Assigning a team in ARJ.

  • Committing all of those fields to Jira.

Step 7: Lock the Custom-fields

If everything is working, you should lock the custom-fields, to prevent you from changing the context anymore, as well as editing the field.

Locking of custom-fields is done in the MANAGEDCONFIRGURATIONITEM table. This can be verified by the below query:

SELECT * from MANAGEDCONFIGURATIONITEM

There should be no rows with ITEM_IDs that match the IDs of the customfields you just created. 

What you want is the following rows, where the number in the ITEM_ID fields corresponds to the customfield IDs you just created.

ID

ITEM_ID

ITEM_TYPE

MANAGED

ACCESS_LEVEL

SOURCE

DESCRIPTION_KEY

10014

customfield_10008

CUSTOM_FIELD

TRUE

LOCKED

com.atlassian.teams:field-locking-service

admin.managed.configuration.items.generic.description.locked

10015

customfield_10009

CUSTOM_FIELD

TRUE

LOCKED

com.atlassian.jpo:field-locking-service

admin.managed.configuration.items.generic.description.locked

10016

customfield_10010

CUSTOM_FIELD

TRUE

LOCKED

com.atlassian.jpo:field-locking-service

admin.managed.configuration.items.generic.description.locked

10017

customfield_10011

CUSTOM_FIELD

TRUE

LOCKED

com.atlassian.jpo:field-locking-service

admin.managed.configuration.items.generic.description.locked

10018

customfield_10012

CUSTOM_FIELD

TRUE

LOCKED

com.atlassian.jpo:field-locking-service

admin.managed.configuration.items.generic.description.locked

To create locks, use the below query for each of the fields inserted. Replace $ID$ with the actual ID of the custom field from customfield table for that field.

INSERT INTO MANAGEDCONFIGURATIONITEM (ID,ITEM_ID, ITEM_TYPE, MANAGED, ACCESS_LEVEL, SOURCE, DESCRIPTION_KEY)
VALUES ((SELECT max(id)+1 FROM MANAGEDCONFIGURATIONITEM),'customfield_$ID$', 'CUSTOM_FIELD', 'true', 'LOCKED','com.atlassian.teams:field-locking-service','admin.managed.configuration.items.generic.description.locked');


Post this, the MANAGEDCONFIGURATIONITEM should look correct.

Start Jira and validate that Advanced Roadmap is working as expected. For example:

  • Try to configure hierarchy levels.
  • Try to create/edit plans.

Last modified on Jun 2, 2023

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.