Liferay的Notification通知是一個很好用的功能,不但在我們自行開發Portlet時可以引用,配合Json Web Service API還可以達到與其他系統串接的功能,以下紀錄;
一、 實作UserNotificationEventHandler - 自行開發Portlet時可直接使用
1. 首先創一個Portlet project,在這裡我們可取名為Notification-Demo-portlet
2. 創立一個package,並且將我們要用的MVC Portlet Java也一併創建進去如下;
UserNotificationPortlet:
3. 此時使用此程式已經可以達到傳送客製化訊息給使用者的功能,但我們還能夠進一步實作UserNotificationHandler,使其更貼近我們要的內容;
UserNotificationHandler:
4. 程式已經撰寫完成,但我們還需要針對Portlet作一些定義才能夠讓Liferay正確辨識,新增一個 demo-user-notification-definitions.xml(檔名自訂)內容如下;
demo-user-notification-definitions.xml:
此xml主要是用來定義訊息發送模式等等設定,接著還需要修改liferay-portlet.xml:
liferay-portlet.xml:
這邊主要是設定user-notification-definitions與user-notification-handler-class,也就是先前我們實作的class與xml的位置,設定完成之後就可以運作了,我們可以自行撰寫一隻jsp並且傳入參數呼叫看看:
若有出現我們的訊息通知與內容,便完成了。
二、結合JSON Web Service API使外部程式也能調用
若要將以上方法修改成JSON API來使用,需要加入以下步驟;
1. 創建一個Service Builder,Entity不設定任何欄位,因為我們只需要利用其所產生的impl class來進行方法的實作。
2. 創建完成後,找到對應的impl class(在這裡是demoNotificationCustomServiceImpl),並且撰寫內容如下;
其實程式內容和Portlet Class內撰寫的幾乎一樣,只是改寫在Impl之中而已,完成之後build service,再build wsdd,就可以在jsonws頁面內看到此方法了;
3. 最後可以在portal-ext.properties設定json.service.auth.token.enabled=false,如此一來便會略過檢查auth.token,我們便可直接用URL調用,另外還需要注意如果給予的參數內有"/",Liferay提供給我們的網址範例會判斷傳入參數錯誤,因此若有這種情況時,建議用傳統的&及?來為網址連結參數。
參考資料:
https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/json-web-services-invocation-examples
http://livewithliferay.blogspot.tw/search/label/custom%20portlet%20notifications