關於Deluge
Zoho專有腳本語言可以處理開發人員可能要執行的任何任務。 憑藉內置的包裝程序和強大的執行引擎,它已發展成爲最快,最靈活的腳本語言之一。(官方介紹自動翻譯結果)
我這次要幹什麼
使用ZohoCRM不到3個月,想在裏面配置一個字段驗證規則,確保結束時間必須大於開始時間。
實現的步驟
找可行的方法
中國的服務商建議我用函數驗證實現,他們服務是收費的,所以只能告訴我怎麼實現,我要自己研究實現。
鼓搗腳本我最擅長了,那就開始對着文檔敲吧,當然敲之前心裏還是屢一下實現的邏輯,雖然這個並不複雜。
函數實現的邏輯
在保存和編輯表單時,驗證開始時間和結束時間的關係。
- 驗證結束時間必須大於開始時間。
- 驗證開始時間必須小於結束時間。
將上述函數驗證分別分配到結束時間和開始時間的驗證邏輯即可。
實現的代碼
Zoho deluge
entityMap = crmAPIRequest.toMap().get("record");
// field17,field16 的確認參考下圖
endTime = entityMap.get("field17").toTime("yyyy-MM-dd'T'HH:mm:ss");
startTime = entityMap.get("field16").toTime("yyyy-MM-dd'T'HH:mm:ss");
response = Map();
if(endTime > startTime)
{
response.put('status','success');
}
else
{
response.put('status','failure');
response.put('message','服務開始時間不能晚於結束時間.');
}
return response;
確認字段的名稱需要到開發者空間的API裏找。
我踩過的坑
本身這件事情可以自己搞定的,結果花費了很多時間去找zoho的官方客服,官方客戶直接在線聯繫即可,非常方便,服務及時,熱情,有問必答,幫寫代碼,文末附上他們提供的函數代碼。
爲什麼花了這麼多時間呢?代碼就這麼簡單。
一開始我的代碼是這麼寫的,沒加 “yyyy-MM-dd’T’HH:mm:ss”,使用說明上也沒說要加。
結果獲取的時間只有日期,時間都是00:00:00
endTime = entityMap.get("field17").toDateTime();
startTime = entityMap.get("field16").toDateTime();
官方的客服是很熱情,但是一直沒有看出來這個問題,給了我一個邏輯更復雜的驗證代碼,讓我測試,直到第二次才解決,遠程的時候也是必須使用zoho join,那叫一個卡,經常說不能控制。
TeamViewer已經做得那麼好了,不能兼容一下嗎?
Zoho 官方給的函數驗證代碼
entityMap = crmAPIRequest.toMap().get("record");
d2 = entityMap.get("field16").toDateTime();
d1 = entityMap.get("field6").toDateTime();
response = Map();
diff = d1.daysBetween(d2);
if(diff > 0)
{
response.put('status','success');
}
else if(diff == 0)
{
hdiff = d1.hoursbetween(d2);
if(hdiff == 0)
{
m1 = d1.getMinutes();
m2 = d2.getMinutes();
h1 = d1.getHour();
h2 = d2.getHour();
if(h1 < h2)
{
response.put('status','success');
}
else if(h1 == h2)
{
m = m1 - m2;
if(m >= 0)
{
response.put('status','failure');
response.put('message','end Time should earlier then start time.');
}
}
}
else
{
response.put('status','success');
}
}
else if(diff < 0)
{
response.put('status','failure');
response.put('message','end Time should earlier then start time.');
}
return response;
我的提議
把文檔寫清楚,你好,我好,大家好,自助解決問題,節省多少時間。
本着造福後人的原則,我就給zoho 提了些意見,希望在使用說明上加強一下,但是人家的回覆是這是因爲CRM的時間是ISO時間,必須指定格式,沒接下茬兒。
那我就寫出來分享一下吧,希望能節省你一點兒時間。
官方的答覆如下,供您參考:
Please find the below clarifications from the deluge team
toTime() and toTime(yyyy-MM-dd’T’HH:mm:ss); and toDateTime(yyyy-MM-dd’T’HH:mm:ss); -->These are same, but will differ for the from format.On conversion of the format, ie From which format to which format , it will be differ.
zoho.currenttime.toTime();
from CRM field, we will display fields in ISO format so have to use the below format.
endTime = entityMap.get(“field16”).toDateTime(yyyy-MM-dd’T’HH:mm:ss);