1
0
mirror of https://github.com/sasjs/core.git synced 2025-12-15 16:14:36 +00:00

fix: linting

This commit is contained in:
2021-04-03 21:30:51 +02:00
parent 096bf4fa11
commit 0a38056c69
88 changed files with 1762 additions and 1468 deletions

View File

@@ -3,7 +3,7 @@
"noEncodedPasswords": true, "noEncodedPasswords": true,
"hasDoxygenHeader": true, "hasDoxygenHeader": true,
"noSpacesInFileNames": true, "noSpacesInFileNames": true,
"maxLineLength": 120, "maxLineLength": 140,
"lowerCaseFileNames": true, "lowerCaseFileNames": true,
"noTabIndentation": true, "noTabIndentation": true,
"indentationMultiple": 2 "indentationMultiple": 2

488
all.sas

File diff suppressed because it is too large Load Diff

View File

@@ -49,7 +49,10 @@
input; putlog _infile_; input; putlog _infile_;
i=1; i=1;
retain logonce 0; retain logonce 0;
if (_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR") and logonce=0 then do; if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0
then do;
call symputx('logline',_n_); call symputx('logline',_n_);
logonce+1; logonce+1;
end; end;
@@ -112,7 +115,8 @@
%let syscc=0; %let syscc=0;
%if %symexist(SYS_JES_JOB_URI) %then %do; %if %symexist(SYS_JES_JOB_URI) %then %do;
/* refer web service output to file service in one hit */ /* refer web service output to file service in one hit */
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"; filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json";
%let rc=%sysfunc(fcopy(_web,_webout)); %let rc=%sysfunc(fcopy(_web,_webout));
%end; %end;
%else %do; %else %do;

View File

@@ -32,7 +32,9 @@
/* in case the parameter is a libref.tablename, pull off just the libref */ /* in case the parameter is a libref.tablename, pull off just the libref */
%let libref = %upcase(%scan(&libref, 1, %str(.))); %let libref = %upcase(%scan(&libref, 1, %str(.)));
%let dsid=%sysfunc(open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)); %let dsid=%sysfunc(
open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)
);
%if (&dsid ^= 0) %then %do; %if (&dsid ^= 0) %then %do;
%let engnum=%sysfunc(varnum(&dsid,ENGINE)); %let engnum=%sysfunc(varnum(&dsid,ENGINE));
%let rc=%sysfunc(fetch(&dsid)); %let rc=%sysfunc(fetch(&dsid));

View File

@@ -9,7 +9,8 @@
%put mf_isblank(&var); %put mf_isblank(&var);
inspiration: https://support.sas.com/resources/papers/proceedings09/022-2009.pdf inspiration:
https://support.sas.com/resources/papers/proceedings09/022-2009.pdf
@param param VALUE to be checked @param param VALUE to be checked

View File

@@ -6,7 +6,8 @@
%let isdir=%mf_isdir(/tmp); %let isdir=%mf_isdir(/tmp);
With thanks and full credit to Andrea Defronzo - https://www.linkedin.com/in/andrea-defronzo-b1a47460/ With thanks and full credit to Andrea Defronzo -
https://www.linkedin.com/in/andrea-defronzo-b1a47460/
@param path full path of the file/directory to be checked @param path full path of the file/directory to be checked

View File

@@ -1,7 +1,8 @@
/** /**
@file mf_mval.sas @file mf_mval.sas
@brief Returns a macro variable value if the variable exists @brief Returns a macro variable value if the variable exists
@details Use this macro to avoid repetitive use of `%if %symexist(MACVAR) %then` @details
Use this macro to avoid repetitive use of `%if %symexist(MACVAR) %then`
type logic. type logic.
Usage: Usage:

View File

@@ -12,7 +12,8 @@
@param basestr The string to be modified @param basestr The string to be modified
@param trimstr The string to be removed from the end of `basestr`, if it exists @param trimstr The string to be removed from the end of `basestr`, if it
exists
@return output returns result with the value of `trimstr` removed from the end @return output returns result with the value of `trimstr` removed from the end

View File

@@ -6,11 +6,11 @@
results back to the client in an STP Web App context, or completely stop results back to the client in an STP Web App context, or completely stop
in the case of a batch run. in the case of a batch run.
Using SAS Abort Cancel mechanisms can cause hung sessions in some Stored Process Using SAS Abort Cancel mechanisms can cause hung sessions in some Stored
environments. This macro takes a unique approach - we set the SAS syscc to 0, Process environments. This macro takes a unique approach - we set the SAS
run `stpsrvset('program error', 0)` (if SAS 9) and then - we open a macro syscc to 0, run `stpsrvset('program error', 0)` (if SAS 9) and then - we open
but don't close it! This provides a graceful abort for SAS web services in all a macro but don't close it! This provides a graceful abort for SAS web
web enabled environments. services in all web enabled environments.
@param mac= to contain the name of the calling macro @param mac= to contain the name of the calling macro
@param msg= message to be returned @param msg= message to be returned
@@ -48,7 +48,10 @@
input; putlog _infile_; input; putlog _infile_;
i=1; i=1;
retain logonce 0; retain logonce 0;
if (_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR") and logonce=0 then do; if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_); call symputx('logline',_n_);
logonce+1; logonce+1;
end; end;

View File

@@ -4,7 +4,8 @@
@details Reads in a file byte by byte and writes it back out. Is an @details Reads in a file byte by byte and writes it back out. Is an
os-independent method to copy files. In case of naming collision, the os-independent method to copy files. In case of naming collision, the
default filerefs can be modified. default filerefs can be modified.
Based on http://stackoverflow.com/questions/13046116/using-sas-to-copy-a-text-file Based on:
https://stackoverflow.com/questions/13046116/using-sas-to-copy-a-text-file
%mp_binarycopy(inloc="/home/me/blah.txt", outref=_webout) %mp_binarycopy(inloc="/home/me/blah.txt", outref=_webout)

View File

@@ -23,7 +23,7 @@
%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar='22'x); %macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar='22'x);
%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do; %if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;
%put %str(ERR)OR: Please provide valid input (&in) and output (&out) locations; %put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;
%return; %return;
%end; %end;

View File

@@ -57,8 +57,11 @@
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%let getattrs=%upcase(&getattrs)XX; %let getattrs=%upcase(&getattrs)XX;
data &outds (compress=no keep=file_or_folder filepath filename ext msg directory); data &outds(compress=no
length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80 ext $20 msg $200; keep=file_or_folder filepath filename ext msg directory
);
length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80
ext $20 msg $200;
%if &fref=0 %then %do; %if &fref=0 %then %do;
rc = filename(fref, "&path"); rc = filename(fref, "&path");
%end; %end;

View File

@@ -14,16 +14,18 @@
- explicity setting a unix LF - explicity setting a unix LF
- constraints / indexes etc - constraints / indexes etc
@param [in] base_ds= Should be two level - eg work.blah. This is the table that @param [in] base_ds= Should be two level - eg work.blah. This is the table
is converted to a cards file. that is converted to a cards file.
@param [in] tgt_ds= Table that the generated cards file would create. Optional - @param [in] tgt_ds= Table that the generated cards file would create.
if omitted, will be same as BASE_DS. Optional - if omitted, will be same as BASE_DS.
@param [out] cards_file= Location in which to write the (.sas) cards file @param [out] cards_file= Location in which to write the (.sas) cards file
@param [in] maxobs= to limit output to the first <code>maxobs</code> observations @param [in] maxobs= to limit output to the first <code>maxobs</code>
@param [in] showlog= whether to show generated cards file in the SAS log (YES/NO) observations
@param [in] showlog= whether to show generated cards file in the SAS log
(YES/NO)
@param [in] outencoding= provide encoding value for file statement (eg utf-8) @param [in] outencoding= provide encoding value for file statement (eg utf-8)
@param [in] append= If NO then will rebuild the cards file if it already exists, @param [in] append= If NO then will rebuild the cards file if it already
otherwise will append to it. Used by the mp_lib2cards.sas macro. exists, otherwise will append to it. Used by the mp_lib2cards.sas macro.
@version 9.2 @version 9.2
@@ -64,9 +66,11 @@ select count(*) into: nvars from dictionary.columns
%end; %end;
/* get indexes */ /* get indexes */
proc sort data=sashelp.vindex proc sort
(where=(upcase(libname)="%scan(%upcase(&base_ds),1)" data=sashelp.vindex(
and upcase(memname)="%scan(%upcase(&base_ds),2)")) where=(upcase(libname)="%scan(%upcase(&base_ds),1)"
and upcase(memname)="%scan(%upcase(&base_ds),2)")
)
out=_data_; out=_data_;
by indxname indxpos; by indxname indxpos;
run; run;

