Мне нужно знать, когда пользователи изменяют какой-либо атрибут в своем профиле.
Я сделал хук, но некоторые поля, такие как день рождения, имеют одинаковое значение в функциях onAfterUpdate и onBeforeUpdate.
Я не знаю, как я могу это сделать, чтобы узнать, когда изменились пользовательские поля и настраиваемые поля. Я думал расширить профиль, но я не знаю, как и является ли это единственным или лучшим решением.
Это код портала.свойства:
value.object.listener.com.liferay.portal.model.User=com.rulessegmentation.hook.profile.CreateAccountHook
А это код хука:
public void onAfterUpdate(User user) throws ModelListenerException {
System.out.println("Hello UPDATE After");
try {
System.out.println(UserLocalServiceUtil.getUser(user.getUserId()).getBirthday());
System.out.println(user.getBirthday());
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void onBeforeUpdate(User user) throws ModelListenerException {
System.out.println("Hello UPDATE Before");
try {
System.out.println(UserLocalServiceUtil.getUser(user.getUserId()).getBirthday());
System.out.println(user.getBirthday());
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
И это вывод:
Здравствуйте, ОБНОВЛЕНИЕ до понедельника, 12 февраля, 00:00:00 по Гринвичу 1990 года, понедельник, 12 февраля, 00:00:00 по Гринвичу 1990 года.
Здравствуйте, ОБНОВЛЕНИЕ После понедельника, 12 февраля, 00:00:00 по Гринвичу 1990 года, понедельник, 12 февраля, 00:00:00 по Гринвичу 1990 года.
Спасибо!
Я переопределяю UserLocalService, чтобы знать атрибуты, которые изменяются, и то же самое для AddressLocalService. И это работает, но я не знаю, правильно ли я сделал, потому что другой хук теперь не работает. Я сделал хук и в файле liferay-hook.xml прописал это:
<hook>
<service>
<service-type>com.liferay.portal.service.UserLocalService</service-type>
<service-impl>com.segmentationProjecthookUpdate.hook.MyUserLocalServiceImpl</service-impl>
</service>
<service>
<service-type>com.liferay.portal.service.AddressLocalService</service-type>
<service-impl>com.segmentationProjecthookUpdate.hook.MyAddressLocalServiceImpl</service-impl>
</service>
</hook>
И в MyUserLocalServiceImpl.java: открытый класс MyUserLocalServiceImpl расширяет UserLocalServiceWrapper {
public MyUserLocalServiceImpl(UserLocalService userLocalService) {
super(userLocalService);
// TODO Auto-generated constructor stub
}
public User updateUser(long userId, String oldPassword, String newPassword1, String newPassword2, boolean passwordReset, String reminderQueryQuestion, String reminderQueryAnswer, String screenName, String emailAddress, long facebookId, String openId, String languageId, String timeZoneId, String greeting, String comments, String firstName, String middleName, String lastName, int prefixId, int suffixId, boolean male, int birthdayMonth, int birthdayDay, int birthdayYear, String smsSn, String aimSn, String facebookSn, String icqSn, String jabberSn, String msnSn, String mySpaceSn, String skypeSn, String twitterSn, String ymSn, String jobTitle, long[] groupIds, long[] organizationIds, long[] roleIds, List<UserGroupRole> userGroupRoles, long[] userGroupIds, ServiceContext serviceContext) {
System.out.println("UPDATE USER");
return getWrappedService().updateUser(userId, oldPassword, newPassword1, newPassword2,passwordReset, reminderQueryQuestion, reminderQueryAnswer,screenName, emailAddress, facebookId, openId, languageId,timeZoneId, greeting, comments, firstName, middleName, lastName,prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, smsSn, aimSn, facebookSn, icqSn, jabberSn, msnSn, mySpaceSn,skypeSn, twitterSn, ymSn, jobTitle, groupIds, organizationIds,roleIds, userGroupRoles, userGroupIds, serviceContext);
}
}
Это работает, но другой хук, который у меня есть для входа в систему, не работает.
Спасибо.
Я присоединил 2 крючка, и это работает.