[VtigerCRM][進階] 使用工作流來滿足自動化處理

這裡獨立出來一篇給有需要的朋友知道,首先甚麼是工作流?當某個動作條件成立時,就會觸發一個處理行為。譬如說我希望在第一次建立Quote時,會自動發信給負責人;或者當淺在客戶成立時發送信件給負責人。如果你有這種自動處理的想法。那你需要使用工作流。

工作流已經預先好幾筆被設定好內容,譬如每次RMA服務單成立會自動發信給客戶跟負責人,如果你發現你沒有得到這樣的服務,那是你的定時任務沒有被驅動。

你可以新增你要的新工作流。工作流最大的問題有兩個,一個是你必須先讓『定時任務』被驅動起來,透過定時任務去執行工作流;另一個是你要熟悉工作流的編寫觀念語法。我只能協助前者如何設定,後者在新版Vtiger 6變得很好理解,基本上自己摸索不難,除了進階的客製化模組,能觸發的就是發信、建立待辦事項、日曆、修改某值等等觸發行為。

本篇教你如何驅動定時任務,另外可參考以前5.4的作法概念雷同,但建議本篇做法。





驅動方式很簡單,根據Windows與Linux不同,將下列指定檔案丟給OS進行工作排程。如果你跟我一樣用NAS,那就視同Linux作法。

Windows : vtiger6/cron/vtigercron.bat
Linux:vtiger6/cron/vtigercron.sh

這裡我不太需要教,Windows就在電腦管理->工作排程器。指定15分鐘去跑這個檔案一次。Linux就去vi 你的crontab檔案。一樣這裡設定15分鐘跑一次。Linux的版本很多Crontab所以位置不一定,NAS作法也不一樣。

以我的QNAP NAS(Linux)為例,前往etc/config/crontab修改新增下列,並restart驅動

*/15 * * * * /share/MD0_DATA/Web/vcrm6/cron/vtigercron.sh 2>/share/MD0_DATA/Web/vcrm6/log/debug.log 1>2

我不是很熟練vi,所以我習慣這樣做(在我的QNAP上)
1. 用FileZilla透過port 22取得檔案路徑etc/config/crontab修改Code並回傳。
2. putty進去,輸入crontab -l 檢查目前的預設排程清單
3. 輸入crontab /etc/config/crontab,載入我剛修改的清單
4. 輸入crontab -l,是否變成我要的清單
5. 輸入/etc/init.d/crond.sh restart,重啟Cron服務

Well,這裡講的做法根據不同環境有所差別,Linux或NAS的人請自行取得修改cron的方法,我這裡只PO QNAP作法



到這裡你已經完成驅動了,在一定時間內 (15min)就會驅動Vtiger的定時任務。前往Vtiger→設定→定時任務。看一下畫面是否跟我差不多。如果跟我長得不一樣,那就是可能你的環境不支援php-cli,請自行確認。如果你畫面跟我一樣,接下來就不用改了。下面只是給還是無法驅動的人看。

驅動成功就會有右邊的資料



我這裡的作法是放棄php-cli的驅動方式,因為通常在你的網站環境不一定能支援php-cli。因此我需要進行兩大修改作業

1. 先取得server的PHP_SAPI值,並替換掉cli