View File

@@ -133,7 +133,9 @@ run;
if notnull='yes' then notnul=' not null'; if notnull='yes' then notnul=' not null';
if notnull='no' and missing(label) then put ' ' name typ; if notnull='no' and missing(label) then put ' ' name typ;
else if notnull='yes' and missing(label) then put ' ' name typ '[' notnul ']'; else if notnull='yes' and missing(label) then do;
put ' ' name typ '[' notnul ']';
end;
else if notnull='no' then put ' ' name typ '[' lab ']'; else if notnull='no' then put ' ' name typ '[' lab ']';
else put ' ' name typ '[' notnul ',' lab ']'; else put ' ' name typ '[' notnul ',' lab ']';
@@ -166,7 +168,7 @@ run;
call symputx('constcheck',1); call symputx('constcheck',1);
end; end;
if last then call symputx('constraints_used',cats(upcase(constraints_used))); if last then call symput('constraints_used',cats(upcase(constraints_used)));
length curds const col $39; length curds const col $39;
curds="&curds"; curds="&curds";
@@ -176,7 +178,8 @@ run;
proc append base=&pkds data=&syslast;run; proc append base=&pkds data=&syslast;run;
/* Create Unique Indexes, but only if they were not already defined within the Constraints section. */ /* Create Unique Indexes, but only if they were not already defined within
the Constraints section. */
data _data_(keep=curds const col); data _data_(keep=curds const col);
set &idxinfo (where=( set &idxinfo (where=(
libname="%scan(&curds,1,.)" libname="%scan(&curds,1,.)"
@@ -187,7 +190,7 @@ run;
file &outref mod; file &outref mod;
by idxusage indxname; by idxusage indxname;
name=upcase(name); name=upcase(name);
if &constcheck=1 then stop; /* in fact we only care about PKs so stop if we have */ if &constcheck=1 then stop; /* we only care about PKs so stop if we have */
if _n_=1 and &constcheck=0 then put / ' indexes {'; if _n_=1 and &constcheck=0 then put / ' indexes {';
length cols $5000; length cols $5000;
@@ -261,7 +264,11 @@ run;
line='Ref: "'!!"&curds" line='Ref: "'!!"&curds"
!!cats('".(',"%mf_getquotedstr(&pkcols,dlm=%str(,),quote=%str( ))",')') !!cats('".(',"%mf_getquotedstr(&pkcols,dlm=%str(,),quote=%str( ))",')')
!!' - ' !!' - '
!!cats(quote(trim(curds)),'.(',"%mf_getquotedstr(&pkcols,dlm=%str(,),quote=%str( ))",')'); !!cats(quote(trim(curds))
,'.('
,"%mf_getquotedstr(&pkcols,dlm=%str(,),quote=%str( ))"
,')'
);
put line; put line;
run; run;
@@ -282,7 +289,9 @@ run;
create table &pkds.5b as create table &pkds.5b as
select curds,count(*) as cnt select curds,count(*) as cnt
from &pkds.5a from &pkds.5a
where curds not in (select curds from &pkds.2 where cols="&pkcols") /* not a one to one match */ where curds not in (
select curds from &pkds.2 where cols="&pkcols"
) /* not a one to one match */
and curds ne "&curds" /* exclude self */ and curds ne "&curds" /* exclude self */
group by 1; group by 1;
create table &pkds.6 as create table &pkds.6 as

View File

@@ -86,7 +86,9 @@ create table _data_ as
%global constraints_used; %global constraints_used;
data _null_; data _null_;
length ctype $11 constraint_name_orig $256 constraints_used $5000; length ctype $11 constraint_name_orig $256 constraints_used $5000;
set &colconst (where=(table_name="&curds" and constraint_type in ('PRIMARY','UNIQUE'))) end=last; set &colconst(
where=(table_name="&curds" and constraint_type in ('PRIMARY','UNIQUE'))
) end=last;
file &fref mod; file &fref mod;
by constraint_type constraint_name; by constraint_type constraint_name;
retain constraints_used; retain constraints_used;
@@ -161,10 +163,19 @@ run;
put ');'; put ');';
run; run;
/* Create Unique Indexes, but only if they were not already defined within the Constraints section. */ /* Create Unique Indexes, but only if they were not already defined within
the Constraints section. */
data _null_; data _null_;
*length ds $128; *length ds $128;
set &idxinfo (where=(memname="&curds" and unique='yes' and indxname not in (%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))))); set &idxinfo(
where=(
memname="&curds"
and unique='yes'
and indxname not in (
%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))
)
)
);
file &fref mod; file &fref mod;
by idxusage indxname; by idxusage indxname;
/* ds=cats(libname,'.',memname); */ /* ds=cats(libname,'.',memname); */
@@ -228,10 +239,19 @@ run;
/* Extra step for data constraints */ /* Extra step for data constraints */
%addConst() %addConst()
/* Create Unique Indexes, but only if they were not already defined within the Constraints section. */ /* Create Unique Indexes, but only if they were not already defined within
the Constraints section. */
data _null_; data _null_;
*length ds $128; *length ds $128;
set &idxinfo (where=(memname="&curds" and unique='yes' and indxname not in (%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))))); set &idxinfo(
where=(
memname="&curds"
and unique='yes'
and indxname not in (
%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))
)
)
);
file &fref mod; file &fref mod;
by idxusage indxname; by idxusage indxname;
*ds=cats(libname,'.',memname); *ds=cats(libname,'.',memname);
@@ -320,10 +340,19 @@ run;
put ');'; put ');';
run; run;
/* Create Unique Indexes, but only if they were not already defined within the Constraints section. */ /* Create Unique Indexes, but only if they were not already defined within
the Constraints section. */
data _null_; data _null_;
*length ds $128; *length ds $128;
set &idxinfo (where=(memname="&curds" and unique='yes' and indxname not in (%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))))); set &idxinfo(
where=(
memname="&curds"
and unique='yes'
and indxname not in (
%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))
)
)
);
file &fref mod; file &fref mod;
by idxusage indxname; by idxusage indxname;
/* ds=cats(libname,'.',memname); */ /* ds=cats(libname,'.',memname); */

