mirror of
https://github.com/sasjs/core.git
synced 2025-12-10 22:14:35 +00:00
116 lines
2.6 KiB
SAS
116 lines
2.6 KiB
SAS
/**
|
|
@file
|
|
@brief Update the TextStore in a Document with the same name
|
|
@details Enables arbitrary content to be stored in a document object
|
|
|
|
Usage:
|
|
|
|
%mm_updatedocument(path=/my/metadata/path
|
|
,name=docname
|
|
,text="/file/system/some.txt")
|
|
|
|
|
|
@param path= the BIP Tree folder path
|
|
@param name=Document Name
|
|
@param text=a source file containing the text to be added
|
|
|
|
@param frefin= change default inref if it clashes with an existing one
|
|
@param frefout= change default outref if it clashes with an existing one
|
|
@param mDebug= set to 1 to show debug messages in the log
|
|
|
|
@version 9.3
|
|
@author Allan Bowe
|
|
|
|
**/
|
|
|
|
%macro mm_updatedocument(path=
|
|
,name=
|
|
,text=
|
|
,frefin=inmeta
|
|
,frefout=outmeta
|
|
,mdebug=0
|
|
);
|
|
/* first, check if STP exists */
|
|
%local tsuri;
|
|
%let tsuri=stopifempty ;
|
|
|
|
data _null_;
|
|
format type uri tsuri value $200.;
|
|
call missing (of _all_);
|
|
path="&path/&name(Note)";
|
|
/* first, find the STP ID */
|
|
if metadata_pathobj("",path,"Note",type,uri)>0 then do;
|
|
/* get sourcetext */
|
|
cnt=1;
|
|
do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);
|
|
rc=metadata_getattr(tsuri,"Name",value);
|
|
put tsuri= value=;
|
|
if value="&name" then do;
|
|
/* found it! */
|
|
rc=metadata_getattr(tsuri,"Id",value);
|
|
call symputx('tsuri',value,'l');
|
|
stop;
|
|
end;
|
|
cnt+1;
|
|
end;
|
|
end;
|
|
else put (_all_)(=);
|
|
run;
|
|
|
|
%if &tsuri=stopifempty %then %do;
|
|
%put %str(WARN)ING: &path/&name.(Document) not found!;
|
|
%return;
|
|
%end;
|
|
|
|
%if %length(&text)<2 %then %do;
|
|
%put %str(WARN)ING: No text supplied!!;
|
|
%return;
|
|
%end;
|
|
|
|
filename &frefin temp recfm=n;
|
|
|
|
/* escape code so it can be stored as XML */
|
|
/* input file may be over 32k wide, so deal with one char at a time */
|
|
data _null_;
|
|
file &frefin recfm=n;
|
|
infile &text recfm=n;
|
|
input instr $CHAR1. ;
|
|
if _n_=1 then put "<UpdateMetadata><Reposid>$METAREPOSITORY</Reposid>
|
|
<Metadata><TextStore id='&tsuri' StoredText='" @@;
|
|
select (instr);
|
|
when ('&') put '&';
|
|
when ('<') put '<';
|
|
when ('>') put '>';
|
|
when ("'") put ''';
|
|
when ('"') put '"';
|
|
when ('0A'x) put '
';
|
|
when ('0D'x) put '
';
|
|
when ('$') put '$';
|
|
otherwise put instr $CHAR1.;
|
|
end;
|
|
run;
|
|
|
|
data _null_;
|
|
file &frefin mod;
|
|
put "'></TextStore></Metadata><NS>SAS</NS><Flags>268435456</Flags>
|
|
</UpdateMetadata>";
|
|
run;
|
|
|
|
|
|
filename &frefout temp;
|
|
|
|
proc metadata in= &frefin
|
|
%if &mdebug=1 %then 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;
|
|
|
|
%mend; |