BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
_Dan_
Quartz | Level 8

Hi,

 

I've found a code snippet online to get most of what I require in regards to Report.BI Metadata properties, however, the code to get ResponsibleParty information was answered elsewhere in a separate context, and I can't cobble together the two pieces of code.

 

My issue is understanding how to utilise the metadata_getnasncommand and whether it's right to do so within the getnobj loop. The query does return two usernames based on my ask, but, it can return those 1...2...even 7 times over. Same record, just many duplicates. 

 

Does anyone know (specifically regarding ResponsibleParties) how I obtain the creator/last modified names and dates, please?

 

 

data MDIDs (drop=_: label="SAS VA Report List");
  length id $17 _uri name _name _modified _created location _location createdby modifiedby name person $256; 
  length created modified 8; 
  format created modified datetime19.;
  _nobj=1; 
  _n=1; 
  call missing(id, _uri, _uri2, name, role, person, createdby, modifiedby, _name, _modified, _created, _location);

  do while(_n le _nobj);
    _nobj=metadata_getnobj("omsobj:Transformation?@PublicType = 'Report.BI'",_n,_uri);
    _rc=metadata_getattr(_uri,"Id",id);
    _rc=metadata_getattr(_uri,"Name",_name);
    _rc=metadata_getattr(_uri,"MetadataCreated",_created);
    _rc=metadata_getattr(_uri,"MetadataUpdated",_modified);

	created=input(_created,anydtdtm.);
    modified=input(_modified,anydtdtm.);
	name=translate(translate(translate(translate(_name,"-","–"),"£","£"),"%","%"),"+","+");

	/*	Get creator / last modified. Doesn't work properly.	*/
	passn=metadata_getnasn(_uri,"ResponsibleParties",1,Respuri);
	_rc=metadata_getattr(Respuri, "Name", CreatedBy);
	output;
	passn=metadata_getnasn(_uri,"ResponsibleParties",2,Respuri);
	_rc=metadata_getattr(Respuri, "Name", ModifiedBy);
	output;

	* Get folder object the current Report is in *;
    _rc=metadata_getnasn(_uri,"Trees",1,_uri);
    * Get folder name the current Report 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;

 

1 ACCEPTED SOLUTION

Accepted Solutions
_Dan_
Quartz | Level 8

I've resolved this myself by using a working version of another piece of code (used for obtaining DI Job information) and injecting the same ResponsibleParty functions, which now works in this context.

 

data MDIDs;
	length Server_Uri rp_uri Metadata_ID Name _Name TypeName Path Location _Location MetadataCreated MetadataUpdated CreatedBy ModifiedBy $256;
 	length Created Modified 8.;
  	format Created Modified datetime19.;
   	nobj = 1;
    n=1;
    call missing(Metadata_ID, _Name, MetadataCreated, MetadataUpdated, Created, Modified, TypeName, Path, Server_Uri, _location, CreatedBy, ModifiedBy);
 
    do while(n le nobj);
		nobj=metadata_getnobj("omsobj:Transformation?@PublicType = 'Report.BI'",n,Server_Uri);
		rc=metadata_getattr(Server_Uri,'Id',Metadata_ID);
		rc=metadata_getattr(Server_Uri,'Name',_Name);
		rc=metadata_getattr(Server_Uri,"MetadataCreated",MetadataCreated);
		rc=metadata_getattr(Server_Uri,"MetadataUpdated",MetadataUpdated);
		name=translate(translate(translate(translate(_name,"-","–"),"£","£"),"%","%"),"+","+");
		Created=input(MetadataCreated,anydtdtm.);
		Modified=input(MetadataUpdated,anydtdtm.);
		rc=metadata_getattr(Server_Uri,"PublicType",TypeName);
		numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",1,rp_uri);
		if numrp>0 then do;
			numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",1,rp_uri);
			rc=metadata_getattr(rp_uri,"name",CreatedBy);
			numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",2,rp_uri);
			rc=metadata_getattr(rp_uri,"name",ModifiedBy);
		end;

		TreesCount=metadata_getnasn(Server_Uri,"Trees",1,Server_Uri);
		rc=metadata_getattr(Server_Uri,"Name",Path);
		_tree=1;
		do while (_tree>0);
			_tree=metadata_getnasn(Server_Uri,"ParentTree",1,Server_Uri);
			if _tree > 0 then do;
				_rc=metadata_getattr(Server_Uri,"Name",_location);
				Path=catx('/',_location,Path);
			end;
		end;

		Location = '/'||Path;
		output;
		n=n+1;
	end;

	keep Metadata_ID Name TypeName Location Created Modified CreatedBy ModifiedBy;

run;

View solution in original post

1 REPLY 1
_Dan_
Quartz | Level 8

I've resolved this myself by using a working version of another piece of code (used for obtaining DI Job information) and injecting the same ResponsibleParty functions, which now works in this context.

 

data MDIDs;
	length Server_Uri rp_uri Metadata_ID Name _Name TypeName Path Location _Location MetadataCreated MetadataUpdated CreatedBy ModifiedBy $256;
 	length Created Modified 8.;
  	format Created Modified datetime19.;
   	nobj = 1;
    n=1;
    call missing(Metadata_ID, _Name, MetadataCreated, MetadataUpdated, Created, Modified, TypeName, Path, Server_Uri, _location, CreatedBy, ModifiedBy);
 
    do while(n le nobj);
		nobj=metadata_getnobj("omsobj:Transformation?@PublicType = 'Report.BI'",n,Server_Uri);
		rc=metadata_getattr(Server_Uri,'Id',Metadata_ID);
		rc=metadata_getattr(Server_Uri,'Name',_Name);
		rc=metadata_getattr(Server_Uri,"MetadataCreated",MetadataCreated);
		rc=metadata_getattr(Server_Uri,"MetadataUpdated",MetadataUpdated);
		name=translate(translate(translate(translate(_name,"-","–"),"£","£"),"%","%"),"+","+");
		Created=input(MetadataCreated,anydtdtm.);
		Modified=input(MetadataUpdated,anydtdtm.);
		rc=metadata_getattr(Server_Uri,"PublicType",TypeName);
		numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",1,rp_uri);
		if numrp>0 then do;
			numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",1,rp_uri);
			rc=metadata_getattr(rp_uri,"name",CreatedBy);
			numrp=metadata_getnasn(Server_Uri,"ResponsibleParties",2,rp_uri);
			rc=metadata_getattr(rp_uri,"name",ModifiedBy);
		end;

		TreesCount=metadata_getnasn(Server_Uri,"Trees",1,Server_Uri);
		rc=metadata_getattr(Server_Uri,"Name",Path);
		_tree=1;
		do while (_tree>0);
			_tree=metadata_getnasn(Server_Uri,"ParentTree",1,Server_Uri);
			if _tree > 0 then do;
				_rc=metadata_getattr(Server_Uri,"Name",_location);
				Path=catx('/',_location,Path);
			end;
		end;

		Location = '/'||Path;
		output;
		n=n+1;
	end;

	keep Metadata_ID Name TypeName Location Created Modified CreatedBy ModifiedBy;

run;

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 1 reply
  • 480 views
  • 0 likes
  • 1 in conversation