程式資訊
- 程式 ID:
EVENTPROJECT - 所屬子系統:L.聯絡傳訊
- 狀態:stable
排程事件(專案)¶
功能簡介¶
「排程事件(專案)」用來建立以專案為單位的排程事件:一個專案(項目)底下掛多筆事件項目,每筆事件可以設定預定時間、通知對象與通知方式,必要時還能掛上自動執行的排程任務(AutoPilot),讓系統到時間自動跑指定的 procedure 並把結果留存供查閱。
這支表單同時是「行事曆」上專案類事件的資料來源——事件建立、修改或審核後,主畫面右上角的行事曆會自動重新整理,把事件顯示在對應日期。適合 PM/主管建立專案里程碑、定期提醒、自動化批次作業的排程。
與「排程事件(個人)」的關係
本表單在程式中固定篩選 項目類型 = 專案(程式碼 FilterCondition),只列出專案類事件;個人類事件由另一支同家族的程式 Eventself(排程事件(個人))維護。兩者欄位與操作相近,但屬於各自獨立的程式與權限。
前置需求¶
- 權限:L.聯絡傳訊 →
L-050 排程事件(專案)的瀏覽/修改權限。 - 基礎資料:事件能否正確指派擁有者與通知對象,取決於下列主檔——
| 資料 | 影響的結果 |
|---|---|
| 員工主檔(PERDATA) | 負責人、個人擁有者、通知人員的代號/姓名;通知用的 Email/Line 帳號 |
| 部門主檔(DEPT) | 擁有者類別為「部門」時可選的部門代號/名稱 |
| AutoPilot 任務(程式內註冊) | 事件要自動執行時可選的「單據別+執行方法」清單;只列出你有瀏覽權限的程式 |
| 通知服務設定(Email/Line) | 是否能在事件觸發時送出通知 |
自動執行需要排程器配合
在事件上設定的「自動執行」是交給後端排程服務(AutoPilot)在預定時間觸發。手動操作本表單不會立即執行該任務;表單只負責登錄事件與參數。
操作步驟¶
本表單是主檔+明細結構:上方是專案(項目)主檔,下方格線是該專案的事件項目明細。
一、建立專案主檔¶
- 從主選單開啟 L 聯絡傳訊 → 排程事件(專案)。
- 點工具列
新增,輸入主檔欄位:- 項目編號:專案的識別碼(主鍵)。
- 年度月份:格式
yyyy/MM,用於「大量新增」與「使用年度月份更新」時推算事件日期。 - 項目名稱、項目描述:專案的名稱與說明。
- 負責人:輸入員工代號(可按放大鏡查詢),系統會自動帶出負責人姓名。
- 點
儲存。

二、加入事件項目(大量新增)¶
事件項目不是直接在格線逐列敲,而是透過 大量新增 用一張事件範本一次展開出多筆:
- 在編輯狀態下,按主檔右側的
大量新增按鈕,系統先建立一筆主檔再彈出新增事件範本視窗。 - 在範本視窗填寫:說明、擁有者類別/代號、預定時間、日期類別(只執行一次/每日/每周/每月/每年)、前置時間/持續時間、通知方式/通知人員、要不要自動執行與執行方法等。
-
按範本視窗的確定後,系統依日期類別把單一範本展開成多筆事件項目,並依序補上序號寫進下方明細格線。
日期類別決定展開幾筆
只執行一次:產生 1 筆,落在預定時間當天。每日/每周/每月/每年:從預定時間起,依間隔重複產生事件,直到範本的「計算截止日期」(切換到這些類別時自動帶成系統當日起算 +5 年)。每周會先對齊到指定的星期幾,每月可指定第幾天(負數代表月底回推)。
三、調整明細與通知¶
在下方格線可逐欄勾選/修改每筆事件:是否停用、已完成、已通知、說明、擁有者類別/代號、預定時間/結束時間、通知時間、是否通知、通知方式、通知帳號、執行後完成、是否自動執行、單據別、頁面、執行方法、參數等(詳見欄位說明)。
四、使用年度月份更新¶
- 若要把既有事件「整批搬到主檔目前的年度月份」,按
使用年度月份更新。 -
系統跳出確認視窗,確認後會依主檔的年度月份逐筆處理事件(詳見欄位連動與附加功能)。
目前此按鈕不會真正改動既有事件
程式中的搬移邏輯(
Renew)目前只在記憶體內算出新日期、卻沒有把結果寫回原事件,因此按下後既有事件的預定時間/通知時間並不會改變。此為已知限制,需要調整事件日期時請直接在明細格線手動修改,或刪除後用大量新增重建。
五、查看執行結果¶
- 對已經被排程器自動執行過的事件,點該列最左邊的
查看按鈕。 - 系統以該事件的執行 GUID 去結果表撈出該次執行寫入的資料,彈出「執行結果」視窗動態顯示欄位與筆數。

