mirror of
https://github.com/sasjs/core.git
synced 2025-12-11 06:24:35 +00:00
153 lines
4.4 KiB
SAS
153 lines
4.4 KiB
SAS
/**
|
|
@file
|
|
@brief Create an Application object in a metadata folder
|
|
@details Application objects are useful for storing properties in metadata.
|
|
This macro is idempotent - it will not create an object with the same name
|
|
in the same location, twice.
|
|
|
|
usage:
|
|
|
|
%mm_createapplication(tree=/User Folders/sasdemo
|
|
,name=MyApp
|
|
,classidentifier=myAppSeries
|
|
,params= name1=value1
name2=value2
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).
|
|
|
|
<h4> SAS Macros </h4>
|
|
@li mp_abort.sas
|
|
@li mf_verifymacvars.sas
|
|
|
|
@param tree= The metadata folder uri, or the metadata path, in which to
|
|
create the object. This must exist.
|
|
@param name= Application object name. Avoid spaces.
|
|
@param ClassIdentifier= the class of applications to which this app belongs
|
|
@param params= name=value pairs which will become public properties of the
|
|
application object. These are delimited using 
 (newline character)
|
|
|
|
@param desc= Application description (optional). Avoid ampersands as these
|
|
are illegal characters (unless they are escapted- eg &)
|
|
@param version= version number of application
|
|
@param frefin= fileref to use (enables change if there is a conflict). The
|
|
filerefs are left open, to enable inspection after running the
|
|
macro (or importing into an xmlmap if needed).
|
|
@param frefout= fileref to use (enables change if there is a conflict)
|
|
@param mDebug= set to 1 to show debug messages in the log
|
|
|
|
@author Allan Bowe
|
|
|
|
**/
|
|
|
|
%macro mm_createapplication(
|
|
tree=/User Folders/sasdemo
|
|
,name=myApp
|
|
,ClassIdentifier=mcore
|
|
,desc=Created by mm_createapplication
|
|
,params= param1=1
param2=blah
|
|
,version=
|
|
,frefin=mm_in
|
|
,frefout=mm_out
|
|
,mDebug=1
|
|
);
|
|
|
|
%local mD;
|
|
%if &mDebug=1 %then %let mD=;
|
|
%else %let mD=%str(*);
|
|
%&mD.put Executing &sysmacroname..sas;
|
|
%&mD.put _local_;
|
|
|
|
%mf_verifymacvars(tree name)
|
|
|
|
/**
|
|
* check tree exists
|
|
*/
|
|
|
|
data _null_;
|
|
length type uri $256;
|
|
rc=metadata_pathobj("","&tree","Folder",type,uri);
|
|
call symputx('type',type,'l');
|
|
call symputx('treeuri',uri,'l');
|
|
run;
|
|
|
|
%mp_abort(
|
|
iftrue= (&type ne Tree)
|
|
,mac=mm_createapplication.sas
|
|
,msg=Tree &tree does not exist!
|
|
)
|
|
|
|
/**
|
|
* Check object does not exist already
|
|
*/
|
|
data _null_;
|
|
length type uri $256;
|
|
rc=metadata_pathobj("","&tree/&name","Application",type,uri);
|
|
call symputx('type',type,'l');
|
|
putlog (_all_)(=);
|
|
run;
|
|
|
|
%mp_abort(
|
|
iftrue= (&type = SoftwareComponent)
|
|
,mac=mm_createapplication.sas
|
|
,msg=Application &name already exists in &tree!
|
|
)
|
|
|
|
|
|
/**
|
|
* Now we can create the application
|
|
*/
|
|
filename &frefin temp;
|
|
|
|
/* write header XML */
|
|
data _null_;
|
|
file &frefin;
|
|
name=quote(symget('name'));
|
|
desc=quote(symget('desc'));
|
|
ClassIdentifier=quote(symget('ClassIdentifier'));
|
|
version=quote(symget('version'));
|
|
params=quote(symget('params'));
|
|
treeuri=quote(symget('treeuri'));
|
|
|
|
put "<AddMetadata><Reposid>$METAREPOSITORY</Reposid><Metadata> "/
|
|
'<SoftwareComponent IsHidden="0" Name=' name ' ProductName=' name /
|
|
' ClassIdentifier=' ClassIdentifier ' Desc=' desc /
|
|
' SoftwareVersion=' version ' SpecVersion=' version /
|
|
' Major="1" Minor="1" UsageVersion="1000000" PublicType="Application" >' /
|
|
' <Notes>' /
|
|
' <TextStore Name="Public Configuration Properties" IsHidden="0" ' /
|
|
' UsageVersion="0" StoredText=' params '/>' /
|
|
' </Notes>' /
|
|
"<Trees><Tree ObjRef=" treeuri "/></Trees>"/
|
|
"</SoftwareComponent></Metadata><NS>SAS</NS>"/
|
|
"<Flags>268435456</Flags></AddMetadata>";
|
|
run;
|
|
|
|
filename &frefout temp;
|
|
|
|
proc metadata in= &frefin out=&frefout verbose;
|
|
run;
|
|
|
|
%if &mdebug=1 %then %do;
|
|
/* write the response to the log for debugging */
|
|
data _null_;
|
|
infile &frefout lrecl=1048576;
|
|
input;
|
|
put _infile_;
|
|
run;
|
|
%end;
|
|
|
|
%put NOTE: Checking to ensure application (&name) was created;
|
|
data _null_;
|
|
length type uri $256;
|
|
rc=metadata_pathobj("","&tree/&name","Application",type,uri);
|
|
call symputx('apptype',type,'l');
|
|
%if &mdebug=1 %then putlog (_all_)(=);;
|
|
run;
|
|
%if &apptype ne SoftwareComponent %then %do;
|
|
%put %str(ERR)OR: Could not find (&name) at (&tree)!!;
|
|
%return;
|
|
%end;
|
|
%else %put NOTE: Application (&name) successfully created in (&tree)!;
|
|
|
|
|
|
%mend; |