Start a conversation

CS.SM.refreshSolutionConsole Is Not a Function on Solution Management R38 (Fixed in cssmgnt 38.0.23)

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

  1. 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.
  2. 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() returns TypeError: 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.
  3. Optional source check (deep verification). In the installed Solution Console React bundle (static resource cssmgnt__solution_console_react_*_chunk → cssmgnt.chunk.js), search for refreshSolutionConsole, getNextActiveSolutionAfterReload, and rerender-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:

  • uiDelegate is declared as a private member — it is only reachable at runtime because TypeScript private is a compile-time-only restriction.
  • Its interface is typed rerender: () => void — it does not accept the reload-basket parameter.
  • The R38 _reRender only performs loadBasketThenPublish followed by a navigateToComponent on 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

  1. 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 BasketSetActive ordering).
    • Documents the method in the JS API documentation that ships with the package.
  2. 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.
  3. 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 cssmgnt version is 38.0.23 or later.
  4. Verify the fix in source (optional). Re-scan the installed cssmgnt.chunk.js for refreshSolutionConsole and getNextActiveSolutionAfterReload — 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 function in the browser console (commonly at a plugin modal-close handler during the Change Solutions flow), and running typeof CS.SM.refreshSolutionConsole returns "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 uiDelegate is a private member, its rerender is 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: the isFromMacBasket flag 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 the cssmgnt version 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().
Choose files or drag and drop files
Was this article helpful?
Yes
No
  1. ATLAS KBA

  2. Posted

Comments