1
0
mirror of https://github.com/sasjs/core.git synced 2025-12-10 14:04:36 +00:00
Files
core/meta/mm_getlibs.sas

97 lines
2.6 KiB
SAS
Executable File

/**
@file
@brief Creates a dataset with all metadata libraries
@details Will only show the libraries to which a user has the requisite
metadata access.
@param [out] outds= (work.mm_getlibs)
The library.dataset to create that contains the list of libraries
@returns outds dataset containing all groups in a column named "metagroup"
(defaults to work.mm_getlibs). The following columns are provided:
- LibraryId
- LibraryName
- LibraryRef
- Engine
@warning The following filenames are created and then de-assigned:
filename sxlemap clear;
filename response clear;
libname _XML_ clear;
@version 9.2
@author Allan Bowe
**/
%macro mm_getlibs(
outds=work.mm_getLibs
)/*/STORE SOURCE*/;
/*
flags:
OMI_SUCCINCT (2048) Do not return attributes with null values.
OMI_GET_METADATA (256) Executes a GetMetadata call for each object that
is returned by the GetMetadataObjects method.
OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.
*/
data _null_;
flags=2048+256+8;
call symputx('flags',flags,'l');
run;
* use a temporary fileref to hold the response;
filename response temp;
/* get list of libraries */
proc metadata in=
'<GetMetadataObjects>
<Reposid>$METAREPOSITORY</Reposid>
<Type>SASLibrary</Type>
<Objects/>
<NS>SAS</NS>
<Flags>&flags</Flags>
<Options/>
</GetMetadataObjects>'
out=response;
run;
/* write the response to the log for debugging */
data _null_;
infile response lrecl=32767;
input;
put _infile_;
run;
/* create an XML map to read the response */
filename sxlemap temp;
data _null_;
file sxlemap;
put '<SXLEMAP version="1.2" name="SASLibrary">';
put '<TABLE name="SASLibrary">';
put '<TABLE-PATH syntax="XPath">//Objects/SASLibrary</TABLE-PATH>';
put '<COLUMN name="LibraryId">><LENGTH>17</LENGTH>';
put '<PATH syntax="XPath">//Objects/SASLibrary/@Id</PATH></COLUMN>';
put '<COLUMN name="LibraryName"><LENGTH>256</LENGTH>>';
put '<PATH syntax="XPath">//Objects/SASLibrary/@Name</PATH></COLUMN>';
put '<COLUMN name="LibraryRef"><LENGTH>8</LENGTH>';
put '<PATH syntax="XPath">//Objects/SASLibrary/@Libref</PATH></COLUMN>';
put '<COLUMN name="Engine">><LENGTH>12</LENGTH>';
put '<PATH syntax="XPath">//Objects/SASLibrary/@Engine</PATH></COLUMN>';
put '</TABLE></SXLEMAP>';
run;
libname _XML_ xml xmlfileref=response xmlmap=sxlemap;
/* sort the response by library name */
proc sort data=_XML_.saslibrary out=&outds;
by libraryname;
run;
/* clear references */
filename sxlemap clear;
filename response clear;
libname _XML_ clear;
%mend mm_getlibs;