View File

@@ -8,10 +8,11 @@
- NAME Name of the base dataset column - NAME Name of the base dataset column
- MAXLEN Maximum length of the data contained therein. - MAXLEN Maximum length of the data contained therein.
Character fields may be allocated very large widths (eg 32000) of which the maximum Character fields may be allocated very large widths (eg 32000) of which the
value is likely to be much narrower. This macro was designed to enable a HTML maximum value is likely to be much narrower. This macro was designed to
table to be appropriately sized however this could be used as part of a data enable a HTML table to be appropriately sized however this could be used as
audit to ensure we aren't over-sizing our tables in relation to the data therein. part of a data audit to ensure we aren't over-sizing our tables in relation to
the data therein.
Numeric fields are converted using the relevant format to determine the width. Numeric fields are converted using the relevant format to determine the width.
Usage: Usage:

View File

@@ -83,7 +83,8 @@
%end; %end;
data _null_;file &jref mod ; data _null_;file &jref mod ;
put "["; call symputx('cols',0,'l'); put "["; call symputx('cols',0,'l');
proc sort data=sashelp.vcolumn(where=(libname='WORK' & memname="%upcase(&ds)")) proc sort
data=sashelp.vcolumn(where=(libname='WORK' & memname="%upcase(&ds)"))
out=_data_; out=_data_;
by varnum; by varnum;
@@ -122,7 +123,8 @@
%end; %end;
%end; %end;
run; run;
/* write to temp loc to avoid _webout truncation - https://support.sas.com/kb/49/325.html */ /* write to temp loc to avoid _webout truncation
- https://support.sas.com/kb/49/325.html */
filename _sjs temp lrecl=131068 encoding='utf-8'; filename _sjs temp lrecl=131068 encoding='utf-8';
data _null_; file _sjs lrecl=131068 encoding='utf-8' mod; data _null_; file _sjs lrecl=131068 encoding='utf-8' mod;
set &tempds; set &tempds;

View File

@@ -20,9 +20,10 @@
@param ds= the dataset to search (leave blank to search entire library) @param ds= the dataset to search (leave blank to search entire library)
@param string= the string value to search @param string= the string value to search
@param numval= the numeric value to search (must be exact) @param numval= the numeric value to search (must be exact)
@param outloc= the directory in which to create the output datasets with matching @param outloc= the directory in which to create the output datasets with
rows. Will default to a subfolder in the WORK library. matching rows. Will default to a subfolder in the WORK library.
@param outobs= set to a positive integer to restrict the number of observations @param outobs= set to a positive integer to restrict the number of
observations
@param filter_text= add a (valid) filter clause to further filter the results @param filter_text= add a (valid) filter clause to further filter the results
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@@ -44,7 +45,8 @@
,filter_text=%str(1=1) ,filter_text=%str(1=1)
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%local table_list table table_num table colnum col start_tm check_tm vars type coltype; %local table_list table table_num table colnum col start_tm check_tm vars type
coltype;
%put process began at %sysfunc(datetime(),datetime19.); %put process began at %sysfunc(datetime(),datetime19.);
%if &syscc ge 4 %then %do; %if &syscc ge 4 %then %do;
@@ -101,7 +103,8 @@ proc sql
%end; %end;
%end; %end;
); );
%put Search query for &table took %sysevalf(%sysfunc(datetime())-&check_tm) seconds; %put Search query for &table took
%sysevalf(%sysfunc(datetime())-&check_tm) seconds;
%if &sqlrc ne 0 %then %do; %if &sqlrc ne 0 %then %do;
%put %str(WAR)NING: SQLRC=&sqlrc when processing &table; %put %str(WAR)NING: SQLRC=&sqlrc when processing &table;
%return; %return;

View File

