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*/

      

+3


source to share


2 answers


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.

+4


source


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

0


source







All Articles