- 작성자 : guide - 2023-09-22
학습목표
Export한 대시보드를 메일에 첨부하여 발송할 수 있습니다.
1. 서버 스크립트 호출 API
AUD플랫폼의 자체 API를 사용하여 서버 스크립트를 호출할 수 있습니다.
컨트롤 생성
- 대시보드 Export를 사용하기 위한 버튼 컨트롤을 생성합니다.
- UI BOT > IMAGE - 생성한 이미지 컨트롤의 속성을 변경합니다.
- Name : BTN_MAIL
- Cursor : pointer
- Image : BTN_MAIL.png
컨트롤에 클릭 이벤트 연결
- [편집 그룹 > Script Editor]를 클릭하여 스크립트 에디터 창을 활성화합니다.
- 이미지를 클릭했을 때, 이벤트를 활성화하기 위해 [OnImageClick] 이벤트를 호출합니다.
[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 컴포넌트 ] } ] }; };
대시보드 객체 생성 참고
4.4.2 대시보드 Export(서버용) : https://rnd.bimatrix.co.kr/x/ToF8B
생성한 객체를 사용하여 대시보드 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'}] callBack CallBack함수 RunScript API
AUD플랫폼의 자체 API로 서버 측 js Business 서비스를 호출합니다. (처리 완료 후 OnServiceCallBack 이벤트가 실행됩니다.)
[void]RunScript :
RunScript([string] gridNames ,[string] scriptName ,[function] callBack)
인자 설명 gridNames 데이터 입력/수정/삭제 정보를 전송할 그리드 목록 (구분 기호: ','), 입력 값이 '*'인 경우 전체 그리드를 입력 함 scriptName 서버 스트립트 이름(@로 시작하는 경우 서버의 SERVER_SCRIPT 아래 파일 탐색, @보고서코드@스크립트코드 는 특정 보고서의 @로 시작하는 스크립트 탐색) callBack CallBack함수
2. 서버 스크립트 사용법
서버 스크립트를 생성하고 기본적인 사용법을 알 수 있습니다.
서버 스크립트 생성
- Script Editor 편집 창의 좌측에서 [Server Script]를 우클릭하여 [New]를 클릭합니다.
서버 스크립트를 생성 시 자동으로 기본 서버 스크립트가 생성됩니다.
Discription
서버스크립트 관련 API
API 설명 getRequest Request 객체를 반환합니다.
getResponse Response 객체를 반환합니다. getSession Session 객체를 반환합니다. getUtility 공통 유틸리티 객체를 반환합니다.
getConnection 데이터베이스 연결 객체를 반환합니다. getQueryGenerator 쿼리를 자동으로 생성해주는 객체를 생성합니다. getHttpConnector http 연결 객체를 반환합니다. getFileSystemObject I/O관련 유틸리티 객체를 반환합니다. JScript는 Front 단에서 사용되는 스크립트이고 서버 스크립트는 Back 단에서 사용되는 스크립트입니다. 각각의 스크립트 상에서 지원하는 API가 다르기 때문에 API에 대한 숙지와 연습이 필요합니다.
대표적인 예로 컨트롤을 받는 방법이 다른데 JScipt 상에서는 컨트롤을 받을 때, Matrix.getObject(name); 을 사용하지만 서버 스크립트 상에서는 req.getParam(key); 를 사용합니다.
서버 스크립트 Template 기능서버 스크립트의 Template를 사용하여 필요한 기능을 구현할 수 있습니다.
서버 스크립트 Template 종류
- SaveData
- 서버 스크립트를 사용하여 CRUD 기능을 수동으로 구현할 수 있습니다. - PreparedStatement
- 서버 스크립트를 사용하여 CRUD 기능을 PreparedStatement를 사용해 수동으로 구현할 수 있습니다. - Procedure Call
- 서버 스크립트를 사용하여 Procedure를 호출할 수 있습니다.
3. Mailing 서버 스크립트
서버 스크립트를 사용하여 Mail 발송 기능을 사용할 수 있습니다.
서버 스크립트 이름 변경
생성한 서버 스크립트를 우클릭하여 JScript에서 RunScript를 사용하여 서버 스크립트를 호출할 때 사용한 이름으로 변경합니다.
- 서버 스크립트 Name : SEND_MAIL
메일링 서버 스크립트 작성
기능을 사용하기 위해 필요한 줄의 주석을 해제합니다.
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; // } }
메일에서 파일을 첨부할 때, 서버에 저장된 파일명을 가져오기 위해 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) 메일에서 사용할 값을 변수로 받아옵니다.
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); 를 사용합니다.
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)
인자 설명 smtpUrl SMTP 서버 주소 smtpPort SMTP 서버 포트 useSSL SSL 사용 여부 userName SMTP 연결 계정 passWord SMTP 연결 비밀번호 fromMail 메일 발송인 주소 toMails 메일 수신자 주소(여러 명일 경우 ,로 분리) ccMails 메일 수신 참조자 주소(여러 명일 경우 ,로 분리) bccMails 메일 수신 비밀 참조자 주소(여러 명일 경우 ,로 분리) subject 메일 제목 content 메일 본문 params 메일 옵션 attachFiles 첨부 파일(eg. [path@name, path2@name2]) - [실행] 버튼을 클릭하고 클릭 이벤트를 연결한 이미지를 클릭합니다.
- 메일링 기능과 Export가 정상적으로 작동하는지 확인합니다.
- 레이블 없음