Could not save the view ODF-0015 on MUX Grid views, orphaned UNSAVED draft rows permanently block draft creation via ODF_UI_VIEWS_U1
search cancel

Could not save the view ODF-0015 on MUX Grid views, orphaned UNSAVED draft rows permanently block draft creation via ODF_UI_VIEWS_U1

book

Article ID: 451246

calendar_today

Updated On:

Products

Clarity PPM SaaS Clarity PPM On Premise

Issue/Introduction

On Oracle and MSSQL, a user who has a leftover unsaved draft of a Grid view cannot edit any saved view again, and the save fails with ORA-00001 on ODF_UI_VIEWS_U1.

STEPS TO REPRODUCE:

  1. Log in as admin user and create two system shared views on Resources in MUX
  2. Log in to MUX as another user (or you can also use the admin user you've used previously)
  3. Open the Resources Grid in browser tab A, select the first system view View 1, and change a column selection so a draft is created.
  4. Open the Resources Grid in a second browser tab B as the same user, select the second system view View 2, and change a column selection.
  5. Now close Tab B, go back to Tab A, navigate to another page, then back to Tab A, select and try to modify View 2

Note: This will happen on any Grid views in MUX

Expected Results: Clarity reuses or discards the existing UNSAVED draft for that user and view, the way POST /rest/v1/private/views/retrieveView already does, and the user works with unsaved changes normally.

Actual Results: POST /ppm/rest/v1/private/views returns HTTP 400 and the UI shows "Could not save the view" with errorCode odf.uniqueIndexViolation.  

ODF-0015: Value must be unique.

Environment

Clarity 16.3.3, 16.4.0, 16.4.1, 16.4.2

Cause

DE210206

Resolution

Fixed in:

  • Clarity 16.5.0
  • Clarity 16.4.3 Patch 1 (16.4.3.1)

Workaround:

  1. Set Delete Unsaved Views on Logout on to remove all unsaved drafts

Or

  1. Delete the blocking UNSAVED row and its children.
  • Preferred removal is DELETE /ppm/rest/v1/private/views/{id}
  • You can rename the view first if the user needs immediate access, then delete it
  • UPDATE odf_ui_views SET name = name || ' - obsolete view~' WHERE id = <orphanId>;
  • COMMIT;
  • This workaround is per row and does not prevent recurrence.