@@ -1,7 +1,8 @@
/** /**
@file @file
@brief Capture session start / finish times and request details @brief Capture session start / finish times and request details
@details For details, see http://www.rawsas.com/2015/09/logging-of-stored-process-server.html. @details For details, see
https://rawsas.com/event-logging-of-stored-process-server-sessions.
Requires a base table in the following structure (name can be changed): Requires a base table in the following structure (name can be changed):
proc sql; proc sql;

View File

@@ -6,7 +6,8 @@
Usage: Usage:
filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas"; filename mc url
"https://raw.githubusercontent.com/sasjs/core/main/all.sas";
%inc mc; %inc mc;
%mp_streamfile(contenttype=csv,inloc=/some/where.txt,outname=myfile.txt) %mp_streamfile(contenttype=csv,inloc=/some/where.txt,outname=myfile.txt)
@@ -65,13 +66,15 @@
%else %if &contentype=XLSX %then %do; %else %if &contentype=XLSX %then %do;
%if &platform=SASMETA %then %do; %if &platform=SASMETA %then %do;
data _null_; data _null_;
rc=stpsrv_header('Content-type','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); rc=stpsrv_header('Content-type',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
rc=stpsrv_header('Content-disposition',"attachment; filename=&outname"); rc=stpsrv_header('Content-disposition',"attachment; filename=&outname");
run; run;
%end; %end;
%else %if &platform=SASVIYA %then %do; %else %if &platform=SASVIYA %then %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" name='_webout.xls' filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" name='_webout.xls'
contenttype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' contenttype=
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
contentdisp="attachment; filename=&outname"; contentdisp="attachment; filename=&outname";
%end; %end;
%end; %end;

View File

@@ -8,8 +8,11 @@
Credits: Credits:
* Roger Deangelis, https://communities.sas.com/t5/SAS-Programming/listing-all-files-within-a-directory-and-subdirectories/m-p/332616/highlight/true#M74887 Roger Deangelis:
* Tom, https://communities.sas.com/t5/SAS-Programming/listing-all-files-of-all-types-from-all-subdirectories/m-p/334113/highlight/true#M75419 https://communities.sas.com/t5/SAS-Programming/listing-all-files-within-a-directory-and-subdirectories/m-p/332616/highlight/true#M74887
Tom:
https://communities.sas.com/t5/SAS-Programming/listing-all-files-of-all-types-from-all-subdirectories/m-p/334113/highlight/true#M75419
@param dir= Directory to be scanned (default=/tmp) @param dir= Directory to be scanned (default=/tmp)

View File

@@ -117,7 +117,8 @@ run;
%end; %end;
%else %if &engine=REMOTE %then %do; %else %if &engine=REMOTE %then %do;
data x; data x;
length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName Delimiter $256 properties $2048; length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName
Delimiter $256 properties $2048;
retain properties; retain properties;
rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon); rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);
@@ -129,7 +130,8 @@ run;
rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue); rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);
rc = metadata_getattr(uriProp , "PropertyName",PropertyName); rc = metadata_getattr(uriProp , "PropertyName",PropertyName);
rc = metadata_getattr(uriProp , "Delimiter",Delimiter); rc = metadata_getattr(uriProp , "Delimiter",Delimiter);
properties = trim(properties) !! " " !! trim(PropertyName) !! trim(Delimiter) !! trim(PropertyValue); properties = trim(properties) !! " " !! trim(PropertyName)
!! trim(Delimiter) !! trim(PropertyValue);
output; output;
k+1; k+1;
rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp); rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);
@@ -170,7 +172,8 @@ run;
else if value='Connection.OLE.Property.PROVIDER.Name.xmlKey.txt' then do; else if value='Connection.OLE.Property.PROVIDER.Name.xmlKey.txt' then do;
rc4=metadata_getattr(conprop_uri,'DefaultValue',provider); rc4=metadata_getattr(conprop_uri,'DefaultValue',provider);
end; end;
else if value='Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt' then do; else if value='Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt' then
do;
rc5=metadata_getattr(conprop_uri,'DefaultValue',properties); rc5=metadata_getattr(conprop_uri,'DefaultValue',properties);
end; end;
end; end;
@@ -357,7 +360,8 @@ run;
call symputx('authdomain',authdomain,'l'); call symputx('authdomain',authdomain,'l');
/* path */ /* path */
rc=metadata_getprop(assocuri1,'Connection.Oracle.Property.PATH.Name.xmlKey.txt',path); rc=metadata_getprop(assocuri1,
'Connection.Oracle.Property.PATH.Name.xmlKey.txt',path);
call symputx('path',path,'l'); call symputx('path',path,'l');
/* schema */ /* schema */
@@ -366,14 +370,16 @@ run;
call symputx('schema',schema,'l'); call symputx('schema',schema,'l');
run; run;
%put NOTE: Executing the following:/; %put NOTE-; %put NOTE: Executing the following:/; %put NOTE-;
%put NOTE- libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain; %put NOTE- libname &libref ORACLE path=&path schema=&schema;
%put NOTE- authdomain=&authdomain;
%put NOTE-; %put NOTE-;
libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain; libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;
%end; %end;
%else %if &engine=SQLSVR %then %do; %else %if &engine=SQLSVR %then %do;
%put NOTE: Obtaining &engine library details; %put NOTE: Obtaining &engine library details;
data _null; data _null;
length assocuri1 assocuri2 assocuri3 authdomain path schema userid passwd $256; length assocuri1 assocuri2 assocuri3 authdomain path schema userid
passwd $256;
call missing (of _all_); call missing (of _all_);
rc=metadata_getnasn("&liburi",'DefaultLogin',1,assocuri1); rc=metadata_getnasn("&liburi",'DefaultLogin',1,assocuri1);
@@ -384,7 +390,8 @@ run;
/* path */ /* path */
rc=metadata_getnasn("&liburi",'LibraryConnection',1,assocuri2); rc=metadata_getnasn("&liburi",'LibraryConnection',1,assocuri2);
rc=metadata_getprop(assocuri2,'Connection.SQL.Property.Datasrc.Name.xmlKey.txt',path); rc=metadata_getprop(assocuri2,
'Connection.SQL.Property.Datasrc.Name.xmlKey.txt',path);
call symputx('path',path,'l'); call symputx('path',path,'l');
/* schema */ /* schema */
@@ -394,7 +401,8 @@ run;
run; run;
%put NOTE: Executing the following:/; %put NOTE-; %put NOTE: Executing the following:/; %put NOTE-;
%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="XXX"; %put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;
%put NOTE- user="&user" pass="XXX";
%put NOTE-; %put NOTE-;
libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass"; libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";
@@ -402,7 +410,8 @@ run;
%else %if &engine=TERADATA %then %do; %else %if &engine=TERADATA %then %do;
%put NOTE: Obtaining &engine library details; %put NOTE: Obtaining &engine library details;
data _null; data _null;
length assocuri1 assocuri2 assocuri3 authdomain path schema userid passwd $256; length assocuri1 assocuri2 assocuri3 authdomain path schema userid
passwd $256;
call missing (of _all_); call missing (of _all_);
/* get auth domain */ /* get auth domain */
@@ -421,7 +430,8 @@ run;
/* path */ /* path */
rc=metadata_getnasn("&liburi",'LibraryConnection',1,assocuri2); rc=metadata_getnasn("&liburi",'LibraryConnection',1,assocuri2);
rc=metadata_getprop(assocuri2,'Connection.Teradata.Property.SERVER.Name.xmlKey.txt',path); rc=metadata_getprop(assocuri2,
'Connection.Teradata.Property.SERVER.Name.xmlKey.txt',path);
call symputx('path',path,'l'); call symputx('path',path,'l');
/* schema */ /* schema */
@@ -431,7 +441,8 @@ run;
run; run;
%put NOTE: Executing the following:/; %put NOTE-; %put NOTE: Executing the following:/; %put NOTE-;
%put NOTE- libname &libref TERADATA server=&path schema=&schema authdomain=&authdomain; %put NOTE- libname &libref TERADATA server=&path schema=&schema ;
%put NOTe- authdomain=&authdomain;
%put NOTE-; %put NOTE-;
libname &libref TERADATA server=&path schema=&schema authdomain=&authdomain; libname &libref TERADATA server=&path schema=&schema authdomain=&authdomain;

