How do I get the id of a stored process?
I have multiple stored processes with the same name. To determine which process is currently running, I need to know the id of the stored process in the metadata. Can I find the STP ID somewhere? I couldn't find the variable containing the ID. I just found symget ('sysjobid'); which returns unix-processid, not the id of the saved process.
A typical stored process ID looks like this: A5DF0R0G.B80001L7
I need to know the id from the running process in order to get some properties of the process from the metadata.
Any other solution for identifying a process exactly in the metadata would also be welcome, but I cannot use its name because it can happen multiple times for different processes.
for example something like:
put 'name:' &_program; /*this already works and returns the name of the stored process*/
put 'id:' ?; /*need to know the id of the process, because name is not distinct*/
source to share
It's actually pretty easy when I look at it.
I created this STP sample (named "Doms Hello World") in my folder.
data _temp;
X = "HELLO WORLD";
path = "&_PROGRAM";
format type ID $200.;
rc= metadata_pathobj("",path,"StoredProcess",type,ID);
run;
proc print data=_temp noobs;
run;
You can use a function metadata_pathobj()
to get the ID and TYPE of an item along a path.
This returns
X path type ID rc
HELLO WORLD /User Folders/dpazzula/My Folder/Doms Hello World ClassifierMap A5XQ9K3Z.BA0002BQ 1
Both in EG and via the web app.
source to share
I don't think the saved process has an ID, but it is unique in terms of its location and name.
User variable _PROGRAM to determine which stored procedure to execute. It will be in the format "/ SAS Folder / Stored Procedure Folder / Stored Procedure Name".
Something like A5DF0R0G.B80001L7 ID of a stored procedure useful when running IOM applications, but I don't think it would be helpful when it comes to determining which stored procedure created something and where it was stored at the time, so I will come with "_PROGRAM".
If you don't care after the ID, use this code (credit: https://support.selerity.com.au/entries/23169736-Example-Data-Step-View-of-Stored-Procedures-in-Metadata ):
******************************************************************************
* Purpose: Create a dynamic view of Stored Procedures registered in Metadata
* Notes : You must establish a Metadata connection prior to running
******************************************************************************;
data work.stplist(drop=_: label="SAS Stored Process List") / view=work.stplist;
length id $17 _uri name description _modified _created location _location $256;
length created modified 8;
format created modified datetime.;
label id="Metadata ID"
name="Stored Process Name"
description="Description"
location="Folder Location"
created="Created"
modified="Last Modified";
_nobj=1;
_n=1;
call missing(id, _uri, name, description, _modified, _created, _location);
do while(_n le _nobj);
_nobj=metadata_getnobj("omsobj:ClassifierMap?@PublicType='StoredProcess'",_n,_uri);
_rc=metadata_getattr(_uri,"Id",id);
_rc=metadata_getattr(_uri,"Name",name);
_rc=metadata_getattr(_uri,"Desc",description);
_rc=metadata_getattr(_uri,"MetadataCreated",_created);
_rc=metadata_getattr(_uri,"MetadataUpdated",_modified);
created=input(_created,anydtdtm.);
modified=input(_modified,anydtdtm.);
* Get folder object the current STP is in *;
_rc=metadata_getnasn(_uri,"Trees",1,_uri);
* Get folder name the current STP is in *;
_rc=metadata_getattr(_uri,"Name",location);
_tree=1;
* Loop up the folder hierarchy *;
do while (_tree>0);
* Get the parent folder object *;
_tree=metadata_getnasn(_uri,"ParentTree",1,_uri);
if _tree > 0 then do;
* If there was a parent folder, get the name *;
_rc=metadata_getattr(_uri,"Name",_location);
* Construct the path *;
location=catx('/',_location,location);
end;
end; * Folder Hierachy *;
location = '/'||location;
output;
_n=_n+1;
end;
run;
Regards, Vasilij
source to share