mirror of
https://github.com/sasjs/core.git
synced 2026-01-11 02:50:06 +00:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8d3b43b12 | ||
|
|
32a6d15c2e | ||
|
|
b109e7cead | ||
| d291d3e287 | |||
|
|
5a2968e798 | ||
|
|
120ad9a7da | ||
|
|
67a81b2690 | ||
|
|
506cf1812f | ||
|
|
8cc0eb0dd7 | ||
|
|
4c1f69da3a | ||
|
|
f160ebe705 | ||
|
|
3f49925d01 | ||
|
|
53ed5dc916 | ||
|
|
808b24e31b | ||
|
|
c51c9c2ca9 | ||
|
|
4d6edf5566 | ||
|
|
41a24677f5 | ||
|
|
e7d8d8ffb3 |
30
.github/vpn/config.ovpn
vendored
Normal file
30
.github/vpn/config.ovpn
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
cipher AES-256-CBC
|
||||||
|
setenv FORWARD_COMPATIBLE 1
|
||||||
|
client
|
||||||
|
server-poll-timeout 4
|
||||||
|
nobind
|
||||||
|
remote vpn.analytium.co.uk 1194 udp
|
||||||
|
remote vpn.analytium.co.uk 1194 udp
|
||||||
|
remote vpn.analytium.co.uk 443 tcp
|
||||||
|
remote vpn.analytium.co.uk 1194 udp
|
||||||
|
remote vpn.analytium.co.uk 1194 udp
|
||||||
|
remote vpn.analytium.co.uk 1194 udp
|
||||||
|
remote vpn.analytium.co.uk 1194 udp
|
||||||
|
remote vpn.analytium.co.uk 1194 udp
|
||||||
|
dev tun
|
||||||
|
dev-type tun
|
||||||
|
ns-cert-type server
|
||||||
|
setenv opt tls-version-min 1.0 or-highest
|
||||||
|
reneg-sec 604800
|
||||||
|
sndbuf 0
|
||||||
|
rcvbuf 0
|
||||||
|
# NOTE: LZO commands are pushed by the Access Server at connect time.
|
||||||
|
# NOTE: The below line doesn't disable LZO.
|
||||||
|
comp-lzo no
|
||||||
|
verb 3
|
||||||
|
setenv PUSH_PEER_INFO
|
||||||
|
|
||||||
|
ca ca.crt
|
||||||
|
cert user.crt
|
||||||
|
key user.key
|
||||||
|
tls-auth tls.key 1
|
||||||
33
.github/workflows/run-tests.yml
vendored
33
.github/workflows/run-tests.yml
vendored
@@ -21,6 +21,31 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
- name: Write VPN Files
|
||||||
|
run: |
|
||||||
|
echo "$CA_CRT" > .github/vpn/ca.crt
|
||||||
|
echo "$USER_CRT" > .github/vpn/user.crt
|
||||||
|
echo "$USER_KEY" > .github/vpn/user.key
|
||||||
|
echo "$TLS_KEY" > .github/vpn/tls.key
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
CA_CRT: ${{ secrets.CA_CRT}}
|
||||||
|
USER_CRT: ${{ secrets.USER_CRT }}
|
||||||
|
USER_KEY: ${{ secrets.USER_KEY }}
|
||||||
|
TLS_KEY: ${{ secrets.TLS_KEY }}
|
||||||
|
|
||||||
|
- name: Install Open VPN
|
||||||
|
run: |
|
||||||
|
sudo apt install apt-transport-https
|
||||||
|
sudo wget https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub
|
||||||
|
sudo apt-key add openvpn-repo-pkg-key.pub
|
||||||
|
sudo wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-bionic.list
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install openvpn3
|
||||||
|
|
||||||
|
- name: Start Open VPN 3
|
||||||
|
run: openvpn3 session-start --config .github/vpn/config.ovpn
|
||||||
|
|
||||||
- name: Install Doxygen
|
- name: Install Doxygen
|
||||||
run: sudo apt-get install doxygen
|
run: sudo apt-get install doxygen
|
||||||
|
|
||||||
@@ -31,16 +56,16 @@ jobs:
|
|||||||
run: npm run lint
|
run: npm run lint
|
||||||
|
|
||||||
- name: Add client
|
- name: Add client
|
||||||
run: echo "CLIENT=${{secrets.CLIENT}}"> .env.viya
|
run: echo "CLIENT=${{secrets.CLIENT}}"> .env.viya
|
||||||
|
|
||||||
- name: Add secret
|
- name: Add secret
|
||||||
run: echo "SECRET=${{secrets.SECRET}}" >> .env.viya
|
run: echo "SECRET=${{secrets.SECRET}}" >> .env.viya
|
||||||
|
|
||||||
- name: Add access token
|
- name: Add access token
|
||||||
run: echo "ACCESS_TOKEN=${{secrets.ACCESS_TOKEN}}" >> .env.viya
|
run: echo "ACCESS_TOKEN=${{secrets.ACCESS_TOKEN}}" >> .env.viya
|
||||||
|
|
||||||
- name: Add refresh token
|
- name: Add refresh token
|
||||||
run: echo "REFRESH_TOKEN=${{secrets.REFRESH_TOKEN}}" >> .env.viya
|
run: echo "REFRESH_TOKEN=${{secrets.REFRESH_TOKEN}}" >> .env.viya
|
||||||
|
|
||||||
- name: Build Project
|
- name: Build Project
|
||||||
run: npm run build
|
run: npm run build
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"hasMacroParentheses": true,
|
"hasMacroParentheses": true,
|
||||||
"noNestedMacros": false,
|
"noNestedMacros": false,
|
||||||
"noSpacesInFileNames": true,
|
"noSpacesInFileNames": true,
|
||||||
"maxLineLength": 135,
|
"maxLineLength": 230,
|
||||||
"lowerCaseFileNames": true,
|
"lowerCaseFileNames": true,
|
||||||
"noTabIndentation": true,
|
"noTabIndentation": true,
|
||||||
"indentationMultiple": 2
|
"indentationMultiple": 2
|
||||||
|
|||||||
133
all.sas
133
all.sas
@@ -67,7 +67,8 @@ options noquotelenmax;
|
|||||||
%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;
|
%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;
|
||||||
%else 1;
|
%else 1;
|
||||||
|
|
||||||
%mend;/**
|
%mend mf_existds;
|
||||||
|
/**
|
||||||
@file
|
@file
|
||||||
@brief Checks whether a feature exists
|
@brief Checks whether a feature exists
|
||||||
@details Check to see if a feature is supported in your environment.
|
@details Check to see if a feature is supported in your environment.
|
||||||
@@ -975,7 +976,8 @@ options noquotelenmax;
|
|||||||
%let rc=%sysfunc(close(&dsid));
|
%let rc=%sysfunc(close(&dsid));
|
||||||
%end;
|
%end;
|
||||||
%else %do;
|
%else %do;
|
||||||
%put unable to open &libds (rc=&dsid);
|
%put &sysmacroname: Unable to open &libds (rc=&dsid);
|
||||||
|
%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
|
||||||
%let rc=%sysfunc(close(&dsid));
|
%let rc=%sysfunc(close(&dsid));
|
||||||
%end;
|
%end;
|
||||||
&outvar
|
&outvar
|
||||||
@@ -8810,7 +8812,7 @@ Usage:
|
|||||||
@param code=(ft15f001) Space seperated fileref(s) of the actual code to be
|
@param code=(ft15f001) Space seperated fileref(s) of the actual code to be
|
||||||
added
|
added
|
||||||
@param server=(SASApp) The server which will run the STP. Server name or uri
|
@param server=(SASApp) The server which will run the STP. Server name or uri
|
||||||
is fine.
|
is fine.
|
||||||
@param mDebug=(0) set to 1 to show debug messages in the log
|
@param mDebug=(0) set to 1 to show debug messages in the log
|
||||||
@param replace=(YES) select NO to avoid replacing an existing service in that
|
@param replace=(YES) select NO to avoid replacing an existing service in that
|
||||||
location
|
location
|
||||||
@@ -9036,7 +9038,12 @@ data _null_;
|
|||||||
put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y); ';
|
put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y); ';
|
||||||
put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug ';
|
put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug ';
|
||||||
put ' sasjs_tables; ';
|
put ' sasjs_tables; ';
|
||||||
put '%local i tempds; ';
|
put '%local i tempds jsonengine; ';
|
||||||
|
put ' ';
|
||||||
|
put '/* see https://github.com/sasjs/core/issues/41 */ ';
|
||||||
|
put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON; ';
|
||||||
|
put '%else %let jsonengine=DATASTEP; ';
|
||||||
|
put ' ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put '%if &action=FETCH %then %do; ';
|
put '%if &action=FETCH %then %do; ';
|
||||||
put ' %if %str(&_debug) ge 131 %then %do; ';
|
put ' %if %str(&_debug) ge 131 %then %do; ';
|
||||||
@@ -9071,7 +9078,7 @@ data _null_;
|
|||||||
put ' OPTIONS NOBOMFILE; ';
|
put ' OPTIONS NOBOMFILE; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' /** ';
|
put ' /** ';
|
||||||
put ' * check engine type to avoid the below err message: ';
|
put ' * check xengine type to avoid the below err message: ';
|
||||||
put ' * > Function is only valid for filerefs using the CACHE access method. ';
|
put ' * > Function is only valid for filerefs using the CACHE access method. ';
|
||||||
put ' */ ';
|
put ' */ ';
|
||||||
put ' data _null_; ';
|
put ' data _null_; ';
|
||||||
@@ -9093,7 +9100,7 @@ data _null_;
|
|||||||
put ' ';
|
put ' ';
|
||||||
put '%else %if &action=ARR or &action=OBJ %then %do; ';
|
put '%else %if &action=ARR or &action=OBJ %then %do; ';
|
||||||
put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref ';
|
put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref ';
|
||||||
put ' ,engine=DATASTEP,dbg=%str(&_debug) ';
|
put ' ,engine=&jsonengine,dbg=%str(&_debug) ';
|
||||||
put ' ) ';
|
put ' ) ';
|
||||||
put '%end; ';
|
put '%end; ';
|
||||||
put '%else %if &action=CLOSE %then %do; ';
|
put '%else %if &action=CLOSE %then %do; ';
|
||||||
@@ -9106,7 +9113,7 @@ data _null_;
|
|||||||
put ' %local wtcnt;%let wtcnt=0; ';
|
put ' %local wtcnt;%let wtcnt=0; ';
|
||||||
put ' data _null_; ';
|
put ' data _null_; ';
|
||||||
put ' set &tempds; ';
|
put ' set &tempds; ';
|
||||||
put ' if not (name =:"DATA"); ';
|
put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ ';
|
||||||
put ' i+1; ';
|
put ' i+1; ';
|
||||||
put ' call symputx(''wt''!!left(i),name,''l''); ';
|
put ' call symputx(''wt''!!left(i),name,''l''); ';
|
||||||
put ' call symputx(''wtcnt'',i,''l''); ';
|
put ' call symputx(''wtcnt'',i,''l''); ';
|
||||||
@@ -9126,8 +9133,8 @@ data _null_;
|
|||||||
put ' put " ""&wt"" : {"; ';
|
put ' put " ""&wt"" : {"; ';
|
||||||
put ' put ''"nlobs":'' nlobs; ';
|
put ' put ''"nlobs":'' nlobs; ';
|
||||||
put ' put '',"nvars":'' nvars; ';
|
put ' put '',"nvars":'' nvars; ';
|
||||||
put ' %mp_jsonout(OBJ,&tempds,jref=&fref,dslabel=colattrs,engine=DATASTEP) ';
|
put ' %mp_jsonout(OBJ,&tempds,jref=&fref,dslabel=colattrs,engine=&jsonengine) ';
|
||||||
put ' %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,engine=DATASTEP) ';
|
put ' %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,engine=&jsonengine) ';
|
||||||
put ' data _null_; file &fref mod encoding=''utf-8''; ';
|
put ' data _null_; file &fref mod encoding=''utf-8''; ';
|
||||||
put ' put "}"; ';
|
put ' put "}"; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
@@ -11762,7 +11769,8 @@ filename __shake clear;
|
|||||||
put '%let mmxpass="Mars321";';
|
put '%let mmxpass="Mars321";';
|
||||||
run;
|
run;
|
||||||
|
|
||||||
filename myref "%sysfunc(pathname(work))/mmxexport.sh";
|
filename myref "%sysfunc(pathname(work))/mmxexport.sh"
|
||||||
|
permission='A::u::rwx,A::g::r-x,A::o::---';
|
||||||
%mm_spkexport(metaloc=%str(/my/meta/loc)
|
%mm_spkexport(metaloc=%str(/my/meta/loc)
|
||||||
,outref=myref
|
,outref=myref
|
||||||
,secureref=tmp
|
,secureref=tmp
|
||||||
@@ -11771,7 +11779,8 @@ filename __shake clear;
|
|||||||
|
|
||||||
Alternatively, call without inputs to create a function style output
|
Alternatively, call without inputs to create a function style output
|
||||||
|
|
||||||
filename myref "/tmp/mmscript.sh";
|
filename myref "/tmp/mmscript.sh"
|
||||||
|
permission='A::u::rwx,A::g::r-x,A::o::---';
|
||||||
%mm_spkexport(metaloc=%str(/my/meta/loc)
|
%mm_spkexport(metaloc=%str(/my/meta/loc)
|
||||||
outref=myref
|
outref=myref
|
||||||
,cmdoutloc=%str(/tmp)
|
,cmdoutloc=%str(/tmp)
|
||||||
@@ -11857,7 +11866,7 @@ run;
|
|||||||
,msg=%str(syscc=&syscc)
|
,msg=%str(syscc=&syscc)
|
||||||
)
|
)
|
||||||
|
|
||||||
%mend;/**
|
%mend mm_spkexport;/**
|
||||||
@file mm_tree.sas
|
@file mm_tree.sas
|
||||||
@brief Returns all folders / subfolder content for a particular root
|
@brief Returns all folders / subfolder content for a particular root
|
||||||
@details Shows all members and SubTrees for a particular root.
|
@details Shows all members and SubTrees for a particular root.
|
||||||
@@ -12522,7 +12531,12 @@ run;
|
|||||||
%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y);
|
%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y);
|
||||||
%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug
|
%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug
|
||||||
sasjs_tables;
|
sasjs_tables;
|
||||||
%local i tempds;
|
%local i tempds jsonengine;
|
||||||
|
|
||||||
|
/* see https://github.com/sasjs/core/issues/41 */
|
||||||
|
%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;
|
||||||
|
%else %let jsonengine=DATASTEP;
|
||||||
|
|
||||||
|
|
||||||
%if &action=FETCH %then %do;
|
%if &action=FETCH %then %do;
|
||||||
%if %str(&_debug) ge 131 %then %do;
|
%if %str(&_debug) ge 131 %then %do;
|
||||||
@@ -12557,7 +12571,7 @@ run;
|
|||||||
OPTIONS NOBOMFILE;
|
OPTIONS NOBOMFILE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check engine type to avoid the below err message:
|
* check xengine type to avoid the below err message:
|
||||||
* > Function is only valid for filerefs using the CACHE access method.
|
* > Function is only valid for filerefs using the CACHE access method.
|
||||||
*/
|
*/
|
||||||
data _null_;
|
data _null_;
|
||||||
@@ -12579,7 +12593,7 @@ run;
|
|||||||
|
|
||||||
%else %if &action=ARR or &action=OBJ %then %do;
|
%else %if &action=ARR or &action=OBJ %then %do;
|
||||||
%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref
|
%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref
|
||||||
,engine=DATASTEP,dbg=%str(&_debug)
|
,engine=&jsonengine,dbg=%str(&_debug)
|
||||||
)
|
)
|
||||||
%end;
|
%end;
|
||||||
%else %if &action=CLOSE %then %do;
|
%else %if &action=CLOSE %then %do;
|
||||||
@@ -12592,7 +12606,7 @@ run;
|
|||||||
%local wtcnt;%let wtcnt=0;
|
%local wtcnt;%let wtcnt=0;
|
||||||
data _null_;
|
data _null_;
|
||||||
set &tempds;
|
set &tempds;
|
||||||
if not (name =:"DATA");
|
if not (upcase(name) =:"DATA"); /* ignore temp datasets */
|
||||||
i+1;
|
i+1;
|
||||||
call symputx('wt'!!left(i),name,'l');
|
call symputx('wt'!!left(i),name,'l');
|
||||||
call symputx('wtcnt',i,'l');
|
call symputx('wtcnt',i,'l');
|
||||||
@@ -12612,8 +12626,8 @@ run;
|
|||||||
put " ""&wt"" : {";
|
put " ""&wt"" : {";
|
||||||
put '"nlobs":' nlobs;
|
put '"nlobs":' nlobs;
|
||||||
put ',"nvars":' nvars;
|
put ',"nvars":' nvars;
|
||||||
%mp_jsonout(OBJ,&tempds,jref=&fref,dslabel=colattrs,engine=DATASTEP)
|
%mp_jsonout(OBJ,&tempds,jref=&fref,dslabel=colattrs,engine=&jsonengine)
|
||||||
%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,engine=DATASTEP)
|
%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,engine=&jsonengine)
|
||||||
data _null_; file &fref mod encoding='utf-8';
|
data _null_; file &fref mod encoding='utf-8';
|
||||||
put "}";
|
put "}";
|
||||||
%end;
|
%end;
|
||||||
@@ -12791,8 +12805,8 @@ run;
|
|||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
%put %mfv_existfile(/does/exist.txt);
|
%put %mfv_existfile(/does/exist.txt);
|
||||||
%put %mfv_existfile(/does/not/exist.txt);
|
%put %mfv_existfile(/does/not/exist.txt);
|
||||||
|
|
||||||
@param filepath The full path to the file on SAS drive (eg /Public/myfile.txt)
|
@param filepath The full path to the file on SAS drive (eg /Public/myfile.txt)
|
||||||
|
|
||||||
@@ -12800,6 +12814,9 @@ run;
|
|||||||
@li mf_abort.sas
|
@li mf_abort.sas
|
||||||
@li mf_getuniquefileref.sas
|
@li mf_getuniquefileref.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mfv_existfolder.sas
|
||||||
|
|
||||||
@version 3.5
|
@version 3.5
|
||||||
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
||||||
**/
|
**/
|
||||||
@@ -12838,8 +12855,8 @@ run;
|
|||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
%put %mfv_existfolder(/does/exist);
|
%put %mfv_existfolder(/does/exist);
|
||||||
%put %mfv_existfolder(/does/not/exist);
|
%put %mfv_existfolder(/does/not/exist);
|
||||||
|
|
||||||
@param path The path to the folder on SAS drive
|
@param path The path to the folder on SAS drive
|
||||||
|
|
||||||
@@ -12847,6 +12864,9 @@ run;
|
|||||||
@li mf_abort.sas
|
@li mf_abort.sas
|
||||||
@li mf_getuniquefileref.sas
|
@li mf_getuniquefileref.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mfv_existfile.sas
|
||||||
|
|
||||||
@version 3.5
|
@version 3.5
|
||||||
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
||||||
**/
|
**/
|
||||||
@@ -12890,6 +12910,10 @@ run;
|
|||||||
@param [in] path= The parent folder in which to create the file
|
@param [in] path= The parent folder in which to create the file
|
||||||
@param [in] name= The name of the file to be created
|
@param [in] name= The name of the file to be created
|
||||||
@param [in] inref= The fileref pointing to the file to be uploaded
|
@param [in] inref= The fileref pointing to the file to be uploaded
|
||||||
|
@param [in] contentdisp= (inline) Content Disposition. Example values:
|
||||||
|
@li inline
|
||||||
|
@li attachment
|
||||||
|
|
||||||
@param [in] access_token_var= The global macro variable to contain the access
|
@param [in] access_token_var= The global macro variable to contain the access
|
||||||
token, if using authorization_code grant type.
|
token, if using authorization_code grant type.
|
||||||
@param [in] grant_type= (sas_services) Valid values are:
|
@param [in] grant_type= (sas_services) Valid values are:
|
||||||
@@ -12914,6 +12938,7 @@ run;
|
|||||||
%macro mv_createfile(path=
|
%macro mv_createfile(path=
|
||||||
,name=
|
,name=
|
||||||
,inref=
|
,inref=
|
||||||
|
,contentdisp=inline
|
||||||
,access_token_var=ACCESS_TOKEN
|
,access_token_var=ACCESS_TOKEN
|
||||||
,grant_type=sas_services
|
,grant_type=sas_services
|
||||||
,mdebug=0
|
,mdebug=0
|
||||||
@@ -12961,12 +12986,24 @@ run;
|
|||||||
/* create file with relevant options */
|
/* create file with relevant options */
|
||||||
%local fref;
|
%local fref;
|
||||||
%let fref=%mf_getuniquefileref();
|
%let fref=%mf_getuniquefileref();
|
||||||
filename &fref filesrvc folderPath="&path" filename="&name";
|
filename &fref filesrvc
|
||||||
|
folderPath="&path"
|
||||||
|
filename="&name"
|
||||||
|
cdisp="&contentdisp"
|
||||||
|
lrecl=1048544;
|
||||||
|
|
||||||
%mp_binarycopy(inref=&inref, outref=&fref)
|
%mp_binarycopy(inref=&inref, outref=&fref)
|
||||||
|
|
||||||
filename &fref clear;
|
filename &fref clear;
|
||||||
|
|
||||||
|
%local base_uri; /* location of rest apis */
|
||||||
|
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
||||||
|
|
||||||
|
%put &sysmacroname: File &name successfully created in &path;
|
||||||
|
%put &sysmacroname:;%put;
|
||||||
|
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
|
||||||
|
%put &sysmacroname:;
|
||||||
|
|
||||||
%mend mv_createfile;/**
|
%mend mv_createfile;/**
|
||||||
@file mv_createfolder.sas
|
@file mv_createfolder.sas
|
||||||
@brief Creates a viya folder if that folder does not already exist
|
@brief Creates a viya folder if that folder does not already exist
|
||||||
@@ -13389,6 +13426,30 @@ run;
|
|||||||
rc =fput(fileid,'\');rc =fwrite(fileid);
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
rc =fput(fileid,'\');rc =fwrite(fileid);
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
end;
|
end;
|
||||||
|
else if rec='01'x then do; /* Unprintable */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'1');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
|
else if rec='07'x then do; /* Bell Char */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'7');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
|
else if rec='1B'x then do; /* escape char */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'1');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'B');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
else do;
|
else do;
|
||||||
rc =fput(fileid,rec);
|
rc =fput(fileid,rec);
|
||||||
rc =fwrite(fileid);
|
rc =fwrite(fileid);
|
||||||
@@ -14008,8 +14069,9 @@ data _null_;
|
|||||||
put ' ods output Members=&tempds; ';
|
put ' ods output Members=&tempds; ';
|
||||||
put ' proc datasets library=WORK memtype=data; ';
|
put ' proc datasets library=WORK memtype=data; ';
|
||||||
put ' %local wtcnt;%let wtcnt=0; ';
|
put ' %local wtcnt;%let wtcnt=0; ';
|
||||||
put ' data _null_; set &tempds; ';
|
put ' data _null_; ';
|
||||||
put ' if not (name =:"DATA"); ';
|
put ' set &tempds; ';
|
||||||
|
put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ ';
|
||||||
put ' i+1; ';
|
put ' i+1; ';
|
||||||
put ' call symputx(''wt''!!left(i),name); ';
|
put ' call symputx(''wt''!!left(i),name); ';
|
||||||
put ' call symputx(''wtcnt'',i); ';
|
put ' call symputx(''wtcnt'',i); ';
|
||||||
@@ -14133,6 +14195,22 @@ run;
|
|||||||
rc =fput(fileid,'0');rc =fwrite(fileid);
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
rc =fput(fileid,'1');rc =fwrite(fileid);
|
rc =fput(fileid,'1');rc =fwrite(fileid);
|
||||||
end;
|
end;
|
||||||
|
else if rec='07'x then do; /* Bell Char */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'7');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
|
else if rec='1B'x then do; /* escape char */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'1');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'B');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
else do;
|
else do;
|
||||||
rc =fput(fileid,rec);
|
rc =fput(fileid,rec);
|
||||||
rc =fwrite(fileid);
|
rc =fwrite(fileid);
|
||||||
@@ -17808,8 +17886,9 @@ filename &fref1 clear;
|
|||||||
ods output Members=&tempds;
|
ods output Members=&tempds;
|
||||||
proc datasets library=WORK memtype=data;
|
proc datasets library=WORK memtype=data;
|
||||||
%local wtcnt;%let wtcnt=0;
|
%local wtcnt;%let wtcnt=0;
|
||||||
data _null_; set &tempds;
|
data _null_;
|
||||||
if not (name =:"DATA");
|
set &tempds;
|
||||||
|
if not (upcase(name) =:"DATA"); /* ignore temp datasets */
|
||||||
i+1;
|
i+1;
|
||||||
call symputx('wt'!!left(i),name);
|
call symputx('wt'!!left(i),name);
|
||||||
call symputx('wtcnt',i);
|
call symputx('wtcnt',i);
|
||||||
|
|||||||
@@ -23,4 +23,4 @@
|
|||||||
%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;
|
%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;
|
||||||
%else 1;
|
%else 1;
|
||||||
|
|
||||||
%mend;
|
%mend mf_existds;
|
||||||
|
|||||||
@@ -66,7 +66,8 @@
|
|||||||
%let rc=%sysfunc(close(&dsid));
|
%let rc=%sysfunc(close(&dsid));
|
||||||
%end;
|
%end;
|
||||||
%else %do;
|
%else %do;
|
||||||
%put unable to open &libds (rc=&dsid);
|
%put &sysmacroname: Unable to open &libds (rc=&dsid);
|
||||||
|
%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
|
||||||
%let rc=%sysfunc(close(&dsid));
|
%let rc=%sysfunc(close(&dsid));
|
||||||
%end;
|
%end;
|
||||||
&outvar
|
&outvar
|
||||||
|
|||||||
7
main.dox
7
main.dox
@@ -42,6 +42,13 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*! \dir Tests
|
||||||
|
* \brief SASjs Tests
|
||||||
|
* \details These folders contain the macro tests. They are first compiled
|
||||||
|
and deployed (sasjs cbd) then executed (sasjs test).
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
/*! \dir viya
|
/*! \dir viya
|
||||||
* \brief Viya macros
|
* \brief Viya macros
|
||||||
* \details These macros have the following attributes:
|
* \details These macros have the following attributes:
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ Usage:
|
|||||||
@param code=(ft15f001) Space seperated fileref(s) of the actual code to be
|
@param code=(ft15f001) Space seperated fileref(s) of the actual code to be
|
||||||
added
|
added
|
||||||
@param server=(SASApp) The server which will run the STP. Server name or uri
|
@param server=(SASApp) The server which will run the STP. Server name or uri
|
||||||
is fine.
|
is fine.
|
||||||
@param mDebug=(0) set to 1 to show debug messages in the log
|
@param mDebug=(0) set to 1 to show debug messages in the log
|
||||||
@param replace=(YES) select NO to avoid replacing an existing service in that
|
@param replace=(YES) select NO to avoid replacing an existing service in that
|
||||||
location
|
location
|
||||||
@@ -266,7 +266,12 @@ data _null_;
|
|||||||
put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y); ';
|
put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y); ';
|
||||||
put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug ';
|
put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug ';
|
||||||
put ' sasjs_tables; ';
|
put ' sasjs_tables; ';
|
||||||
put '%local i tempds; ';
|
put '%local i tempds jsonengine; ';
|
||||||
|
put ' ';
|
||||||
|
put '/* see https://github.com/sasjs/core/issues/41 */ ';
|
||||||
|
put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON; ';
|
||||||
|
put '%else %let jsonengine=DATASTEP; ';
|
||||||
|
put ' ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put '%if &action=FETCH %then %do; ';
|
put '%if &action=FETCH %then %do; ';
|
||||||
put ' %if %str(&_debug) ge 131 %then %do; ';
|
put ' %if %str(&_debug) ge 131 %then %do; ';
|
||||||
@@ -301,7 +306,7 @@ data _null_;
|
|||||||
put ' OPTIONS NOBOMFILE; ';
|
put ' OPTIONS NOBOMFILE; ';
|
||||||
put ' ';
|
put ' ';
|
||||||
put ' /** ';
|
put ' /** ';
|
||||||
put ' * check engine type to avoid the below err message: ';
|
put ' * check xengine type to avoid the below err message: ';
|
||||||
put ' * > Function is only valid for filerefs using the CACHE access method. ';
|
put ' * > Function is only valid for filerefs using the CACHE access method. ';
|
||||||
put ' */ ';
|
put ' */ ';
|
||||||
put ' data _null_; ';
|
put ' data _null_; ';
|
||||||
@@ -323,7 +328,7 @@ data _null_;
|
|||||||
put ' ';
|
put ' ';
|
||||||
put '%else %if &action=ARR or &action=OBJ %then %do; ';
|
put '%else %if &action=ARR or &action=OBJ %then %do; ';
|
||||||
put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref ';
|
put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref ';
|
||||||
put ' ,engine=DATASTEP,dbg=%str(&_debug) ';
|
put ' ,engine=&jsonengine,dbg=%str(&_debug) ';
|
||||||
put ' ) ';
|
put ' ) ';
|
||||||
put '%end; ';
|
put '%end; ';
|
||||||
put '%else %if &action=CLOSE %then %do; ';
|
put '%else %if &action=CLOSE %then %do; ';
|
||||||
@@ -336,7 +341,7 @@ data _null_;
|
|||||||
put ' %local wtcnt;%let wtcnt=0; ';
|
put ' %local wtcnt;%let wtcnt=0; ';
|
||||||
put ' data _null_; ';
|
put ' data _null_; ';
|
||||||
put ' set &tempds; ';
|
put ' set &tempds; ';
|
||||||
put ' if not (name =:"DATA"); ';
|
put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ ';
|
||||||
put ' i+1; ';
|
put ' i+1; ';
|
||||||
put ' call symputx(''wt''!!left(i),name,''l''); ';
|
put ' call symputx(''wt''!!left(i),name,''l''); ';
|
||||||
put ' call symputx(''wtcnt'',i,''l''); ';
|
put ' call symputx(''wtcnt'',i,''l''); ';
|
||||||
@@ -356,8 +361,8 @@ data _null_;
|
|||||||
put ' put " ""&wt"" : {"; ';
|
put ' put " ""&wt"" : {"; ';
|
||||||
put ' put ''"nlobs":'' nlobs; ';
|
put ' put ''"nlobs":'' nlobs; ';
|
||||||
put ' put '',"nvars":'' nvars; ';
|
put ' put '',"nvars":'' nvars; ';
|
||||||
put ' %mp_jsonout(OBJ,&tempds,jref=&fref,dslabel=colattrs,engine=DATASTEP) ';
|
put ' %mp_jsonout(OBJ,&tempds,jref=&fref,dslabel=colattrs,engine=&jsonengine) ';
|
||||||
put ' %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,engine=DATASTEP) ';
|
put ' %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,engine=&jsonengine) ';
|
||||||
put ' data _null_; file &fref mod encoding=''utf-8''; ';
|
put ' data _null_; file &fref mod encoding=''utf-8''; ';
|
||||||
put ' put "}"; ';
|
put ' put "}"; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
|
|||||||
@@ -24,7 +24,8 @@
|
|||||||
put '%let mmxpass="Mars321";';
|
put '%let mmxpass="Mars321";';
|
||||||
run;
|
run;
|
||||||
|
|
||||||
filename myref "%sysfunc(pathname(work))/mmxexport.sh";
|
filename myref "%sysfunc(pathname(work))/mmxexport.sh"
|
||||||
|
permission='A::u::rwx,A::g::r-x,A::o::---';
|
||||||
%mm_spkexport(metaloc=%str(/my/meta/loc)
|
%mm_spkexport(metaloc=%str(/my/meta/loc)
|
||||||
,outref=myref
|
,outref=myref
|
||||||
,secureref=tmp
|
,secureref=tmp
|
||||||
@@ -33,7 +34,8 @@
|
|||||||
|
|
||||||
Alternatively, call without inputs to create a function style output
|
Alternatively, call without inputs to create a function style output
|
||||||
|
|
||||||
filename myref "/tmp/mmscript.sh";
|
filename myref "/tmp/mmscript.sh"
|
||||||
|
permission='A::u::rwx,A::g::r-x,A::o::---';
|
||||||
%mm_spkexport(metaloc=%str(/my/meta/loc)
|
%mm_spkexport(metaloc=%str(/my/meta/loc)
|
||||||
outref=myref
|
outref=myref
|
||||||
,cmdoutloc=%str(/tmp)
|
,cmdoutloc=%str(/tmp)
|
||||||
@@ -119,4 +121,4 @@ run;
|
|||||||
,msg=%str(syscc=&syscc)
|
,msg=%str(syscc=&syscc)
|
||||||
)
|
)
|
||||||
|
|
||||||
%mend;
|
%mend mm_spkexport;
|
||||||
@@ -36,7 +36,12 @@
|
|||||||
%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y);
|
%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y);
|
||||||
%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug
|
%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug
|
||||||
sasjs_tables;
|
sasjs_tables;
|
||||||
%local i tempds;
|
%local i tempds jsonengine;
|
||||||
|
|
||||||
|
/* see https://github.com/sasjs/core/issues/41 */
|
||||||
|
%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;
|
||||||
|
%else %let jsonengine=DATASTEP;
|
||||||
|
|
||||||
|
|
||||||
%if &action=FETCH %then %do;
|
%if &action=FETCH %then %do;
|
||||||
%if %str(&_debug) ge 131 %then %do;
|
%if %str(&_debug) ge 131 %then %do;
|
||||||
@@ -71,7 +76,7 @@
|
|||||||
OPTIONS NOBOMFILE;
|
OPTIONS NOBOMFILE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check engine type to avoid the below err message:
|
* check xengine type to avoid the below err message:
|
||||||
* > Function is only valid for filerefs using the CACHE access method.
|
* > Function is only valid for filerefs using the CACHE access method.
|
||||||
*/
|
*/
|
||||||
data _null_;
|
data _null_;
|
||||||
@@ -93,7 +98,7 @@
|
|||||||
|
|
||||||
%else %if &action=ARR or &action=OBJ %then %do;
|
%else %if &action=ARR or &action=OBJ %then %do;
|
||||||
%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref
|
%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref
|
||||||
,engine=DATASTEP,dbg=%str(&_debug)
|
,engine=&jsonengine,dbg=%str(&_debug)
|
||||||
)
|
)
|
||||||
%end;
|
%end;
|
||||||
%else %if &action=CLOSE %then %do;
|
%else %if &action=CLOSE %then %do;
|
||||||
@@ -106,7 +111,7 @@
|
|||||||
%local wtcnt;%let wtcnt=0;
|
%local wtcnt;%let wtcnt=0;
|
||||||
data _null_;
|
data _null_;
|
||||||
set &tempds;
|
set &tempds;
|
||||||
if not (name =:"DATA");
|
if not (upcase(name) =:"DATA"); /* ignore temp datasets */
|
||||||
i+1;
|
i+1;
|
||||||
call symputx('wt'!!left(i),name,'l');
|
call symputx('wt'!!left(i),name,'l');
|
||||||
call symputx('wtcnt',i,'l');
|
call symputx('wtcnt',i,'l');
|
||||||
@@ -126,8 +131,8 @@
|
|||||||
put " ""&wt"" : {";
|
put " ""&wt"" : {";
|
||||||
put '"nlobs":' nlobs;
|
put '"nlobs":' nlobs;
|
||||||
put ',"nvars":' nvars;
|
put ',"nvars":' nvars;
|
||||||
%mp_jsonout(OBJ,&tempds,jref=&fref,dslabel=colattrs,engine=DATASTEP)
|
%mp_jsonout(OBJ,&tempds,jref=&fref,dslabel=colattrs,engine=&jsonengine)
|
||||||
%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,engine=DATASTEP)
|
%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,engine=&jsonengine)
|
||||||
data _null_; file &fref mod encoding='utf-8';
|
data _null_; file &fref mod encoding='utf-8';
|
||||||
put "}";
|
put "}";
|
||||||
%end;
|
%end;
|
||||||
|
|||||||
2417
package-lock.json
generated
2417
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -33,7 +33,6 @@
|
|||||||
"postinstall": "[ -d .git ] && git config core.hooksPath ./.git-hooks || true"
|
"postinstall": "[ -d .git ] && git config core.hooksPath ./.git-hooks || true"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@sasjs/cli": "^2.22.2"
|
"@sasjs/cli": "^2.27.0"
|
||||||
},
|
}
|
||||||
"dependencies": {}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,13 +30,16 @@
|
|||||||
"name": "viya",
|
"name": "viya",
|
||||||
"serverUrl": "https://sas.analytium.co.uk",
|
"serverUrl": "https://sas.analytium.co.uk",
|
||||||
"serverType": "SASVIYA",
|
"serverType": "SASVIYA",
|
||||||
|
"allowInsecureRequests": false,
|
||||||
"appLoc": "/Public/temp/macrocore",
|
"appLoc": "/Public/temp/macrocore",
|
||||||
"deployConfig": {
|
|
||||||
"deployServicePack": true
|
|
||||||
},
|
|
||||||
"macroFolders": [
|
"macroFolders": [
|
||||||
"tests/viya"
|
"tests/viya"
|
||||||
],
|
],
|
||||||
|
"programFolders": [],
|
||||||
|
"deployConfig": {
|
||||||
|
"deployServicePack": true,
|
||||||
|
"deployScripts": []
|
||||||
|
},
|
||||||
"contextName": "SAS Job Execution compute context"
|
"contextName": "SAS Job Execution compute context"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
%put %mfv_existfile(/does/exist.txt);
|
%put %mfv_existfile(/does/exist.txt);
|
||||||
%put %mfv_existfile(/does/not/exist.txt);
|
%put %mfv_existfile(/does/not/exist.txt);
|
||||||
|
|
||||||
@param filepath The full path to the file on SAS drive (eg /Public/myfile.txt)
|
@param filepath The full path to the file on SAS drive (eg /Public/myfile.txt)
|
||||||
|
|
||||||
@@ -18,6 +18,9 @@
|
|||||||
@li mf_abort.sas
|
@li mf_abort.sas
|
||||||
@li mf_getuniquefileref.sas
|
@li mf_getuniquefileref.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mfv_existfolder.sas
|
||||||
|
|
||||||
@version 3.5
|
@version 3.5
|
||||||
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
||||||
**/
|
**/
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
%put %mfv_existfolder(/does/exist);
|
%put %mfv_existfolder(/does/exist);
|
||||||
%put %mfv_existfolder(/does/not/exist);
|
%put %mfv_existfolder(/does/not/exist);
|
||||||
|
|
||||||
@param path The path to the folder on SAS drive
|
@param path The path to the folder on SAS drive
|
||||||
|
|
||||||
@@ -18,6 +18,9 @@
|
|||||||
@li mf_abort.sas
|
@li mf_abort.sas
|
||||||
@li mf_getuniquefileref.sas
|
@li mf_getuniquefileref.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mfv_existfile.sas
|
||||||
|
|
||||||
@version 3.5
|
@version 3.5
|
||||||
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
||||||
**/
|
**/
|
||||||
|
|||||||
@@ -17,6 +17,10 @@
|
|||||||
@param [in] path= The parent folder in which to create the file
|
@param [in] path= The parent folder in which to create the file
|
||||||
@param [in] name= The name of the file to be created
|
@param [in] name= The name of the file to be created
|
||||||
@param [in] inref= The fileref pointing to the file to be uploaded
|
@param [in] inref= The fileref pointing to the file to be uploaded
|
||||||
|
@param [in] contentdisp= (inline) Content Disposition. Example values:
|
||||||
|
@li inline
|
||||||
|
@li attachment
|
||||||
|
|
||||||
@param [in] access_token_var= The global macro variable to contain the access
|
@param [in] access_token_var= The global macro variable to contain the access
|
||||||
token, if using authorization_code grant type.
|
token, if using authorization_code grant type.
|
||||||
@param [in] grant_type= (sas_services) Valid values are:
|
@param [in] grant_type= (sas_services) Valid values are:
|
||||||
@@ -41,6 +45,7 @@
|
|||||||
%macro mv_createfile(path=
|
%macro mv_createfile(path=
|
||||||
,name=
|
,name=
|
||||||
,inref=
|
,inref=
|
||||||
|
,contentdisp=inline
|
||||||
,access_token_var=ACCESS_TOKEN
|
,access_token_var=ACCESS_TOKEN
|
||||||
,grant_type=sas_services
|
,grant_type=sas_services
|
||||||
,mdebug=0
|
,mdebug=0
|
||||||
@@ -88,10 +93,22 @@
|
|||||||
/* create file with relevant options */
|
/* create file with relevant options */
|
||||||
%local fref;
|
%local fref;
|
||||||
%let fref=%mf_getuniquefileref();
|
%let fref=%mf_getuniquefileref();
|
||||||
filename &fref filesrvc folderPath="&path" filename="&name";
|
filename &fref filesrvc
|
||||||
|
folderPath="&path"
|
||||||
|
filename="&name"
|
||||||
|
cdisp="&contentdisp"
|
||||||
|
lrecl=1048544;
|
||||||
|
|
||||||
%mp_binarycopy(inref=&inref, outref=&fref)
|
%mp_binarycopy(inref=&inref, outref=&fref)
|
||||||
|
|
||||||
filename &fref clear;
|
filename &fref clear;
|
||||||
|
|
||||||
|
%local base_uri; /* location of rest apis */
|
||||||
|
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
||||||
|
|
||||||
|
%put &sysmacroname: File &name successfully created in &path;
|
||||||
|
%put &sysmacroname:;%put;
|
||||||
|
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
|
||||||
|
%put &sysmacroname:;
|
||||||
|
|
||||||
%mend mv_createfile;
|
%mend mv_createfile;
|
||||||
@@ -237,6 +237,30 @@ run;
|
|||||||
rc =fput(fileid,'\');rc =fwrite(fileid);
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
rc =fput(fileid,'\');rc =fwrite(fileid);
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
end;
|
end;
|
||||||
|
else if rec='01'x then do; /* Unprintable */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'1');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
|
else if rec='07'x then do; /* Bell Char */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'7');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
|
else if rec='1B'x then do; /* escape char */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'1');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'B');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
else do;
|
else do;
|
||||||
rc =fput(fileid,rec);
|
rc =fput(fileid,rec);
|
||||||
rc =fwrite(fileid);
|
rc =fwrite(fileid);
|
||||||
|
|||||||
@@ -549,8 +549,9 @@ data _null_;
|
|||||||
put ' ods output Members=&tempds; ';
|
put ' ods output Members=&tempds; ';
|
||||||
put ' proc datasets library=WORK memtype=data; ';
|
put ' proc datasets library=WORK memtype=data; ';
|
||||||
put ' %local wtcnt;%let wtcnt=0; ';
|
put ' %local wtcnt;%let wtcnt=0; ';
|
||||||
put ' data _null_; set &tempds; ';
|
put ' data _null_; ';
|
||||||
put ' if not (name =:"DATA"); ';
|
put ' set &tempds; ';
|
||||||
|
put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ ';
|
||||||
put ' i+1; ';
|
put ' i+1; ';
|
||||||
put ' call symputx(''wt''!!left(i),name); ';
|
put ' call symputx(''wt''!!left(i),name); ';
|
||||||
put ' call symputx(''wtcnt'',i); ';
|
put ' call symputx(''wtcnt'',i); ';
|
||||||
@@ -674,6 +675,22 @@ run;
|
|||||||
rc =fput(fileid,'0');rc =fwrite(fileid);
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
rc =fput(fileid,'1');rc =fwrite(fileid);
|
rc =fput(fileid,'1');rc =fwrite(fileid);
|
||||||
end;
|
end;
|
||||||
|
else if rec='07'x then do; /* Bell Char */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'7');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
|
else if rec='1B'x then do; /* escape char */
|
||||||
|
rc =fput(fileid,'\');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'u');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'0');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'1');rc =fwrite(fileid);
|
||||||
|
rc =fput(fileid,'B');rc =fwrite(fileid);
|
||||||
|
end;
|
||||||
else do;
|
else do;
|
||||||
rc =fput(fileid,rec);
|
rc =fput(fileid,rec);
|
||||||
rc =fwrite(fileid);
|
rc =fwrite(fileid);
|
||||||
|
|||||||
@@ -174,8 +174,9 @@
|
|||||||
ods output Members=&tempds;
|
ods output Members=&tempds;
|
||||||
proc datasets library=WORK memtype=data;
|
proc datasets library=WORK memtype=data;
|
||||||
%local wtcnt;%let wtcnt=0;
|
%local wtcnt;%let wtcnt=0;
|
||||||
data _null_; set &tempds;
|
data _null_;
|
||||||
if not (name =:"DATA");
|
set &tempds;
|
||||||
|
if not (upcase(name) =:"DATA"); /* ignore temp datasets */
|
||||||
i+1;
|
i+1;
|
||||||
call symputx('wt'!!left(i),name);
|
call symputx('wt'!!left(i),name);
|
||||||
call symputx('wtcnt',i);
|
call symputx('wtcnt',i);
|
||||||
|
|||||||
Reference in New Issue
Block a user