HCP(Human Capital Planner)人力資產規劃系統中,包含著許多強大的功能,對每天要處理眾多複雜工作的人資部門而言,每日刷卡檔案資料自動匯入的功能,無疑是提供一個更簡單方便的做法,讓 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 維護說明
簡單來說,我們想要讓程式在某個固定的時間點、依照某一個頻率(年、月、日、時、分)重複執行,我們便會將程式設定在這個功能中,例如:員工生日通知、出勤異常通知、每月發薪通知等等,當然也包含每日刷卡檔案自動匯入系統功能,設定說明如下圖所示: