古詩詞大全網 - 古詩大全 - liferay 怎麽進行二次開發

liferay 怎麽進行二次開發

當系統開發完成,部署實施上線時,需要初始化大量的用戶數據,如果壹個個的錄入,數據量少時還好,如果數據量比較大,還是讓人很崩潰的。此時,我們可以使用Liferay的API進行用戶的導入,Liferay本身並沒有提供CSV或EXCEL的用戶導入方法,需要我們有壹定的二次開發。

導入的方法大概有幾種:

(註意:本文的說明是基於Liferay6.2.1的版本,其他版本可能稍有差異)

1、LDAP的導入,就是我們在的用戶在LDAP中,讓Liferay從LDAP中自動導入,這樣的方法,可以參考前面的文章《Liferay 6開發學習(二十七):OpenLDAP與Liferay的集成》;

2、我們Liferay中寫壹個Portlet,調用Liferay的API進行導入。

3、我們在遠程或者另外獨立的工程中,調用Liferay的WebService接口進行導入。

寫Portlet進行導入

只所以要建立壹個Portlet,是因為我們在Portlet裏面可以方便的調用Liferay的API,新建壹個Portlet工程或者添加壹個Portlet。調用下面的方法進行添加。

UserServiceUtil.addUser(companyId, autoPassword, password1, password2, autoScreenName, screenName, emailAddress, facebookId, openId, locale, firstName, middleName, lastName, prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds, organizationIds, roleIds, userGroupIds, sendEmail, serviceContext)

說明:

1、添加時請保證使用超級管理員帳號登錄,不然會可能會提示權限不足。

2、上面的companyId,可以從上下文件中使用PortalUtil.getCompanyId(request)獲取。

3、autoPassword,壹般設置為false。為true時,會自動的生成密碼。

4、password1,和password2,就是密碼,保持壹致即可。

5、autoScreenName,壹般為false;

6、screenName,屏幕名稱,壹般是字母和數字的組合,默認不能為全數字,如果要讓他支持全數字,可以添加users.screen.name.allow.numeric=true,的配置到Portal-ext.properties文件中。

7、emailAddress,默認郵件地址為必填項,如果用戶中沒有郵件地址,則可以在後臺中添加配置, users.email.address.required=false,設置為郵件地址為非必須。此時emailAddress可以傳空值,否則會報錯。

8、facebookId,openId等,這些壹般沒用,我們傳值是可以facebookId傳0l(facebookId為long類型),openId傳"";

9、local,根據具體的情況吧,這個地方來存的是用戶的語言項和時區,國內的壹般可以使用固定值,或者是從request裏面取,PortalUtil.getLocale(request);

10、firstName, middleName, lastName這幾個值,很明顯。壹般是firstName為必值,其他幾個可以傳空。根據實際情況來傳吧。

11、 prefixId, suffixId,前綴和後綴。國內我們壹般都不用這些的,傳值都傳0即可。

12、male:是否是男性,傳true或false;

13、birthdayMonth, birthdayDay, birthdayYear:生日的月、日、年,int類型,根據情況傳,如果沒有,可以傳成1,1,1970.

14、jobTitle,職稱等,根據情況傳,沒有的話傳“”;

15、?0?2groupIds, organizationIds, roleIds, userGroupIds:long類型的數級,分別為當前用戶屬於的站點、組織機構、角色、用戶組等,如果不需要可以傳null,如果有需要傳long類型的數級,裏面的值為相應的站點ID,組織機構ID等。如果不是以管理員賬號登錄,此處傳值的話(傳null不會),可能會出現權限錯誤。

16、sendEmail,是否給用戶發郵件,根據情況來定吧,壹般為false。

17、serviceContext,可以從上下文件中取ServiceContext serviceContext = ServiceContextFactory.getInstance(request);

特殊情況

比如現在有壹個場景,是我們自己寫壹個用戶的註冊界面,又想在這個註冊後就關聯上相應的站點或組織機構,上面的接口必須要有權限才能添加,如何繞過相應的權限呢?調用下面的這個API。

UserLocalServiceUtil.addUserWithWorkflow(creatorUserId, companyId, autoPassword, password1, password2, autoScreenName, screenName, emailAddress, facebookId, openId, locale, firstName, middleName, lastName, prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds, organizationIds, roleIds, userGroupIds, sendEmail, serviceContext)

這個API和上面的相比多壹個參數,也就是第壹個參數,創建的用戶ID,這裏可以傳defaultUser.getUserId()。

User defaultUser = UserLocalServiceUtil.getDefaultUser(companyId);

其他的參數和上面的沒有差別,用這個方法添加站點等時,不會再要有相應的權限。