Problem
After upgrading CloudSense from one release to another (e.g., R35 to R37), you may encounter issues when trying to save baskets or run Calculate Totals. The symptoms include:
- Gray notification appears: "Unable to complete save successfully!"
- Basket page continuously buffers during the save operation without completing
- Solution Console becomes unresponsive when attempting to open existing baskets
- Sales Console shows errors when working with product configurations
The issue typically affects both:
- Existing baskets created before the upgrade
- New baskets created after the upgrade
Root Cause
During CloudSense package upgrades, new fields may be added to standard objects like Product Configuration. If Field-Level Security (FLS) permissions are not granted for these new fields, the CloudSense integration user and other profiles will be unable to read or write to them.
When the basket save or Calculate Totals operation attempts to access these fields, Salesforce returns a Field-Level Security (FLS) Exception, which stops the entire operation.
Common fields that cause this issue after upgrades:
- Discount-related fields on Product Configuration object
- Custom fields added by the upgrade
- Fields used in configuration output mappings
- Fields used to persist data from Solution Management
Example error message (from debug logs):
SALESFORCE csutil.SObjectUtils.SObjectUtilsException: FLS Exception ---
InsertChecker, Object failed: cscfga__Product_Configuration__c,
field not Createable: HT_CS_One_Off_Discount_Amount__c
or
FLS Exception --- SelectChecker, Object failed: cscfga__Product_Configuration__c,
field not Accessible: Has_Term_Change__c
Resolution Steps
Step 1: Identify the Fields Causing the FLS Exception
- Enable debug logging to capture the exact field names causing the error:
- Navigate to Setup > Debug Logs
- Click New to create a debug log
- Select the CloudSense integration user (e.g.,
cloudsense.integration@yourcompany.com) - Set the debug level to FINER
- Set the expiration time to 1 hour
-
Click Save
-
Reproduce the issue:
- Open a basket in the Solution Console
- Click Calculate Totals or attempt to save the basket
-
Wait for the error to occur
-
Download and review the debug log:
- Navigate to Setup > Debug Logs
- Find the most recent log entry
- Click Download
- Search for "FLS Exception" in the log file
- Note the field names mentioned in the error message
Example from debug log:
FLS Exception --- InsertChecker, Object failed: cscfga__Product_Configuration__c,
field not Createable: HT_CS_One_Off_Discount_Amount__c
In this example, the problematic field is HT_CS_One_Off_Discount_Amount__c.
Step 2: Identify the CloudSense Integration User
- Navigate to Setup > Users
- Search for the integration user by filtering for:
- Username containing "cloudsense" or "integration"
- Profile = "System Administrator" or "CloudSense Integration"
- Note the username (e.g.,
cloudsense.integration@yourcompany.com) - Note the profile assigned to this user
Step 3: Grant Field-Level Security Permissions
For each field identified in Step 1, grant FLS permissions to the integration user's profile:
- Navigate to Setup > Object Manager
- Search for and select
Product Configuration(API name:cscfga__Product_Configuration__c) - Click Fields & Relationships
- For each problematic field (e.g.,
HT_CS_One_Off_Discount_Amount__c): - Click the field name
- Click Set Field-Level Security
- Find the profile used by your integration user (e.g., System Administrator)
- Check Visible
- Check Read-Only (minimum) or Editable (if write access is needed)
- Click Save
- Repeat for all fields mentioned in the FLS Exception error
Common fields to check after upgrades:
- HT_CS_One_Off_Discount_Amount__c
- HT_CS_Total_MRC_Discount__c
- cscfga__one_off_charge_product_discount_value__c
- Has_Term_Change__c
- Quote_Name_Attribute__c
- Any custom discount or pricing fields added by your implementation
Step 4: Verify the Permissions
- Use "Login As" to impersonate the integration user:
- Navigate to Setup > Users
- Find your integration user
-
Click Login (if available) or Login As
-
Open Developer Console (while logged in as the integration user)
-
Run a test query to verify the fields are now accessible:
SELECT Id, Name,
HT_CS_One_Off_Discount_Amount__c,
HT_CS_Total_MRC_Discount__c,
cscfga__one_off_charge_product_discount_value__c,
Has_Term_Change__c,
Quote_Name_Attribute__c
FROM cscfga__Product_Configuration__c
LIMIT 1
-
If the query returns a row without errors, the permissions are set correctly
-
If the query fails, review the error message and ensure:
- The field API names are correct
- The profile has "Visible" checked for each field
- You are logged in as the correct integration user
Step 5: Test the Basket Save Operation
-
Log out from the integration user session and log back in as yourself
-
Create a brand-new basket to test:
- Navigate to a test Opportunity
- Click Product Basket
- Add a few products
-
Click Calculate Totals
-
Verify the basket saves successfully without errors
-
Test with an existing basket that was previously failing:
- Open the basket in the Solution Console
- Click Calculate Totals
- Verify the save operation completes without the "Unable to complete save successfully!" message
Step 6: Grant Permissions for Other Profiles (If Applicable)
If other users (non-integration users) also work with Solution Manager, repeat Step 3 for their profiles:
- Identify all profiles that work with baskets and configurations
- For each profile, grant FLS permissions for the same fields
- Test with a user from each profile to ensure they can save baskets successfully
Verification
After granting FLS permissions:
- Run Calculate Totals on multiple baskets (new and existing)
- Verify all baskets save successfully without errors
- Check the Solution Console to ensure it loads without buffering
- Test the Sales Console to ensure product configurations work correctly
- Monitor debug logs for any remaining FLS exceptions
Prevention
To prevent this issue in future upgrades:
- Review CloudSense release notes before each upgrade to identify new fields added to standard objects
- Grant FLS permissions proactively for all new fields added by the upgrade
- Test in a sandbox environment before upgrading production
- Create a checklist of standard FLS permissions to verify after each upgrade
- Use a dedicated integration user with consistent profile permissions across all environments
- Document all custom fields and their required FLS permissions for future reference
- Run a post-upgrade validation that includes testing basket save, Calculate Totals, and Solution Console operations
Important Notes
- The FLS Exception may not always display a clear error message in the UI; sometimes the basket just buffers indefinitely
- Multiple fields may be missing FLS permissions after an upgrade, so check all fields mentioned in the debug log
- If you skip releases during the upgrade path (e.g., R35 > R37 without R36), you may encounter additional FLS issues
- The integration user typically uses the "System Administrator" profile, but verify this in your org
- If the issue persists after granting FLS permissions, generate a fresh debug log and check for additional fields or different error types
- Changing the basket stage from Submitted back to Order Enrichment and then to Submitted again may retrigger downstream processes, so use caution
- Always test the fix in a sandbox environment before applying to production
- If you have custom code that accesses these fields, ensure those users/profiles also have FLS permissions
Priyanka Bhotika
Comments