Vo Minh Thu (OpenERP) has proposed merging lp:~openerp-dev/openobject-server/trunk-methflow-thu into lp:openobject-server.
Requested reviews: OpenERP Core Team (openerp) For more details, see: https://code.launchpad.net/~openerp-dev/openobject-server/trunk-methflow-thu/+merge/146872 -- https://code.launchpad.net/~openerp-dev/openobject-server/trunk-methflow-thu/+merge/146872 Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/trunk-methflow-thu.
=== modified file 'doc/index.rst' --- doc/index.rst 2013-02-05 17:23:41 +0000 +++ doc/index.rst 2013-02-06 15:05:29 +0000 @@ -35,6 +35,7 @@ .. toctree:: :maxdepth: 1 + orm-methods.rst api_models.rst Concepts === added file 'doc/orm-methods.rst' --- doc/orm-methods.rst 1970-01-01 00:00:00 +0000 +++ doc/orm-methods.rst 2013-02-06 15:05:29 +0000 @@ -0,0 +1,51 @@ +.. _orm-methods: + +ORM methods +=========== + +.. _orm-workflows: + +Workflow-related methods +------------------------ + +.. versionadded:: 7.1 + +Creating, deleting, or otherwise manipulating workflow instances is possible +right from a Model instance. (Previously, workflows were handled throught a +call to ``LocalService('workflow')``. Using the ORM methods is now the preferred +way.) + +.. currentmodule:: openerp.osv.orm + +.. automethod:: BaseModel.create_workflow + :noindex: + + This is used instead of ``LocalService('workflow').trg_create()``. + +.. automethod:: BaseModel.delete_workflow + :noindex: + + This is used instead of ``LocalService('workflow').trg_delete()``. + +.. automethod:: BaseModel.redirect_workflow + :noindex: + +.. method:: BaseModel.signal_xxx(cr, uid, ids) + :noindex: + + Sends a signal ``xxx`` to the workflow instances bound to the given record + IDs. (This is implemented using ``__getattr__`` so no source link is + rendered on the right.) + + This is used instead of ``LocalService('workflow').trg_validate()``. + + +.. note:: + Low-level access to the workflows is still possible by using the + ``openerp.workflow`` module, that is, in a similar way to what was possible + with the previous ``LocalService('workflow')`` access. This may be useful + when looking-up a model in the registry and/or its records is not necessary. + For instance when working with raw model names and record IDs is preferred (to + avoid hitting unnecessarily the database). But this is something that should be + carefully considered as it would bypass the ORM methods (and thus any inherited + behaviors). === modified file 'openerp/osv/orm.py' --- openerp/osv/orm.py 2013-01-16 16:40:25 +0000 +++ openerp/osv/orm.py 2013-02-06 15:05:29 +0000 @@ -3928,6 +3928,31 @@ result[res_id] = wf_service.trg_validate(uid, self._name, res_id, signal, cr) return result + def create_workflow(self, cr, uid, ids): + """Create a workflow instance for each given record IDs.""" + wf_service = netsvc.LocalService("workflow") + for res_id in ids: + wf_service.trg_create(uid, self._name, res_id, cr) + return True + + def delete_workflow(self, cr, uid, ids): + """Delete the workflow instances bound to the given record IDs.""" + wf_service = netsvc.LocalService("workflow") + for res_id in ids: + wf_service.trg_create(uid, self._name, res_id, cr) + return True + + def redirect_workflow(self, cr, uid, old_new_ids): + """ + Rebind the workflow instance bound to the given 'old' record IDs to + the given 'new' IDs. (``old_new_ids`` is a list of pairs + ``(old, new)``. + """ + wf_service = netsvc.LocalService("workflow") + for old_id, new_id in old_new_ids: + wf_service.trg_redirect(uid, self._name, old_id, new_id, cr) + return True + def unlink(self, cr, uid, ids, context=None): """ Delete records with given ids @@ -5251,6 +5276,20 @@ """ stuff to do right after the registry is built """ pass + def __getattr__(self, name): + if name.startswith('signal_'): + signal_name = name[len('signal_'):] + assert signal_name + def handle_workflow_signal(cr, uid, ids): + workflow_service = netsvc.LocalService("workflow") + res = {} + for id in ids: + # TODO consolidate trg_validate() and the functions it calls to work on a list of IDs. + res[id] = workflow_service.trg_validate(uid, self._name, id, signal_name, cr) + return res + return handle_workflow_signal + return super(BaseModel, self).__getattr__(name) + # keep this import here, at top it will cause dependency cycle errors import expression
_______________________________________________ Mailing list: https://launchpad.net/~openerp-dev-gtk Post to : openerp-dev-gtk@lists.launchpad.net Unsubscribe : https://launchpad.net/~openerp-dev-gtk More help : https://help.launchpad.net/ListHelp