Pregunta

I am working in a configuration that uses the IOM to connect to the metadata server - hence there are no automatic macro variables in my environment to determine the user id (we are using a pooled workspace server with a generic host account).

Is there a short piece of code which can be used to query the metadata server for the SAS user id?

¿Fue útil?

Solución

The following is quite long winded, and could probably be shortened - but it does the job!

data _null_;
call symput('login_id',''); /* initialise to missing */
n = 1;
length loginUri person $ 512;
nobj = metadata_getnobj("omsobj:Login?*",n, loginUri);
if (nobj>0) then do;
    length __uri __objName __porig personUri $256;
    __porig = loginUri;
    __uri = '';
    __objName = '';
    __n = 1;
    __objectFound = 0;
    personUri = "";
    __numObjs = metadata_getnasn(__porig ,"AssociatedIdentity", 1, __uri);
    do until(__n > __numObjs | __objectFound );
        __rc = metadata_getattr(__uri, "PublicType", __objName);
        if __objName="User" then do;
            __rc=metadata_getattr(__uri, "Name", __objName);
            __objectFound = 1;
            personUri = __uri;
        end;
        else do;
            __n = __n+1;
            rc = metadata_getnasn(__porig, "AssociatedIdentity", __n, __uri);
        end;
    end;
    if upcase("N")="Y" and not __objectFound then do;
        put "*ERROR*: Object with  PublicType=" "User" " not found for parent " loginUri " under AssociatedIdentity association";
        stop;
    end;
    ;
    rc = metadata_getattr(personUri, "Name", person);
    call symput("login_id", trim(person));
end;
run;
%put &login_id;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top