1
0
mirror of https://github.com/sasjs/core.git synced 2026-01-11 02:50:06 +00:00

Compare commits

...

18 Commits

Author SHA1 Message Date
Allan Bowe
b72e404d52 Merge pull request #264 from sasjs/allanbowe/add-sysencoding-to-webout-263
feat: adding sysencoding to SASJS and SAS9 server types
2022-06-25 15:16:13 +02:00
Allan Bowe
e31cdeef42 feat: adding sysencoding to SASJS and SAS9 server types
Not added for mv_webout (viya) as that is always UTF-8.  Closes #263
2022-06-25 13:11:14 +00:00
Allan Bowe
8a4e32cc27 chore: updating sasjsconfig 2022-06-21 21:33:33 +00:00
Allan Bowe
f285505b79 Merge pull request #262 from sasjs/allanbowe/mp-ds-cards-does-not-261
fix: special missing support in mp_ds2cards()
2022-06-21 19:37:51 +02:00
Allan Bowe
67f5c50300 fix: special missing support in mp_ds2cards() 2022-06-21 17:34:44 +00:00
Yury Shkoda
ce39e4f779 Merge pull request #260 from sasjs/pr-template
chore(template): added pull request template
2022-06-21 19:57:11 +03:00
Yury Shkoda
9c80f5664c chore(template): added pull request template 2022-06-21 19:51:23 +03:00
Allan Bowe
83466c001b Merge pull request #259 from sasjs/allanbowe/mp-jsonout-not-escaping-258
fix: escaping labels in mp_jsonout when showmeta=YES.  Closes #258
2022-06-21 16:16:07 +02:00
Allan Bowe
ad315be503 fix: escaping labels in mp_jsonout when showmeta=YES. Closes #258 2022-06-21 14:14:35 +00:00
Allan Bowe
c41ae2dcc8 fix: enabling sasjsprocessmode as global var in mp_abort
Also, reduced indentation
2022-06-18 13:11:35 +00:00
d9f8e92fac Merge pull request #257 from sasjs/userfeat
feat: filter mm_getusers on a particular user
2022-06-17 19:59:38 +02:00
Allan Bowe
d42ede15db fix: superq 2022-06-17 17:58:39 +00:00
Allan Bowe
08ea9f7c00 chore: all.sas 2022-06-17 17:55:28 +00:00
Allan Bowe
c327e1fc0d fix: apostrophes 2022-06-17 17:55:01 +00:00
Allan Bowe
02fddcf9a1 fix: removing pipes 2022-06-17 17:51:36 +00:00
Allan Bowe
4752bfbb05 fix: refactor xml 2022-06-17 17:47:34 +00:00
Allan Bowe
767ddd7add feat: filter mm_getusers on a particular user
This can be useful for extracting the uri of a metadata user
2022-06-17 17:03:25 +00:00
Allan Bowe
54a24ced83 fix: using sasjs username in mf_getuser() 2022-06-17 15:54:30 +00:00
13 changed files with 615 additions and 527 deletions

17
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,17 @@
## Issue
Link any related issue(s) in this section.
## Intent
What this PR intends to achieve.
## Implementation
What code changes have been made to achieve the intent.
## Checks
- [ ] Code is formatted correctly (`sasjs lint`).
- [ ] Any new functionality has been unit tested.
- [ ] All unit tests are passing (`sasjs test`).

160
all.sas
View File

