파일 경로: /extention/portal/customscript.jsp
해당 파일에 fnCustomReportOpen, searchReportInfo 함수가 있는지 확인 후, 없으면 아래 내용 참고하여 사용하시기 바랍니다.
추가1) 2023.09.20 기준, fnCustomReportOpen 함수 내 변경된 부분이 있습니다. 첨부파일 참고 바랍니다.
추가2) 2024년 3월 정기 릴리즈(7.0.500.20240329-01) 버전부터 지원 사항 추가
i-AUD 보고서 간 파라미터 전달이 가능합니다.
i-AUD 보고서에서 Matrix.CustomReportOpen API로 사용 가능합니다.
추가3) 7.0.500.20250807-11 버전부터 아래 내용 추가
보고서에 대한 현재 인증된 사용자의 읽기 권한 및 제품 그룹 권한(라이센스)을 체크합니다.
추가4) 7.0.500.20251120-11 버전
보고서 정보 확인에 대한 로직이 심화되었습니다.
1. fnCustomReportOpen 함수 파라미터 정의
A보고서에서 B보고서를 호출한다고 가정했을 때,
1) reportCode
- 새로 열고자 하는 보고서 코드 (B보고서 코드)
2) isRecycle
- 현재 탭을 재사용하여 보고서를 열 것인지 여부 (탭 사용하지 않는 경우 무시됨)
- true: 탭 재사용 모드로 열림, false: 현재 PORTAL설정에 설정된 탭 모드로 열림
3) isParentReportClose
- 기존에 열었던 보고서 탭을 닫을 것인지 여부 (A보고서 탭을 닫을 것인지, 탭 사용하지 않는 경우 무시됨)
4) params
- 다른 i-AUD 보고서로 전달할 파라미터 값 (7.0.500.20240329-01 버전부터 지원)
- 형식 예시: [{"KEY": "VS_TEST", "VALUE":"테스트변수"}]
2. 사용 방법
1) i-AUD 보고서에서 window.top.fnCustomReportOpen("보고서 코드", false, false); 와 같이 호출 / Matrix.CustomReportOpen API로 호출
- 첨부된 샘플 보고서 참고
3. 소스 코드
/**
* tab 사용일 경우에 전달하는 보고서만 해당 탭을 재사용하여 오픈될 수 있도록 하는 보고서 오픈 함수
**/
var fnCustomReportOpen = function (reportCode, isRecycle, isParentReportClose, params) {
var info = searchReportInfo(reportCode);
if (info == null || info.code != reportCode) {
gfn_alert(GFN_MESSAGE.alert_viewer_msg_012);
return;
}
// 보고서에 읽기 권한이 있는지 확인
var hasAuth = false;
try {
if(parseInt(info.option.AuthNo) > 0)
hasAuth = true;
} catch(e) {}
if(!hasAuth) {
gfn_alert(GFN_MESSAGE.alert_viewer_msg_011);
return;
} else {
if(!checkReportModuleAuth(info.module)) {
gfn_alert(GFN_MESSAGE.alert_viewer_msg_005);
return;
}
}
var _closeType;
var currTab;
var parentReportCode;
if (GFN_OPTION.OP04_TAB_FLAG == "Y" && !this.ispopupView) {
if (this.parent.gvTabContainer == undefined) { // 직접 div를 그린 경우 (미니 포탈 등)
currTab = this.parent.gvTab;
} else {
currTab = this.parent.gvTabContainer.gvTab; // iframe 적용
}
parentReportCode = currTab.CurrentItem.Code;
// 탭 재사용 여부 파라미터가 true일 때 탭 모드를 '재사용' 으로 변경
if(isRecycle) {
_closeType = currTab.CloseType;
currTab.CloseType = "iportalClose";
}
} else {
parentReportCode = curr_reportCode;
}
// 타겟 보고서 열기
if (this.ispopupView) {
gvCode = info.code;
gvName = info.name;
gvModule = info.module;
gvPath = info.path;
gvAuthNo = info.option.AuthNo;
gvFolderCode = info.option.FolderCode;
gvModifyDate = info.option.ModifyDate;
reportOnLoad();
} else {
ReportOpenByTree(info.code, info.name, info.desc, info.module, info.path, ""
, {
'FolderCode': info.option.FolderCode,
'AuthNo': info.option.AuthNo,
'ModifyDate': info.option.ModifyDate,
'isRecycle': isRecycle,
'parentReportCode' : parentReportCode
}, params);
}
// 기존에 적용한 closeType으로 재 적용 시킨다.
if (typeof _closeType != 'undefined' && _closeType != null) {
currTab.CloseType = _closeType;
}
// 부모 탭 닫기 여부가 true일 때, 탭 닫기
if (isParentReportClose && (GFN_OPTION.OP04_TAB_FLAG == "Y" && !this.ispopupView)) {
for (var i = 0; i < currTab.Items.length; i++) {
if ((currTab.Items[i].Code == parentReportCode) && currTab.Items[i].Active == false) {
currTab.CloseTab(currTab.Items[i]);
return;
}
}
}
};
/**
* 보고서 코드에 해당하는 정보 조회하는 api
* @param id
* @returns {{path: string, code: string, module: string, name: string, desc: string, option: {FolderCode: string, ModifyDate: string, FolderPath: string, AuthNo: string}}}
*/
var searchReportInfo = function (id) {
var info = {
code: '',
name: '',
desc: '',
module: '',
path: '',
option: {
AuthNo: '',
FolderCode: '',
FolderPath: '',
ModifyDate: ''
}
};
//보고서 정보 조회
$.biMatrix.callAjax({
type: 'POST',
async: false, // 동기
url: gvWebRootName + '/portal/service/content_action.jsp',
data: {
'actionKey': 'searchReportAuthInfo',
'reportCode': id
},
//dataType: 'text',
dataType: 'json',
success: function (ret) {
if(typeof ret == 'undefined' || ret == null || ret.length <= 0 || ret.retCode == "-99") {
info = null;
return;
}
info.code = ret.REPORT_CODE;
info.name = ret.REPORT_NAME;
info.desc = ret.REPORT_DESC;
info.module = ret.MODULE_CODE;
info.path = ret.REPORT_PATH;
info.option.AuthNo = ret.AUTHORITY_NO;
info.option.FolderCode = ret.FOLDER_CODE;
info.option.FolderPath = "";
info.option.ModifyDate = ret.MODIFY_DATE;
try{
info.option.openByXLViewer = String(JSON.parse(ret.ATTRIBUTE2).OpenByXLViewer);
}catch(e){
info.option.openByXLViewer = '';
}
},
noData: null
});
return info;
};