페이지 트리
메타 데이터의 끝으로 건너뛰기
메타 데이터의 시작으로 이동

이 페이지의 이전 버전을 보고 있습니다. 현재 버전 보기.

현재와 비교 페이지 이력 보기

« 이전 버전 11 다음 »

Page No.  112038798

작성자 :   / 검수자 :  


 Launch Release No. 7.3.500.20250722 / Latest Release No. 

외부 포탈에 CORS 연동으로 AUD보고서 임베디드 기능 적용
이 같은 설정으로 적용 시에 AUD플랫폼에서 제공하는 모든 기능을 사용 가능 (top , parent 등의 접근이 가능)





1. sitePortalAUD7Em_iAudSample_div.jsp 설정 - 고객사 Portal에 적용해야할 샘플 jsp파일

1-1) SSH KEY 설정

1-1-1) audSecretKey, audApId 설정

Admin 시스템 운영관리 > 인증 키 관리 > SSH Key 생성

 (※ 주의 : '인증 키 관리' 페이지가 보이지 않을 경우 '관리자메뉴 설정' 페이지에서 인증 키 관리 페이지를 사용 체크하여 저장한 후 새로고침 하여 접근 할 수 있음)

> Application 아이디 값을 설정하고  Secret Key와 private_key.pem을 다운로드

> SSH Key정보를 sitePortalAUD7EmSample.jsp에 설정


1-1-2) privateKey 설정 - 고객사 포탈 서버에 private_key.pem을 저장하고 경로를 지정

> loadPrivateKey 메서드 매개변수에 '인증 키 관리' 페이지에서 등록이 완료되면 발급되는 private_key.pem 파일의 위치를 설정


1-2) 인증 대상 유저 코드 설정

1-2-1) userCode 설정

> 실제 사이트에서 인증 시켜야 할 계정 값을 설정


1-3) 토큰 요청 URL 및 도메인 설정

1-3-1) AUD_AP_TOKEN_URL 설정

> AUD플랫폼 경로 설정 (Ex. "http(s)://[IP:PORT]/api/auth/sign/ap/token")

   (※ 주의 : 서버 통신 방식이기 때문에 IP:PORT를 통해 AUD플랫폼 Portal접속이 가능하면 설정하고, 도메인 URL통신만 가능하다면 해당 서버에서 도메인 통신 확인 후 진행)

1-3-2) AUD_AP_TOKEN_UPDATE_URL 설정

> 쿠키에 발급한 aud 인증 jwt 토큰을 공유하기 위한 도메인 설정.

(※ 참고 : 서브 도메인 허용)


1-4) AUD보고서를 임베디드 할 때 적용시킬 AUD Server설정

1-4-1) AUD_SERVER_URL 설정

> i-AUD 보고서를 임베디드 할 때 적용시킬 AUD플랫폼 소스 서버 URL 설정

1-4-2) webRoot 설정

> AUD플랫폼 서버 webRoot 경로 설정

2. i-AUD 보고서 iFrame 임베디드 방법

> autoOpenReport 함수를 사용하여 'AUDview'라는 div에 AUD 보고서를 임베디드 함

> autoOpenReport 함수 내부 initAndLoad 함수에 보고서 코드와 div 값을 지정하여 사용


sitePortalAUD7Em_iAudSample_div.jsp 샘플 소스
<%@ 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.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.lang.*" %>
<!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>
		.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=112038659
		 *
		 * 샘플 자바 소스를 확인하여 AUD7 플랫폼용 토큰 발행 API를 호출한다. jsp 에서 처리하는 부분을 서버 영역에서 처리하여 호출하는 방식 추천
		 * Application 인증용 id와 시크릿 key 는 AUD7 플랫폼 관리자를 통해 발급 받는다.
		 **/
		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";
		String AUD_SERVER_URL = "http://[AUD플랫폼 서비스 도메인]";
		String webRoot = "/matrix";

		HttpURLConnection connection = null;
		String apToken = null;

		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.print("ap token이 정상적으로 발급되지 않았습니다");
					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();
			}
		}

	%>
	<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>
	<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.message.jsp"></script>
	<script type="text/javascript" src="<%=AUD_SERVER_URL%>/portal/js/portal.option.data.jsp"></script>
	<script type="text/javascript" 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);

		// 인증 자동 연장
		aud7UpdateSession();
		// 리사이징
		winResizer();

		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);

		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='+SHARE_DOMAIN);
		document.cookie = cookie_name + '=' + cookie_value;
	}

	function deleteCookie(name) {
		document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain='+SHARE_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 = 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') {
						console.log("=== embedded AUD7 UpdateSession stop ===")
						clearTimeout(updateSessionStop);
						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 title_toparea_el = $('#titlebg_main .topbtn_area');
			var title_bullet_el = $('#titlebg_main .title_bullet');

			//if(!title_el.length || !title_vline_el.length || !title_toparea_el.length || !title_bullet_el.length) return;

			var titlebg_w = title_el.outerWidth();
			var title_topbtn_w = title_toparea_el.outerWidth(true);
			var title_reportName_w = titlebg_w - (title_topbtn_w);

			title_bullet_el.css('width', title_reportName_w);
		}
	}

    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);
				resolve(); // 다음 순서로 진행
			};

			// 보고서에서 사용할 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();
			$('.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 class="top_panel">
	</div>

	<div class="left_panel">
		<ul>
			<li>
				<div class='rep_div' onclick='fnOpen("REPA0C74823A2F24AD980BA19538CF4C494", false , "SD")'>i-AUD 보고서 호출</div>
			</li>
			<li>
				<div class='rep_div' onclick='fnOpen("REP21FCDAC4BE4B48B78CF60248F4965D8B", false , "SD")'>i-AUD 보고서 호출1</div>
			</li>
		</ul>
	</div>

	<div class="main_group VisibleFrame">
		<div id="view_namespace" class="view_panel">
			<div class="titlebg" id="titlebg_main" style="display:none;">
				<div class="title_area">
					<ul><li><span id="dvReportName"></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>


  • 레이블 없음