GCP/Apps Script

Apps Script로 매일 MSSQL 데이터(신규입사자 정보) 메일로 받기

whistory 2023. 1. 13. 09:01
반응형

 

 

 

매일아침 신규입사자 정보를 메일로 받고싶다.

DB는 MSSQL이다.

 

MSSQL에서, 신규입사자 테이블에 입사일이 오늘인 사람의 데이터를 쿼리해온다.

 

신규입사자가 아니라도 매일매일 받고싶은 정보가 있을경우 사용가능.

 

SELECT id, name, phone, dept, join_date, status FROM dbo.new_employee

 

SELECT id, name, phone, dept, join_date, status FROM dbo.new_employee WHERE join_date = convert(varchar(10), getdate(), 120)

 

 

 

const address = 'mssql ip address';
const port    = 'mssql port';
const user    = 'mssql user';
const userPwd = 'mssql password';
const db      = 'mssql database';
const dbUrl   = `jdbc:sqlserver://${address}:${port};databaseName=${db}`;

function getUserDataFromMssql () {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);

  var start = new Date();
  var stmt = conn.createStatement();
  stmt.setMaxRows(1000);
  
  var results = stmt.executeQuery('SELECT id, name, phone, dept, join_date, status FROM dbo.new_employee WHERE join_date = convert(varchar(10), getdate(), 120)');
  var numCols = results.getMetaData().getColumnCount();
  var rows = new Array();

  while (results.next()) {
    var arr1 = new Array(numCols);
    for (var col = 0; col < numCols; col++) {
      arr1[col] = results.getString(col + 1);
    }
    Logger.log(arr1);
  }

  results.close();
  stmt.close();
}

 

 

 

 

 

이제 가져온 데이터를 바탕으로,

메일을 보낼 html 양식을 생성한다.

const address = 'mssql ip address';
const port    = 'mssql port';
const user    = 'mssql user';
const userPwd = 'mssql password';
const db      = 'mssql database';
const dbUrl   = `jdbc:sqlserver://${address}:${port};databaseName=${db}`;

function getUserDataFromMssql () {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);

  var start = new Date();
  var stmt = conn.createStatement();
  stmt.setMaxRows(1000);
  
  var results = stmt.executeQuery('SELECT id, name, phone, dept, join_date, status FROM dbo.new_employee WHERE join_date = convert(varchar(10), getdate(), 120)');
  var numCols = results.getMetaData().getColumnCount();
  var rows = new Array();

  while (results.next()) {
    var arr1 = new Array(numCols);
    for (var col = 0; col < numCols; col++) {
      arr1[col] = results.getString(col + 1);
    }
    rows.push(arr1);
    Logger.log(arr1);
  }

  results.close();
  stmt.close();

  var message = `<p>${getTodayDate("-")} 일 입사자</p><br>`;
  for ( i in rows) {
    message += `<p>${rows[i][1]}(${rows[i][0]}) 부서 : ${rows[i][3]}</p><br>`

  }
  Logger.log(message);

  sendEmail(null, `${getTodayDate("-")} 일 입사자`, message);
}

 

/**
 * Send Email.
 * 이메일을 이용한 Notify.
 * @param {string} recipient  = 받는사람
 * @param {string} subject    = 제목
 * @param {string} body       = 내용
 * Ref = <https://spreadsheet.dev/send-html-email-from-google-sheets>
 */
function sendEmail(recipient, subject, body) {
  var recipient = "whiseung@naver.com";

  MailApp.sendEmail({
    to: recipient,
    subject: subject,
    htmlBody: body
  });
}

 

 

 

결과

 

이제 생성한 getUserDataFromMssql 함수를

time-driven 트리거로 생성하여 매일아침 메일로 전송할 수있도록 하면 된다.

 

 

 

 

반응형