[Framework-Team] Re: new workflows

Martin Aspeli optilude at gmx.net
Thu Mar 1 21:03:31 UTC 2007


Alex Clark wrote:
> Martin, are you looking at this or do you want me to
> (creating the migration if/when it is needed/wanted) ?

I'm going to look at it on Saturday, but feel free to pre-empt me. :)

Martin

> On Wed, Feb 28, 2007 at 03:50:21PM +0100, Raphael Ritz wrote:
>> Martin Aspeli schrieb:
>>
>> [..]
>>
>>
>>> I need to look at this in more detail, but we'd need to find a way of
>>> doing it at a lower level. Hell, I'd copy the XML-parsing code and
>>> make it more defensive if necessary. :)
>>>
>>> My hope (without looking at the code in detail) was that the logic
>>> that parses the Definition.xml file and creates states, transitions
>>> and so on is in a separate function to the logic that parses the main
>>> workflows.xml file (which points to workflows to install, but also
>>> does type mapping and what not). If we could invoke this logic
>>> separately, we could make sure it was only ever called on XML files
>>> corresponding to non-existant workflows.
>>>
>> I just looked into this a bit more and indeed it isn't that hard ;-)
>>
>> The following at least works for me as a script to be run via
>>
>>    zopectl run <scriptname>
>>
>> on a Zope instance with a Plone site called 'plone'
>>
>> -------code starts -----
>>
>> from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition
>> from Products.DCWorkflow.exportimport import \
>>    WorkflowDefinitionConfigurator, _initDCWorkflow
>>
>> new_workflow_ids = ('wf1','wf2')
>>
>> site = app.plone
>>
>> wft = site.portal_workflow
>>
>> for wf_id in new_workflow_ids:
>>     if wf_id in wft.objectIds():
>>         print "%s already there; doing nothing" % wf_id
>>         continue
>>
>>     body = 
>> open('/extra2/sites/bccnappdev/Products/BCCNApplications/profiles/default/workflows/reviewer_comments/definition.xml','r').read()
>>     # this needs to point to the right definition file(s) of course
>>     encoding = 'utf-8'
>>
>>     wft._setObject(wf_id, DCWorkflowDefinition(wf_id))
>>     wf = wft[wf_id]
>>     wfdc = WorkflowDefinitionConfigurator(wf)
>>
>>     ( workflow_id
>>       , title
>>       , state_variable
>>       , initial_state
>>       , states
>>       , transitions
>>       , variables
>>       , worklists
>>       , permissions
>>       , scripts
>>       ) = wfdc.parseWorkflowXML(body, encoding)
>>
>>     _initDCWorkflow( wf
>>                      , title
>>                      , state_variable
>>                      , initial_state
>>                      , states
>>                      , transitions
>>                      , variables
>>                      , worklists
>>                      , permissions
>>                      , scripts
>>                      , site     # not sure what to pass here
>>                                 # the site or the wft?
>>                                 # (does it matter at all?)
>>                      )
>>     print "Added %s" % wf_id
>>
>> import transaction
>> transaction.commit()
>>
>> ------ code ends ---------------
>>
>> From here it shouldn't be hard to turn this into a migration step
>> in case we want one.
>>
>> Raphael
>>
>>
>> _______________________________________________
>> Framework-Team mailing list
>> Framework-Team at lists.plone.org
>> http://lists.plone.org/mailman/listinfo/framework-team
> 





More information about the Framework-Team mailing list