View File

@@ -14,7 +14,8 @@
@li mp_abort.sas @li mp_abort.sas
@param libref the libref (not name) of the metadata library @param libref the libref (not name) of the metadata library
@param mAbort= If not assigned, HARD will call %mp_abort(), SOFT will silently return @param mAbort= If not assigned, HARD will call %mp_abort(), SOFT will
silently return
@returns libname statement @returns libname statement

View File

@@ -13,7 +13,9 @@
,params= name1=value1&#x0a;name2=value2&#x0a;emptyvalue= ,params= name1=value1&#x0a;name2=value2&#x0a;emptyvalue=
) )
@warning application components do not get deleted when removing the container folder! be sure you have the administrative priviliges to remove this kind of metadata from the SMC plugin (or be ready to do to so programmatically). @warning application components do not get deleted when removing the container
folder! be sure you have the administrative priviliges to remove this kind of
metadata from the SMC plugin (or be ready to do to so programmatically).
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@li mp_abort.sas @li mp_abort.sas

View File

@@ -55,7 +55,7 @@ data _null_;
* must have a starting slash ; * must have a starting slash ;
if ( substr(folderPath,1,1) ne '/' ) then do; if ( substr(folderPath,1,1) ne '/' ) then do;
put "%str(ERR)OR: &sysmacroname PATH parameter value must have starting slash"; put "%str(ERR)OR: &sysmacroname PATH param value must have starting slash";
stop; stop;
end; end;
@@ -123,9 +123,10 @@ run;
%local inmeta; %local inmeta;
%put creating: &path; %put creating: &path;
%let inmeta=<AddMetadata><Reposid>$METAREPOSITORY</Reposid><Metadata> %let inmeta=<AddMetadata><Reposid>$METAREPOSITORY</Reposid><Metadata>
<Tree Name='&child' PublicType='Folder' TreeType='BIP Folder' UsageVersion='1000000'> <Tree Name='&child' PublicType='Folder' TreeType='BIP Folder'
<ParentTree><Tree ObjRef='&parentFolderObjId'/></ParentTree></Tree></Metadata> UsageVersion='1000000'><ParentTree><Tree ObjRef='&parentFolderObjId'/>
<NS>SAS</NS><Flags>268435456</Flags></AddMetadata>; </ParentTree></Tree></Metadata><NS>SAS</NS><Flags>268435456</Flags>
</AddMetadata>;
proc metadata in="&inmeta" out=__newdir verbose; proc metadata in="&inmeta" out=__newdir verbose;
run ; run ;

View File

@@ -166,7 +166,7 @@ filename &frefout temp;
putlog (_all_)(=); putlog (_all_)(=);
run; run;
%if &checktype ne Prototype %then %do; %if &checktype ne Prototype %then %do;
%put %str(ERR)OR: Prototype (Library.SAS.Prototype.Name.xmlKey.txt) not found!; %put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;
%return; %return;
%end; %end;

View File

@@ -210,7 +210,8 @@ run;
rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); rc3=METADATA_SETATTR(prompturi, 'GroupType','2');
rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); rc4=METADATA_SETATTR(prompturi, 'Name','Parameters');
rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup');
GroupInfo="<PromptGroup promptId='PromptGroup_%sysfunc(datetime())_&sysprocessid'" GroupInfo=
"<PromptGroup promptId='PromptGroup_%sysfunc(datetime())_&sysprocessid'"
!!" version='1.0'><Label><Text xml:lang='en-GB'>Parameters</Text>" !!" version='1.0'><Label><Text xml:lang='en-GB'>Parameters</Text>"
!!"</Label></PromptGroup>"; !!"</Label></PromptGroup>";
rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo);

View File

