wf/external_workflow: select specific formdef/cardef in evolution parts (#45659)

This commit is contained in:
Thomas NOËL 2020-07-31 14:47:59 +02:00
parent 337cf7f8c8
commit d2526a9dad
2 changed files with 28 additions and 2 deletions

View File

@ -4878,17 +4878,41 @@ def test_call_external_workflow_with_evolution_linked_object(pub):
assert external_formdef.data_class().count() == 1
assert external_carddef.data_class().count() == 1
external_formdata = external_formdef.data_class().select()[0]
# remove external formdata
perform_items([action], formdata)
assert LoggedError.count() == 0
assert external_formdef.data_class().count() == 0
assert external_carddef.data_class().count() == 1
# formdata is already deleted: cannot find it again
perform_items([action], formdata)
assert LoggedError.count() == 1
logged_error = LoggedError.select()[0]
assert logged_error.summary == 'Could not find linked "External Form" object by id %s' % external_formdata.id
assert logged_error.exception_class == 'KeyError'
# try remove an unexisting carddef: do nothing
unused_carddef = CardDef()
unused_carddef.name = 'External Card (not used)'
unused_carddef.fields = []
unused_carddef.workflow = external_wf
unused_carddef.store()
LoggedError.wipe()
action.slug = 'carddef:%s' % unused_carddef.url_name
wf.store()
perform_items([action], formdata)
assert LoggedError.count() == 0
assert external_formdef.data_class().count() == 0
assert external_carddef.data_class().count() == 1
# remove the right carddef
action.slug = 'carddef:%s' % external_carddef.url_name
wf.store()
perform_items([action], formdata)
assert LoggedError.count() == 0
assert external_formdef.data_class().count() == 0
assert external_carddef.data_class().count() == 0
def test_call_external_workflow_with_data_sourced_object(pub):
FormDef.wipe()

View File

@ -132,8 +132,10 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
# search in evolution
for part in formdata.iter_evolution_parts():
if isinstance(part, LinkedFormdataEvolutionPart) and part.formdef_class == objectdef.__class__:
data_ids.append(part.formdata_id)
if isinstance(part, LinkedFormdataEvolutionPart):
part_identifier = '%s:%s' % (part.formdef.xml_root_node, part.formdef.url_name)
if part_identifier == self.slug:
data_ids.append(part.formdata_id)
for target_id in data_ids:
try: