2012-11-16 56 views
1

我正在使用IOM連接到元數據服務器的配置中工作 - 因此在我的環境中沒有自動宏變量來確定用戶ID(我們正在使用池工作區服務器與通用主機帳戶)。從SAS元數據服務器獲取用戶ID

是否有一段代碼可用於查詢SAS用戶標識的元數據服務器?

回答

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; 
+1

小調整可能是在數據步驟的頂部添加一個'call symput',將宏變量「login_id」設置爲空。除非由於某種原因你真的需要數據集'S',否則我會使用'data_null_'。無論如何看起來不錯。 – BellevueBob

+0

相應編輯 - 謝謝 –

0

我不知道它有多短......但這link重點查詢元數據。