@@ -22,7 +22,7 @@ Usage:
%webout(OBJ,example2) * Object format, easier to work with ; %webout(OBJ,example2) * Object format, easier to work with ;
%webout(CLOSE) %webout(CLOSE)
;;;; ;;;;
%mm_createwebservice(path=/Public/app/common,name=appInit,code=ft15f001,replace=YES) %mm_createwebservice(path=/Public/app/common,name=appInit)
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@li mm_createstp.sas @li mm_createstp.sas
@@ -119,7 +119,8 @@ data _null_;
put ' %end; '; put ' %end; ';
put ' data _null_;file &jref mod ; '; put ' data _null_;file &jref mod ; ';
put ' put "["; call symputx(''cols'',0,''l''); '; put ' put "["; call symputx(''cols'',0,''l''); ';
put ' proc sort data=sashelp.vcolumn(where=(libname=''WORK'' & memname="%upcase(&ds)")) '; put ' proc sort ';
put ' data=sashelp.vcolumn(where=(libname=''WORK'' & memname="%upcase(&ds)")) ';
put ' out=_data_; '; put ' out=_data_; ';
put ' by varnum; '; put ' by varnum; ';
put ' '; put ' ';
@@ -158,7 +159,8 @@ data _null_;
put ' %end; '; put ' %end; ';
put ' %end; '; put ' %end; ';
put ' run; '; put ' run; ';
put ' /* write to temp loc to avoid _webout truncation - https://support.sas.com/kb/49/325.html */ '; put ' /* write to temp loc to avoid _webout truncation ';
put ' - https://support.sas.com/kb/49/325.html */ ';
put ' filename _sjs temp lrecl=131068 encoding=''utf-8''; '; put ' filename _sjs temp lrecl=131068 encoding=''utf-8''; ';
put ' data _null_; file _sjs lrecl=131068 encoding=''utf-8'' mod; '; put ' data _null_; file _sjs lrecl=131068 encoding=''utf-8'' mod; ';
put ' set &tempds; '; put ' set &tempds; ';

View File

@@ -21,8 +21,8 @@
)/*/STORE SOURCE*/; )/*/STORE SOURCE*/;
%if %length(&outds)>30 %then %do; %if %length(&outds)>30 %then %do;
%put %str(ERR)OR: Temp tables are created with the &outds prefix, which therefore %put %str(ERR)OR: Temp tables are created with the &outds prefix, which
needs to be 30 characters or less; therefore needs to be 30 characters or less;
%return; %return;
%end; %end;
%if %index(&outds,'.')>0 %then %do; %if %index(&outds,'.')>0 %then %do;

View File

@@ -39,8 +39,10 @@ data &outds (keep=directoryuri name directoryname directorydesc );
do while do while
(metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0);
%end; %else %do; %end; %else %do;
do while do while(
(metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri)>0); metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri)
>0
);
%end; %end;
__rc1=metadata_getattr(directoryuri, "Name", name); __rc1=metadata_getattr(directoryuri, "Name", name);
__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);

View File

@@ -11,7 +11,8 @@
%mm_getfoldermembers(root=/User Folders/&sysuserid, outds=usercontent) %mm_getfoldermembers(root=/User Folders/&sysuserid, outds=usercontent)
@param [in] root= the parent folder under which to return all contents @param [in] root= the parent folder under which to return all contents
@param [out] outds= the dataset to create that contains the list of directories @param [out] outds= the dataset to create that contains the list of
directories
@param [in] mDebug= set to 1 to show debug messages in the log @param [in] mDebug= set to 1 to show debug messages in the log
<h4> Data Outputs </h4> <h4> Data Outputs </h4>

View File

@@ -13,7 +13,8 @@
options notes source; options notes source;
@param [in] root= the parent folder under which to return all contents @param [in] root= the parent folder under which to return all contents
@param [out] outds= the dataset to create that contains the list of directories @param [out] outds= the dataset to create that contains the list of
directories
@param [in] mDebug= set to 1 to show debug messages in the log @param [in] mDebug= set to 1 to show debug messages in the log
<h4> SAS Macros </h4> <h4> SAS Macros </h4>

View File

@@ -11,7 +11,8 @@
@param [in] user= the metadata user to return groups for. Leave blank for all @param [in] user= the metadata user to return groups for. Leave blank for all
groups. groups.
@param [in] repo= the metadata repository that contains the user/group information @param [in] repo= the metadata repository that contains the user/group
information
@param [in] mDebug= set to 1 to show debug messages in the log @param [in] mDebug= set to 1 to show debug messages in the log
@param [out] outds= the dataset to create that contains the list of groups @param [out] outds= the dataset to create that contains the list of groups
@@ -39,7 +40,8 @@
%&mD.put Executing mm_getGroups.sas; %&mD.put Executing mm_getGroups.sas;
%&mD.put _local_; %&mD.put _local_;
/* on some sites, user / group info is in a different metadata repo to the default */ /* on some sites, user / group info is in a different metadata repo to the
default */
%if &oldrepo ne &repo %then %do; %if &oldrepo ne &repo %then %do;
options metarepository=&repo; options metarepository=&repo;
%end; %end;

View File

@@ -46,7 +46,8 @@ filename sxlemap temp;
data _null_; data _null_;
file sxlemap; file sxlemap;
put '<SXLEMAP version="1.2" name="SASObjects"><TABLE name="SASObjects">'; put '<SXLEMAP version="1.2" name="SASObjects"><TABLE name="SASObjects">';
put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/&type</TABLE-PATH>"; put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/&type";
put "</TABLE-PATH>";
put '<COLUMN name="id">'; put '<COLUMN name="id">';
put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/&type/@Id</PATH>"; put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/&type/@Id</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>";

View File

