Page No.
| Showpageid |
|---|
작성자 : / 검수자 :
Launch Release No. 7.3.500.20250722 / Latest Release No.
※ 주의 : 외부 포탈 임베디드(Div)방식의 SSO연동을 적용하기 위해 '1-0.공통 설정' 과정을 선행으로 설정해야 함
− 개요 : 외부 포탈에 CORS 연동으로 AUD보고서 임베디드 기능 적용
이 같은 설정으로 적용 시에 AUD플랫폼에서 제공하는 모든 기능을 사용 가능 (top , parent 등의 접근이 가능)
| 목차 | ||||||||
|---|---|---|---|---|---|---|---|---|
|
− 제약 사항
> 기본적으로 AP 토큰이 쿠키에 공유되어 사용되기 때문에 외부 PORTAL (타 사이트 포탈) 과 AUD7 플랫폼 PORTAL의 Domain name이 동일해야 된다.
> 외부 POTAL에서는 발급된 AP 인증 토큰이 정상적으로 브라우저 Cookie에 bimatrix_ap_accessToken으로 설정되어 있는지 확인이 필요하다.
| Easy Heading Macro | ||
|---|---|---|
|
1. 샘플 코드(sitePortalAUD7EmSample.jsp) 설정
1-1)
SSH KEY인증 정보 설정
1-1-1) audSecretKey, audApId 설정
> Admin 시스템 운영관리 > 인증 키 관리 > SSH Key 생성
(※ 주의 : '인증 키 관리' 페이지가 보이지 않을 경우 '관리자메뉴 설정' 페이지에서 인증 키 관리 페이지를 사용 체크하여 저장한 후 새로고침 하여 접근 할 수 있음)
> Application 아이디 값을 설정하고 Secret Key와 private_key.pem을 다운로드
> SSH Key정보를 sitePortalAUD7EmSample.jsp에 설정
SSH Key정보를 sitePortalAUD7EmSample.jsp에 설정
< 그림 2-1. 샘플 코드 인증 정보 설정 캡처 1 >
1-1-2) privateKey 설정 - 고객사 포탈 서버에 private_key.pem을 저장하고 경로를 지정
> loadPrivateKey 메서드 매개변수에 '인증 키 관리' 페이지에서 등록이 완료되면 발급되는 private_key.pem 파일의 위치를 설정
< 그림 2-2. 샘플 코드 인증 정보 설정 캡처 2 >
1-2) 인증 대상 유저 코드 설정
1-2-1) userCode 설정
> 실제 사이트에서 인증 시켜야 할 계정 값을 설정
(※ 주의 : 아래 샘플 코드엔 matrix로 고정된 값으로 구현했지만, 실제 구현 시 userCode는 유동적으로 변경하여 인증 과정을 실행해야 함)
< 그림 2-3. 샘플 코드 인증 정보 설정 캡처 3 >
1-3) 토큰 요청 URL 및 도메인 설정
1-3-1) AUD_AP_TOKEN_URL 설정
> AUD플랫폼 경로 설정 (Ex. "http(s)://[IP:PORT+Context Root]/api/auth/sign/ap/token")
(※ 주의 : 서버 통신 방식이기 때문에 IP:PORT를 통해 AUD플랫폼 Portal접속이 가능하면 설정하고, 도메인 URL통신만 가능하다면 해당 서버에서 도메인 통신 확인 후 진행)
< 그림 2-4. 샘플 코드 인증 정보 설정 캡처 4 >
| 정보 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||
- AUD 플랫폼에 등록한 Application용 클라이언트 아이디와 클라이언트 시크릿를 인증 정보로 설정하여 Application 인증 JWT 토큰 발급
|
1-3-2) AUD_AP_TOKEN_UPDATE_URL 설정
> 쿠키에 발급한 aud 인증 jwt 토큰을 공유하기 위한 도메인 설정.
(※ 참고 : 서브 도메인 허용)
< 그림 2-5. 샘플 코드 인증 정보 설정 캡처 5 >
1-4) AUD보고서를 임베디드 할 때 적용시킬 AUD Server설정
1-4-1) AUD_SERVER_URL 설정
> i-AUD 보고서를 임베디드 할 때 적용시킬 AUD플랫폼 소스 서버 URL 설정
< 그림 2-6. 샘플 코드 인증 정보 설정 캡처 6 >
1-4-2) webRoot 설정
> AUD플랫폼 서버 webRoot 경로 > 고객사 포탈 인베디드 소스가 위치한 경로를 설정
< 그림 2-7. 샘플 코드 인증 정보 설정 캡처 7 >
2. i-AUD 보고서
iFrameDiv 임베디드 방법
> autoOpenReport 함수를 사용하여 'AUDview'라는 div에 AUD 보고서를 i-AUD보고서를 임베디드 함
> autoOpenReport 함수 내부 initAndLoad 함수에 보고서 코드와 div 값을 지정하여 사용
< 그림 2-8. 샘플 코드 보고서 호출부 캡처 >
| 코드 블럭 | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.IOException"%> <%@ page import="java.net.HttpURLConnection"%> <%@ page import="java.net.MalformedURLException"%> <%@ page import="java.net.URL"%> <%@ page import="java.nio.file.Files"%> <%@ page import="java.nio.file.Paths"%> <%@ page import="java.security.KeyFactory"%> <%@ page import="java.security.PrivateKey"%> <%@ page import="java.security.Signature" %> <%@ page import="java.security.spec.PKCS8EncodedKeySpec" %> <%@ page import="java.util.Base64" %> <%@ page import="java.util.EnumerationHashMap" %> <%@ page import="java.util.HashMapMap" %> <%@ page import="java.utillang.Map*" %> <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, user-scalable=no"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Expires" content="0"> <style> * { margin: 0; } .top_panel { position: absolute; width: 100%; height: 50px; background-color: black; } .left_panel { position: absolute; width: 250px; background-color: darkgrey; } .foot_panel { position: absolute; bottom: 0; /* 화면의 맨 아래에 위치 */ left: 0; /* 왼쪽 끝에서 시작 */ width: 100%; height: 10px; background-color: pink; } .HideFrame { left: -50000px; top: -50000px; position: absolute; } .VisibleFrame { float: left; position: relative; overflow: hidden; left: 0px; top: 0px; width: 100%; height: 100%; } #AUDview{ position: absolute; width: 100%; height: 450px !important; overflow: auto; } #vieweraud{ position: absolute; width: 100%; height: 450px !important; overflow: auto; top: 450px; } #audChart{ position: absolute; left: 100%; height: 450px !important; overflow: auto; top: 450px; } </style> <%! // 개인 키 로딩 private static PrivateKey loadPrivateKey(String path) throws Exception { // 개인 키 로딩 로직을 구현 (파일 파싱 또는 다른 방법으로) System.out.println("Private Key path: " + path); String keyPEM = new String(Files.readAllBytes(Paths.get(path))) .replaceAll("-----BEGIN PRIVATE KEY-----", "") .replaceAll("-----END PRIVATE KEY-----", "") .replaceAll("\\s", ""); // 모든 공백 제거 byte[] keyBytes = Base64.getDecoder().decode(keyPEM); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); return keyFactory.generatePrivate(keySpec); } // 메시지 서명 private static String signMessage(String message, PrivateKey privateKey) throws Exception { Signature signature = Signature.getInstance("SHA256withRSA"); signature.initSign(privateKey); signature.update(message.getBytes()); byte[] signedBytes = signature.sign(); return Base64.getEncoder().encodeToString(signedBytes); } %> <% response.setHeader("Pragma","no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); request.setCharacterEncoding("UTF-8"); /** * 가이드 url : https://audp.bimatrix.co.kr/pages/viewpage.action?pageId=112038656112038659 * * 샘플 자바 소스를 확인하여 AUD7 플랫폼용 토큰 발행 API를 호출한다. jsp 에서 처리하는 부분을 서버 영역에서 처리하여 호출하는 방식 추천 * Application 인증용 id와 시크릿 key 는 AUD7 플랫폼 관리자를 통해 발급 받는다. * 연동할 Application 서버에서는 기본 open ssh를 통해 ssh 공개키.개인키를 생성한 후 공개키를 aud7 플랫폼에 등록한다. * ssh-keygen -t rsa -b 4096 -C "aud7-common" **/ String audSecretKey = "3E5D25E826E94D84B5907F2D8A52563B"; String audApId = "matrix"; /** 실제 인증시켜야 할 계정 . audApId로 처리해도 무방할 경우에 따로 설정 안해도 상관 없습니다. 단 , 설정한 id는 AUd7 플랫폼 내에 User List에 등록되어 있는 id로 설정 */ String userCode = "matrix"; // 서버 통신 방식이기때문에 ip:port를 통해 AUD7 플랫폼 Portal 접속이 가능하면 설정하고 도메인 url 통신만 가능하다면 해당 서버에서 도메인 통신 확인 후 진행. String AUD_AP_TOKEN_URL = "http://[AUD플랫폼 서비스 도메인]/api/auth/sign/ap/token"; // 쿠키에 발급한 aud 인증 jwt 토큰을 공유하기 위한 도메인 설정. String AUD_AP_TOKEN_UPDATE_URL = ".bimatrix.com"; HttpURLConnection connectionString AUD_SERVER_URL = null"http://[AUD플랫폼 서비스 도메인]"; String apTokenwebRoot = null"/matrix"; StringHttpURLConnection apAccessTokenconnection = null; intString responseCodeapToken = 0null; try{ if ((audApId == null || audApId.isEmpty()) || (audSecretKey == null || audSecretKey.isEmpty())){ out.print("AUD 플랫폼에서 application 인증을 위한 id와 시크릿 키에 대한 정보가 없습니다."); return; } // aud7 플랫폼에서 발급받은 secret key를 ssh의 private key로 서명하여 전달한다. PrivateKey privateKey = loadPrivateKey("/ssh_key/private_key.pem"); // aud7 secret key 서명 생성 String signedMessage = signMessage(audSecretKey, privateKey); // header 설정은 아래처럼 해주세요. Map<String, String> requestHeaders = new HashMap(); requestHeaders.put("X-AUD-AP-Id", audApId); requestHeaders.put("X-AUD-AP-Secret-SSH", signedMessage); requestHeaders.put("X-AP-UPDATE-ADDR" , AUD_AP_TOKEN_UPDATE_URL); if (userCode != null || !userCode.isEmpty()) requestHeaders.put("X-AUD-USER" , userCode); try{ // URL 객체 생성 URL url = new URL(AUD_AP_TOKEN_URL); connection = (HttpURLConnection) url.openConnection(); }catch(MalformedURLException e){ out.print("AUD 플랫폼 주소가 잘못되었습니다."); return; }catch(IOException e){ out.print("연결이 실패했습니다 [api url:"+ AUD_AP_TOKEN_URL +"]"); return; } // HTTP 메서드 설정 connection.setRequestMethod("POST"); for(Map.Entry<String, String> header :requestHeaders.entrySet()) { connection.setRequestProperty(header.getKey(), header.getValue()); } // 응답 코드 확인 int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK){ String apAccessToken = connection.getHeaderField("bimatrix_ap_accessToken"); if (apAccessToken == null){ out.printlnprint("ap token이 정상적으로 발급되지 않았습니다"); out.println(responseCode); out.println(HttpURLConnection.HTTP_OK); return; } else{ apToken = apAccessToken; } }else if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED){ out.print("만료된 ap token 입니다."); return ; } }catch(Exception e){ e.printStackTrace(); }finally { if (connection != null) { connection.disconnect(); } } %> Map<String, String> data = new HashMap(); Enumeration<?> paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String key = (String) paramNames.nextElement(); if(key.toUpperCase().indexOf("VS_")==0 || key.toUpperCase().indexOf("VN_")==0 || key.toUpperCase().indexOf("V_")==0) { String value = request.getParameter(key); data.put(key , value); } } StringBuilder json = new StringBuilder(); json.append("{"); for (Map.Entry<String, String> entry : data.entrySet()) { json.append("\"").append(entry.getKey()).append("\": \"") .append(entry.getValue()).append("\", "); } // 마지막 쉼표 제거 if (data.size() > 0) json.setLength(json.length() - 2); json.append("}"); %> <script type="text/javascript" src="./jquery-3.6.0.min.js"></script> <!-- i-AUD 보고서를 임베디드 할 때 적용시킬 AUD7 플랫폼용 소스 import --> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/AUD/500/js/lib/audframework/debug/bimatrix.lib.audframework.js?v=202410181608"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/AUD/500/js/lib/audframework/debug/bimatrix.module.audframework.js?v=202410181608"></script> <!-- RSA 암호화 library START --> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/AUD/500/js/lib/rsa/jsbn.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/AUD/500/js/lib/rsa/prng4.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/AUD/500/js/lib/rsa/rng.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/AUD/500/js/lib/rsa/rsa.js"></script> <!-- RSA 암호화 library END --> <link rel="stylesheet" type="text/css" href="<%=AUD_SERVER_URL%>/AUD/500/theme/skin-default/ko/css/bimatrix.module.audframework.css?v=202410181608"> <link rel="stylesheet" type="text/css" href="<%=AUD_SERVER_URL%>/AUD/500/theme/skin-default/ko/css/ion.rangeSlider.css"> <link rel="stylesheet" type="text/css" href="<%=AUD_SERVER_URL%>/extention/AUD/bimatrix.custom.audframework.css"> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/extention/AUD/customscript.jsp"></script> <!-- i-AUD 보고서 버튼 영역을 표현할 때 적용시킬 AUD7 플랫폼용 소스 import --> <link rel="stylesheet" type="text/css" href="<%=webRoot%>/aud/imatrix_header.css" /> <script type="text/javascript" src="./<%=AUD_SERVER_URL%>/portal/js/jquery-3.6.0.min.js" flush="false"> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/Base64.js"></script> <!-- aud7 embedded setting jsp file path --> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/jquery.portal.common.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/jquery.cookie.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/authorityCheck_em.jsp"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/portal./aud/aud.embedded.settingmessage.jsp"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/portal.option.data.jsp"></script> <script type="text/javascript"> </script> </head> <body> <script> var biServerUrl = AUD_CONFIG_DATA.bimatrix_server_url; var webRoot = AUD_CONFIG_DATA.webRoot; var apAccessToken = '<%=apAccessToken%>'; var responseCode = '<%=responseCode%>'; src="<%=AUD_SERVER_URL%>/portal/js/portal.content.top.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/matrix.script.comm.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/matrix.script.content.em.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/portal.content.bookmark.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/portal.content.condition.js"></script> <script type="text/javascript" src="<%=AUD_SERVER_URL%>/extention/portal/customscript.jsp"></script> <!-- i-AUD 보고서를 임베디드 할 때 init 설정 --> <script type="text/javascript"> var AUD7_PATH = "<%=AUD_SERVER_URL%>/AUD/500"; var AUD7_SETTING_PATH = "<%=AUD_SERVER_URL%>/AUD/500"; var SHARE_DOMAIN = "<%=AUD_AP_TOKEN_UPDATE_URL%>"; var gvWebRootName = "<%=AUD_SERVER_URL%>"; var reportInfo ; // i-Meta 용 변수 var rName ; var folderCode ; var description ; var moduleCode ; var TemplateCode ; var timeoutID = undefined; var dataSetFileCnt = 0; var dsPromptFilterItems = []; </script> </head> <body> <script> window.onload = function() { console.log("onload"); // 맨 처음 로딩 시 또는 외부 포탈 로그인 시에 발급받은 AUD 플랫폼 AP token을 쿠키에 설정 또는 전역 변수로 가지고 있어 매번 url 호출 시 전달 if ('<%=apToken%>' == null) { alert ("aud7 auth token is null .."); return; } setCookie('bimatrix_ap_accessToken', '<%=apToken%>', 1); winResizer// 인증 자동 연장 aud7UpdateSession(); openReport("REPA0C74823A2F24AD980BA19538CF4C494", true , "SD"// 리사이징 winResizer(); setGlobalParams('<%=json.toString()%>')autoOpenReport(); } /** * resize 함수 호출 시 i-AUD 보고서를 리사이징 시킬 때 추가해줘야 할 함수 **/ window.addEventListener('resize', function(event){ winResizer(); AUD.GetMainViewer().ViewerSizeChanged(); }); var winResizer = function(){ console.log('winResizer==='); var win_w = $(window).eq(0).outerWidth(); var win_h = $(window).eq(0).outerHeight(); var top_panel_height = $('.top_panel').outerHeight(); var left_panel_width = $('.left_panel').outerWidth(); var foot_panel_height = $('.foot_panel').outerHeight(); $('.left_panel').css('height', win_h - top_panel_height); $('.left_panel').css('top', top_panel_height); $('.main_group').css('height', win_h - top_panel_height - foot_panel_height); $('.main_group').css('top', top_panel_height); $('.main_group').css('left', left_panel_width); $('.main_group').css('width', win_w - left_panel_width); // i-AUD 보고서 영역의 title 및 버튼 영역에 대한 resize const iframe1 = document.querySelector('#REPORT_AUD'); iframe1.contentWindow.postMessage('resize', '*')var title_panel_height = $('.titlebg').outerHeight(); var isHidden = $('.titlebg').css("display") === "none"; if (isHidden){ title_panel_height = 0; } else{ settingReportTitleWidth(); } $('.view_panel').css('height', win_h); $('.view_panel').css('width', win_w ); $('#AUDview').css('height', win_h - title_panel_height); } var setCookie = function (cookie_name, value, days) { deleteCookie(cookie_name); var exdate = new Date(); exdate.setDate(exdate.getDate() + days); // 설정 일수만큼 현재시간에 만료값으로 지정 var cookie_value = escape(value) + ((days == null) ? '' : '; expires=' + exdate.toUTCString() + ';path=/;domain='+AUD_CONFIG_DATA.cookie_domainSHARE_DOMAIN); document.cookie = cookie_name + '=' + cookie_value; } function deleteCookie(name) { document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain='+AUD_CONFIG_DATA.cookie_domainSHARE_DOMAIN; } function gfnGetCookie(key) { const cookies = document.cookie.split(';'); for (let cookie of cookies) { cookie = cookie.trim(); // 쿠키 이름이 일치하는지 확인 if (cookie.startsWith(key + '=')) { return cookie.substring((key + '=').length); } } return null; } //var 보고서updateSessionStop; 오픈시에 var 사용하는aud7UpdateSession 로직 ========================================== var gvModule = ""; var AUD_VIEWER = null; var openReport = function(code , isTileShow , moduleCode){ // AUD7 인증 확인 if (aud7AuthCheck()){ // VS_ , VN_에 대한 전역변수 Parameter 설정 var PARAM_ARR = []; var frm = $('#frm'); $.each(AUD_CONFIG_DATA.global_params, function(key, val function () { var extend_time = 60; //60 sec try { extend_time = parseInt(GFN_OPTION.SESSION_EXTEND_TIMEOUT) || 60; } catch (ex) { } var xmlhttp = null; if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest(); else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { var isStop = xmlhttp.responseText; if (isStop.trim() == 'stop') { frm console.appendlog('<input type="hidden" id="'+key+'" name= "'+key+'" value="'+val+'" />'== embedded AUD7 UpdateSession stop ===") clearTimeout(updateSessionStop); PARAM_ARR.push({'KEY':key, 'VALUE':val}); }); switch(moduleCode) { case "SD": // i-aud case "SX": var REPORT_AUD = $('#REPORT_AUD')[0].contentWindow; AUD_VIEWER = $('#REPORT_AUD console.log("aud7 bimatrix_ap_accessToken Reissue....") window.location.reload(); } } } } xmlhttp.open("POST", "<%=AUD_SERVER_URL%>/Common/updateSession.jsp", true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlhttp.withCredentials = true; xmlhttp.send(""); updateSessionStop = window.setTimeout("aud7UpdateSession()", 1000 * extend_time); } /** * viewer에서 title 버튼 영역 리사이징 **/ function settingReportTitleWidth() { if($('.titlebg').css('display') != 'none') { var title_el = $('#titlebg_main'); var okDisposetitle_toparea_el = fnDisposeAudViewer$(REPORT_AUD'#titlebg_main .topbtn_area'); if(okDispose) {var title_bullet_el = $('#titlebg_main .title_bullet'); // 기존 i-AUD iframe 재사용 //PARAM_ARR.push('VS_TEST=파라메터전달Test'if(!title_el.length || !title_vline_el.length || !title_toparea_el.length || !title_bullet_el.length) return; var titlebg_w = title_el.outerWidth(); REPORT_AUD.AUD.SetCustomParams(PARAM_ARRvar title_topbtn_w = title_toparea_el.outerWidth(true); REPORT_AUD.fnOpen(code , isTileShow , moduleCode); fnSetViewerStatus(moduleCodevar title_reportName_w = titlebg_w - (title_topbtn_w); title_bullet_el.css('width', title_reportName_w); }else{ // i-AUD 최초 실행 fnPurgeIFRAME(AUD_VIEWER).then(function(){ AUD_VIEWER = $('<iframe id="REPORT_AUD" name="REPORT_AUD" width="100%" height="100%" frameborder="0" scrolling="no" class="HideFrame" ></iframe>'); var parent = $('.main_group'} async function autoOpenReport() { await initAndLoad("REPA0C74823A2F24AD980BA19538CF4C494", "AUDview"); // await initAndLoad("REP21FCDAC4BE4B48B78CF60248F4965D8B", "vieweraud"); // await initAndLoad("REP4CC5632318614DA6AFE308556D95C90C", "audChart"); } function initAndLoad(reportCode, divId) { return new Promise((resolve) => { // 전역 변수 오염 방지 let callback = function () { AUD.SetFileDialogCallback(); AUD.LoadDocument(divId, reportCode, 2); parent.append(AUD_VIEWER resolve(); // 다음 순서로 진행 }; frm.attr// 보고서에서 사용할 VS_ , VN_ 전역 변수가 존재하면 설정한다. var PARAM_ARR = []; PARAM_ARR.push({'targetKEY':'REPORTVS_AUDTEST', 'actionVALUE':webRoot+'/aud/iaud_main.jsp'VS_TEST1_VAL'}); AUD.SetCustomParams(PARAM_ARR); frm.append('<input type="hidden" id="audServerUrl" name="audServerUrl" value="' + AUD_CONFIG_DATA.bimatrix_server_url + '" />'); frm.append('<input type="hidden" id="webRoot" name="webRoot" value="' + webRoot + '" />'); frm.append('<input type="hidden" id="id" name="id" value="' + code + '" />'); frm.append('<input type="hidden" id="isTitle" name="isTitle" value="' + isTileShow + '" />'); frm.append('<input type="hidden" id="mCode" name="mCode" value="' + moduleCode + '" />'); //frm.append('<input type="hidden" id="VS_TEST" name="VS_TEST" value="파라메터전달TEST" />'); frm.submit(); fnSetViewerStatus(moduleCode); }); } break; } $('.main_group').removeClass('SiteHideFrame').addClass('SiteVisibleFrame'); } } // 보고서별 iframe에 대한 화면 표시 여부 전환 상태 업데이트용 var fnSetViewerStatus = function(module){ if (module == "SD" || module == "SX"){ // i-AUD 보고서 if(typeof(AUD_VIEWER) != "undefined" && AUD_VIEWER != null) { AUD_VIEWER.removeClass('HideFrame').addClass('VisibleFrame'); } } } var fnPurgeIFRAME = function($frame) { var deferred = $.Deferred(); $frame.on("load", function(){ var frame = this; frame.contentWindow.document.innerHTML = ''; $frame.remove(); deferred.resolve(); }); $frame.attr('src', 'about:blank'); return deferred.promise(); } // i-AUD 제품 보고서 오픈 시, iframe에 남아있는 viewer dispose var fnDisposeAudViewer = function(VIEWER) { // i-AUD 제품 체크 if(typeof VIEWER.AUD == "function") { var audViewer = VIEWER.AUD.GetMainViewer(); if(audViewer && typeof audViewer.Dispose == "function") { try { audViewer.Dispose(); return true; } catch(e) { console.log("i-aud viewer dispose error - " + e.message); return false; } } } return false; }; // ================================================================================================ function openPopReport(reportCode){ var winWidth = $( window ).width() - 100; var winHeight = $( window ).height() - 100 ; if (reportCode) { window.open(biServerUrl + "/portal/popupView.jsp?id=" + reportCode, "reportPop", "width=" + winWidth + ",height=" + winHeight + ",resizable=yes"); } else { window.open(biServerUrl + "/portal/Content.jsp", "reportPop", "width=" + winWidth + ",height=" + winHeight + ",resizable=yes"); } } // 토큰에 대한 인증 확인 if (reportCode != ""){ reportInfo = GFN_AUTHORITY.searchReportInfo(reportCode); rName = reportInfo.name; folderCode = reportInfo.option.FolderCode; description = reportInfo.desc; } GFN_AUTHORITY.USER_AUTH_INFO(); $('.titlebg').css('display','none'); AUD.Init(callback); // 비동기 초기화 }); } /** * i-AUD 보고서 오픈 **/ var fnOpen = function(_reportCode , isShow , _moduleCode){ reportCode = _reportCode; moduleCode = _moduleCode; // 보고서에서 사용할 VS_ , VN_ 전역 변수가 존재하면 설정한다. var PARAM_ARR = []; PARAM_ARR.push({'KEY':'VS_TEST', 'VALUE':'VS_TEST1_VAL'}); AUD.SetCustomParams(PARAM_ARR); if (reportCode != ""){ reportInfo = GFN_AUTHORITY.searchReportInfo(reportCode); rName = reportInfo.name; folderCode = reportInfo.option.FolderCode; description = reportInfo.desc; } GFN_AUTHORITY.USER_AUTH_INFO(); if (isShow){ var btn_type = ""; if (GFN_OPTION.OP04_VIEW_BTN=='TEXT') btn_type = "text_type"; else if(GFN_OPTION.OP04_VIEW_BTN=='IMAGE') btn_type = "img_type"; $('.topbtn_group').option_top('view_btn', {'btn_type': btn_type, 'callbackFn': settingTitle, 'embedded':true}); }else{ $('.titlebg').css('display','none'); } if (moduleCode == 'SD') AUD.Init(AudOpenReport); else if (moduleCode == 'SX'){ AUD.ShellModuleCode = "SX"; AUD.Init(MetaOpenReport); } } /** * i-AUD 보고서 오픈에 필요한 Init용 함수. * AUD.LoadDocument ('div id명' , 보고서코드 , 2) ; **/ var AudOpenReport = function() { AUD.SetFileDialogCallback(); AUD.LoadDocument('AUDview', reportCode, 2); } /** * i-Meta 보고서 오픈에 필요한 Init용 함수. **/ var MetaOpenReport = function() { AUD.MetaViewManager.IsMetaFileView = true; AUD.SetFileDialogCallback(); //let reportCode = moduleCode == "M0" ? TemplateCode : id; let metaReportInfo = { META_CODE: reportCode, NAME: rName, DESC: description, PARENT: folderCode, TYPE: moduleCode }; AUD.mViewerId = 'AUDview'; AUD.LoadMetaDocument(AUD.mViewerId, reportCode, metaReportInfo); } var OpenReport = function() { AUD.fnShowDialog(1); }; var ShowMeta = function(_templateCode, callback, isHidden) { AUD.ShowMeta(_templateCode || TemplateCode, callback, isHidden); }; var fnExportEx = function() { var viewer = AUD.GetMainViewer(); if (!viewer.MetaDataSourceManager.TemplateMetaData || !viewer.MetaDataSourceManager.TemplateMetaData.LayoutXML) { // 데이타 가져오기 창이 떠 있는 경우에 refresh 버튼 누른 경우 if (AUD.MetaWizardManager.DialogWindow) { AUD.MessageBox.Warning(AUD.Trans('COM0168'), AUD.Trans('Message.Title.Warning')); } else { // 배치 정보가 잘못되었습니다. AUD.MessageBox.Warning(AUD.Trans('COM0164'), AUD.Trans('Message.Title.Warning')); } return; } AUD.ExcelExportManager.InitExport(); }; var CallExtensionMethod = function(args){ var scriptFrame = document.getElementById('iStudioViewer'); if(scriptFrame != undefined && typeof scriptFrame.contentWindow[args.FuncName] == "function"){ // 템플릿 재로드 scriptFrame.contentWindow[args.FuncName](args); } } var settingTitle = function() { $('.titlebg').css('display',''); setReportInfo(reportInfo.code, reportInfo.name, reportInfo.desc, reportInfo.module, reportInfo.path, "", {'FolderCode':reportInfo.option.FolderCode}); menuVisible(reportInfo.code, reportInfo.module, {'AuthNo': reportInfo.option.AuthNo}, false); var disableBtns = "btnEdit;btnSaveAs" ; var buttonArray = disableBtns.split(";"); buttonArray.forEach(function(buttonId) { console.log("disable button id: "+buttonId); document.getElementById(buttonId).style.display = 'none'; }); settingReportInfo(reportInfo.name); } /** * i-AUD 보고서 이름 및 아이콘 설정 (아이콘은 사이트에서 지정한 아이콘을 사용해도 됩니다.) **/ function settingReportInfo(name) { // 보고서명 var reportNameEl = $('.titlebg').find('#dvReportName'); reportNameEl.empty(); if (name.length > 0) { // Mode 별 Report 타이틀 이미지 설정 var titleImgType = 'tree_iaud.png'; var imgUrl = "<%=AUD_SERVER_URL%>"+GFN_OPTION.PORTAL_THEME_IMG_PATH+"/tree/"; reportNameEl.addClass('title_bullet'); reportNameEl.text(name); titleImgType = 'tree_iaud.png'; reportNameEl.css({"background":"url('"+imgUrl+ titleImgType + "') 0px 0px no-repeat"}); } } /** * 발급받은 토큰에 대한 인증을 확인 **/ function aud7AuthCheck() { var xmlhttp = null; if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest(); else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("POST", biServerUrl+"/portal/service/servlet_action.jsp", false); //동기 xmlhttp.withCredentials = true; xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); const params = "cname=check.session&isPortal=false"; xmlhttp.send(params); if (xmlhttp.status === 200) { var authData = JSON.parse(xmlhttp.responseText); console.log("==== authCode:" + authData.retCode); if (authData.retCode == 0) { return true; } else { alert("token error. Token reissue check"); return false; } } else { console.error("HTTP request failed with status:", xmlhttp.status); return false; } } function audApiCall(apiUrl , params){ fetch(biServerUrl + apiUrl, { method: 'POST', // 또는 'POST', 'GET' headers: { 'Content-Type': 'application/json' }, credentials: 'include', // 쿠키를 포함하여 요청하려면 사용 body: JSON.stringify(params) }) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); // 응답을 JSON으로 변환 }) .then(data => { alert(JSON.stringify(data)); }) .catch(error => { console.error('There has been a problem with your fetch operation:', error); alert('데이터를 가져오는데 실패했습니다.'); }); } </script> <div id="wrapper" ondragstart="return false" oncontextmenu="return false" onselectstart="return false"><!-- onmousedown="return false;" --> <div class="top_panel"> </div> <div class="left_panel"> <ul> <li> <div class='rep_div' onclick='openPopReport()'>팝업으로 메인 화면 호출</div> </li> <li> <div class='rep_div' onclick='openPopReport(fnOpen("REPA0C74823A2F24AD980BA19538CF4C494")'>팝업으로, 보고서 호출</div> </li> <li> <div class='rep_div' onclick='audApiCall("/api/user/concurrent/user/auth/info"false , "SD")'>사용자>i-AUD 세션 정보 조회 API<보고서 호출</div> </li> <li> <div class='rep_div' onclick='audApiCallfnOpen("/api/portal/tree/main-menuREP21FCDAC4BE4B48B78CF60248F4965D8B", { "folderCode":false , "DEFAULTSD" })'>사용자>i-AUD 트리 보고서 목록 조회 API<호출1</div> </li> </ul> </div> <div class="main_group VisibleFrame"> <iframe<div id="REPORTview_AUDnamespace" nameclass="REPORTview_AUDpanel" width="100%" height="100%" frameborder="0" scrolling="no" class="VisibleFrame" ></iframe> </div> > <div class="titlebg" id="titlebg_main" style="display:none;"> <div class="foottitle_panelarea"> </div> </div> <form <ul><li><span id="frm" name="frm" method="post" target="" action=""></form> </body> </html> |
| 코드 블럭 | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
<%@ page language="java" contentType="application/javascript; charset=UTF-8" pageEncoding="UTF-8"%>
var AUD_CONFIG_DATA = {};
try {
AUD_CONFIG_DATA.bimatrix_server_url = "http://[AUD플랫폼 Ip:Port]";
AUD_CONFIG_DATA.webRoot = "/matrix";
AUD_CONFIG_DATA.cookie_domain = ".bimatrix.co.kr";
AUD_CONFIG_DATA.global_params = {} ;
var setGlobalParams = function(datas) {
if(typeof datas == "string"){
AUD_CONFIG_DATA.global_params = JSON.parse(datas);
}
}
/** 제공되는 버튼 id list
* btnEdit : 보고서 편집
* btnRefresh : 실행
* btnSaveAs : 다른 이름으로 저장
* btnExport : 내보내기
* btnPrint : 출력
* btnProperties : 속성 (i-Matrix 전용)
* btnScreenArrange : 화면 arrange (i-Matrix 전용)
**/
AUD_CONFIG_DATA.button_disable_ids = "btnEdit;btnSaveAs";
// i-AUD 제품 설정 정보
// i-Matrix 제품 설정 정보
AUD_CONFIG_DATA.imatrix_afterOpenRefresh = "false";
AUD_CONFIG_DATA.imatrix_mxserviceVersion = "106";
AUD_CONFIG_DATA.imatrix_used_bottom = "N";
AUD_CONFIG_DATA.imatrix_bottom_foot_margin = "1"; // foot 영역 margin
AUD_CONFIG_DATA.imatrix_bottom_top_margin = "40"; // top 영역 margin
} catch (e) {
AUD_CONFIG_DATA = {};
alert("aud.embedded.setting.jsp : " + e.message);
} |
| 정보 | |
|---|---|
| title | iFramedvReportName"></span></li></ul>
</div><!-- title_area -->
<div class="bookmark" id="bookmarkIcon" style="display:none;"></div>
<!-- 현재 경로표시 영역 -->
<div class="location" style="display:none;"></div>
<div class="topbtn_group"></div>
</div><!--// titlebg -->
<div id="AUDview" name="AUDview" class="istudio-common-viewer"></div>
<div id="vieweraud" name="vieweraud" class="istudio-common-viewer"></div>
</div>
</div>
<div class="foot_panel">
</div>
</body>
</html> |
| 정보 | ||||||
|---|---|---|---|---|---|---|
| ||||||
|