六、儲存與審核¶
- 編輯完成後按
儲存。 - 若該專案掛有工作流程,按
審核;審核完成後行事曆會自動重新整理。
欄位說明¶
主檔(專案)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 項目編號 | ✔ | 專案主鍵,最長 20 字 |
| 項目名稱 | — | 最長 50 字 |
| 年度月份 | — | 格式 yyyy/MM;大量新增時若空白或無法解析,自動帶入系統當年月 |
| 負責人 | — | 員工代號(最長 10 字);輸入後自動帶出負責人姓名 |
| 負責人姓名 | — | 唯讀,依負責人代號自員工主檔帶出 |
| 項目描述 | — | 多行文字,最長 200 字 |
明細(事件項目)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 序號 | ✔ | 唯讀,大量新增時自動以三位數(D3)遞增 |
| 是否停用/已完成/已通知 | — | 勾選框(Y/空白) |
| 說明 | ✔ | 事件內容,最長 200 字;空白的列存檔時不會被當成有效資料(刪除判斷依據) |
| 擁有者類別 | — | 下拉:公司/部門/個人/系統 |
| 擁有者代號 | — | 員工或部門代號;類別為「系統」時固定為 SYSTEM |
| 預定時間 | — | yyyy/MM/dd HH:mm |
| 預定結束時間 | — | yyyy/MM/dd HH:mm;=預定時間+持續時間 |
| 通知時間 | — | yyyy/MM/dd HH:mm;=預定時間-前置時間 |
| 是否通知 | — | 勾選框 |
| 通知方式 | — | 下拉:待辦事項+Email/待辦事項+Line |
| 通知帳號 | — | 依通知人員與通知方式自動帶出(Email 或 Line) |
| 執行後完成 | — | 勾選框;排程任務執行成功後是否自動標記已完成 |
| 是否自動執行 | — | 勾選框;是否交給排程器自動執行 |
| 單據別/執行方法/參數/參數顯示 | — | 自動執行所要呼叫的 AutoPilot 任務與其參數:在範本選「執行項目」後,單據別=該任務的 ProgramClass、執行方法=任務名稱、參數=任務預設參數展開後的值(由 SelectedMethod 自動帶入) |
| 頁面 | — | 自動執行對應的頁面代號;目前程式未自動填入,僅供保留 |
事件範本(大量新增視窗)預設值¶
範本視窗開啟時由程式(SetNewData)帶入下列預設:
| 欄位 | 預設值 |
|---|---|
| 預定時間 | 系統今天 |
| 日期類別 | 清單第一項(只執行一次) |
| 計算截止日期 | 預定月份的當月最後一天(之後改日期類別時會改成 +5 年) |
| 擁有者類別 | 個人 |
| 擁有者代號 | 目前登入者帳號 |
| 通知方式 | |
| 通知(是否通知) | 是(Y) |
| 執行後完成 | 是(Y) |
欄位連動與附加功能¶
這一節把「輸入某欄位/按某按鈕後系統會做什麼」逐條列出,全部來自實際程式碼。
主檔欄位連動¶
- 當你輸入「負責人」代號,系統會自動以員工主檔查出負責人姓名並填入旁邊的唯讀欄。移動到另一筆專案時(
AfterMoverRecord)也會重新帶一次負責人姓名。 - 項目類型固定為「專案」:本表單載入時自動套用篩選
項目類型 = 專案,因此只會看到專案類事件,看不到個人類事件。 - 程式內保留一個輔助欄 項目編號1:設定它時會以「負責人+項目編號1」自動組出項目編號(目前畫面上未顯示此輸入框,屬程式預留)。
大量新增 按鈕¶
- 當你按
大量新增,系統會:- 先以目前主檔自動進入新增/建立一筆主檔(
AddExecute)。若目前不在編輯狀態,按鈕不會有動作。 - 若主檔的年度月份空白或格式不正確,自動補上系統當年月。
- 以年度月份的年、月組出一張預設事件範本(預定時間=該月 1 日、日期類別=只執行一次),擁有者欄位是否唯讀則看主檔的項目類型是否為「個人」。
- 彈出新增事件範本視窗讓你填內容;按確定後,依日期類別把範本展開成多筆事件項目(
CreateEvent),自動補序號(接續現有最大序號 +1,三位數)與關聯到主檔,最後加入下方明細格線。
- 先以目前主檔自動進入新增/建立一筆主檔(
事件範本視窗的連動¶
- 當你切換「擁有者類別」,系統會切換代號欄位的查詢來源:
- 選「部門」→ 代號改用部門主檔(DEPT)查詢。
- 選「個人」→ 代號改用員工主檔(PERDATA)查詢。
- 選「系統」→ 代號鎖定為
SYSTEM且不可編輯。
- 當你切換「日期類別」,系統會自動調整「預定天」與「計算截止日期」預設:
- 只執行一次 → 預定天 0。
- 每日 → 預定天 0、截止日 +5 年。
- 每周 → 預定天 1(星期一)、截止日 +5 年。
- 每月 → 預定天 1、截止日 +5 年。
- 每年 → 預定天 0、截止日 +5 年。
- 計算截止日期不可早於預定時間:若你把截止日設得比預定時間還早,系統會自動把它拉回等於預定時間。
- 前置時間/持續時間可用「天」輸入:範本提供「前置時間天」「持續時間天」兩個輔助欄,輸入天數會自動換算成秒(×86400)存進實際欄位,反之亦然。
- 在範本的「執行項目」下拉選定一個 AutoPilot 任務後,系統會:
- 自動把單據別設成該任務的 ProgramClass、執行方法設成任務名稱,並帶入該任務的預設參數(JSON)。
- 「執行項目」清單只列出你有瀏覽權限的程式所對應的任務(程式內以使用者權限表
PermissionTable過濾,且任務的 ProgramClass 要在可瀏覽清單內)。 - 參數 JSON 會依語系把欄位名翻譯成可讀名稱顯示;按確定展開事件時再還原成原始鍵名。
- 參數支援占位符(如
{d}=排程當日、{-d1}=上月最後一天、{eventpkid}=事件 pkid),排程當下才展開成實際值。
- 按確定(ReturnCommand)前會檢核:若說明空白,系統提示「請輸入說明」並擋下,不會關閉視窗。
使用年度月份更新¶
-
當你按
使用年度月份更新,系統會:- 跳出確認視窗「使用年度月份更新事件事件?」(標題文字確實重複「事件」二字)。
- 確認後,逐筆依主檔的年度月份換算新日期:保留原本的「日」與時分秒、只換成新的年月,並一併算出新的通知時間(新預定時間-前置時間)與預定結束時間(新預定時間+持續時間)。
目前算完不會寫回
程式碼中的
Renew把上述新值建在一個新的暫時物件上後就丟棄,並未指派回原事件,因此實際上不會改動格線裡的既有事件。此為已知限制,請以手動修改明細為準。
明細列 查看 按鈕(執行結果)¶
- 當你按某列的
查看,系統會(ViewResultExecute):- 檢查該事件是否有執行 GUID——沒有就提示「該事件無執行紀錄,請先執行排程」。
- 檢查是否設定了結果表——沒有就提示「該事件未設定 結果表」。
- 兩者都齊備時,以「執行 GUID」為條件對該結果表查詢(透過
DARB_GETDATA4),開出「執行結果」視窗動態顯示該次執行寫入的欄位與筆數。
通知與自動執行(後端行為)¶
- 事件的通知帳號會依「通知人員+通知方式」自動組出:Email 取員工的 email、Line 取員工的 Line 帳號(多位通知人員以逗號串接)。
- 排程器觸發事件時(
AutoPilotMethod_LogSysExec等任務)會以參數呼叫指定 procedure,並把本次執行的 GUID 寫回事件的執行 GUID,結果寫入結果表,供前述查看讀取。
行事曆連動¶
- 事件移動紀錄/審核後(
AfterMoverRecord、OnAfterAudit),主畫面的行事曆會自動重新整理,讓新增或變更的專案事件即時反映在日曆上。
尚未提供的連動
程式碼中保留了「修改負責人時自動把負責人加進各事件通知人員」的邏輯,但目前已被註解停用;變更負責人不會自動調整既有事件的通知人員,需手動維護。
自動執行範例:安全庫存檢查¶
安全庫存檢查(TWORK_AUTO_SAFETYSTOCK)是一支放在集中自動化庫(darbnogiauto1 / 各客戶 darb<客戶>auto1)的自動化 procedure,由排程器在預定時間自動跑、把低於安全庫存的品號+未來 6 個月採購/製令未交量寫進歷史表供查閱(決策見 ADR 0065)。下面示範怎麼掛一個每天自動跑的安全庫存檢查事件。
設定步驟¶
- 開 L 聯絡傳訊 → 排程事件(專案),
新增一筆專案主檔(項目編號、名稱、負責人)後儲存。 - 編輯狀態按
大量新增,在「新增事件範本」視窗:- 預定時間:第一次要跑的時間。
- 日期類別:要每天跑就選
每日(會展開到 +5 年)。 - 是否自動執行:勾選(必填,不勾排程器不會跑)。
- 執行項目:下拉選 「執行 Log_Sys_Exec」(LogSysExec)。選完系統會自動把 單據別 帶成
EVENTPROJECT、執行方法 帶成LogSysExec,並帶出一份預設 參數 JSON。
-
編輯 參數 JSON,只需改兩個值(
Procedure與Dispatcher):{ "DataEvent": "AutopilotLogSysExec", "Procedure": "TWORK_AUTO_SAFETYSTOCK", "Dispatcher": "SKD", "LP_P1": "{eventpkid}" } -
按確定展開事件 →
儲存→審核。
參數說明¶
| 參數 | 值 | 說明 |
|---|---|---|
| Procedure | TWORK_AUTO_SAFETYSTOCK |
要執行的自動化 proc 名稱 |
| Dispatcher | SKD |
關鍵:走排程專屬派發器 DARB_LOG_SYS_SKD_EXEC,把目標導到集中自動化庫。留空會走主派發器(→公司庫 csa)而找不到 proc |
| LP_P1 | {eventpkid} |
保持預設。執行時自動換成本事件 pkid,即 TWORK_AUTO_SAFETYSTOCK 的 @eventitempkid 參數 |
| 結果表 | (不用填) | proc 執行時會自動寫回 twork_auto_safetystockhistory,之後按該列 查看 即可看結果 |
單據別要用 EVENTPROJECT,不要改成 SQLPROCEDURE
EVENTPROJECT(選 LogSysExec 後的預設)走後端排程器(AutoPilot)→ 經 Dispatcher=SKD 導到集中自動化庫,才找得到 TWORK_AUTO_SAFETYSTOCK。
若把單據別改成 SQLPROCEDURE,會改走 CY 的 SQL-Agent 排程 TWORK_WKFLOW_EVENTITEM,它是 EXEC dbo.<執行方法> 直接在公司庫跑——但這支 proc 已不在公司庫、且要經 SKD 派發器,會找不到而失敗。
查看結果走同一條派發器
事件被跑過後,按明細列 查看 時系統會讀事件參數的 Dispatcher:為 SKD 就用排程派發器 + 集中自動化庫的 DARB_GETDATA4 去讀 twork_auto_safetystockhistory,所以結果檢視能正確讀到新庫的資料。
加掛其他自動化 proc(通用作法)¶
要新增別的自動排程 proc,同上流程,差別只在參數的 Procedure:
- 先把該 proc 建在集中自動化庫(公司來源資料用本庫的同名 view 抓 csa、產出表建在本庫——見 ADR 0065)。
- 建事件時 執行項目 選
執行 Log_Sys_Exec、參數設Procedure=<你的 proc>、Dispatcher=SKD;該 proc 第一個參數若是事件 pkid 就用LP_P1={eventpkid},其餘參數放LP_P2~LP_P12。 - 要結果檢視就讓 proc 把
結果表寫回 eventitem(參考TWORK_AUTO_SAFETYSTOCK結尾)。
常見問題¶
按了 大量新增 卻沒有彈出範本視窗、明細也沒新增?
大量新增 只有在表單處於新增/修改編輯狀態時才有作用。若目前是一般瀏覽狀態(Normal),按鈕不會動作。請先按 新增 或 修改 進入編輯,再按 大量新增。
事件項目存不進去、或某幾列被忽略?
事件項目以說明是否有值作為「是否為有效資料」的判斷。說明空白的列會被視為待刪除而不會存檔。請確認每筆要保留的事件都填了說明。
按事件列的 查看 出現「無執行紀錄」或「未設定 結果表」?
查看 是顯示排程器自動執行後留下的結果。若事件還沒被排程器跑過(沒有執行 GUID),或範本沒設定要寫入的結果表,就會出現這兩個提示。請先確認事件設了自動執行與結果表,並等排程器執行過。
通知帳號是空的,事件到時間沒收到通知?
通知帳號是依通知人員+通知方式自動帶出的:Email 取員工 email、Line 取員工 Line 帳號。若員工主檔沒維護對應帳號,通知帳號會是空白而無法送出。請先到員工主檔補齊 email/Line。
為什麼這裡看不到個人事件?
本表單固定只顯示專案類事件(項目類型 = 專案)。個人類事件請改用「排程事件(個人)」(Eventself)維護。
改了範本的「計算截止日期」卻自動跳回預定時間?
計算截止日期不允許早於預定時間:若設定的截止日比預定時間早,系統會自動把它拉回等於預定時間。請把截止日設在預定時間之後。
按了 使用年度月份更新 但事件日期沒變?
這是已知限制。目前程式裡的搬移邏輯(Renew)只在記憶體算出新日期、並未寫回原事件,所以按下後格線裡的事件不會有任何變化。需要調整既有事件的日期時,請直接在明細格線手動修改,或刪除後重新用 大量新增 產生。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/L-Communication/images/):
eventproject-step1.png— 新增專案主檔(含負責人帶名稱)eventproject-step5.png— 事件明細列按查看開啟的「執行結果」視窗- (建議)大量新增彈出的「新增事件範本」視窗全貌(含日期類別/擁有者類別連動)