@@ -1,7 +1,8 @@
/** /**
@file mm_getpublictypes.sas @file mm_getpublictypes.sas
@brief Creates a dataset with all deployable public types @brief Creates a dataset with all deployable public types
@details More info: https://support.sas.com/documentation/cdl/en/bisag/65422/HTML/default/viewer.htm#n1nkrdzsq5iunln18bk2236istkb.htm @details More info:
https://support.sas.com/documentation/cdl/en/bisag/65422/HTML/default/viewer.htm#n1nkrdzsq5iunln18bk2236istkb.htm
Usage: Usage:

View File

@@ -44,61 +44,76 @@ filename sxlemap temp;
data _null_; data _null_;
file sxlemap; file sxlemap;
put '<SXLEMAP version="1.2" name="SASRepos"><TABLE name="SASRepos">'; put '<SXLEMAP version="1.2" name="SASRepos"><TABLE name="SASRepos">';
put "<TABLE-PATH syntax='XPath'>/GetRepositories/Repositories/Repository</TABLE-PATH>"; put "<TABLE-PATH syntax='XPath'>/GetRepositories/Repositories/Repository";
put "</TABLE-PATH>";
put '<COLUMN name="id">'; put '<COLUMN name="id">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Id</PATH>"; put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Id";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="name">'; put '<COLUMN name="name">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Name</PATH>"; put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Name";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="desc">'; put '<COLUMN name="desc">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Desc</PATH>"; put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Desc";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="DefaultNS">'; put '<COLUMN name="DefaultNS">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@DefaultNS</PATH>"; put "<PATH syntax='XPath'>";
put "/GetRepositories/Repositories/Repository/@DefaultNS</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>200</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="RepositoryType">'; put '<COLUMN name="RepositoryType">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@RepositoryType</PATH>"; put "<PATH syntax='XPath'>";
put "/GetRepositories/Repositories/Repository/@RepositoryType</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>20</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>20</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="RepositoryFormat">'; put '<COLUMN name="RepositoryFormat">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@RepositoryFormat</PATH>"; put "<PATH syntax='XPath'>";
put "/GetRepositories/Repositories/Repository/@RepositoryFormat</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>10</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>10</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="Access">'; put '<COLUMN name="Access">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Access</PATH>"; put "<PATH syntax='XPath'>";
put "/GetRepositories/Repositories/Repository/@Access</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>16</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>16</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="CurrentAccess">'; put '<COLUMN name="CurrentAccess">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@CurrentAccess</PATH>"; put "<PATH syntax='XPath'>";
put "/GetRepositories/Repositories/Repository/@CurrentAccess</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>16</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>16</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="PauseState">'; put '<COLUMN name="PauseState">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@PauseState</PATH>"; put "<PATH syntax='XPath'>";
put "/GetRepositories/Repositories/Repository/@PauseState</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>16</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>16</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="Path">'; put '<COLUMN name="Path">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Path</PATH>"; put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Path";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>256</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>256</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="Engine">'; put '<COLUMN name="Engine">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Engine</PATH>"; put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Engine";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>8</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>8</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="Options">'; put '<COLUMN name="Options">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Options</PATH>"; put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@Options";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>32</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>32</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="MetadataCreated">'; put '<COLUMN name="MetadataCreated">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@MetadataCreated</PATH>"; put "<PATH syntax='XPath'>";
put "/GetRepositories/Repositories/Repository/@MetadataCreated</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>24</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>24</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '<COLUMN name="MetadataUpdated">'; put '<COLUMN name="MetadataUpdated">';
put "<PATH syntax='XPath'>/GetRepositories/Repositories/Repository/@MetadataUpdated</PATH>"; put "<PATH syntax='XPath'>";
put "/GetRepositories/Repositories/Repository/@MetadataUpdated</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>24</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>24</LENGTH>";
put '</COLUMN>'; put '</COLUMN>';
put '</TABLE></SXLEMAP>'; put '</TABLE></SXLEMAP>';

View File

@@ -44,15 +44,19 @@ filename sxlemap temp;
data _null_; data _null_;
file sxlemap; file sxlemap;
put '<SXLEMAP version="1.2" name="roles"><TABLE name="roles">'; put '<SXLEMAP version="1.2" name="roles"><TABLE name="roles">';
put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/IdentityGroup</TABLE-PATH>"; put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/IdentityGroup";
put "</TABLE-PATH>";
put '<COLUMN name="roleuri">'; put '<COLUMN name="roleuri">';
put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/IdentityGroup/@Id</PATH>"; put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/IdentityGroup/@Id";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>32</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>32</LENGTH>";
put '</COLUMN><COLUMN name="rolename">'; put '</COLUMN><COLUMN name="rolename">';
put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/IdentityGroup/@Name</PATH>"; put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/IdentityGroup/@Name";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>256</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>256</LENGTH>";
put '</COLUMN><COLUMN name="roledesc">'; put '</COLUMN><COLUMN name="roledesc">';
put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/IdentityGroup/@Desc</PATH>"; put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/IdentityGroup/@Desc";
put "</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>500</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>500</LENGTH>";
put '</COLUMN></TABLE></SXLEMAP>'; put '</COLUMN></TABLE></SXLEMAP>';
run; run;

View File

@@ -23,9 +23,10 @@
combine with the <code>tree=</code> parameter. combine with the <code>tree=</code> parameter.
@param outds= the dataset to create that contains the list of stps. @param outds= the dataset to create that contains the list of stps.
@param mDebug= set to 1 to show debug messages in the log @param mDebug= set to 1 to show debug messages in the log
@param showDesc= provide a non blank value to return stored process descriptions @param showDesc= provide a non blank value to return stored process
@param showUsageVersion= provide a non blank value to return the UsageVersion. This descriptions
is either 1000000 (type 1, 9.2) or 2000000 (type2, 9.3 onwards). @param showUsageVersion= provide a non blank value to return the UsageVersion.
This is either 1000000 (type 1, 9.2) or 2000000 (type2, 9.3 onwards).
@returns outds dataset containing the following columns @returns outds dataset containing the following columns
- stpuri - stpuri

View File

@@ -1,7 +1,7 @@
/** /**
@file mm_gettableid.sas @file mm_gettableid.sas
@brief Get the metadata id for a particular table @brief Get the metadata id for a particular table
@details Provide a libref and table name to return the corresponding metadata id @details Provide a libref and table name to return the corresponding metadata
in an output datataset. in an output datataset.
Usage: Usage:

View File

@@ -48,7 +48,8 @@ filename sxlemap temp;
data _null_; data _null_;
file sxlemap; file sxlemap;
put '<SXLEMAP version="1.2" name="SASObjects"><TABLE name="SASObjects">'; put '<SXLEMAP version="1.2" name="SASObjects"><TABLE name="SASObjects">';
put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/Person</TABLE-PATH>"; put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/Person";
put "</TABLE-PATH>";
put '<COLUMN name="uri">'; put '<COLUMN name="uri">';
put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/Person/@Id</PATH>"; put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/Person/@Id</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>32</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>32</LENGTH>";

View File

@@ -12,7 +12,8 @@
Usage: Usage:
%* import the macros (or make them available some other way); %* import the macros (or make them available some other way);
filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas"; filename mc url
"https://raw.githubusercontent.com/sasjs/core/main/all.sas";
%inc mc; %inc mc;
%* create sample text file as input to the macro; %* create sample text file as input to the macro;
@@ -92,7 +93,8 @@
%let port=%sysfunc(getoption(metaport)); %let port=%sysfunc(getoption(metaport));
%let platform_object_path=%mf_loc(POF); %let platform_object_path=%mf_loc(POF);
%let connx_string=%str(-host &host -port &port -user &mmxuser -password &mmxpass); %let connx_string=%str(-host &host -port &port -user &mmxuser %trim(
)-password &mmxpass);
%mm_tree(root=%str(&metaloc) ,types=EXPORTABLE ,outds=exportable) %mm_tree(root=%str(&metaloc) ,types=EXPORTABLE ,outds=exportable)

View File

@@ -15,7 +15,8 @@
Usage: Usage:
%* load macros; %* load macros;
filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas"; filename mc url
"https://raw.githubusercontent.com/sasjs/core/main/all.sas";
%inc mc; %inc mc;
%* export everything; %* export everything;
@@ -104,7 +105,8 @@ filename sxlemap temp;
data _null_; data _null_;
file sxlemap; file sxlemap;
put '<SXLEMAP version="1.2" name="SASObjects"><TABLE name="SASObjects">'; put '<SXLEMAP version="1.2" name="SASObjects"><TABLE name="SASObjects">';
put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/Tree</TABLE-PATH>"; put "<TABLE-PATH syntax='XPath'>/GetMetadataObjects/Objects/Tree";
put "</TABLE-PATH>";
put '<COLUMN name="pathuri">'; put '<COLUMN name="pathuri">';
put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/Tree/@Id</PATH>"; put "<PATH syntax='XPath'>/GetMetadataObjects/Objects/Tree/@Id</PATH>";
put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>64</LENGTH>"; put "<TYPE>character</TYPE><DATATYPE>string</DATATYPE><LENGTH>64</LENGTH>";

View File

@@ -10,8 +10,8 @@
@param target= full path to the STP being deleted @param target= full path to the STP being deleted
@param type= Either WKS or STP depending on whether Workspace or Stored Process @param type= Either WKS or STP depending on whether Workspace or
type required Stored Process type required
@version 9.4 @version 9.4
@author Allan Bowe @author Allan Bowe
@@ -51,7 +51,8 @@ data _null_;
n+1; n+1;
rc=metadata_getattr(uri,"Name",name); rc=metadata_getattr(uri,"Name",name);
if name='Stored Process' then do; if name='Stored Process' then do;
rc = METADATA_SETATTR(uri,'StoredText','<?xml version="1.0" encoding="UTF-8"?>' rc = METADATA_SETATTR(uri,'StoredText'
,'<?xml version="1.0" encoding="UTF-8"?>'
!!'<StoredProcess><ServerContext LogicalServerType="'!!"&newtype" !!'<StoredProcess><ServerContext LogicalServerType="'!!"&newtype"
!!'" OtherAllowed="false"/><ResultCapabilities Package="false" ' !!'" OtherAllowed="false"/><ResultCapabilities Package="false" '
!!' Streaming="true"/><OutputParameters/></StoredProcess>'); !!' Streaming="true"/><OutputParameters/></StoredProcess>');

View File

@@ -20,7 +20,8 @@ Usage:
run; run;
filename outref "%sysfunc(pathname(work))"; filename outref "%sysfunc(pathname(work))";
%mmx_spkexport(metaloc=%str(/30.Projects/3001.Internal/300115.DataController/dc1) %mmx_spkexport(
metaloc=%str(/30.Projects/3001.Internal/300115.DataController/dc1)
,secureref=tmp ,secureref=tmp
,outspkpath=%str(/tmp) ,outspkpath=%str(/tmp)
) )
@@ -56,7 +57,8 @@ Usage:
/* get creds */ /* get creds */
%inc &secureref/nosource; %inc &secureref/nosource;
%let connx_string=%str(-host &host -port &port -user '&mmxuser' -password '&mmxpass'); %let connx_string=
%str(-host &host -port &port -user '&mmxuser' -password '&mmxpass');
%mm_tree(root=%str(&metaloc) ,types=EXPORTABLE ,outds=exportable) %mm_tree(root=%str(&metaloc) ,types=EXPORTABLE ,outds=exportable)

