workflows: don't crash external workflow action on missing card/form (#44184)

This commit is contained in:
Frédéric Péters 2020-06-17 18:42:41 +02:00
parent 5076220306
commit 48d9398a9c
2 changed files with 15 additions and 5 deletions

View File

@ -3671,6 +3671,13 @@ def test_workflows_global_actions_external_workflow_action(pub):
resp = app.get('/backoffice/workflows/%s/status/%s/' % (workflow.id, st.id))
assert 'External workflow (not completed)' in resp.text
trigger.identifier = 'action:%s' % trigger.identifier
wf.store()
formdef.remove_self()
resp = app.get('/backoffice/workflows/%s/status/%s/' % (workflow.id, st.id))
assert 'External workflow (not completed)' in resp.text
resp = resp.click(href=re.compile(r'^items/1/$'), index=0)
def test_workflows_edit_carddata_action(pub):
create_superuser(pub)

View File

@ -91,6 +91,8 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
if 'trigger_id' in parameters and form.get('%sslug' % prefix):
object_def = self.get_object_def(form.get('%sslug' % prefix))
if not object_def:
return
triggers_names = [(None, '---', '')]
for trigger in self.get_workflow_webservice_triggers(object_def.workflow):
trigger_id = 'action:%s' % trigger.identifier
@ -104,11 +106,12 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
def get_line_details(self):
if self.slug and self.trigger_id:
objectdef = self.get_object_def()
trigger = self.get_trigger(objectdef.workflow)
if objectdef and trigger:
return _('action "%(trigger_name)s" on %(object_name)s') % {
'trigger_name': trigger.parent.name,
'object_name': objectdef.name}
if objectdef:
trigger = self.get_trigger(objectdef.workflow)
if trigger:
return _('action "%(trigger_name)s" on %(object_name)s') % {
'trigger_name': trigger.parent.name,
'object_name': objectdef.name}
return _('not completed')
def iter_target_datas(self, formdata, objectdef):