【问题标题】:Fetch user id from SAS metadata server从 SAS 元数据服务器获取用户 ID
【发布时间】:2016-09-13 23:43:21
【问题描述】:

我正在使用 IOM 连接到元数据服务器的配置中工作 - 因此我的环境中没有自动宏变量来确定用户 ID(我们正在使用具有通用主机帐户的池化工作区服务器)。

是否有一小段代码可用于在元数据服务器中查询 SAS 用户 ID?

【问题讨论】:

    标签: sas sas-metadata


    【解决方案1】:

    以下内容相当冗长,可能会缩短 - 但它确实有效!

    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;
    

    【讨论】:

    • 一个小的调整可能是在数据步骤的顶部添加一个call symput 以将宏变量“login_id”设置为空白。除非您出于某种原因确实需要该数据集S,否则我会使用data _null_。无论如何看起来都不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多