View File

@@ -258,7 +258,8 @@ data _null_;
put ' %end; '; put ' %end; ';
put ' data _null_;file &jref mod ; '; put ' data _null_;file &jref mod ; ';
put ' put "["; call symputx(''cols'',0,''l''); '; put ' put "["; call symputx(''cols'',0,''l''); ';
put ' proc sort data=sashelp.vcolumn(where=(libname=''WORK'' & memname="%upcase(&ds)")) '; put ' proc sort ';
put ' data=sashelp.vcolumn(where=(libname=''WORK'' & memname="%upcase(&ds)")) ';
put ' out=_data_; '; put ' out=_data_; ';
put ' by varnum; '; put ' by varnum; ';
put ' '; put ' ';
@@ -297,7 +298,8 @@ data _null_;
put ' %end; '; put ' %end; ';
put ' %end; '; put ' %end; ';
put ' run; '; put ' run; ';
put ' /* write to temp loc to avoid _webout truncation - https://support.sas.com/kb/49/325.html */ '; put ' /* write to temp loc to avoid _webout truncation ';
put ' - https://support.sas.com/kb/49/325.html */ ';
put ' filename _sjs temp lrecl=131068 encoding=''utf-8''; '; put ' filename _sjs temp lrecl=131068 encoding=''utf-8''; ';
put ' data _null_; file _sjs lrecl=131068 encoding=''utf-8'' mod; '; put ' data _null_; file _sjs lrecl=131068 encoding=''utf-8'' mod; ';
put ' set &tempds; '; put ' set &tempds; ';
@@ -412,7 +414,8 @@ data _null_;
put ' if _n_=1 then call symputx(''input_statement'',_infile_); '; put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' list; '; put ' list; ';
put ' data &table; '; put ' data &table; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd termstr=crlf; '; put ' infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd ';
put ' termstr=crlf; ';
put ' input &input_statement; '; put ' input &input_statement; ';
put ' run; '; put ' run; ';
put ' %end; '; put ' %end; ';
@@ -453,7 +456,8 @@ data _null_;
put ' '; put ' ';
put ' /* setup temp ref */ '; put ' /* setup temp ref */ ';
put ' %if %upcase(&fref) ne _WEBOUT %then %do; '; put ' %if %upcase(&fref) ne _WEBOUT %then %do; ';
put ' filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'' mod; '; put ' filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'' ';
put ' mod; ';
put ' %end; '; put ' %end; ';
put ' '; put ' ';
put ' /* setup json */ '; put ' /* setup json */ ';