技術交流

ORACLE + JAVA 打造刷卡自動匯入系統功能

Ken Ken

HCP(Human Capital Planner)人力資產規劃系統中,包含著許多強大的功能,對每天要處理眾多複雜工作的人資(HR)部門而言,每日刷卡檔案資料自動匯入的功能,無疑是提供一個更簡單方便的做法,讓 HR 同仁可以不需花費太多時間就能順利完成工作。

每日刷卡檔案自動匯入系統的方法是透過 ORACLE 資料庫以及 JAVA 的技術,來完成從作業系統中某個存放資料的資料夾內,將大家每次打卡的資料,存入到 HCP 系統的資料庫中。

人事系統每日刷卡的工作流程

因為需要使用到 JAVA 技術,所以首先我們必須確認 ORACLE 資料庫中,是否已經存在 DBMS_JAVAPackage

可以使用下列語法來確認是否已經安裝了 DBMS_JAVA。

select distinct owner,name from dba_source where lower(NAME)='dbms_java';

我們使用了 JAVA 中的 DirList.getList( java.lang.String,java.lang.String ),裡面實際做法如下:



create or replace and compile java source named dirlist as
import java.io.*;
import java.sql.*;
import java.text.*;
public class DirList
  {
    public static void getList(String directory)
                     throws SQLException
    {
      File dir = new File( directory );
      File[] files = dir.listFiles();
      File theFile;
      for(int i = 0; i < files.length; i++)
        {
          theFile = files[i];
          #sql { INSERT INTO DIR_LIST (FILENAME)
                 VALUES (:theName };
        }
    }
  }

        

程式中除了 JAVA 以及邏輯的判斷以外,同時也使用到了 ORACLE 下的 utl_file 功能,讓我們可以控制所取得的資料,完成我們想達成的動作。

utl_file 在此提供了很多方便的功能,包含開啟檔案、讀取整列資料、讀取整列資料的某一段、控制讀取資料的游標、複製檔案、刪除檔案等功能。

附註

為了取得正確的檔案,必須在資料庫中,建立 directory:BFILE_DIR、BFILE_BAK,分別用來記錄刷卡檔案存放路徑以及刷卡檔處理完後檔案與 LOG 檔存放路徑。

建立 BFILE_DIR、BFILE_BAK 這兩個 directory 時,請使用 SYSDBA 權限的帳號建立,並且建立好後,要將讀寫的權限,建立給可以使用的資料庫帳號,語法如下:


create or replace directory BFILE_DIR as 'D:\CARD\CARDDATA';
create or replace directory BFILE_BAK as 'D:\CARD\CARDDATA_BAK';
rant read,write on directory BFILE_DIR to USERS_ACCOUNT;
grant select on dba_directories to USERS_ACCOUNT;
GRANT JAVAUSERPRIV to USERS_ACCOUNT;
grant read,write on directory BFILE_BAK to USERS_ACCOUNT;
        

自動匯入系統的功能,是在 HCP 系統中的系統 JOB 維護(APPF330)程式裡面做設定,其中設定語法為:

p_card_textin_std('BFILE_DIR','BFILE_BAK','A001','absence');
  • BFILE_DIR—讀取目錄路徑
  • BFILE_BAK—完成目錄路徑
  • A001—系統公司別的代碼
  • absence—讀取刷卡的資料代碼

系統 JOB 維護說明

簡單來說,我們想要讓程式在某個固定的時間點、依照某一個頻率(年、月、日、時、分)重複執行,我們便會將程式設定在這個功能中,例如:員工生日通知、出勤異常通知、每月發薪通知等等,當然也包含每日刷卡檔案自動匯入系統功能,設定說明如下圖所示:

完成以上這些步驟,不但能減輕 HR 同仁的負擔,之後還可以繼續使用。辛苦的 HR 同仁只需簡單的幾個設定,一切交由程式執行,便不需要每天再花時間在打卡資料匯入上。