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



(전구) 학습목표

Export한 대시보드를 메일에 첨부하여 발송할 수 있습니다.


1. 서버 스크립트 호출 API

AUD플랫폼의 자체 API를 사용하여 서버 스크립트를 호출할 수 있습니다.


컨트롤 생성

  1. 대시보드 Export를 사용하기 위한 버튼 컨트롤을 생성합니다.
    - UI BOT > IMAGE




  2. 생성한 이미지 컨트롤의 속성을 변경합니다.
    - Name : BTN_MAIL
    - Cursor : pointer
    - Image : BTN_MAIL.png




컨트롤에 클릭 이벤트 연결 

  1. [편집 그룹 > Script Editor]를 클릭하여 스크립트 에디터 창을 활성화합니다.



  2. 이미지를 클릭했을 때, 이벤트를 활성화하기 위해 [OnImageClick] 이벤트를 호출합니다.



  3. [OnImageClick이벤트를 호출했을 때, 대시보드의 컴포넌트를 받아서 Export 할 객체를 생성합니다.

    Discription

    (전구)사용된 JScript

    Script
    /**************************************
     * 이미지 컨트롤이 클릭되는 시점에 발생합니다.
     * * arguments :  
     *		 string	Id (Readonly:False) : 컨트롤 이름 
     *		 string	Text (Readonly:False) : 라벨 값 
    **************************************/
     var OnImageClick  = function(sender, args){
    	
    	//Export 컴포넌트 생성
     	var WORKBOOK = {
    				"FontName": "맑은 고딕"      //Export할 파일의 폰트
    				, "FontSize" : 11	      //Export할 파일의 폰트 사이즈
    				, "FontColor" : "Black"   //Export할 파일의 폰트 색상
    				, "WorkSheets": [         
    					{
    						"Name":"Sheet1"   //Export할 파일 시트(엑셀 Export시)
    						, "DisplayGridlines":"false"  //Export할 파일 시트 가이드 라인 표시 여부
    						,"Ranges": [      //Export할 파일 문자열에 대한 위치 지정
    						{"Range":"B1","Value": "보고서 명 : " + Matrix.GetReportInfo().NAME}
    						, {"Range":"B2","Value": "■ 기준일 : " + VS_DATE}
    						, {"Range":"B3","Value": "■ 골프장 :" + VS_Golf_Place.Text}
    						, {"Range":"B5" ,"Value": "골프장 방문자 분석"}
    						, {"Range":"B7","Value": "요일별/시간대별 방문자 수"}
    						, {"Range":"J7","Value": "최근 6개월 간 방문자 수"}
    						, {"Range":"B25","Value": "방문자 연령대 분석"}
    						, {"Range":"G25","Value": "방문자 성비 분석"}
    						, {"Range":"M25","Value": "방문자 관심사 리스트"}
    						]
    						, "Controls": [   //Export할 컴포넌트
    						{ "Name": DG_INT.Name, "Range": "M26"}  //List-Grid 컴포넌트
    						, { "Name": CH_DAYS.Name, "Range": "B8:I22", "ImageExport": true }            //Chart 컴포넌트
    						, { "Name": CH_RECENT_VISIT.Name, "Range": "M8:Q23", "ImageExport": true }    //Chart 컴포넌트
    						, { "Name": CH_VISIT_AGE.Name, "Range": "B26:F35", "ImageExport": true }      //Chart 컴포넌트
    						, { "Name": CH_VISIT_GENDER.Name, "Range": "G25:L35" , "ImageExport": true }  //Chart 컴포넌트
    						, { "Name": OL_RECENT_VISIT.Name, "Range": "J8"}  //Olap-Grid 컴포넌트
    						]  
    						
    					}
    				]
    	};
    };

    (전구) 대시보드 객체 생성 참고

    참조 : 대시보드 Export(서버용)

  4. 생성한 객체를 사용하여 대시보드 Export를 실행하고 서버 스크립트 호출하는 스크립트를 작성합니다.

    Discription

    (전구)사용된 JScript

    Script
    /**************************************
     * 이미지 컨트롤이 클릭되는 시점에 발생합니다.
     * * arguments :  
     *		 string	Id (Readonly:False) : 컨트롤 이름 
     *		 string	Text (Readonly:False) : 라벨 값 
    **************************************/
     var OnImageClick  = function(sender, args){
    	
    	//Export 컴포넌트 생성
     	var WORKBOOK = {
    				"FontName": "맑은 고딕"      //Export할 파일의 폰트
    				, "FontSize" : 11	      //Export할 파일의 폰트 사이즈
    				, "FontColor" : "Black"   //Export할 파일의 폰트 색상
    				, "WorkSheets": [         
    					{
    						"Name":"Sheet1"   //Export할 파일 시트(엑셀 Export시)
    						, "DisplayGridlines":"false"  //Export할 파일 시트 가이드 라인 표시 여부
    						,"Ranges": [      //Export할 파일 문자열에 대한 위치 지정
    						{"Range":"B1","Value": "보고서 명 : " + Matrix.GetReportInfo().NAME}
    						, {"Range":"B2","Value": "■ 기준일 : " + VS_DATE}
    						, {"Range":"B3","Value": "■ 골프장 :" + VS_Golf_Place.Text}
    						, {"Range":"B5" ,"Value": "골프장 방문자 분석"}
    						, {"Range":"B7","Value": "요일별/시간대별 방문자 수"}
    						, {"Range":"J7","Value": "최근 6개월 간 방문자 수"}
    						, {"Range":"B25","Value": "방문자 연령대 분석"}
    						, {"Range":"G25","Value": "방문자 성비 분석"}
    						, {"Range":"M25","Value": "방문자 관심사 리스트"}
    						]
    						, "Controls": [   //Export할 컴포넌트
    						{ "Name": DG_INT.Name, "Range": "M26"}  //List-Grid 컴포넌트
    						, { "Name": CH_DAYS.Name, "Range": "B8:I22", "ImageExport": true }            //Chart 컴포넌트
    						, { "Name": CH_RECENT_VISIT.Name, "Range": "M8:Q23", "ImageExport": true }    //Chart 컴포넌트
    						, { "Name": CH_VISIT_AGE.Name, "Range": "B26:F35", "ImageExport": true }      //Chart 컴포넌트
    						, { "Name": CH_VISIT_GENDER.Name, "Range": "G25:L35" , "ImageExport": true }  //Chart 컴포넌트
    						, { "Name": OL_RECENT_VISIT.Name, "Range": "J8"}  //Olap-Grid 컴포넌트
    						]  
    						
    					}
    				]
    	};
    
     	if(args.Id == "BTN_MAIL"){
    
    		Matrix.ExcelExportServiceCall(WORKBOOK ,null ,function(e){
    											if(e.Success == false){
    												alert("export fail" + e.Message);
    												return;
    											}
    									
    											var row = e.DataSet.GetTable(0).GetRow(0);
    											var folderName = row.GetValue("FolderName");
    											var fileName = row.GetValue("FileName");													
    									
    											Matrix.RunScript("" ,"SEND_MAIL" ,function(p){
    																	if(p.Success == false){
    																	Matrix.Alert(p.Message);
    																	return;
    																}
    																Matrix.Alert("메일이 발송되었습니다.");								
    															});
    										
    										});		
    	} 
    	
     };

    (전구) ExcelExportServiceCall API

    AUD플랫폼의 자체 API로 Json 형태의 데이터를 이용해 데이터 엑셀 내보내기 서비스를 호출합니다.(처리 완료 후 OnServiceCallBack 이벤트가 발생합니다.)

    [void]ExcelExportServiceCall :

    ExcelExportServiceCall([object] json ,[object[{Key,Value}]] params ,[function] callBack)

    인자설명
    json데이터 엑셀 내보내기 JSON 객체
    params파라미터(parameters) e.g.: [{'Key':'VS_CODE','Value':'100'},{'Key':'VS_NAME', 'Value':'JAMES'}]
    callBackCallBack함수


    (전구) RunScript API

    AUD플랫폼의 자체 API로 서버 측 js Business 서비스를 호출합니다. (처리 완료 후 OnServiceCallBack 이벤트가 실행됩니다.)

    [void]RunScript :

    RunScript([string] gridNames ,[string] scriptName ,[function] callBack)

    인자설명
    gridNames데이터 입력/수정/삭제 정보를 전송할 그리드 목록 (구분 기호: ','), 입력 값이 '*'인 경우 전체 그리드를 입력 함
    scriptName서버 스트립트 이름(@로 시작하는 경우 서버의 SERVER_SCRIPT 아래 파일 탐색, @보고서코드@스크립트코드 는 특정 보고서의 @로 시작하는 스크립트 탐색)
    callBackCallBack함수



2. 서버 스크립트 사용법 

서버 스크립트를 생성하고 기본적인 사용법을 알 수 있습니다.


서버 스크립트 생성

  1. Script Editor 편집 창의 좌측에서 [Server Script]를 우클릭하여 [New]를 클릭합니다.



  2. 서버 스크립트를 생성 시 자동으로 기본 서버 스크립트가 생성됩니다.

    Discription

    (전구) 서버스크립트 관련 API

    API설명
    getRequest

    Request 객체를 반환합니다.

    getResponseResponse 객체를 반환합니다.
    getSessionSession 객체를 반환합니다.
    getUtility

    공통 유틸리티 객체를 반환합니다.

    getConnection데이터베이스 연결 객체를 반환합니다.
    getQueryGenerator쿼리를 자동으로 생성해주는 객체를 생성합니다.
    getHttpConnectorhttp 연결 객체를 반환합니다.
    getFileSystemObjectI/O관련 유틸리티 객체를 반환합니다.

    JScript는 Front 단에서 사용되는 스크립트이고 서버 스크립트는 Back 단에서 사용되는 스크립트입니다. 각각의 스크립트 상에서 지원하는 API가 다르기 때문에 API에 대한 숙지와 연습이 필요합니다.

    대표적인 예로 컨트롤을 받는 방법이 다른데 JScipt 상에서는 컨트롤을 받을 때, Matrix.getObject(name); 을 사용하지만 서버 스크립트 상에서는 req.getParam(key); 를 사용합니다.


    서버 스크립트 Template 기능

    서버 스크립트의 Template를 사용하여 필요한 기능을 구현할 수 있습니다.



서버 스크립트  Template 종류

  1. SaveData
    - 서버 스크립트를 사용하여 CRUD 기능을 수동으로 구현할 수 있습니다.




  2. PreparedStatement
    - 서버 스크립트를 사용하여 CRUD 기능을 PreparedStatement를 사용해 수동으로 구현할 수 있습니다.



  3. Procedure Call
    - 서버 스크립트를 사용하여 Procedure를 호출할 수 있습니다.

 


3. Mailing 서버 스크립트

서버 스크립트를 사용하여 Mail 발송 기능을 사용할 수 있습니다.


서버 스크립트 이름 변경

생성한 서버 스크립트를 우클릭하여 JScript에서 RunScript를 사용하여 서버 스크립트를 호출할 때 사용한 이름으로 변경합니다.

- 서버 스크립트 Name : SEND_MAIL



메일링 서버 스크립트 작성

  1. 기능을 사용하기 위해 필요한 줄의 주석을 해제합니다.

    Discription

    (전구) 사용된 서버스크립트

    Script
    /** ************************************
    	* SERVER - SCRIPT
    	* 
    	************************************ **/
    	var req = Matrix.getRequest(); /* request */
    	var res = Matrix.getResponse(); /* response */
    	var session  = Matrix.getSession(); /* session */
    	var util = Matrix.getUtility(); /* utility */
    	
    	//var con = Matrix.getConnection(); /* DataBase Connector */
    	//var gen = Matrix.getQueryGenerator(); /* Query generator */
    	//var web = Matrix.getHttpConnector(); /* http url connector */
    	var fso = Matrix.getFileSystemObject(); /* file access */
    	var sql; 
    	var stmt; 
    	var tmpTable; 
    	
    
    	try{
    	
    	
    	}catch(e){
    		Matrix.ThrowException("Server Script Error:" + e.message);
    	}finally{
    		// release here 
    //		if(stmt != null){ 
    //			stmt.Close(); 
    //			stmt = null; 
    //		} 
    //		if(con != null){ 
    //			con.DisConnect(); 
    //			con = null; 
    //		} 	
    	}
  2. 메일에서 파일을 첨부할 때, 서버에 저장된 파일명을 가져오기 위해 JScript에서 ExcelExportServiceCall API 호출시 파일명을 변수로 지정합니다.

    Discription

    (전구)사용된 JScript

    Script
     /**************************************
     * 이미지 컨트롤이 클릭되는 시점에 발생합니다.
     * * arguments :  
     *		 string	Id (Readonly:False) : 컨트롤 이름 
     *		 string	Text (Readonly:False) : 라벨 값 
    **************************************/
     var OnImageClick  = function(sender, args){
    	
    	//Export 컴포넌트 생성
     	var WORKBOOK = {
    				"FontName": "맑은 고딕"      //Export할 파일의 폰트
    				, "FontSize" : 11	      //Export할 파일의 폰트 사이즈
    				, "FontColor" : "Black"   //Export할 파일의 폰트 색상
    				, "WorkSheets": [         
    					{
    						"Name":"Sheet1"   //Export할 파일 시트(엑셀 Export시)
    						, "DisplayGridlines":"false"  //Export할 파일 시트 가이드 라인 표시 여부
    						,"Ranges": [      //Export할 파일 문자열에 대한 위치 지정
    						{"Range":"B1","Value": "보고서 명 : " + Matrix.GetReportInfo().NAME}
    						, {"Range":"B2","Value": "■ 기준일 : " + VS_DATE}
    						, {"Range":"B3","Value": "■ 골프장 :" + VS_Golf_Place.Text}
    						, {"Range":"B5" ,"Value": "골프장 방문자 분석"}
    						, {"Range":"B7","Value": "요일별/시간대별 방문자 수"}
    						, {"Range":"J7","Value": "최근 6개월 간 방문자 수"}
    						, {"Range":"B25","Value": "방문자 연령대 분석"}
    						, {"Range":"G25","Value": "방문자 성비 분석"}
    						, {"Range":"M25","Value": "방문자 관심사 리스트"}
    						]
    						, "Controls": [   //Export할 컴포넌트
    						{ "Name": DG_INT.Name, "Range": "M26"}  //List-Grid 컴포넌트
    						, { "Name": CH_DAYS.Name, "Range": "B8:I22", "ImageExport": true }            //Chart 컴포넌트
    						, { "Name": CH_RECENT_VISIT.Name, "Range": "M8:Q23", "ImageExport": true }    //Chart 컴포넌트
    						, { "Name": CH_VISIT_AGE.Name, "Range": "B26:F35", "ImageExport": true }      //Chart 컴포넌트
    						, { "Name": CH_VISIT_GENDER.Name, "Range": "G25:L35" , "ImageExport": true }  //Chart 컴포넌트
    						, { "Name": OL_RECENT_VISIT.Name, "Range": "J8"}  //Olap-Grid 컴포넌트
    						]  
    						
    					}
    				]
    	};
    
     	if(args.Id == "BTN_MAIL"){
    
    		Matrix.ExcelExportServiceCall(WORKBOOK ,null ,function(e){
    											if(e.Success == false){
    												alert("export fail" + e.Message);
    												return;
    											}
    									
    											var row = e.DataSet.GetTable(0).GetRow(0);
    											var folderName = row.GetValue("FolderName");
    											var fileName = row.GetValue("FileName");													
    											Matrix.AddGlobalParams("VS_FileName" ,fileName, 1 );
    									
    											Matrix.RunScript("" ,"SEND_MAIL" ,function(p){
    																	if(p.Success == false){
    																	Matrix.Alert(p.Message);
    																	return;
    																}
    																Matrix.Alert("메일이 발송되었습니다.");								
    															});
    										
    										});		
    	} 
    	
     };

    (전구) AddGlobalParams API

    AUD플랫폼의 자체 API로 보고서 내에서 전역 쿼리 파라미터 값 객체를 추가하는 함수입니다.

    [void]AddGlobalParams :

    RunScript([string] gridNames ,[string] scriptName ,[function] callBack)

    인자설명
    name파라미터 명
    value파라미터의 값
    type데이터 타입 (Numeric : 0 , String : 1)
  3. 메일에서 사용할 값을 변수로 받아옵니다.

    Discription

    (전구) 사용된 서버스크립트

    Script
    /** ************************************
    	* SERVER - SCRIPT
    	* 
    	************************************ **/
    	var req = Matrix.getRequest(); /* request */
    	var res = Matrix.getResponse(); /* response */
    	var session  = Matrix.getSession(); /* session */
    	var util = Matrix.getUtility(); /* utility */
    	
    	var con = Matrix.getConnection(); /* DataBase Connector */
    	//var gen = Matrix.getQueryGenerator(); /* Query generator */
    	//var web = Matrix.getHttpConnector(); /* http url connector */
    	var fso = Matrix.getFileSystemObject(); /* file access */
    	var sql; 
    	var stmt; 
    	var tmpTable; 
    	
    	var vsGolfPlace = req.getParam("VS_GOLF_PLACE");       // 골프장 명 콤보박스 값
    	var vsDate = req.getParam("VS_DATE");	               // 날짜 캘린더 값
    	var fileName = req.getParam("VS_FileName");            // 서버에 저장된 파일명
    	
    	try{
    	
    	
    	}catch(e){
    		Matrix.ThrowException("Server Script Error:" + e.message);
    	}finally{
    		// release here 
    		if(stmt != null){ 
    			stmt.Close(); 
    			stmt = null; 
    		} 
    		if(con != null){ 
    			con.DisConnect(); 
    			con = null; 
    		} 	
    	}

    (전구) 참고사항

    JScipt 상에서는 컨트롤을 받을 때, Matrix.getObject(name); 을 사용하지만 서버 스크립트 상에서는 req.getParam(key); 를 사용합니다.

  4. try 구문 안에 메일을 전송하기 위한 스크립트를 작성하고 [저장] 버튼을 클릭하여 스크립트를 저장합니다..

    Discription

    (전구) 사용된 서버스크립트

    Script
    /** ************************************
    	* SERVER - SCRIPT
    	* 
    	************************************ **/
    	var req = Matrix.getRequest(); /* request */
    	var res = Matrix.getResponse(); /* response */
    	var session  = Matrix.getSession(); /* session */
    	var util = Matrix.getUtility(); /* utility */
    	
    	var con = Matrix.getConnection(); /* DataBase Connector */
    	//var gen = Matrix.getQueryGenerator(); /* Query generator */
    	//var web = Matrix.getHttpConnector(); /* http url connector */
    	var fso = Matrix.getFileSystemObject(); /* file access */
    	var sql; 
    	var stmt; 
    	var tmpTable; 
    	
    	var vsGolfPlace = req.getParam("VS_GOLF_PLACE");  // 골프장 명 콤보박스 값
    	var vsDate = req.getParam("VS_DATE");	               // 날짜 캘린더 값
    	var fileName = req.getParam("VS_FileName");            // 서버에 저장된 파일명
    	
    	try{
    	
    		Matrix.WriteLog("##### START : SEND_MAIL #############################################");
    		Matrix.WriteLog("	vsGolfPlace 	 : " + vsGolfPlace);	
    		
    		//메일 발송
    		//메일 설정 정보 (SMTP 주소 및 계정)  	
    		var smtpUrl 		= util.getServerOption("MAIL_SMTP_SERVER", "");  // SMTP 서버 주소
    		var smtpPort 		= util.getServerOption("MAIL_SMTP_PORT", "");    // SMTP 서버 포트
    		var smtpUserName    = util.getServerOption("MAIL_SMTP_USER", "");    // SMTP 연결 계정
    		var smtpPassword    = util.getServerOption("MAIL_SMTP_PWD", "");     // SMTP 연결 비밀번호
    			
    		var useSSL 		= true;  // SSL 사용 여부
    		var fromMail 	= "POC<sunghy1345@bimatrix.co.kr>";   // 메일 발송인 주소
    		var toMails 	= "sunghy1345@bimatrix.co.kr";  // 메일 수신자 주소(여러 명일 경우 ,로 분리)
    		var ccMails 	= null; 	// 메일 수신 참조자 주소(여러 명일 경우 ,로 분리)
    		var bccMails 	= null; 	// 메일 수신 비밀 참조자 주소(여러 명일 경우 ,로 분리)
    		var subject		= vsGolfPlace + " 통화분석 보고서";  // 메일 제목
    		var content 	= vsGolfPlace + "통화분석 보고서 입니다. (기준일 : "+vsDate +" )";  // 메일 본문
    		var params 		= null; // 메일 옵션
    		var attachFiles = [];   // 첨부 파일
    			
    			
    		var excelFilePath 	= fso.PathCombine("_TEMP_", fileName) + "@" + subject + ".xlsx";  
    		attachFiles.push(excelFilePath);					
    			
    		var result = util.SendMail(smtpUrl ,smtpPort ,useSSL ,smtpUserName ,smtpPassword ,fromMail ,toMails ,ccMails ,bccMails ,subject ,content ,params , attachFiles);
    		Matrix.WriteLog("	toMails : " + toMails);
    		Matrix.WriteLog("	result : " + result);
    
    		
    		Matrix.WriteLog("##### END : SEND_MAIL #############################################");	
    	
    	}catch(e){
    		Matrix.ThrowException("Server Script Error:" + e.message);
    	}finally{
    		// release here 
    //		if(stmt != null){ 
    //			stmt.Close(); 
    //			stmt = null; 
    //		} 
    //		if(con != null){ 
    //			con.DisConnect(); 
    //			con = null; 
    //		} 	
    	}


    (전구) WriteLog API

    AUD플랫폼의 자체 API로 시스템 로그를 작성합니다.

    [void]WriteLog :

    WriteLog([string] log)

    인자설명
    log로그 데이터


    (전구) SendMail API

    AUD플랫폼의 자체 API로 메일을 전송합니다.

    [bool]SendMail :

    SendMail([string] smtpUrl ,[string] smtpPort ,[bool] useSSL ,[string] userName ,[string] passWord ,[string] fromMail ,[string] toMails ,[string] ccMails ,[string] bccMails ,[string] subject ,[string] content ,[object[]] params ,[string[]] attachFiles)

    인자설명
    smtpUrlSMTP 서버 주소
    smtpPortSMTP 서버 포트
    useSSLSSL 사용 여부
    userNameSMTP 연결 계정
    passWordSMTP 연결 비밀번호
    fromMail메일 발송인 주소
    toMails메일 수신자 주소(여러 명일 경우 ,로 분리)
    ccMails메일 수신 참조자 주소(여러 명일 경우 ,로 분리)
    bccMails메일 수신 비밀 참조자 주소(여러 명일 경우 ,로 분리)
    subject메일 제목
    content메일 본문
    params메일 옵션
    attachFiles첨부 파일(eg. [path@name, path2@name2])
  5. [실행] 버튼을 클릭하고 클릭 이벤트를 연결한 이미지를 클릭합니다.



  6. 메일링 기능과 Export가 정상적으로 작동하는지 확인합니다.



버전 날짜 댓글
현재 버전 (v. 2) 2024-11-27 14:08 guide:
[2024.11.27] 이미지 깨짐 현상 수정, 목차 매크로 변경, 참조 보고서 경로 변경
v. 1 2023-09-22 15:32 guide

  • 레이블 없음