Foren

modelListener overridden method get previous data.

thumbnail
Tanaji M. Londhe, geändert vor 11 Jahren.

modelListener overridden method get previous data.

Regular Member Beiträge: 194 Beitrittsdatum: 25.04.12 Neueste Beiträge
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
Tanaji M. Londhe, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 194 Beitrittsdatum: 25.04.12 Neueste Beiträge
Can anybody help me, its urgent requirement plz.
thumbnail
Tanaji M. Londhe, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 194 Beitrittsdatum: 25.04.12 Neueste Beiträge
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
David H Nebinger, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Liferay Legend Beiträge: 14914 Beitrittsdatum: 02.09.06 Neueste Beiträge
you do not need to override listeners, all listeners for a particular model will get invoked.
thumbnail
Tanaji M. Londhe, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 194 Beitrittsdatum: 25.04.12 Neueste Beiträge
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
Nikhil Nishchal, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 174 Beitrittsdatum: 22.06.12 Neueste Beiträge
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
Tanaji M. Londhe, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 194 Beitrittsdatum: 25.04.12 Neueste Beiträge
I perform re-indexing in my code but its not working.
thumbnail
Gaurav Jain, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 145 Beitrittsdatum: 31.01.11 Neueste Beiträge
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
Tanaji M. Londhe, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 194 Beitrittsdatum: 25.04.12 Neueste Beiträge
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
Gaurav Jain, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 145 Beitrittsdatum: 31.01.11 Neueste Beiträge
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
Tanaji M. Londhe, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 194 Beitrittsdatum: 25.04.12 Neueste Beiträge
can you explain me how to get Organization type from assetEntry?
thumbnail
Gaurav Jain, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 145 Beitrittsdatum: 31.01.11 Neueste Beiträge
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
Tanaji M. Londhe, geändert vor 11 Jahren.

RE: modelListener overridden method get previous data.

Regular Member Beiträge: 194 Beitrittsdatum: 25.04.12 Neueste Beiträge
Thanks Gaurav, Its working fine. emoticon