掲示板

modelListener overridden method get previous data.

thumbnail
11年前 に Tanaji M. Londhe によって更新されました。

modelListener overridden method get previous data.

Regular Member 投稿: 194 参加年月日: 12/04/25 最新の投稿
Hi,
Here I extend myclass using BaseModelListener class override some method like.
@Override
public void onAfterUpdate(User model) throws ModelListenerException {.........}
In this method i try to access Organization which related the User using --------> list = model.getOrganizations();
But here always I am getting previous value of a organization.
How sholud i get selected organization in a listener.
thumbnail
11年前 に Tanaji M. Londhe によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 194 参加年月日: 12/04/25 最新の投稿
Can anybody help me, its urgent requirement plz.
thumbnail
11年前 に Tanaji M. Londhe によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 194 参加年月日: 12/04/25 最新の投稿
Hi,
I update my server from 6.1.0 to 6.1.1
I have similar with Organization listener for custom field in onAfterUpdate() mtd. But in new version of a liferay 6.1.1 the issue is resolve.
Now i get updated value for custom field in onAfterUpdate() mtd. emoticon

But for UserListener issue is not solve till now. list = model.getOrganizations(); Still I am gettting old value for organization.
thumbnail
11年前 に David H Nebinger によって更新されました。

RE: modelListener overridden method get previous data.

Liferay Legend 投稿: 14914 参加年月日: 06/09/02 最新の投稿
you do not need to override listeners, all listeners for a particular model will get invoked.
thumbnail
11年前 に Tanaji M. Londhe によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 194 参加年月日: 12/04/25 最新の投稿
Hi David,
Thanks for your reply.
You are saying is complete right, but here my requirement is to add some other functionality which is related to non-liferay DB. (like performing CRUD operation on non-liferay DB.)
So thats why I override User and Organization listeners in my code using hook.
But my problem is updating user's Organization through control panel.
I am not getting updated value of select org for particular user in my overriden listener ---
@Override
public void onAfterUpdate(User model) throws ModelListenerException {
System.out.println("onAfterUpdate()"+model.getUserId());
try {
List<Organization> orgList = model.getOrganizations();
for (Iterator iterator = orgList.iterator(); iterator.hasNext();) {
Organization organization = (Organization) iterator.next();
System.out.println("User Organization : "+organization.getName());
// here i am getting old(previous) value of a Organization, when i update any user.
}
} catch (PortalException e) {
e.printStackTrace();
} catch (SystemException e) {
e.printStackTrace();
}
super.onAfterUpdate(model);
}
thumbnail
11年前 に Nikhil Nishchal によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 174 参加年月日: 12/06/22 最新の投稿
On model change try to reindex organization manually and then check.
Hope if re-indexing issue then this may be solve.

Indexer indexer = IndexerRegistryUtil.getIndexer(Organization.class);

indexer.reindex(organization);

and then again get organization by organizationId.
thumbnail
11年前 に Tanaji M. Londhe によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 194 参加年月日: 12/04/25 最新の投稿
I perform re-indexing in my code but its not working.
thumbnail
11年前 に Gaurav Jain によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 145 参加年月日: 11/01/31 最新の投稿
Once I had similar problems, but don't remember exactly either it was for User or for CalEvent model.

But on checking the source, I found that modelListeners are being invoked by persistenceImpl class methods. For taking User instance: updateUser method of userLocalServiceImpl calls userPersistance update method which further invokes model listeners on this model. And in userLocalServiceImpl updateUser method it further performs more operations like expando, contact etc after the persistance update has been done.

In my case, I remember that I solved my problem by calling model listener of assetEntry and checking user /calEvent instance there instead of calling user model listener.

But I might not be completely right !!
thumbnail
11年前 に Tanaji M. Londhe によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 194 参加年月日: 12/04/25 最新の投稿
In my case, I remember that I solved my problem by calling model listener of assetEntry and checking user /calEvent instance there instead of calling user model listener.

Hi Gaurav,
I am not getting this part, can you elaborate this thing.
thumbnail
11年前 に Gaurav Jain によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 145 参加年月日: 11/01/31 最新の投稿
Tanaji M. Londhe:


Hi Gaurav,
I am not getting this part, can you elaborate this thing.


You may try following:
Instead of applying model listener on Organization; apply on AssetEntry. And then onAfterUpdate of it, you can detect if that assetEntry is of type Organization, then execute your code.
thumbnail
11年前 に Tanaji M. Londhe によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 194 参加年月日: 12/04/25 最新の投稿
can you explain me how to get Organization type from assetEntry?
thumbnail
11年前 に Gaurav Jain によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 145 参加年月日: 11/01/31 最新の投稿
public class CustomAssetEntryListener extends BaseModelListener<assetentry>{
        @Override
        public void onAfterUpdate(AssetEntry assetEntry)
                throws ModelListenerException {

                long orgClassNameId=ClassNameLocalServiceUtil.getClassNameId(Organization.class);
                if(assetEntry.getClassNameId()==orgClassNameId){
                     // Your code goes here
                }

                super.onAfterUpdate(assetEntry);
        }</assetentry>
thumbnail
11年前 に Tanaji M. Londhe によって更新されました。

RE: modelListener overridden method get previous data.

Regular Member 投稿: 194 参加年月日: 12/04/25 最新の投稿
Thanks Gaurav, Its working fine. emoticon