@@ -1141,18 +1141,19 @@ or %index(&pgm,/tests/testteardown)
@author Allan Bowe @author Allan Bowe
**/ **/
%macro mf_getuser(type=META %macro mf_getuser(
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%local user metavar; %local user;
%if &type=OS %then %let metavar=_secureusername;
%else %let metavar=_metaperson;
%if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username;
%else %if %symexist(&metavar) %then %do; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;
%if %length(&&&metavar)=0 %then %let user=&sysuserid; %let user=&SYS_COMPUTE_SESSION_OWNER;
%end;
%else %if %symexist(_metaperson) %then %do;
%if %length(&_metaperson)=0 %then %let user=&sysuserid;
/* sometimes SAS will add @domain extension - remove for consistency */ /* sometimes SAS will add @domain extension - remove for consistency */
/* but be sure to quote in case of usernames with commas */ /* but be sure to quote in case of usernames with commas */
%else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); %else %let user=%unquote(%scan(%quote(&_metaperson),1,@));
%end; %end;
%else %let user=&sysuserid; %else %let user=&sysuserid;
@@ -2245,19 +2246,19 @@ Usage:
, mode=REGULAR , mode=REGULAR
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc; %global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i; %local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return; %if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //; %put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac; %if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg; %put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE) %if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ /* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server) and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do; %then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds; data &errds;
iftrue='1=1'; iftrue='1=1';
@@ -2270,13 +2271,13 @@ Usage:
run; run;
%return; %return;
%end; %end;
%end; %end;
/* Web App Context */ /* Web App Context */
%if %symexist(_PROGRAM) %if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server) or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE or &mode=INCLUDE
%then %do; %then %do;
options obs=max replace mprint; options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do; %then %do;
@@ -2470,11 +2471,11 @@ Usage:
%else %do; %else %do;
%abort cancel; %abort cancel;
%end; %end;
%end; %end;
%else %do; %else %do;
%put _all_; %put _all_;
%abort cancel; %abort cancel;
%end; %end;
%mend mp_abort; %mend mp_abort;
/** @endcond */ /** @endcond */
@@ -4802,7 +4803,7 @@ drop table &out_ds;
@cond @cond
**/ **/
%macro mp_ds2cards(base_ds=, tgt_ds= %macro mp_ds2cards(base_ds, tgt_ds=
,cards_file="%sysfunc(pathname(work))/cardgen.sas" ,cards_file="%sysfunc(pathname(work))/cardgen.sas"
,maxobs=max ,maxobs=max
,random_sample=NO ,random_sample=NO
@@ -5005,6 +5006,7 @@ data _null_;
; ;
%end; %end;
put ";"; put ";";
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put "datalines4;"; put "datalines4;";
end; end;
end; end;
@@ -8844,7 +8846,7 @@ options
do i=1 to &numcols; do i=1 to &numcols;
name=quote(trim(symget(cats('name',i)))); name=quote(trim(symget(cats('name',i))));
format=quote(trim(symget(cats('fmt',i)))); format=quote(trim(symget(cats('fmt',i))));
label=quote(trim(symget(cats('label',i)))); label=quote(prxchange('s/\\/\\\\/',-1,trim(symget(cats('label',i)))));
length=quote(trim(symget(cats('length',i)))); length=quote(trim(symget(cats('length',i))));
type=quote(trim(symget(cats('typelong',i)))); type=quote(trim(symget(cats('typelong',i))));
if i>1 then put "," @@; if i>1 then put "," @@;
@@ -15224,7 +15226,7 @@ data _null_;
put ' do i=1 to &numcols; '; put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(trim(symget(cats(''label'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; '; put ' if i>1 then put "," @@; ';
@@ -15243,18 +15245,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';
@@ -15379,6 +15382,7 @@ data _null_;
put ' put '',"_METAPERSON": '' _METAPERSON; '; put ' put '',"_METAPERSON": '' _METAPERSON; ';
put ' put '',"_PROGRAM" : '' _PROGRAM ; '; put ' put '',"_PROGRAM" : '' _PROGRAM ; ';
put ' put ",""SYSCC"" : ""&syscc"" "; '; put ' put ",""SYSCC"" : ""&syscc"" "; ';
put ' put ",""SYSENCODING"" : ""&sysencoding"" "; ';
put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); '; put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); ';
put ' put '',"SYSERRORTEXT" : '' syserrortext; '; put ' put '',"SYSERRORTEXT" : '' syserrortext; ';
put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; '; put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; ';
@@ -17781,17 +17785,18 @@ libname _XML_ clear;
%mm_getusers() %mm_getusers()
Optionally, filter for a user (useful to get the uri):
%mm_getusers(user=&_metaperson)
@param outds the dataset to create that contains the list of libraries @param outds the dataset to create that contains the list of libraries
@returns outds dataset containing all users, with the following columns: @returns outds dataset containing all users, with the following columns:
- uri - uri
- name - name
@warning The following filenames are created and then de-assigned: @param user= (0) Set to a metadata user to filter on that user
@param outds= (work.mm_getusers) The output table to create
filename sxlemap clear;
filename response clear;
libname _XML_ clear;
@version 9.3 @version 9.3
@author Allan Bowe @author Allan Bowe
@@ -17799,11 +17804,13 @@ libname _XML_ clear;
**/ **/
%macro mm_getusers( %macro mm_getusers(
outds=work.mm_getusers outds=work.mm_getusers,
user=0
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
filename response temp; filename response temp;
proc metadata in= '<GetMetadataObjects> %if %superq(user)=0 %then %do;
proc metadata in= '<GetMetadataObjects>
<Reposid>$METAREPOSITORY</Reposid> <Reposid>$METAREPOSITORY</Reposid>
<Type>Person</Type> <Type>Person</Type>
<NS>SAS</NS> <NS>SAS</NS>
@@ -17815,7 +17822,31 @@ proc metadata in= '<GetMetadataObjects>
</Options> </Options>
</GetMetadataObjects>' </GetMetadataObjects>'
out=response; out=response;
run; run;
%end;
%else %do;
filename inref temp;
data _null_;
file inref;
put "<GetMetadataObjects>";
put "<Reposid>$METAREPOSITORY</Reposid>";
put "<Type>Person</Type>";
put "<NS>SAS</NS>";
put "<!-- Specify the OMI_XMLSELECT (128) flag -->";
put "<Flags>128</Flags>";
put "<Options>";
put "<Templates>";
put '<Person Name=""/>';
put "</Templates>";
length string $10000;
string=cats('<XMLSELECT search="Person[@Name=',"'&user'",']"/>');
put string;
put "</Options>";
put "</GetMetadataObjects>";
run;
proc metadata in=inref out=response;
run;
%end;
filename sxlemap temp; filename sxlemap temp;
data _null_; data _null_;
@@ -18897,6 +18928,7 @@ run;
put ',"_METAPERSON": ' _METAPERSON; put ',"_METAPERSON": ' _METAPERSON;
put ',"_PROGRAM" : ' _PROGRAM ; put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" "; put ",""SYSCC"" : ""&syscc"" ";
put ",""SYSENCODING"" : ""&sysencoding"" ";
syserrortext=quote(cats(symget('SYSERRORTEXT'))); syserrortext=quote(cats(symget('SYSERRORTEXT')));
put ',"SYSERRORTEXT" : ' syserrortext; put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" "; put ",""SYSHOSTNAME"" : ""&syshostname"" ";
@@ -19933,7 +19965,7 @@ data _null_;
put ' do i=1 to &numcols; '; put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(trim(symget(cats(''label'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; '; put ' if i>1 then put "," @@; ';
@@ -19952,18 +19984,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';
@@ -20078,6 +20111,7 @@ data _null_;
put ' put ",""_DEBUG"" : ""&_debug"" "; '; put ' put ",""_DEBUG"" : ""&_debug"" "; ';
put ' put '',"_PROGRAM" : '' _PROGRAM ; '; put ' put '',"_PROGRAM" : '' _PROGRAM ; ';
put ' put ",""SYSCC"" : ""&syscc"" "; '; put ' put ",""SYSCC"" : ""&syscc"" "; ';
put ' put ",""SYSENCODING"" : ""&sysencoding"" "; ';
put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); '; put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); ';
put ' put '',"SYSERRORTEXT" : '' syserrortext; '; put ' put '',"SYSERRORTEXT" : '' syserrortext; ';
put ' SYSHOSTINFOLONG=quote(trim(symget(''SYSHOSTINFOLONG''))); '; put ' SYSHOSTINFOLONG=quote(trim(symget(''SYSHOSTINFOLONG''))); ';
@@ -21067,6 +21101,7 @@ run;
put ",""_DEBUG"" : ""&_debug"" "; put ",""_DEBUG"" : ""&_debug"" ";
put ',"_PROGRAM" : ' _PROGRAM ; put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" "; put ",""SYSCC"" : ""&syscc"" ";
put ",""SYSENCODING"" : ""&sysencoding"" ";
syserrortext=quote(cats(symget('SYSERRORTEXT'))); syserrortext=quote(cats(symget('SYSERRORTEXT')));
put ',"SYSERRORTEXT" : ' syserrortext; put ',"SYSERRORTEXT" : ' syserrortext;
SYSHOSTINFOLONG=quote(trim(symget('SYSHOSTINFOLONG'))); SYSHOSTINFOLONG=quote(trim(symget('SYSHOSTINFOLONG')));
@@ -22275,7 +22310,7 @@ data _null_;
put ' do i=1 to &numcols; '; put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(trim(symget(cats(''label'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; '; put ' if i>1 then put "," @@; ';
@@ -22294,18 +22329,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';

View File

@@ -23,18 +23,19 @@
@author Allan Bowe @author Allan Bowe
**/ **/
%macro mf_getuser(type=META %macro mf_getuser(
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%local user metavar; %local user;
%if &type=OS %then %let metavar=_secureusername;
%else %let metavar=_metaperson;
%if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username;
%else %if %symexist(&metavar) %then %do; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;
%if %length(&&&metavar)=0 %then %let user=&sysuserid; %let user=&SYS_COMPUTE_SESSION_OWNER;
%end;
%else %if %symexist(_metaperson) %then %do;
%if %length(&_metaperson)=0 %then %let user=&sysuserid;
/* sometimes SAS will add @domain extension - remove for consistency */ /* sometimes SAS will add @domain extension - remove for consistency */
/* but be sure to quote in case of usernames with commas */ /* but be sure to quote in case of usernames with commas */
%else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); %else %let user=%unquote(%scan(%quote(&_metaperson),1,@));
%end; %end;
%else %let user=&sysuserid; %else %let user=&sysuserid;

View File

@@ -63,19 +63,19 @@
, mode=REGULAR , mode=REGULAR
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc; %global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i; %local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return; %if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //; %put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac; %if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg; %put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE) %if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ /* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server) and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do; %then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds; data &errds;
iftrue='1=1'; iftrue='1=1';
@@ -88,13 +88,13 @@
run; run;
%return; %return;
%end; %end;
%end; %end;
/* Web App Context */ /* Web App Context */
%if %symexist(_PROGRAM) %if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server) or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE or &mode=INCLUDE
%then %do; %then %do;
options obs=max replace mprint; options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do; %then %do;
@@ -288,11 +288,11 @@
%else %do; %else %do;
%abort cancel; %abort cancel;
%end; %end;
%end; %end;
%else %do; %else %do;
%put _all_; %put _all_;
%abort cancel; %abort cancel;
%end; %end;
%mend mp_abort; %mend mp_abort;
/** @endcond */ /** @endcond */

View File

@@ -51,7 +51,7 @@
@cond @cond
**/ **/
%macro mp_ds2cards(base_ds=, tgt_ds= %macro mp_ds2cards(base_ds, tgt_ds=
,cards_file="%sysfunc(pathname(work))/cardgen.sas" ,cards_file="%sysfunc(pathname(work))/cardgen.sas"
,maxobs=max ,maxobs=max
,random_sample=NO ,random_sample=NO
@@ -254,6 +254,7 @@ data _null_;
; ;
%end; %end;
put ";"; put ";";
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put "datalines4;"; put "datalines4;";
end; end;
end; end;

View File

@@ -263,7 +263,7 @@
do i=1 to &numcols; do i=1 to &numcols;
name=quote(trim(symget(cats('name',i)))); name=quote(trim(symget(cats('name',i))));
format=quote(trim(symget(cats('fmt',i)))); format=quote(trim(symget(cats('fmt',i))));
label=quote(trim(symget(cats('label',i)))); label=quote(prxchange('s/\\/\\\\/',-1,trim(symget(cats('label',i)))));
length=quote(trim(symget(cats('length',i)))); length=quote(trim(symget(cats('length',i))));
type=quote(trim(symget(cats('typelong',i)))); type=quote(trim(symget(cats('typelong',i))));
if i>1 then put "," @@; if i>1 then put "," @@;

View File

@@ -296,7 +296,7 @@ data _null_;
put ' do i=1 to &numcols; '; put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(trim(symget(cats(''label'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; '; put ' if i>1 then put "," @@; ';
@@ -315,18 +315,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';
@@ -451,6 +452,7 @@ data _null_;
put ' put '',"_METAPERSON": '' _METAPERSON; '; put ' put '',"_METAPERSON": '' _METAPERSON; ';
put ' put '',"_PROGRAM" : '' _PROGRAM ; '; put ' put '',"_PROGRAM" : '' _PROGRAM ; ';
put ' put ",""SYSCC"" : ""&syscc"" "; '; put ' put ",""SYSCC"" : ""&syscc"" "; ';
put ' put ",""SYSENCODING"" : ""&sysencoding"" "; ';
put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); '; put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); ';
put ' put '',"SYSERRORTEXT" : '' syserrortext; '; put ' put '',"SYSERRORTEXT" : '' syserrortext; ';
put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; '; put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; ';

View File

@@ -8,17 +8,18 @@
%mm_getusers() %mm_getusers()
Optionally, filter for a user (useful to get the uri):
%mm_getusers(user=&_metaperson)
@param outds the dataset to create that contains the list of libraries @param outds the dataset to create that contains the list of libraries
@returns outds dataset containing all users, with the following columns: @returns outds dataset containing all users, with the following columns:
- uri - uri
- name - name
@warning The following filenames are created and then de-assigned: @param user= (0) Set to a metadata user to filter on that user
@param outds= (work.mm_getusers) The output table to create
filename sxlemap clear;
filename response clear;
libname _XML_ clear;
@version 9.3 @version 9.3
@author Allan Bowe @author Allan Bowe
@@ -26,11 +27,13 @@
**/ **/
%macro mm_getusers( %macro mm_getusers(
outds=work.mm_getusers outds=work.mm_getusers,
user=0
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
filename response temp; filename response temp;
proc metadata in= '<GetMetadataObjects> %if %superq(user)=0 %then %do;
proc metadata in= '<GetMetadataObjects>
<Reposid>$METAREPOSITORY</Reposid> <Reposid>$METAREPOSITORY</Reposid>
<Type>Person</Type> <Type>Person</Type>
<NS>SAS</NS> <NS>SAS</NS>
@@ -42,7 +45,31 @@ proc metadata in= '<GetMetadataObjects>
</Options> </Options>
</GetMetadataObjects>' </GetMetadataObjects>'
out=response; out=response;
run; run;
%end;
%else %do;
filename inref temp;
data _null_;
file inref;
put "<GetMetadataObjects>";
put "<Reposid>$METAREPOSITORY</Reposid>";
put "<Type>Person</Type>";
put "<NS>SAS</NS>";
put "<!-- Specify the OMI_XMLSELECT (128) flag -->";
put "<Flags>128</Flags>";
put "<Options>";
put "<Templates>";
put '<Person Name=""/>';
put "</Templates>";
length string $10000;
string=cats('<XMLSELECT search="Person[@Name=',"'&user'",']"/>');
put string;
put "</Options>";
put "</GetMetadataObjects>";
run;
proc metadata in=inref out=response;
run;
%end;
filename sxlemap temp; filename sxlemap temp;
data _null_; data _null_;

View File

@@ -157,6 +157,7 @@
put ',"_METAPERSON": ' _METAPERSON; put ',"_METAPERSON": ' _METAPERSON;
put ',"_PROGRAM" : ' _PROGRAM ; put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" "; put ",""SYSCC"" : ""&syscc"" ";
put ",""SYSENCODING"" : ""&sysencoding"" ";
syserrortext=quote(cats(symget('SYSERRORTEXT'))); syserrortext=quote(cats(symget('SYSERRORTEXT')));
put ',"SYSERRORTEXT" : ' syserrortext; put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" "; put ",""SYSHOSTNAME"" : ""&syshostname"" ";

View File

@@ -67,7 +67,6 @@
}, },
{ {
"name": "server", "name": "server",
"serverUrl": "https://sas.4gl.io",
"serverType": "SASJS", "serverType": "SASJS",
"httpsAgentOptions": { "httpsAgentOptions": {
"allowInsecureRequests": false "allowInsecureRequests": false

View File

@@ -298,7 +298,7 @@ data _null_;
put ' do i=1 to &numcols; '; put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(trim(symget(cats(''label'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; '; put ' if i>1 then put "," @@; ';
@@ -317,18 +317,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';
@@ -443,6 +444,7 @@ data _null_;
put ' put ",""_DEBUG"" : ""&_debug"" "; '; put ' put ",""_DEBUG"" : ""&_debug"" "; ';
put ' put '',"_PROGRAM" : '' _PROGRAM ; '; put ' put '',"_PROGRAM" : '' _PROGRAM ; ';
put ' put ",""SYSCC"" : ""&syscc"" "; '; put ' put ",""SYSCC"" : ""&syscc"" "; ';
put ' put ",""SYSENCODING"" : ""&sysencoding"" "; ';
put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); '; put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); ';
put ' put '',"SYSERRORTEXT" : '' syserrortext; '; put ' put '',"SYSERRORTEXT" : '' syserrortext; ';
put ' SYSHOSTINFOLONG=quote(trim(symget(''SYSHOSTINFOLONG''))); '; put ' SYSHOSTINFOLONG=quote(trim(symget(''SYSHOSTINFOLONG''))); ';

View File

@@ -153,6 +153,7 @@
put ",""_DEBUG"" : ""&_debug"" "; put ",""_DEBUG"" : ""&_debug"" ";
put ',"_PROGRAM" : ' _PROGRAM ; put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" "; put ",""SYSCC"" : ""&syscc"" ";
put ",""SYSENCODING"" : ""&sysencoding"" ";
syserrortext=quote(cats(symget('SYSERRORTEXT'))); syserrortext=quote(cats(symget('SYSERRORTEXT')));
put ',"SYSERRORTEXT" : ' syserrortext; put ',"SYSERRORTEXT" : ' syserrortext;
SYSHOSTINFOLONG=quote(trim(symget('SYSHOSTINFOLONG'))); SYSHOSTINFOLONG=quote(trim(symget('SYSHOSTINFOLONG')));

View File

@@ -440,7 +440,7 @@ data _null_;
put ' do i=1 to &numcols; '; put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(trim(symget(cats(''label'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; '; put ' if i>1 then put "," @@; ';
@@ -459,18 +459,19 @@ data _null_;
put '%end; '; put '%end; ';
put '%mend mp_jsonout; '; put '%mend mp_jsonout; ';
put ' '; put ' ';
put '%macro mf_getuser(type=META '; put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; '; put ')/*/STORE SOURCE*/; ';
put ' %local user metavar; '; put ' %local user; ';
put ' %if &type=OS %then %let metavar=_secureusername; ';
put ' %else %let metavar=_metaperson; ';
put ' '; put ' ';
put ' %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(&metavar) %then %do; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %if %length(&&&metavar)=0 %then %let user=&sysuserid; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ '; put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&&&metavar),1,@)); '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; '; put ' %end; ';
put ' %else %let user=&sysuserid; '; put ' %else %let user=&sysuserid; ';
put ' '; put ' ';