Symptom
When attempting to generate specifications for a service using the API:
csedm.API_1.generateSpecifications(new List<String>{'<SERVICE_ID>'}, new List<String>(), false);
The operation fails with the error:
Cannot get Order Enrichments without specified commercial configuration GUIDs
No specifications are generated, and the order cannot proceed.
Cause
The cssdm__solution_association__c field on the Product Configuration record is blank or null. This field is required by the Order Enrichment and specification generation process to:
- Link the Product Configuration to its parent Solution
- Retrieve the correct Order Enrichment configuration
- Map commercial configurations to their GUIDs for specification generation
When this field is missing, the system cannot identify which Order Enrichments apply to the configuration, causing the specification generation to fail.
This typically occurs when:
- Product Configurations are created via custom code that skips the solution association
- Data migration processes do not populate the field
- Manual data manipulation clears the field inadvertently
Resolution
Step 1: Identify the Affected Product Configuration
From the error message or API call, note the Service ID (Product Configuration ID).
Example: a3aQw000003f92e
Step 2: Verify the Missing Solution Association
Run the following SOQL query to check the solution association field:
SELECT Id, Name, cssdm__solution_association__c,
cscfga__Product_Basket__c,
cscfga__Product_Basket__r.cssmgnt__Solution__c
FROM cscfga__Product_Configuration__c
WHERE Id = '<SERVICE_ID>'
If cssdm__solution_association__c is null, this confirms the issue.
Step 3: Determine the Correct Solution Association
The solution association should match the Solution ID from the basket:
SELECT Id, Name, cssmgnt__Solution__c, cssmgnt__Solution__r.Name
FROM cscfga__Product_Basket__c
WHERE Id = '<BASKET_ID>'
Note the cssmgnt__Solution__c value - this is what should be populated in the Product Configuration's cssdm__solution_association__c field.
Step 4: Update the Solution Association Field
Update the Product Configuration with the correct solution association:
UPDATE cscfga__Product_Configuration__c
SET cssdm__solution_association__c = '<SOLUTION_ID>'
WHERE Id = '<SERVICE_ID>'
Alternatively, update via Anonymous Apex:
cscfga__Product_Configuration__c pc = [
SELECT Id, cssdm__solution_association__c,
cscfga__Product_Basket__r.cssmgnt__Solution__c
FROM cscfga__Product_Configuration__c
WHERE Id = '<SERVICE_ID>'
LIMIT 1
];
pc.cssdm__solution_association__c = pc.cscfga__Product_Basket__r.cssmgnt__Solution__c;
update pc;
Step 5: Retry Specification Generation
Execute the API call again:
csedm.API_1.generateSpecifications(
new List<String>{'<SERVICE_ID>'},
new List<String>(),
false
);
Verify specifications are generated successfully.
Step 6: Verify Order Enrichment Configuration
If specifications still fail to generate after populating the solution association, verify the Order Enrichment configuration:
SELECT Id, Name, csedm__Commercial_Product__r.Name,
csedm__Specification_Template__r.Name
FROM csedm__Order_Enrichment__c
WHERE csedm__Commercial_Product__c IN (
SELECT cscfga__Product_Definition__c
FROM cscfga__Product_Configuration__c
WHERE Id = '<SERVICE_ID>'
)
Ensure Order Enrichment records exist for the Product Definition and have valid Specification Templates assigned.
Additional Notes
-
Bulk Updates: If multiple Product Configurations are affected, use a bulk update query:
sql UPDATE cscfga__Product_Configuration__c SET cssdm__solution_association__c = cscfga__Product_Basket__r.cssmgnt__Solution__c WHERE cssdm__solution_association__c = null AND cscfga__Product_Basket__r.cssmgnt__Solution__c != null -
Custom Code Review: If your org uses custom code to create Product Configurations, ensure it populates the
cssdm__solution_association__cfield:
apex pc.cssdm__solution_association__c = basket.cssmgnt__Solution__c; -
Data Validation: Consider adding a validation rule to prevent Product Configurations from being created without a solution association if your business process requires it.
-
Related Fields: The solution association field is separate from
cscfga__Parent_Configuration__c. Both may be required depending on your configuration hierarchy.
Priyanka Bhotika
Comments