[Zope3-Users] Re: catalog of objects' states (hurry.workflow)
Tobias Rodäbel
tobias.rodaebel at mac.com
Tue Jul 31 16:49:09 EDT 2007
Philipp von Weitershausen wrote:
> Alek Kowalczyk wrote:
>> Hello again,
>> I have a rather big tree of MyObjects. MyObjects are adaptable to
>> hurry.workflow's IWorklowState. Now I'd like to create a catalog
>> to index all
>> MyObjects by their current states. How to do that? An option might
>> be(?) to add to MyObject property like that:
>> @property
>> def currentState(self): return IWorkflowState(self).getState()
>> and index this property. But I'm not sure whether it is elegant
>> solution, as it requires the object to
>> know that it has workflow and (too) strong link between object and
>> adapter.
>
> Right. Fortunately, indexes know how to adapt. So, in order to
> index the workflow state of your objects, configure a FieldIndex
> (or ValueIndex from zc.catalog) to the IWorkflowState interface.
> Specify the 'getState' attribute and check the 'callable' option
> (because it's a method).
>
> When encountering an object to be indexed, the FieldIndex (or
> ValueIndex) will then try to adapt it to IWorkflowState. If that
> succeeds (and it will for your MyObjects), it will call the getState
> () method on that adapter and index the return value.
That worked for me with zope.app.catalog:
catalog = Catalog()
catalog[u'workflow_state'] = FieldIndex(interface=IWorkflowState,
field_name='getState', field_callable=True)
More information about the Zope3-users
mailing list