ALERT: Some images may not load properly within the Knowledge Base Article. If you see a broken image, please right-click and select 'Open image in a new tab'. We apologize for this inconvenience.

Clarity PPM: Unable to save role demand data on portfolio plans due to a system error


Article ID: 143957


Updated On:


Clarity PPM On Premise Clarity PPM SaaS



1. Create an Investment Subobject
2. Create a Time varying attribute, and ensure that the time varying type is 'Fiscal'.
3. Navigate to Investment object and verify whether 3 attributes got created or not.
    Fiscal Period End Date
    Fiscal Period Start Date
    Fiscal Period Type
4. Navigate to Time slices in Data Administration, and create one TSV attribute and link that to Current Baseline Team Cost
5. Navigate to Portfolio Investment, and click on Attribute Registry, and move the above mentioned Fiscal Attributes from Available to Selected List.
6. Navigate to Home Portfolios, and create on new portfolio.
7. Import one investment of type project, ensure that there are some role requests in that Project, and see that the Role Demand is getting populated.
8. Create a new Plan for this portfolio and ensure that the newly created plan is selected.
9. Click on the imported investment and navigate to Role Demand portlet, and try to change the value in the TSV.
10. No error and the data gets saved successfully.
11. Clear all the caches by navigating to System.caches action.
12. Again navigate to newly created portfolio and click on the imported investment and change the value in the TSV.
13. Expected to save with out error, however fails with an exception as "PFM_CA_INV.odf_period_start" could not be bound.

Expected results: The value to get saved correctly. 
Actual results: System error is received. 


This is caused by DE51763


Clarity PPM 15.6.1


This is fixed in Clarity PPM 15.7.1

Additional Information

On the log files you will find entries like:

Referenced by:

<?xml version="1.0" encoding="UTF-8"?>

<statementRef id="" inputSource="map" inputMapIndex="0" sortColumnPath="/data/header/sortInfo/@sortColumn" sortDirectionPath="/data/header/sortInfo/@sortDirection" slicePath="/data/header/pagination/sliceInfo/@slice" sliceSizePath="/data/header/pagination/sliceInfo/@sliceSize" defaultSliceSize="20" ignoreIfError="false" hideResultSets="false" xmlns=""/>

Using input:

{odf_pk=5072040, odf_scenario_id=5039020}
 at com.niku.union.persistence.PersistenceController.createException(
 at com.niku.union.persistence.PersistenceController.handleSQLException(
 at com.niku.union.persistence.PersistenceController.processSql(
 at com.niku.union.persistence.PersistenceController.processStatement(
 at com.niku.union.persistence.PersistenceController.processStatements(
 at com.niku.union.persistence.PersistenceController.doProcessRequest(
 at com.niku.union.persistence.PersistenceController.processRequest(
 at com.niku.union.persistence.PersistenceConversation.process(
 ... 111 more
Caused by: java.sql.SQLSyntaxErrorException: [CA Clarity][Oracle JDBC Driver][Oracle]ORA-00904: "PFM_CA_INV"."ODF_PERIOD_START": invalid identifier

Checking on the DB, the column exists.

Traces enabled.

The query that seems to be blowing is:

select 'x' pmd_analytical_partition_by, odf_pk, pfm_role_demand.ACTUALS actuals, pfm_role_demand.INVESTMENT_ID investment_id, NVL(PFM_CA_INV_PLAN.odf_period_end,PFM_CA_INV.odf_period_end) odf_period_end, NVL(PFM_CA_INV_PLAN.odf_period_type,PFM_CA_INV.odf_period_type) odf_period_type, COALESCE(pfm_role_demand_plan.demand,pfm_role_demand.demand) demand, NVL(PFM_CA_INV_PLAN.odf_period_start,PFM_CA_INV.odf_period_start) odf_period_start, pfm_role_demand.ROLE_ID role_id, pfm_role_demand.ID id, odf_ca_pfm_role_demand.partition_code partition_code, investment_id.odf_entity_code odf_entity_code, investment_id.portfolio_id odf_grand_parent_id from pfm_role_demand pfm_role_demand LEFT OUTER JOIN pfm_role_demand_plan pfm_role_demand_plan ON PFM_ROLE_DEMAND.ID = PFM_ROLE_DEMAND_PLAN.ID and pfm_role_demand_plan.plan_id = 5039020 , odf_ca_pfm_role_demand odf_ca_pfm_role_demand, (select 'x' pmd_analytical_partition_by, odf_pk, PFM_CA_INV.odf_period_type odf_period_type, PFM_CA_INV.odf_period_start odf_period_start, portfolio_id.odf_entity_code odf_entity_code, pfm_investments.PORTFOLIO_ID portfolio_id, PFM_CA_INV.odf_period_end odf_period_end, pfm_investments.INVESTMENT_ID investment_id from pfm_investments pfm_investments LEFT OUTER JOIN pfm_ca_inv pfm_ca_inv ON PFM_INVESTMENTS.ID = PFM_CA_INV.ID, (select 'x' pmd_analytical_partition_by, odf_pk, pfm_portfolios.BENEFITS_CURVE benefits_curve, (NVL(PFM_PORTFOLIOS.CAPITAL_COST_TARGET,0)+NVL(PFM_PORTFOLIOS.OPERATING_COST_TARGET,0)) total_cost_target, (NVL(PFM_PORTFOLIOS.CAPITAL_COST_TARGET,0)) capital_cost_target, (NVL(PFM_PORTFOLIOS.OPERATING_COST_TARGET,0)) operating_cost_tgt, pfm_portfolios.OPERATING_COST_CURVE operating_cost_curve, odf_ca_pfm_portfolio.odf_period_type odf_period_type, (NVL(PFM_PORTFOLIOS.BENEFITS_TARGET,0)) benefits_target, pfm_portfolios.CURRENCY_CODE currency_code, odf_ca_pfm_portfolio.odf_period_start odf_period_start, pfm_portfolios.TOTAL_COST_CURVE total_cost_curve, pfm_portfolios.START_DATE start_date, pfm_portfolios.IS_ACTIVE is_active, pfm_portfolios.RESOURCES_CURVE resources_curve, (NVL(PFM_PORTFOLIOS.RESOURCES_TARGET,0)) resources_target, pfm_portfolios.FINISH_DATE finish_date, pfm_portfolios.NAME name, pfm_portfolios.CODE code, odf_ca_pfm_portfolio.odf_period_end odf_period_end, pfm_portfolios.CAPACITY_UNIT_TYPE cap_unit_type, pfm_portfolios.CAPITAL_COST_CURVE capital_cost_curve, odf_ca_pfm_portfolio.odf_entity_code odf_entity_code from pfm_portfolios pfm_portfolios, srm_resources CREATED, srm_resources UPDATED, odf_ca_pfm_portfolio odf_ca_pfm_portfolio where 1 = 1 and pfm_portfolios.created_by = CREATED.user_id and pfm_portfolios.last_updated_by = UPDATED.user_id and = portfolio_id where 1 = 1 and pfm_investments.PORTFOLIO_ID = portfolio_id.odf_pk) investment_id where 1 = 1 and = and pfm_role_demand.INVESTMENT_ID = investment_id.odf_pk and = 5072040