docs(troubleshooting): document the browser_info / browser_url_vars support diagnostics #9
@@ -177,7 +177,7 @@ The page URL parameters as one row per parameter, so a SAS program can read a pa
|
||||
| `name` | The URL parameter name. |
|
||||
| `value` | The URL parameter value. |
|
||||
|
||||
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.
|
||||
Parameters from both the search string and the hash query string (Angular routes carry them after the `#`) are included; on a name collision the search string value wins. The table is sent only when the page URL has at least one parameter.
|
||||
|
||||
The values in both tables are supplied by the client, so treat them as diagnostics hints rather than a security boundary.
|
||||
|
||||
@@ -192,4 +192,35 @@ dc_version=7.15.0 adapter_version=4.19.0 browser=Chrome browser_version=120.0
|
||||
platform=Linux user_agent=...
|
||||
```
|
||||
|
||||
A service called directly (for instance from a URL, or by a script), or by an older frontend, has no `work.browser_info` - the log then records that fact instead.
|
||||
A service called directly (for instance from a URL, or by a script), or by an older frontend, has no `work.browser_info` - the log then records that fact instead.
|
||||
|
||||
### Reading the tables from a hook
|
||||
|
||||
A [hook script](macros.md) is `%include`d into the running service, so it shares the service's WORK library and can read the tables directly. To pick up a URL parameter by name:
|
||||
|
||||
```sas
|
||||
%let labels=N;
|
||||
|
||||
%if %sysfunc(exist(work.browser_url_vars)) %then %do;
|
||||
proc sql noprint;
|
||||
select value into :labels
|
||||
from work.browser_url_vars
|
||||
where name = 'labels';
|
||||
quit;
|
||||
%end;
|
||||
```
|
||||
|
||||
To branch on what the client reports:
|
||||
|
||||
```sas
|
||||
%if %sysfunc(exist(work.browser_info)) %then %do;
|
||||
data _null_;
|
||||
set work.browser_info;
|
||||
call symputx('dc_timezone', timezone);
|
||||
call symputx('dc_locale', locale);
|
||||
run;
|
||||
%end;
|
||||
```
|
||||
|
||||
!!! warning
|
||||
Guard with `%sysfunc(exist())` before reading. A service called directly, or by a frontend older than this feature, has no `work.browser_info` at all, so an unguarded `set` or `select` fails the job.
|
||||
Reference in New Issue
Block a user