mirror of
https://github.com/sasjs/core.git
synced 2025-12-28 13:30:04 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f6ef569e1 | |||
| ff45c5a8b8 | |||
| fb5f1c820a | |||
| c0e33175cf |
158
all.sas
158
all.sas
@@ -8105,20 +8105,117 @@ filename __outdoc clear;
|
||||
|
||||
%mend;
|
||||
/**
|
||||
@file mm_getfoldertree.sas
|
||||
@file
|
||||
@brief Returns all direct child members of a particular folder
|
||||
@details Displays the children for a particular folder, in a similar fashion
|
||||
to the viya counterpart (mv_getfoldermembers.sas)
|
||||
|
||||
Usage:
|
||||
|
||||
%mm_getfoldermembers(root=/, outds=rootfolders)
|
||||
|
||||
%mm_getfoldermembers(root=/User Folders/&sysuserid, outds=usercontent)
|
||||
|
||||
@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 [in] mDebug= set to 1 to show debug messages in the log
|
||||
|
||||
<h4> Data Outputs </h4>
|
||||
|
||||
Example for `root=/`:
|
||||
|
||||
|metauri $17|metaname $256|metatype $32|
|
||||
|---|---|---|
|
||||
|A5XLSNXI.AA000001|Products |Folder|
|
||||
|A5XLSNXI.AA000002|Shared Data |Folder|
|
||||
|A5XLSNXI.AA000003|User Folders |Folder|
|
||||
|A5XLSNXI.AA000004|System |Folder|
|
||||
|A5XLSNXI.AA00003K|30.SASApps |Folder|
|
||||
|A5XLSNXI.AA00006A|Public|Folder|
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mm_getfoldertree.sas
|
||||
@li mf_getuniquefileref.sas
|
||||
@li mf_getuniquelibref.sas
|
||||
|
||||
@version 9.4
|
||||
@author Allan Bowe
|
||||
|
||||
**/
|
||||
%macro mm_getfoldermembers(
|
||||
root=
|
||||
,outds=work.mm_getfoldertree
|
||||
)/*/STORE SOURCE*/;
|
||||
|
||||
%if "&root" = "/" %then %do;
|
||||
%local fname1 fname2 fname3;
|
||||
%let fname1=%mf_getuniquefileref();
|
||||
%let fname2=%mf_getuniquefileref();
|
||||
%let fname3=%mf_getuniquefileref();
|
||||
data _null_ ;
|
||||
file &fname1 ;
|
||||
put '<GetMetadataObjects>' ;
|
||||
put '<Reposid>$METAREPOSITORY</Reposid>' ;
|
||||
put '<Type>Tree</Type>' ;
|
||||
put '<NS>SAS</NS>' ;
|
||||
put '<Flags>388</Flags>' ;
|
||||
put '<Options>' ;
|
||||
put '<XMLSelect search="Tree[SoftwareComponents/SoftwareComponent'@;
|
||||
put '[@Name=''BIP Service'']]"/>';
|
||||
put '</Options>' ;
|
||||
put '</GetMetadataObjects>' ;
|
||||
run ;
|
||||
proc metadata in=&fname1 out=&fname2 verbose;run;
|
||||
|
||||
/* create an XML map to read the response */
|
||||
data _null_;
|
||||
file &fname3;
|
||||
put '<SXLEMAP version="1.2" name="SASFolders">';
|
||||
put '<TABLE name="SASFolders">';
|
||||
put '<TABLE-PATH syntax="XPath">//Objects/Tree</TABLE-PATH>';
|
||||
put '<COLUMN name="metauri">><LENGTH>17</LENGTH>';
|
||||
put '<PATH syntax="XPath">//Objects/Tree/@Id</PATH></COLUMN>';
|
||||
put '<COLUMN name="metaname"><LENGTH>256</LENGTH>>';
|
||||
put '<PATH syntax="XPath">//Objects/Tree/@Name</PATH></COLUMN>';
|
||||
put '</TABLE></SXLEMAP>';
|
||||
run;
|
||||
%local libref1;
|
||||
%let libref1=%mf_getuniquelibref();
|
||||
libname &libref1 xml xmlfileref=&fname2 xmlmap=&fname3;
|
||||
|
||||
data &outds;
|
||||
length metatype $32;
|
||||
retain metatype 'Folder';
|
||||
set &libref1..sasfolders;
|
||||
run;
|
||||
|
||||
%end;
|
||||
%else %do;
|
||||
%mm_getfoldertree(root=&root, outds=&outds,depth=1)
|
||||
data &outds;
|
||||
set &outds(rename=(name=metaname publictype=metatype));
|
||||
keep metaname metauri metatype;
|
||||
run;
|
||||
%end;
|
||||
|
||||
%mend;
|
||||
/**
|
||||
@file
|
||||
@brief Returns all folders / subfolder content for a particular root
|
||||
@details Shows all members and SubTrees recursively for a particular root.
|
||||
Note - for big sites, this returns a lot of data! So you may wish to reduce
|
||||
the logging to speed up the process (see example below)
|
||||
the logging to speed up the process (see example below), OR - use mm_tree.sas
|
||||
which uses proc metadata and is far more efficient.
|
||||
|
||||
Usage:
|
||||
|
||||
options ps=max nonotes nosource;
|
||||
%mm_getfoldertree(root=/My/Meta/Path, outds=iwantthisdataset)
|
||||
options notes source;
|
||||
|
||||
@param root= the parent folder under which to return all contents
|
||||
@param outds= the dataset to create that contains the list of directories
|
||||
@param mDebug= set to 1 to show debug messages in the log
|
||||
|
||||
@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 [in] mDebug= set to 1 to show debug messages in the log
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
|
||||
@@ -8166,7 +8263,7 @@ data &outds.TMP/view=&outds.TMP;
|
||||
__n1+1;
|
||||
/* Walk through all possible associations of this object. */
|
||||
__n2=1;
|
||||
if assoctype in ('Members','SubTrees') then
|
||||
if assoctype in ('Members','SubTrees') then
|
||||
do while(metadata_getnasn(pathuri,assoctype,__n2,metauri)>0);
|
||||
__n2+1;
|
||||
call missing(name,publictype,MetadataUpdated,MetadataCreated);
|
||||
@@ -10204,16 +10301,15 @@ run;
|
||||
%end;
|
||||
|
||||
%mend;/**
|
||||
@file mm_updatestpservertype.sas
|
||||
@file
|
||||
@brief Updates a type 2 stored process to run on STP or WKS context
|
||||
@details Only works on Type 2 (9.3 compatible) STPs
|
||||
|
||||
Usage:
|
||||
|
||||
%mm_updatestpservertype(target=/some/meta/path/myStoredProcess
|
||||
,type=WKS)
|
||||
%mm_updatestpservertype(target=/some/meta/path/myStoredProcess
|
||||
,type=WKS)
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
|
||||
@param target= full path to the STP being deleted
|
||||
@param type= Either WKS or STP depending on whether Workspace or Stored Process
|
||||
@@ -10278,31 +10374,40 @@ run;
|
||||
|
||||
Usage:
|
||||
|
||||
%mm_updatestpsourcecode(stp=/my/metadata/path/mystpname
|
||||
,stpcode="/file/system/source.sas")
|
||||
%mm_updatestpsourcecode(stp=/my/metadata/path/mystpname
|
||||
,stpcode="/file/system/source.sas")
|
||||
|
||||
|
||||
@param stp= the BIP Tree folder path plus Stored Process Name
|
||||
@param stpcode= the source file (or fileref) containing the SAS code to load
|
||||
@param [in] stp= the BIP Tree folder path plus Stored Process Name
|
||||
@param [in] stpcode= the source file (or fileref) containing the SAS code to load
|
||||
into the stp. For multiple files, they should simply be concatenated first.
|
||||
@param minify= set to YES in order to strip comments, blank lines, and CRLFs.
|
||||
@param [in] minify= set to YES in order to strip comments, blank lines, and CRLFs.
|
||||
|
||||
@param frefin= change default inref if it clashes with an existing one
|
||||
@param frefout= change default outref if it clashes with an existing one
|
||||
@param frefin= deprecated - a unique fileref is now always used
|
||||
@param frefout= deprecated - a unique fileref is now always used
|
||||
@param mDebug= set to 1 to show debug messages in the log
|
||||
|
||||
@version 9.3
|
||||
@author Allan Bowe
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mf_getuniquefileref.sas
|
||||
|
||||
**/
|
||||
|
||||
%macro mm_updatestpsourcecode(stp=
|
||||
,stpcode=
|
||||
,minify=NO
|
||||
,mdebug=0
|
||||
/* deprecated */
|
||||
,frefin=inmeta
|
||||
,frefout=outmeta
|
||||
,mdebug=0
|
||||
);
|
||||
|
||||
%if &frefin ne inmeta or &frefout ne outmeta %then %do;
|
||||
%put %str(WARN)ING: the frefin and frefout parameters will be deprecated in
|
||||
an upcoming release.;
|
||||
%end;
|
||||
|
||||
/* first, check if STP exists */
|
||||
%local tsuri;
|
||||
%let tsuri=stopifempty ;
|
||||
@@ -10340,7 +10445,9 @@ run;
|
||||
%return;
|
||||
%end;
|
||||
|
||||
filename &frefin temp lrecl=32767;
|
||||
%local frefin frefout;
|
||||
%let frefin=%mf_getuniquefileref();
|
||||
%let frefout=%mf_getuniquefileref();
|
||||
|
||||
/* write header XML */
|
||||
data _null_;
|
||||
@@ -10353,7 +10460,7 @@ run;
|
||||
/* write contents */
|
||||
%if %length(&stpcode)>2 %then %do;
|
||||
data _null_;
|
||||
file &frefin mod;
|
||||
file &frefin lrecl=32767 mod;
|
||||
infile &stpcode lrecl=32767;
|
||||
length outstr $32767;
|
||||
input outstr ;
|
||||
@@ -10382,9 +10489,6 @@ data _null_;
|
||||
</UpdateMetadata>";
|
||||
run;
|
||||
|
||||
|
||||
filename &frefout temp;
|
||||
|
||||
proc metadata in= &frefin out=&frefout;
|
||||
run;
|
||||
|
||||
@@ -10396,6 +10500,10 @@ run;
|
||||
put _infile_;
|
||||
run;
|
||||
%end;
|
||||
%else %do;
|
||||
filename &frefin clear;
|
||||
filename &frefout clear;
|
||||
%end;
|
||||
|
||||
%mend;/**
|
||||
@file mm_webout.sas
|
||||
|
||||
95
meta/mm_getfoldermembers.sas
Normal file
95
meta/mm_getfoldermembers.sas
Normal file
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
@file
|
||||
@brief Returns all direct child members of a particular folder
|
||||
@details Displays the children for a particular folder, in a similar fashion
|
||||
to the viya counterpart (mv_getfoldermembers.sas)
|
||||
|
||||
Usage:
|
||||
|
||||
%mm_getfoldermembers(root=/, outds=rootfolders)
|
||||
|
||||
%mm_getfoldermembers(root=/User Folders/&sysuserid, outds=usercontent)
|
||||
|
||||
@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 [in] mDebug= set to 1 to show debug messages in the log
|
||||
|
||||
<h4> Data Outputs </h4>
|
||||
|
||||
Example for `root=/`:
|
||||
|
||||
|metauri $17|metaname $256|metatype $32|
|
||||
|---|---|---|
|
||||
|A5XLSNXI.AA000001|Products |Folder|
|
||||
|A5XLSNXI.AA000002|Shared Data |Folder|
|
||||
|A5XLSNXI.AA000003|User Folders |Folder|
|
||||
|A5XLSNXI.AA000004|System |Folder|
|
||||
|A5XLSNXI.AA00003K|30.SASApps |Folder|
|
||||
|A5XLSNXI.AA00006A|Public|Folder|
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mm_getfoldertree.sas
|
||||
@li mf_getuniquefileref.sas
|
||||
@li mf_getuniquelibref.sas
|
||||
|
||||
@version 9.4
|
||||
@author Allan Bowe
|
||||
|
||||
**/
|
||||
%macro mm_getfoldermembers(
|
||||
root=
|
||||
,outds=work.mm_getfoldertree
|
||||
)/*/STORE SOURCE*/;
|
||||
|
||||
%if "&root" = "/" %then %do;
|
||||
%local fname1 fname2 fname3;
|
||||
%let fname1=%mf_getuniquefileref();
|
||||
%let fname2=%mf_getuniquefileref();
|
||||
%let fname3=%mf_getuniquefileref();
|
||||
data _null_ ;
|
||||
file &fname1 ;
|
||||
put '<GetMetadataObjects>' ;
|
||||
put '<Reposid>$METAREPOSITORY</Reposid>' ;
|
||||
put '<Type>Tree</Type>' ;
|
||||
put '<NS>SAS</NS>' ;
|
||||
put '<Flags>388</Flags>' ;
|
||||
put '<Options>' ;
|
||||
put '<XMLSelect search="Tree[SoftwareComponents/SoftwareComponent'@;
|
||||
put '[@Name=''BIP Service'']]"/>';
|
||||
put '</Options>' ;
|
||||
put '</GetMetadataObjects>' ;
|
||||
run ;
|
||||
proc metadata in=&fname1 out=&fname2 verbose;run;
|
||||
|
||||
/* create an XML map to read the response */
|
||||
data _null_;
|
||||
file &fname3;
|
||||
put '<SXLEMAP version="1.2" name="SASFolders">';
|
||||
put '<TABLE name="SASFolders">';
|
||||
put '<TABLE-PATH syntax="XPath">//Objects/Tree</TABLE-PATH>';
|
||||
put '<COLUMN name="metauri">><LENGTH>17</LENGTH>';
|
||||
put '<PATH syntax="XPath">//Objects/Tree/@Id</PATH></COLUMN>';
|
||||
put '<COLUMN name="metaname"><LENGTH>256</LENGTH>>';
|
||||
put '<PATH syntax="XPath">//Objects/Tree/@Name</PATH></COLUMN>';
|
||||
put '</TABLE></SXLEMAP>';
|
||||
run;
|
||||
%local libref1;
|
||||
%let libref1=%mf_getuniquelibref();
|
||||
libname &libref1 xml xmlfileref=&fname2 xmlmap=&fname3;
|
||||
|
||||
data &outds;
|
||||
length metatype $32;
|
||||
retain metatype 'Folder';
|
||||
set &libref1..sasfolders;
|
||||
run;
|
||||
|
||||
%end;
|
||||
%else %do;
|
||||
%mm_getfoldertree(root=&root, outds=&outds,depth=1)
|
||||
data &outds;
|
||||
set &outds(rename=(name=metaname publictype=metatype));
|
||||
keep metaname metauri metatype;
|
||||
run;
|
||||
%end;
|
||||
|
||||
%mend;
|
||||
@@ -1,18 +1,20 @@
|
||||
/**
|
||||
@file mm_getfoldertree.sas
|
||||
@file
|
||||
@brief Returns all folders / subfolder content for a particular root
|
||||
@details Shows all members and SubTrees recursively for a particular root.
|
||||
Note - for big sites, this returns a lot of data! So you may wish to reduce
|
||||
the logging to speed up the process (see example below)
|
||||
the logging to speed up the process (see example below), OR - use mm_tree.sas
|
||||
which uses proc metadata and is far more efficient.
|
||||
|
||||
Usage:
|
||||
|
||||
options ps=max nonotes nosource;
|
||||
%mm_getfoldertree(root=/My/Meta/Path, outds=iwantthisdataset)
|
||||
options notes source;
|
||||
|
||||
@param root= the parent folder under which to return all contents
|
||||
@param outds= the dataset to create that contains the list of directories
|
||||
@param mDebug= set to 1 to show debug messages in the log
|
||||
|
||||
@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 [in] mDebug= set to 1 to show debug messages in the log
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
|
||||
@@ -60,7 +62,7 @@ data &outds.TMP/view=&outds.TMP;
|
||||
__n1+1;
|
||||
/* Walk through all possible associations of this object. */
|
||||
__n2=1;
|
||||
if assoctype in ('Members','SubTrees') then
|
||||
if assoctype in ('Members','SubTrees') then
|
||||
do while(metadata_getnasn(pathuri,assoctype,__n2,metauri)>0);
|
||||
__n2+1;
|
||||
call missing(name,publictype,MetadataUpdated,MetadataCreated);
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
/**
|
||||
@file mm_updatestpservertype.sas
|
||||
@file
|
||||
@brief Updates a type 2 stored process to run on STP or WKS context
|
||||
@details Only works on Type 2 (9.3 compatible) STPs
|
||||
|
||||
Usage:
|
||||
|
||||
%mm_updatestpservertype(target=/some/meta/path/myStoredProcess
|
||||
,type=WKS)
|
||||
%mm_updatestpservertype(target=/some/meta/path/myStoredProcess
|
||||
,type=WKS)
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
|
||||
@param target= full path to the STP being deleted
|
||||
@param type= Either WKS or STP depending on whether Workspace or Stored Process
|
||||
|
||||
@@ -6,31 +6,40 @@
|
||||
|
||||
Usage:
|
||||
|
||||
%mm_updatestpsourcecode(stp=/my/metadata/path/mystpname
|
||||
,stpcode="/file/system/source.sas")
|
||||
%mm_updatestpsourcecode(stp=/my/metadata/path/mystpname
|
||||
,stpcode="/file/system/source.sas")
|
||||
|
||||
|
||||
@param stp= the BIP Tree folder path plus Stored Process Name
|
||||
@param stpcode= the source file (or fileref) containing the SAS code to load
|
||||
@param [in] stp= the BIP Tree folder path plus Stored Process Name
|
||||
@param [in] stpcode= the source file (or fileref) containing the SAS code to load
|
||||
into the stp. For multiple files, they should simply be concatenated first.
|
||||
@param minify= set to YES in order to strip comments, blank lines, and CRLFs.
|
||||
@param [in] minify= set to YES in order to strip comments, blank lines, and CRLFs.
|
||||
|
||||
@param frefin= change default inref if it clashes with an existing one
|
||||
@param frefout= change default outref if it clashes with an existing one
|
||||
@param frefin= deprecated - a unique fileref is now always used
|
||||
@param frefout= deprecated - a unique fileref is now always used
|
||||
@param mDebug= set to 1 to show debug messages in the log
|
||||
|
||||
@version 9.3
|
||||
@author Allan Bowe
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mf_getuniquefileref.sas
|
||||
|
||||
**/
|
||||
|
||||
%macro mm_updatestpsourcecode(stp=
|
||||
,stpcode=
|
||||
,minify=NO
|
||||
,mdebug=0
|
||||
/* deprecated */
|
||||
,frefin=inmeta
|
||||
,frefout=outmeta
|
||||
,mdebug=0
|
||||
);
|
||||
|
||||
%if &frefin ne inmeta or &frefout ne outmeta %then %do;
|
||||
%put %str(WARN)ING: the frefin and frefout parameters will be deprecated in
|
||||
an upcoming release.;
|
||||
%end;
|
||||
|
||||
/* first, check if STP exists */
|
||||
%local tsuri;
|
||||
%let tsuri=stopifempty ;
|
||||
@@ -68,7 +77,9 @@ run;
|
||||
%return;
|
||||
%end;
|
||||
|
||||
filename &frefin temp lrecl=32767;
|
||||
%local frefin frefout;
|
||||
%let frefin=%mf_getuniquefileref();
|
||||
%let frefout=%mf_getuniquefileref();
|
||||
|
||||
/* write header XML */
|
||||
data _null_;
|
||||
@@ -81,7 +92,7 @@ run;
|
||||
/* write contents */
|
||||
%if %length(&stpcode)>2 %then %do;
|
||||
data _null_;
|
||||
file &frefin mod;
|
||||
file &frefin lrecl=32767 mod;
|
||||
infile &stpcode lrecl=32767;
|
||||
length outstr $32767;
|
||||
input outstr ;
|
||||
@@ -110,9 +121,6 @@ data _null_;
|
||||
</UpdateMetadata>";
|
||||
run;
|
||||
|
||||
|
||||
filename &frefout temp;
|
||||
|
||||
proc metadata in= &frefin out=&frefout;
|
||||
run;
|
||||
|
||||
@@ -124,5 +132,9 @@ run;
|
||||
put _infile_;
|
||||
run;
|
||||
%end;
|
||||
%else %do;
|
||||
filename &frefin clear;
|
||||
filename &frefout clear;
|
||||
%end;
|
||||
|
||||
%mend;
|
||||
3408
package-lock.json
generated
3408
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -28,9 +28,6 @@
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"docs": "./sasjs/utils/build.sh"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sasjs/cli": "^2.4.0"
|
||||
"docs": "sasjs doc && ./sasjs/utils/build.sh"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9" />
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="author" content="Allan Bowe">
|
||||
<meta name="generator" content="Doxygen $doxygenversion" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<!--BEGIN PROJECT_NAME-->
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
#!/bin/bash
|
||||
####################################################################
|
||||
# PROJECT: Macro Core Docs Build #
|
||||
# To execute, use the npm command (npm run docs) #
|
||||
####################################################################
|
||||
|
||||
cd ../..
|
||||
|
||||
sasjs doc
|
||||
|
||||
# refresh github pages site
|
||||
rm -rf sasjsbuild/docsite
|
||||
git clone git@github.com:sasjs/core.github.io.git sasjsbuild/docsite
|
||||
|
||||
Reference in New Issue
Block a user