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

파일 경로: /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;
    };