Important: #91123 - Avoid using BackendUtility::viewOnClick

See forge#91123

Description

BackendUtility::viewOnClick() is not used anymore in TYPO3 core to reduce the amount of inline JavaScript being generated in the backend user interface. \TYPO3\CMS\Backend\Routing\PreviewUriBuilder should be used instead.

Probably BackendUtility::viewOnClick() will be deprecated in TYPO3 v11 and finally removed in TYPO3 v12.0 - for TYPO3 v10 LTS it's still available.

The following example demonstrates how implementations can be adjusted to make use of the new functionality without using inline JavaScript.

$onclick = \TYPO3\CMS\Backend\Utility\BackendUtility::viewOnClick(
    $pageId, $backPath, $rootLine, $section,
    $viewUri, $getVars, $switchFocus
);
$serializedAttributes = \TYPO3\CMS\Core\Utility\GeneralUtility::implodeAttributes([
    'href' => '#',
    'onclick' => $onclick,
], true);
$html = '<a ' . $serializedAttributes . '>...</a>';
Copied!

Above code snipped can be migrated to the following, given that RequireJS module TYPO3/CMS/Backend/ActionDispatcher is loaded (which basically is the case in most backend modules).

 $attributes = \TYPO3\CMS\Backend\Routing\PreviewUriBuilder::create($pageId, $viewUri)
     ->withRootLine($rootLine)
     ->withSection($section)
     ->withAdditionalQueryParameters($getVars)
     ->buildDispatcherDataAttributes([
         \TYPO3\CMS\Backend\Routing\PreviewUriBuilder::OPTION_SWITCH_FOCUS => $switchFocus,
     ]);
$serializedAttributes = \TYPO3\CMS\Core\Utility\GeneralUtility::implodeAttributes([
    'href' => '#',
    'data-dispatch-action' => $attributes['data-dispatch-action'],
    'data-dispatch-args' => $attributes['data-dispatch-args'],
], true);
$html = '<a ' . $serializedAttributes . '>...</a>';
Copied!

Generated $attributes can be used directly of course, the example above was used to actually show the result and existence of those new data-attributes.