Contents
Overview
After upgrading the Solution Management (cssmgnt) package to the R38 line (any build from 38.0.1 through 38.0.20), Solution Console customizations that call the public JavaScript API CS.SM.refreshSolutionConsole() fail at runtime with:
TypeError: CS.SM.refreshSolutionConsole is not a function
This typically surfaces in the Change Solutions flow — for example when the Change Solutions modal closes (before the automatic Add to MAC Basket step), on Delete Solution refresh, and after other programmatic solution operations. Because plugins call this method at multiple call sites, every one of those call sites throws, which blocks the Change Solutions path from completing.
Root cause: CS.SM.refreshSolutionConsole() was introduced as a public API only on the R36-MR1 and R37 release lines (36.14.10 / 37.4.15), and its deleted-active-solution completion shipped shortly after in 36.14.11 / 37.4.16. The R38 line was baselined in the same period and this change was never forward-ported to it, so the method — along with its supporting internals (getNextActiveSolutionAfterReload and the rerender-helper logic) — is absent from every R38 build up to 38.0.20. This has been confirmed as a CloudSense product defect on a supported release line.
Affected versions: Solution Management (cssmgnt) R38 builds 38.0.1 through 38.0.20.
Fixed in version: Solution Management 38.0.23 (released in R-2026.10.01), which restores the public method and its deleted-active-solution behavior and documents it in the shipped JS API docs. The resolution required an Engineering forward-port.
Prerequisites
- Salesforce access to Setup > Installed Packages to check the installed Solution Management (
cssmgnt) version. - Permission to install/upgrade managed packages in the target org (sandbox and/or Production).
- Access to the Solution Console page and the browser developer console (press
F12, then open the Console tab) for the runtime checks below.
Solution
How to Confirm You Are Affected
- Check your installed version. Go to Setup > Installed Packages and note the Solution Management (
cssmgnt) version. If it is an R38 build earlier than 38.0.23, you are exposed. -
Run a runtime check in the browser console (on a page where the Solution Console is loaded):
- Run
typeof CS.SM.refreshSolutionConsole. An affected build returns"undefined". - Calling
await CS.SM.refreshSolutionConsole()returnsTypeError: CS.SM.refreshSolutionConsole is not a function. - On a fixed build the call resolves and the console re-renders — when the active solution is deleted, the next solution is selected automatically.
- Run
- Optional source check (deep verification). In the installed Solution Console React bundle (static resource
cssmgnt__solution_console_react_*_chunk→cssmgnt.chunk.js), search forrefreshSolutionConsole,getNextActiveSolutionAfterReload, andrerender-helper. On an affected R38 build all three return 0 occurrences, while the R38 re-render internals (setUIDelegate,_reRender,loadTimeStamps,BasketSetActive) are present.
Why the Unsupported Workaround Should Not Be Used
CS.SM.uiDelegate.rerender(true) may appear reachable at JavaScript runtime, but it is not a supported substitute on the R38 line. Do not build against it, for the following reasons:
uiDelegateis declared as a private member — it is only reachable at runtime because TypeScriptprivateis a compile-time-only restriction.- Its interface is typed
rerender: () => void— it does not accept the reload-basket parameter. - The R38
_reRenderonly performsloadBasketThenPublishfollowed by anavigateToComponenton the current active component. It does not contain the deleted-active-solution handling, so after deleting the active solution it re-navigates to the now-stale component. This path also contains a stale-closure regression that causes it to re-navigate to a stale component.
Resolution Steps
-
Upgrade Solution Management to 38.0.23 or later — the R38 build where the public API was restored (package version ID begins with
04tWV0...). This build:- Restores
CS.SM.refreshSolutionConsole(reloadBasket = true)as a public method. - Restores the deleted-active-solution re-render logic (selects the next solution, or the empty state, after the active solution is deleted), matching the R37 behavior.
- Preserves the existing R38 concurrency fixes (per-solution timestamps, basket-load race guard, and
BasketSetActiveordering). - Documents the method in the JS API documentation that ships with the package.
- Restores
-
Clear caches after the upgrade.
- Clear the Solution Management and Pricing Service caches.
- Clear your browser cache and reload the Solution Console page so the browser does not serve a cached copy of the old console bundle.
-
Verify the fix at runtime.
- In the browser console, run
typeof CS.SM.refreshSolutionConsole→ expect"function". - Execute the Change Solutions path end-to-end: open Change Solutions → close the modal → the console refreshes → the automatic Add to MAC Basket step completes — all without the
TypeError. - Confirm in Setup > Installed Packages that the
cssmgntversion is 38.0.23 or later.
- In the browser console, run
- Verify the fix in source (optional). Re-scan the installed
cssmgnt.chunk.jsforrefreshSolutionConsoleandgetNextActiveSolutionAfterReload— both should now be present.
Availability by Release Line
If you run multiple release lines, be aware that this API has different availability per line:
- R36-MR1: available in 36.14.11 and later.
- R37: available in 37.4.16 and later.
- R38: available in 38.0.23 and later (earlier R38 builds are affected).
If a plugin must run unchanged across lines, make sure each installed line is on a build that includes the API before relying on CS.SM.refreshSolutionConsole().
Note: CS.SM.refreshSolutionConsole() is an asynchronous method and returns a Promise — always await it (or use .then()) in custom code. For broader guidance on async CloudSense Solution Management API methods, see Solution.getComponentByName Not A Function: Missing Await for Async Call.
Note: If you still see the error after upgrading to 38.0.23+ and clearing caches, confirm the upgrade actually completed (check the package version in Setup > Installed Packages) and that the browser is not serving a cached copy of the old console bundle. If a sandbox was refreshed from Production, it reverts to production package levels — re-install the R38 package set before re-testing the Change Solutions path.
Frequently Asked Questions
- 1. How do I know if I'm hit by this specific issue?
- You will see the exact error
TypeError: CS.SM.refreshSolutionConsole is not a functionin the browser console (commonly at a plugin modal-close handler during the Change Solutions flow), and runningtypeof CS.SM.refreshSolutionConsolereturns"undefined". This happens on Solution Management R38 builds from 38.0.1 through 38.0.20, where the public API was never forward-ported. - 2. Can I just call
CS.SM.uiDelegate.rerender(true)as a temporary workaround? - No. On the R38 line
uiDelegateis a private member, itsrerenderis typed with no parameter, and the R38 re-render path lacks the deleted-active-solution handling (it re-navigates to a stale component, and has a stale-closure regression). It is not a supported substitute — upgrade to 38.0.23 or later instead. - 3. Which version fixes this, and what exactly changed?
- Solution Management 38.0.23 (released in R-2026.10.01) restores
CS.SM.refreshSolutionConsole(reloadBasket = true)as a public method, restores the deleted-active-solution re-render logic (next-solution/empty-state handling), keeps the existing R38 concurrency fixes intact, and newly documents the method in the shipped JS API docs. Two unrelated fixes also shipped in the same build: theisFromMacBasketflag is no longer dropped from configurations on MACD/in-flight basket saves, and editable attributes that pass their validation rule no longer show the validation error on load. - 4. After upgrading to 38.0.23, how do I confirm the Change Solutions flow is actually working?
- Clear the Solution Management and Pricing Service caches and your browser cache, then run the full automatic path: open Change Solutions → close the modal → the console should refresh → the automatic Add to MAC Basket step should complete without a
TypeError. Also confirm in Setup > Installed Packages that thecssmgntversion is 38.0.23 or later. If the sandbox was refreshed from Production, re-install the R38 package set first, since a refreshed org reverts to production package levels. - 5. I'm on R37 or R36-MR1 and see the same error — is it the same fix?
- The same public API exists on those lines but at different versions: upgrade to 37.4.16+ on R37, or 36.14.11+ on R36-MR1. If a plugin must run unchanged across lines, make sure each installed line is on a build that includes the API before relying on
CS.SM.refreshSolutionConsole().
ATLAS KBA
Comments