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

98 lines
2.7 KiB
SAS
Executable File

/**
@file
@brief Assigns a meta engine library using LIBREF
@details Queries metadata to get the library NAME which can then be used in
a libname statement with the meta engine.
usage:
%macro mp_abort(iftrue,mac,msg);%put &=msg;%mend;
%mm_assignlib(SOMEREF)
<h4> SAS Macros </h4>
@li mp_abort.sas
@param [in] libref The libref (not name) of the metadata library
@param [in] mAbort= (HARD) If not assigned, HARD will call %mp_abort(), SOFT
will silently return
@returns libname statement
@version 9.2
@author Allan Bowe
**/
%macro mm_assignlib(
libref
,mAbort=HARD
)/*/STORE SOURCE*/;
%local mp_abort msg;
%let mp_abort=0;
%if %sysfunc(libref(&libref)) %then %do;
data _null_;
length liburi LibName msg $200;
call missing(of _all_);
nobj=metadata_getnobj("omsobj:SASLibrary?@Libref='&libref'",1,liburi);
if nobj=1 then do;
rc=metadata_getattr(liburi,"Name",LibName);
/* now try and assign it */
if libname("&libref",,'meta',cats('liburi="',liburi,'";')) ne 0 then do;
putlog "&libref could not be assigned";
putlog liburi=;
/**
* Fetch the system message for display in the abort modal. This is
* not always helpful though. One example, previously received:
* NOTE: Libref XX refers to the same library metadata as libref XX.
*/
msg=sysmsg();
if msg=:'ERROR: Libref SAVE is not assigned.' then do;
msg=catx(" ",
"Could not assign %upcase(&libref).",
"Please check metadata permissions! Libname:",libname,
"Liburi:",liburi
);
end;
else if msg="ERROR: User does not have appropriate authorization "!!
"level for library SAVE."
then do;
msg=catx(" ",
"ERROR: User does not have appropriate authorization level",
"for library %upcase(&libref), libname:",libname,
"Liburi:",liburi
);
end;
call symputx('msg',msg,'l');
if "&mabort"='HARD' then call symputx('mp_abort',1,'l');
end;
else do;
put (_all_)(=);
call symputx('libname',libname,'L');
call symputx('liburi',liburi,'L');
end;
end;
else if nobj>1 then do;
if "&mabort"='HARD' then call symputx('mp_abort',1);
call symputx('msg',"More than one library with libref=&libref");
end;
else do;
if "&mabort"='HARD' then call symputx('mp_abort',1);
call symputx('msg',"Library &libref not found in metadata");
end;
run;
%put NOTE: &msg;
%end;
%else %do;
%put NOTE: Library &libref is already assigned;
%end;
%mp_abort(iftrue= (&mp_abort=1)
,mac=mm_assignlib.sas
,msg=%superq(msg)
)
%mend mm_assignlib;