1
0
mirror of https://github.com/sasjs/core.git synced 2026-01-10 02:40:05 +00:00

Compare commits

...

17 Commits

Author SHA1 Message Date
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
Allan Bowe
57ae2981f1 Merge pull request #256 from sasjs/allanbowe/mp-abort-fails-on-windows-254
fix: superq() for sysprocessname
2022-06-17 15:29:22 +02:00
Allan Bowe
a3043ac685 fix: superq() for sysprocessname 2022-06-17 13:28:51 +00:00
10 changed files with 607 additions and 526 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`).

158
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 %str(&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 %str(&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 ' ';
@@ -17781,17 +17784,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 +17803,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 +17821,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_;
@@ -19933,7 +19963,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 +19982,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 ' ';
@@ -22275,7 +22306,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 +22325,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 %str(&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 %str(&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 ' ';

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

@@ -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 ' ';

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 ' ';