Software/BI

OBIEE 12c NQ_SESSION 변수 저장 및 사용하기

juhpark 2022. 3. 29. 22:54

사원코드, 부점코드 등의 변수를 NQ_SESSION에 저장할 수 있다. 저장된 NQ_SESSION 변수는 보고서 조회시 조회 조건으로 사용이 가능하며 권한 등을 적용할 수 있게 할수도 있다. SSO를 통해 다른 시스템에서 넘겨진 특정 변수(사원번호, 부점코드 등)를 로그인 하는 시점에 obiee 12c 관리 화면에 있는  SQL실행 기능과 NQSSetSessionValue() 함수를 사용하여 원하는 변수를 NQ_SESSION에 담는 방법을 소개한다.

 

[1] SQL실행하는 화면을 javascript 에서 호출하여 NQSSetSessionValue() 함수 호출

관리 기능 중 SQL 실행 메뉴를 클릭하면 SQL을 실행할 수 있는 창이 있는데, javascript를 활용하여 NQSSetSessionValue() 를 호출하여 NQ_SESSION에 원하는 데이터를 저장한다.

위 화면을 열게 되면 화면 소스에  _scid 값을 가지고 있는데, SQL실행이 이 값을 변수로 넘겨줘야 쿼리가 제대로 실행된다. 그래서, 위 페이지의 html 소스에서 _scid값을 조회하고 그값을 SQL과 같이 변수로 넘기면, NQ_SESSION이 잘 저장된다.

 

[2] 자바스크립트 소스 작성

아래 소스의 create_param()함수를 호출하면 {URL} 화면의 HTML소스에서 _scid 값을 가져와서 save_session()함수에서 _scid와 NQSSetSessionValue() 함수를 호출하여 NQ_SESSION변수에 저장한다.

function getRequestObject(){
  var options = [
    function(){ return new XMLHttpRequest() },
    function(){ return new ActiveXObject("Microsoft.XMLHTTP") },
    function(){ return new ActiveXObject("Msxml2.XMLHTTP.6.0") }
  ];
  for(var i=0, il = options.length; i < il; i++){
    try{ return options[i]() } catch(e) {}
  }
}
var url = "issue sql url";
function create_param(){
  var xhr = getRequestObject();  if(!xhr){ alert("ERROR"); return; }
  xhr.onreadystatechange = function(){
    if(xhr.readyState ==4 && xhr.status==200){
      var data= xhr.responseText;
      idx = data.indexOf("_scid")+7;
      _scid = data.substring(idx, idx+100).split("\"")[0];      
      save_session(_scid); // _scid 넘긴다.
    }
  }
  xhr.open("POST", url);
  xhr.send();
}

function save_session(_scid){
  var param = '<%=session_param%>'.split(" ").join("+").split("=").join("%3D").split(";").join("%3B");
  var sql_param = "call+NQSSetSessionValue%28%27"+param+"%27%29";
  var s_url= url + "&_scid="+ _scid+"&SQL="+sql_param+"&LoggingLevel=&UseCache=no";
  var xhr = getRequestObject();
  if(!xhr){ alert("ERROR"); return; }
  xhr.onreadystatechange = function(){
    if(xhr.readyState ==4 && xhr.status==200){  
      goURL('<%=portal_url%>'); // 원하는 URL로 이동
    }
  }
  xhr.open("POST", s_url);
  xhr.send();
}

 

저장된 NQ_SESSION변수는 administration tool 프로그램의 메뉴>세션 창에서 확인이 가능하다.

 

변수 유형의 "세션 비시스템" 변수들이 NQ_SESSION변수에 저장되는 것들로 보고서에서 참조할때는 VALUEOF(NQ_SESSION.{변수명}) 이런식으로 참조해서 사용이 가능하다.