修改root/vtigercron.php的第42行的 if(PHP_SAPI === "cli" ||......。將cli替換成你的PHP_SAPI實際內容。通常是apache2handler,不確定的話可以先在40行插入 echo(PHP_SAPI."\n"); 做個測試。執行網頁http://YOUR_IP/vcrm6/vtigercron.php,確認是否顯示為apache2handler。

取消剛剛的40行修改,正式替換cli變成apache2handler。再執行網頁http://YOUR_IP/vcrm6/vtigercron.php,應該會出現類似下列一大串的東西

[CRON],"1405409688.96",http://192.168.1.251/vcrm6,Instance,"2014-07-15 07:34:48","",[STARTS] [INFO] Workflow - not ready to run as the time to run again is not completed [INFO] RecurringInvoice - not ready to run as the time to run again is not completed [INFO] SendReminder - not ready to run as the time to run again is not completed [INFO] MailScanner - not ready to run as the time to run again is not completed [INFO] Scheduled Import - not ready to run as the time to run again is not completed [CRON],"1405409688.96",http://192.168.1.251/vcrm6,Instance,"2014-07-15 07:34:48","2014-07-15 07:34:49",[ENDS]

跟我差不多有一大串東西時,這裡就OK了,檢查Vtiger→設定→定時任務。看一下畫面是否一樣。目前階段為:當手動去執行這個網頁就會驅動定時任務一次。


2. 修改cron/crontab.sh,將系統排程的處理事項做修改。全部刪除代碼(或全部前端加上#做忽略),只新增下列

 wget "http://localhost/vtigercron.php" -O /dev/null  

這裡是做為執行一個驅動網頁,也就是剛剛我們手動的驅動網頁。

整個顛倒回顧,
1. 透過crontab,每15分鐘就會執行一個叫做crontab.sh的工作,並記錄log放置在log/debug.log
2. 這個工作內容,是執行網頁做為驅動vtiger的定時任務,但可能無法驅動成功。
3. 因為環境問題,我們把cli改成PHP_SAPI值,讓驅動可以成功化。


Bye!



參考:
https://discussions.vtiger.com/index.php?p=/discussion/170338/scheduler-cron-job-not-working-access-denied/p1
http://www.puritys.me/docs-blog/article-241-PHP-%E5%88%A4%E6%96%B7%E6%98%AF%E5%90%A6%E7%82%BA-Command-Line-%E7%9A%84%E6%96%B9%E5%BC%8F.html

留言

  1. 作者已經移除這則留言。

    回覆刪除
    回覆
    1. 已回信
      資安建議,您可移除電話與信箱避免網蟲竊取

      刪除
  2. 江大:
    感謝您的分享!小弟從5.4一路跟隨您的腳步將公司的CRM導入到6.0.公司也漸漸依賴上CRM.再次向您感謝.但近日發生指定任務相關的問題,想與您請益,公司CRM是安裝在server 2012 R2 裡VM 中的centos ,但在指定的任務中每一個項目都是激活的狀態,但是掃描的時間 都已經是4天以前的事情,能否點解哪裡出了問題?

    回覆刪除
    回覆
    1. Sorry

      忙著處理公司網站好幾個月,回家都都懶得開mail跟顧blog
      應該跟VM沒啥關係,只是個OS層而已

      centos我不熟,既然你曾經正常一段日子,代表原本設定都OK

      當初你怎麼設定cron指令,這點要去檢查一下
      我不知道你是選擇直接用linux crontab去驅動php-cli的vtiger6/cron/vtigercron.sh
      還是像我這樣弄一個wget來驅動webpage,用crontab去執行vtigercron.php

      反正,先檢查你的crontab是否正常
      很有可能你的cron被reset或被關閉了

      另一個做法,上面提到的cron兩種方式兩種都試
      我是因為不支援php-cli才去用後者
      一直都正常

      我有次的經驗是也突然失敗
      是因為曾經OS(QNAP NAS)進行版本升級或重新開機過會導致原本的crontab被回朔到原廠狀態
      所以我是寫到QNAP官方建議的crontab作法

      刪除
  3. 大大您好
    非常感謝您熱心的教學文與繁體中文檔案 ^^
    小弟目前遇到的問題想跟您請益
    目前使用Vtiger 6.1 WIndows安裝檔安裝於Windows server 2008 R2 64Bit上
    也已加入工作排程 但是仍是無法驅動 請問還有啥可能的原因嗎?

    回覆刪除

張貼留言

留言請注意禮節與尊重他人,良好的交流環境需要你我共同維護。

VtigerCRM 相關留言討論,請改至FaceBook社團申請加入使用
https://www.facebook.com/groups/vTigerCRMtoTaiwan/