跳轉到

程式資訊

  • 程式 IDEVENTPROJECT
  • 所屬子系統:L.聯絡傳訊
  • 狀態:stable

排程事件(專案)

功能簡介

「排程事件(專案)」用來建立以專案為單位的排程事件:一個專案(項目)底下掛多筆事件項目,每筆事件可以設定預定時間、通知對象與通知方式,必要時還能掛上自動執行的排程任務(AutoPilot),讓系統到時間自動跑指定的 procedure 並把結果留存供查閱。

這支表單同時是「行事曆」上專案類事件的資料來源——事件建立、修改或審核後,主畫面右上角的行事曆會自動重新整理,把事件顯示在對應日期。適合 PM/主管建立專案里程碑、定期提醒、自動化批次作業的排程。

與「排程事件(個人)」的關係

本表單在程式中固定篩選 項目類型 = 專案(程式碼 FilterCondition),只列出專案類事件;個人類事件由另一支同家族的程式 Eventself(排程事件(個人))維護。兩者欄位與操作相近,但屬於各自獨立的程式與權限。

前置需求

  • 權限:L.聯絡傳訊 → L-050 排程事件(專案) 的瀏覽/修改權限。
  • 基礎資料:事件能否正確指派擁有者與通知對象,取決於下列主檔——
資料 影響的結果
員工主檔(PERDATA) 負責人、個人擁有者、通知人員的代號/姓名;通知用的 Email/Line 帳號
部門主檔(DEPT) 擁有者類別為「部門」時可選的部門代號/名稱
AutoPilot 任務(程式內註冊) 事件要自動執行時可選的「單據別+執行方法」清單;只列出你有瀏覽權限的程式
通知服務設定(Email/Line) 是否能在事件觸發時送出通知

自動執行需要排程器配合

在事件上設定的「自動執行」是交給後端排程服務(AutoPilot)在預定時間觸發。手動操作本表單不會立即執行該任務;表單只負責登錄事件與參數。

操作步驟

本表單是主檔+明細結構:上方是專案(項目)主檔,下方格線是該專案的事件項目明細。

一、建立專案主檔

  1. 從主選單開啟 L 聯絡傳訊 → 排程事件(專案)
  2. 點工具列 新增,輸入主檔欄位:
    • 項目編號:專案的識別碼(主鍵)。
    • 年度月份:格式 yyyy/MM,用於「大量新增」與「使用年度月份更新」時推算事件日期。
    • 項目名稱項目描述:專案的名稱與說明。
    • 負責人:輸入員工代號(可按放大鏡查詢),系統會自動帶出負責人姓名
  3. 儲存

新增專案主檔

二、加入事件項目(大量新增)

事件項目不是直接在格線逐列敲,而是透過 大量新增 用一張事件範本一次展開出多筆:

  1. 在編輯狀態下,按主檔右側的 大量新增 按鈕,系統先建立一筆主檔再彈出新增事件範本視窗。
  2. 在範本視窗填寫:說明擁有者類別/代號預定時間日期類別(只執行一次/每日/每周/每月/每年)、前置時間/持續時間通知方式/通知人員、要不要自動執行執行方法等。
  3. 按範本視窗的確定後,系統依日期類別把單一範本展開成多筆事件項目,並依序補上序號寫進下方明細格線。

    日期類別決定展開幾筆

    • 只執行一次:產生 1 筆,落在預定時間當天。
    • 每日/每周/每月/每年:從預定時間起,依間隔重複產生事件,直到範本的「計算截止日期」(切換到這些類別時自動帶成系統當日起算 +5 年)。每周會先對齊到指定的星期幾,每月可指定第幾天(負數代表月底回推)。

三、調整明細與通知

在下方格線可逐欄勾選/修改每筆事件:是否停用、已完成、已通知、說明、擁有者類別/代號、預定時間/結束時間、通知時間、是否通知、通知方式、通知帳號、執行後完成、是否自動執行、單據別、頁面、執行方法、參數等(詳見欄位說明)。

四、使用年度月份更新

  1. 若要把既有事件「整批搬到主檔目前的年度月份」,按 使用年度月份更新
  2. 系統跳出確認視窗,確認後會依主檔的年度月份逐筆處理事件(詳見欄位連動與附加功能)。

    目前此按鈕不會真正改動既有事件

    程式中的搬移邏輯(Renew)目前只在記憶體內算出新日期、卻沒有把結果寫回原事件,因此按下後既有事件的預定時間/通知時間並不會改變。此為已知限制,需要調整事件日期時請直接在明細格線手動修改,或刪除後用 大量新增 重建。

