The frontend sends two input tables - browser_info and, when the page URL has parameters, browser_url_vars - with the startup service and with the services that execute customer-provided code: the hook scripts (pre/post edit and approve hooks) and the dynamic cell dropdown programs. They are available in those services as work.browser_info / work.browser_url_vars, so a support ticket can be diagnosed from the job log without asking the user follow-up questions, and a hook can adapt to its context. Other services do not receive the tables.
browser_info - a single row: url (the DC page URL, not the embedding document), referrer, timezone (IANA), tz_offset (minutes, positive west of UTC), locale, dc_version, adapter_version, browser, browser_version, platform, user_agent.
browser_url_vars - the page URL parameters as one row per parameter (name, value), so a SAS program reads a parameter by name rather than parsing the url string. Parameters from both the search string and the hash query string (Angular routes carry them after the #) are included; on a name collision the hash value wins. The table is sent only when the page URL has at least one parameter.
The recipient services: public/startupservice, editors/getdata, editors/getdynamiccolvals, editors/stagedata, editors/loadfile, editors/restore, auditors/postdata.
Also notes that the values are client supplied (diagnostics hints, not a security boundary), how to see the tables with debug on (the debug value depends on the path - &_debug=131 on the Compute API and SAS 9, &_debug=128 on the Viya web JES path with runAsTask, which is what the frontend sends there; mpeinit writes both to the job log, with example output), and that a directly-called service or an older frontend has neither table.
Also documents that editors/loadfile is reached through the adapter's multipart file upload, which carries no input tables, so in practice that service (and the post edit hook it runs) does not receive them - it is on the recipient list for completeness.
mkdocs build passes; headings, tables and the example log render verified in the output HTML. Companion to dc/dc #326.
The frontend sends two input tables - `browser_info` and, when the page URL has parameters, `browser_url_vars` - with the startup service and with the services that execute customer-provided code: the [hook scripts](macros.md) (pre/post edit and approve hooks) and the dynamic cell dropdown programs. They are available in those services as `work.browser_info` / `work.browser_url_vars`, so a support ticket can be diagnosed from the job log without asking the user follow-up questions, and a hook can adapt to its context. Other services do not receive the tables.
**browser_info** - a single row: `url` (the DC page URL, not the embedding document), `referrer`, `timezone` (IANA), `tz_offset` (minutes, positive west of UTC), `locale`, `dc_version`, `adapter_version`, `browser`, `browser_version`, `platform`, `user_agent`.
**browser_url_vars** - the page URL parameters as one row per parameter (`name`, `value`), so a SAS program reads a parameter by name rather than parsing the `url` string. Parameters from both the search string and the hash query string (Angular routes carry them after the `#`) are included; on a name collision the hash value wins. The table is sent only when the page URL has at least one parameter.
The recipient services: `public/startupservice`, `editors/getdata`, `editors/getdynamiccolvals`, `editors/stagedata`, `editors/loadfile`, `editors/restore`, `auditors/postdata`.
Also notes that the values are client supplied (diagnostics hints, not a security boundary), how to see the tables with debug on (the debug value depends on the path - `&_debug=131` on the Compute API and SAS 9, `&_debug=128` on the Viya web JES path with `runAsTask`, which is what the frontend sends there; `mpeinit` writes both to the job log, with example output), and that a directly-called service or an older frontend has neither table.
Also documents that `editors/loadfile` is reached through the adapter's multipart file upload, which carries no input tables, so in practice that service (and the post edit hook it runs) does not receive them - it is on the recipient list for completeness.
`mkdocs build` passes; headings, tables and the example log render verified in the output HTML. Companion to dc/dc #326.
Every service call carries a single-row browser_info input table, readable
by any service or hook script as work.browser_info and dumped to the job log
when debug is on. Document its columns and how to see it, so a support ticket
can be answered from the log without follow-up questions.
The support diagnostics are now sent only where they can be used: the
startup service and the services that execute customer-provided code
(hook scripts, dynamic cell dropdown programs) - not with every service
call. The page's URL parameters arrive as a new browser_url_vars table,
one row per parameter, so a SAS developer reads a parameter by name
rather than parsing the url string.
hermes
changed title from docs(troubleshooting): document the browser_info support diagnostics to docs(troubleshooting): document the browser_info / browser_url_vars support diagnostics2026-09-25 00:42:05 +00:00
The adapter sends _debug=128 (not 131) on the Viya web JES path when
runAsTask is enabled, which is what the frontend uses there. Document
that value alongside 131, and note that editors/loadfile is reached
through the multipart file upload, which carries no input tables.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The frontend sends two input tables -
browser_infoand, when the page URL has parameters,browser_url_vars- with the startup service and with the services that execute customer-provided code: the hook scripts (pre/post edit and approve hooks) and the dynamic cell dropdown programs. They are available in those services aswork.browser_info/work.browser_url_vars, so a support ticket can be diagnosed from the job log without asking the user follow-up questions, and a hook can adapt to its context. Other services do not receive the tables.browser_info - a single row:
url(the DC page URL, not the embedding document),referrer,timezone(IANA),tz_offset(minutes, positive west of UTC),locale,dc_version,adapter_version,browser,browser_version,platform,user_agent.browser_url_vars - the page URL parameters as one row per parameter (
name,value), so a SAS program reads a parameter by name rather than parsing theurlstring. Parameters from both the search string and the hash query string (Angular routes carry them after the#) are included; on a name collision the hash value wins. The table is sent only when the page URL has at least one parameter.The recipient services:
public/startupservice,editors/getdata,editors/getdynamiccolvals,editors/stagedata,editors/loadfile,editors/restore,auditors/postdata.Also notes that the values are client supplied (diagnostics hints, not a security boundary), how to see the tables with debug on (the debug value depends on the path -
&_debug=131on the Compute API and SAS 9,&_debug=128on the Viya web JES path withrunAsTask, which is what the frontend sends there;mpeinitwrites both to the job log, with example output), and that a directly-called service or an older frontend has neither table.Also documents that
editors/loadfileis reached through the adapter's multipart file upload, which carries no input tables, so in practice that service (and the post edit hook it runs) does not receive them - it is on the recipient list for completeness.mkdocs buildpasses; headings, tables and the example log render verified in the output HTML. Companion to dc/dc #326.docs(troubleshooting): document the browser_info support diagnosticsto docs(troubleshooting): document the browser_info / browser_url_vars support diagnostics