Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
mm_updateappextension.sas
Go to the documentation of this file.
1/**
2 @file
3 @brief Add or update an extension to an application component
4 @details A SAS Application (SoftwareComponent) is a great place to store app
5 specific parameters. There are two main places those params can be stored:
6 1) Configuration, and 2) Extensions. The second location will enable end
7 users to modify parameters even if they don't have the Configuration Manager
8 plugin in SMC. This macro can be used after creating an application with
9 the mm_createapplication.sas macro. If a parameter with the same name
10 exists, it is updated. If it does not, it is created.
11
12 Usage:
13
14 %mm_updateappextension(app=/my/metadata/path/myappname
15 ,paramname=My Param
16 ,paramvalue=My value
17 ,paramdesc=some description)
18
19
20 @param [in] app= the BIP Tree folder path plus Application Name
21 @param [in] paramname= Parameter name
22 @param [in] paramvalue= Parameter value
23 @param [in] paramdesc= Parameter description
24
25 @param [in] frefin= change default inref if it clashes with an existing one
26 @param [out] frefout= change default outref if it clashes with an existing one
27 @param [in] mDebug= set to 1 to show debug messages in the log
28
29 @version 9.4
30 @author Allan Bowe
31
32**/
33
34%macro mm_updateappextension(app=
35 ,paramname=
36 ,paramvalue=
37 ,paramdesc=Created by mm_updateappextension
38 ,frefin=inmeta,frefout=outmeta
39 , mdebug=0);
40
41
42/* first, check if app (and param) exists */
43%local appuri exturi;
44%let appuri=stopifempty;
45%let exturi=createifempty;
46
47data _null_;
48 format type uri tsuri value $200.;
49 call missing (of _all_);
50 paramname=symget('paramname');
51 path="&app(Application)";
52 /* first, find the STP ID */
53 if metadata_pathobj("",path,"Application",type,uri)>0 then do;
54 /* we have an app in this location! */
55 call symputx('appuri',uri,'l');
56 cnt=1;
57 do while (metadata_getnasn(uri,"Extensions",cnt,tsuri)>0);
58 rc=metadata_getattr(tsuri,"Name",value);
59 put tsuri= value=;
60 if value=paramname then do;
61 putlog "&sysmacroname: found existing param - " tsuri;
62 rc=metadata_getattr(tsuri,"Id",value);
63 call symputx('exturi',value,'l');
64 stop;
65 end;
66 cnt+1;
67 end;
68 end;
69 else put (_all_)(=);
70run;
71
72%if &appuri=stopifempty %then %do;
73 %put %str(WARN)ING: &app.(Application) not found!;
74 %return;
75%end;
76
77/* escape the description so it can be stored as XML */
78data _null_;
79 length outstr $32767;
80 outstr=symget('paramdesc');
81 outstr=tranwrd(outstr,'&','&');
82 outstr=tranwrd(outstr,'<','&lt;');
83 outstr=tranwrd(outstr,'>','&gt;');
84 outstr=tranwrd(outstr,"'",'&apos;');
85 outstr=tranwrd(outstr,'"','&quot;');
86 outstr=tranwrd(outstr,'0A'x,'&#10;');
87 outstr=tranwrd(outstr,'0D'x,'&#13;');
88 outstr=tranwrd(outstr,'$','&#36;');
89 call symputx('paramdesc',outstr,'l');
90run;
91
92filename &frefin temp;
93
94%if &exturi=createifempty %then %do;
95 /* write header XML */
96 data _null_;
97 file &frefin;
98 pname=quote(trim(symget('paramname')));
99 pdesc=quote(trim(symget('paramdesc')));
100 pvalue=quote(trim(symget('paramvalue')));
101 put "<UpdateMetadata><Reposid>$METAREPOSITORY</Reposid><Metadata>"/
102 " <SoftwareComponent id='&appuri' ><Extensions>" /
103 ' <Extension Name=' pname ' Desc=' pdesc ' value= ' pvalue ' />' /
104 ' </Extensions></SoftwareComponent>'/
105 '</Metadata><NS>SAS</NS><Flags>268435456</Flags></UpdateMetadata>';
106 run;
107
108%end;
109%else %do;
110 data _null_;
111 file &frefin;
112 pdesc=quote(trim(symget('paramdesc')));
113 pvalue=quote(trim(symget('paramvalue')));
114 put "<UpdateMetadata><Reposid>$METAREPOSITORY</Reposid><Metadata>"/
115 " <Extension id='&exturi' Desc=" pdesc ' value= ' pvalue ' />' /
116 '</Metadata><NS>SAS</NS><Flags>268435456</Flags></UpdateMetadata>';
117 run;
118%end;
119
120filename &frefout temp;
121
122proc metadata in= &frefin out=&frefout verbose;
123run;
124
125%if &mdebug=1 %then %do;
126 /* write the response to the log for debugging */
127 data _null_;
128 infile &frefout lrecl=1048576;
129 input;
130 put _infile_;
131 run;
132%end;
133
134%mend mm_updateappextension;