五、查看執行結果

  1. 對已經被排程器自動執行過的事件,點該列最左邊的 查看 按鈕。
  2. 系統以該事件的執行 GUID結果表撈出該次執行寫入的資料,彈出「執行結果」視窗動態顯示欄位與筆數。

查看執行結果

六、儲存與審核

  1. 編輯完成後按 儲存
  2. 若該專案掛有工作流程,按 審核;審核完成後行事曆會自動重新整理。

欄位說明

主檔(專案)

欄位 必填 說明/格式/預設
項目編號 專案主鍵,最長 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 年)
擁有者類別 個人
擁有者代號 目前登入者帳號
通知方式 Email
通知(是否通知) 是(Y
執行後完成 是(Y

欄位連動與附加功能

這一節把「輸入某欄位/按某按鈕後系統會做什麼」逐條列出,全部來自實際程式碼。

主檔欄位連動

  • 當你輸入「負責人」代號,系統會自動以員工主檔查出負責人姓名並填入旁邊的唯讀欄。移動到另一筆專案時(AfterMoverRecord)也會重新帶一次負責人姓名。
  • 項目類型固定為「專案」:本表單載入時自動套用篩選 項目類型 = 專案,因此只會看到專案類事件,看不到個人類事件。
  • 程式內保留一個輔助欄 項目編號1:設定它時會以「負責人+項目編號1」自動組出項目編號(目前畫面上未顯示此輸入框,屬程式預留)。

大量新增 按鈕

  • 當你按 大量新增,系統會:
    1. 先以目前主檔自動進入新增/建立一筆主檔(AddExecute)。若目前不在編輯狀態,按鈕不會有動作。
    2. 若主檔的年度月份空白或格式不正確,自動補上系統當年月。
    3. 以年度月份的年、月組出一張預設事件範本(預定時間=該月 1 日、日期類別=只執行一次),擁有者欄位是否唯讀則看主檔的項目類型是否為「個人」。
    4. 彈出新增事件範本視窗讓你填內容;按確定後,依日期類別把範本展開成多筆事件項目(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)前會檢核:若說明空白,系統提示「請輸入說明」並擋下,不會關閉視窗。

使用年度月份更新

  • 當你按 使用年度月份更新,系統會:

    1. 跳出確認視窗「使用年度月份更新事件事件?」(標題文字確實重複「事件」二字)。
    2. 確認後,逐筆依主檔的年度月份換算新日期:保留原本的「日」與時分秒、只換成新的年月,並一併算出新的通知時間(新預定時間-前置時間)與預定結束時間(新預定時間+持續時間)。

    目前算完不會寫回

    程式碼中的 Renew 把上述新值建在一個新的暫時物件上後就丟棄,並未指派回原事件,因此實際上不會改動格線裡的既有事件。此為已知限制,請以手動修改明細為準。

明細列 查看 按鈕(執行結果)

  • 當你按某列的 查看,系統會(ViewResultExecute):
    1. 檢查該事件是否有執行 GUID——沒有就提示「該事件無執行紀錄,請先執行排程」。
    2. 檢查是否設定了結果表——沒有就提示「該事件未設定 結果表」。
    3. 兩者都齊備時,以「執行 GUID」為條件對該結果表查詢(透過 DARB_GETDATA4),開出「執行結果」視窗動態顯示該次執行寫入的欄位與筆數。

通知與自動執行(後端行為)

  • 事件的通知帳號會依「通知人員+通知方式」自動組出:Email 取員工的 email、Line 取員工的 Line 帳號(多位通知人員以逗號串接)。
  • 排程器觸發事件時(AutoPilotMethod_LogSysExec 等任務)會以參數呼叫指定 procedure,並把本次執行的 GUID 寫回事件的執行 GUID,結果寫入結果表,供前述 查看 讀取。

行事曆連動

  • 事件移動紀錄/審核後(AfterMoverRecordOnAfterAudit),主畫面的行事曆會自動重新整理,讓新增或變更的專案事件即時反映在日曆上。

尚未提供的連動

程式碼中保留了「修改負責人時自動把負責人加進各事件通知人員」的邏輯,但目前已被註解停用;變更負責人不會自動調整既有事件的通知人員,需手動維護。

自動執行範例:安全庫存檢查

安全庫存檢查(TWORK_AUTO_SAFETYSTOCK)是一支放在集中自動化庫darbnogiauto1 / 各客戶 darb<客戶>auto1)的自動化 procedure,由排程器在預定時間自動跑、把低於安全庫存的品號+未來 6 個月採購/製令未交量寫進歷史表供查閱(決策見 ADR 0065)。下面示範怎麼掛一個每天自動跑的安全庫存檢查事件。

設定步驟

  1. L 聯絡傳訊 → 排程事件(專案)新增 一筆專案主檔(項目編號、名稱、負責人)後 儲存
  2. 編輯狀態按 大量新增,在「新增事件範本」視窗:
    • 預定時間:第一次要跑的時間。
    • 日期類別:要每天跑就選 每日(會展開到 +5 年)。
    • 是否自動執行:勾選(必填,不勾排程器不會跑)。
    • 執行項目:下拉選 「執行 Log_Sys_Exec」(LogSysExec)。選完系統會自動把 單據別 帶成 EVENTPROJECT執行方法 帶成 LogSysExec,並帶出一份預設 參數 JSON。
  3. 編輯 參數 JSON,只需改兩個值(ProcedureDispatcher):

    {
      "DataEvent": "AutopilotLogSysExec",
      "Procedure": "TWORK_AUTO_SAFETYSTOCK",
      "Dispatcher": "SKD",
      "LP_P1": "{eventpkid}"
    }
    
  4. 按確定展開事件 → 儲存審核

參數說明

參數 說明
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

  1. 先把該 proc 建在集中自動化庫(公司來源資料用本庫的同名 view 抓 csa、產出表建在本庫——見 ADR 0065)。
  2. 建事件時 執行項目執行 Log_Sys_Exec、參數設 Procedure=<你的 proc>Dispatcher=SKD;該 proc 第一個參數若是事件 pkid 就用 LP_P1={eventpkid},其餘參數放 LP_P2LP_P12
  3. 要結果檢視就讓 proc 把 結果表 寫回 eventitem(參考 TWORK_AUTO_SAFETYSTOCK 結尾)。

常見問題

按了 大量新增 卻沒有彈出範本視窗、明細也沒新增?

大量新增 只有在表單處於新增/修改編輯狀態時才有作用。若目前是一般瀏覽狀態(Normal),按鈕不會動作。請先按 新增修改 進入編輯,再按 大量新增

事件項目存不進去、或某幾列被忽略?

事件項目以說明是否有值作為「是否為有效資料」的判斷。說明空白的列會被視為待刪除而不會存檔。請確認每筆要保留的事件都填了說明。

按事件列的 查看 出現「無執行紀錄」或「未設定 結果表」?

查看 是顯示排程器自動執行後留下的結果。若事件還沒被排程器跑過(沒有執行 GUID),或範本沒設定要寫入的結果表,就會出現這兩個提示。請先確認事件設了自動執行與結果表,並等排程器執行過。

通知帳號是空的,事件到時間沒收到通知?

通知帳號是依通知人員+通知方式自動帶出的:Email 取員工 email、Line 取員工 Line 帳號。若員工主檔沒維護對應帳號,通知帳號會是空白而無法送出。請先到員工主檔補齊 email/Line。

為什麼這裡看不到個人事件?

本表單固定只顯示專案類事件(項目類型 = 專案)。個人類事件請改用「排程事件(個人)」(Eventself)維護。

改了範本的「計算截止日期」卻自動跳回預定時間?

計算截止日期不允許早於預定時間:若設定的截止日比預定時間早,系統會自動把它拉回等於預定時間。請把截止日設在預定時間之後。

按了 使用年度月份更新 但事件日期沒變?

這是已知限制。目前程式裡的搬移邏輯(Renew)只在記憶體算出新日期、並未寫回原事件,所以按下後格線裡的事件不會有任何變化。需要調整既有事件的日期時,請直接在明細格線手動修改,或刪除後重新用 大量新增 產生。

相關功能


需補截圖清單

以下截圖待功能 runtime 驗收後補拍(放 docs/L-Communication/images/):

  1. eventproject-step1.png — 新增專案主檔(含負責人帶名稱)
  2. eventproject-step5.png — 事件明細列按 查看 開啟的「執行結果」視窗
  3. (建議)大量新增彈出的「新增事件範本」視窗全貌(含日期類別/擁有者類別連動)