external_workflow: feed target data to substitutions context (#42652)

This commit is contained in:
Serghei Mihai 2020-05-12 15:56:56 +02:00
parent 053827b19b
commit 8ef0f08163
2 changed files with 42 additions and 11 deletions

View File

@ -4818,10 +4818,21 @@ def test_call_external_workflow_with_data_sourced_object(pub):
LoggedError.wipe()
carddef_wf = Workflow(name='Carddef Workflow')
st1 = carddef_wf.add_status(name='New')
action = carddef_wf.add_global_action('Delete', 'delete')
action.append_item('remove')
trigger = action.append_trigger('webservice')
carddef_wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(carddef_wf)
carddef_wf.backoffice_fields_formdef.fields = [
StringField(id='bo0', varname='bo', type='string', label='bo variable'),
]
update_action = carddef_wf.add_global_action('Update')
update_action.append_item('set-backoffice-fields')
setbo = update_action.items[0]
setbo.fields = [{'field_id': 'bo0',
'value': '{{ form_var_bo|default:"0"|add:1 }}'}]
trigger = update_action.append_trigger('webservice')
trigger.identifier = 'update'
delete = carddef_wf.add_global_action('Delete', 'delete')
delete.append_item('remove')
trigger = delete.append_trigger('webservice')
trigger.identifier = 'delete'
carddef_wf.store()
@ -4841,10 +4852,15 @@ def test_call_external_workflow_with_data_sourced_object(pub):
wf = Workflow(name='External actions')
st1 = wf.add_status('Action')
global_action = wf.add_global_action('Delete external linked object', 'delete')
action = global_action.append_item('external_workflow_global_action')
action.slug = 'carddef:%s' % carddef.url_name
action.trigger_id = 'action:%s' % trigger.identifier
update_global_action = wf.add_global_action('Update linked object data')
update_action = update_global_action.append_item('external_workflow_global_action')
update_action.slug = 'carddef:%s' % carddef.url_name
update_action.trigger_id = 'action:update'
delete_global_action = wf.add_global_action('Delete external linked object', 'delete')
delete_action = delete_global_action.append_item('external_workflow_global_action')
delete_action.slug = 'carddef:%s' % carddef.url_name
delete_action.trigger_id = 'action:delete'
wf.store()
datasource = {'type': 'carddef:%s' % carddef.url_name}
@ -4869,11 +4885,21 @@ def test_call_external_workflow_with_data_sourced_object(pub):
formdata.just_created()
formdata.perform_workflow()
perform_items([action], formdata)
perform_items([update_action], formdata)
assert LoggedError.count() == 0
assert carddef.data_class().count() == 1
data = carddef.data_class().select()[0]
assert data.data['bo0'] == '1'
perform_items([update_action], formdata)
data = carddef.data_class().select()[0]
assert data.data['bo0'] == '2'
perform_items([delete_action], formdata)
assert LoggedError.count() == 0
assert carddef.data_class().count() == 0
perform_items([action], formdata)
perform_items([delete_action], formdata)
assert LoggedError.count() == 1
logged_error = LoggedError.select()[0]
assert logged_error.summary == 'Could not find linked "Data" object by id %s' % carddata.id

View File

@ -146,7 +146,12 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
return
for target_data in self.iter_target_datas(formdata, objectdef):
perform_items(trigger.parent.items, target_data)
with get_publisher().substitutions.temporary_feed(target_data):
get_publisher().substitutions.reset()
get_publisher().substitutions.feed(get_publisher())
get_publisher().substitutions.feed(target_data.formdef)
get_publisher().substitutions.feed(target_data)
perform_items(trigger.parent.items, target_data)
register_item_class(ExternalWorkflowGlobalAction)