Re: [Zope-CMF] Re: Workflow state change event

2008-05-16 Thread Tim Terlegård

On May 15, 2008, at 10:31 PM, Martin Aspeli wrote:


Tim Terlegård wrote:

I was wondering if it perhaps would make sense to move the
ActionSucceededEvent notification after the reindexing of the
workflow status has been done?
doActionFor(...) calls _invokeWithNotification(...) and the bottom
of that method looks like this:
def _invokeWithNotification(self, wfs, ob, action, func, args, kw):
...
for w in wfs:
w.notifySuccess(ob, action, res)
notify(ActionSucceededEvent(ob, w, action, res))
if reindex:
self._reindexWorkflowVariables(ob)
return res
In an event handler I would like to use the catalog and search for   
published
objects, but it's not possible because the catalog is updated  
after  the event

handler is triggered.


That shouldn't matter, though - you get the object as part of the  
event, no need to search for it.



The grandparent of the object is doing a catalog search, so the object  
that

currently got a new workflow state isn't found.

The whole use case:

siteroot
   - folderA
  - docB

I have an 'is_empty' index that is based on catalog searches. When  
folderA
doesn't contain any published objects it's considered empty. When  
workflow
is changed on object docB, going from visible to published, I need to  
reindex
the object, and also the parent and the grandparent etc.  So when the  
state
change event handler for docB calls  
folderA.reindexObject(idxs=['is_empty'])
it will not find docB because the catalog does not reflect the state  
change yet.


/Tim___
Zope-CMF maillist  -  Zope-CMF@lists.zope.org
http://mail.zope.org/mailman/listinfo/zope-cmf

See http://collector.zope.org/CMF for bug reports and feature requests


[Zope-CMF] Re: Workflow state change event

2008-05-16 Thread Laurence Rowe

Tim Terlegård wrote:

On May 15, 2008, at 10:31 PM, Martin Aspeli wrote:


Tim Terlegård wrote:

I was wondering if it perhaps would make sense to move the
ActionSucceededEvent notification after the reindexing of the
workflow status has been done?
doActionFor(...) calls _invokeWithNotification(...) and the bottom
of that method looks like this:
def _invokeWithNotification(self, wfs, ob, action, func, args, kw):
...
for w in wfs:
w.notifySuccess(ob, action, res)
notify(ActionSucceededEvent(ob, w, action, res))
if reindex:
self._reindexWorkflowVariables(ob)
return res
In an event handler I would like to use the catalog and search for  
published
objects, but it's not possible because the catalog is updated after  
the event

handler is triggered.


That shouldn't matter, though - you get the object as part of the 
event, no need to search for it.



The grandparent of the object is doing a catalog search, so the object that
currently got a new workflow state isn't found.

The whole use case:

siteroot
   - folderA
  - docB

I have an 'is_empty' index that is based on catalog searches. When folderA
doesn't contain any published objects it's considered empty. When workflow
is changed on object docB, going from visible to published, I need to 
reindex

the object, and also the parent and the grandparent etc.  So when the state
change event handler for docB calls 
folderA.reindexObject(idxs=['is_empty'])
it will not find docB because the catalog does not reflect the state 
change yet.


Reindex the object in your event handler where you reindex the parents.

Laurence

___
Zope-CMF maillist  -  Zope-CMF@lists.zope.org
http://mail.zope.org/mailman/listinfo/zope-cmf

See http://collector.zope.org/CMF for bug reports and feature requests


[Zope-CMF] Re: Workflow state change event

2008-05-15 Thread Martin Aspeli

Tim Terlegård wrote:

I was wondering if it perhaps would make sense to move the
ActionSucceededEvent notification after the reindexing of the
workflow status has been done?

doActionFor(...) calls _invokeWithNotification(...) and the bottom
of that method looks like this:

def _invokeWithNotification(self, wfs, ob, action, func, args, kw):
 ...
 for w in wfs:
 w.notifySuccess(ob, action, res)
 notify(ActionSucceededEvent(ob, w, action, res))
 if reindex:
 self._reindexWorkflowVariables(ob)
 return res

In an event handler I would like to use the catalog and search for  
published
objects, but it's not possible because the catalog is updated after  
the event

handler is triggered.


That shouldn't matter, though - you get the object as part of the event, 
no need to search for it.


Martin

--
Author of `Professional Plone Development`, a book for developers who
want to work with Plone. See http://martinaspeli.net/plone-book

___
Zope-CMF maillist  -  Zope-CMF@lists.zope.org
http://mail.zope.org/mailman/listinfo/zope-cmf

See http://collector.zope.org/CMF for bug reports and feature requests