workflows: include link to external workflow action in inspect (#69003) #899
|
@ -140,6 +140,7 @@ def test_call_external_workflow_with_evolution_linked_object(pub):
|
|||
def test_call_external_workflow_with_data_sourced_object(pub, admin_user):
|
||||
FormDef.wipe()
|
||||
CardDef.wipe()
|
||||
Workflow.wipe()
|
||||
|
||||
carddef_wf = Workflow(name='Carddef Workflow')
|
||||
carddef_wf.add_status('status')
|
||||
|
@ -213,8 +214,17 @@ def test_call_external_workflow_with_data_sourced_object(pub, admin_user):
|
|||
|
||||
assert [x for x in data.get_workflow_traces() if x.event][-1].event == 'global-external-workflow'
|
||||
resp = login(get_app(pub), username='admin', password='admin').get(data.get_backoffice_url() + 'inspect')
|
||||
# check tracing link is correct:
|
||||
assert '/global-actions/ac1/items/1/' in resp.text
|
||||
# check event line is a link to global action
|
||||
assert resp.pyquery('#inspect-timeline .event a').text() == 'Trigger by external workflow'
|
||||
assert (
|
||||
resp.pyquery('#inspect-timeline .event a').attr.href
|
||||
== 'http://example.net/backoffice/workflows/1/global-actions/ac1/'
|
||||
)
|
||||
# check action tracing link are correct
|
||||
assert [x.attrib['href'] for x in resp.pyquery('#inspect-timeline a.tracing-link')] == [
|
||||
'http://example.net/backoffice/workflows/1/status/1/',
|
||||
'http://example.net/backoffice/workflows/1/global-actions/ac1/items/1/',
|
||||
]
|
||||
|
||||
perform_items([update_action], formdata)
|
||||
data = carddef.data_class().select()[0]
|
||||
|
|
|
@ -312,7 +312,9 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem):
|
|||
get_publisher().substitutions.feed(caller_source)
|
||||
|
||||
target_data.record_workflow_event(
|
||||
'global-external-workflow', global_action_id=trigger.parent.id
|
||||
'global-external-workflow',
|
||||
external_workflow_id=trigger.get_workflow().id,
|
||||
global_action_id=trigger.parent.id,
|
||||
)
|
||||
perform_items(
|
||||
trigger.parent.items,
|
||||
|
|
|
@ -109,14 +109,18 @@ class WorkflowTrace(sql.WorkflowTrace):
|
|||
|
||||
def get_external_url(self, global_event):
|
||||
try:
|
||||
return '%sitems/%s/' % (
|
||||
self.get_base_url(
|
||||
self.external_workflow,
|
||||
self.event_args.get('external_status_id'),
|
||||
global_event,
|
||||
),
|
||||
self.event_args.get('external_item_id'),
|
||||
)
|
||||
if self.event_args.get('external_status_id'):
|
||||
return '%sitems/%s/' % (
|
||||
self.get_base_url(
|
||||
self.external_workflow,
|
||||
self.event_args.get('external_status_id'),
|
||||
global_event,
|
||||
),
|
||||
self.event_args.get('external_item_id'),
|
||||
)
|
||||
elif self.event_args.get('global_action_id'):
|
||||
return self.get_base_url(self.external_workflow, global_event=global_event)
|
||||
|
||||
except KeyError:
|
||||
return '#missing-%s' % self.event_args.get('external_item_id')
|
||||
|
||||
|
@ -129,7 +133,7 @@ class WorkflowTrace(sql.WorkflowTrace):
|
|||
|
||||
return self.formdata.get_backoffice_url()
|
||||
|
||||
def get_base_url(self, workflow, status_id, global_event):
|
||||
def get_base_url(self, workflow, status_id=None, global_event=None):
|
||||
if global_event:
|
||||
if not global_event.event_args:
|
||||
raise KeyError()
|
||||
|
@ -166,8 +170,10 @@ class WorkflowTrace(sql.WorkflowTrace):
|
|||
if (
|
||||
self.event_args
|
||||
and self.event_args.get('external_workflow_id')
|
||||
and self.event_args.get('external_status_id')
|
||||
and self.event_args.get('external_item_id')
|
||||
and (
|
||||
(self.event_args.get('external_status_id') and self.event_args.get('external_item_id'))
|
||||
or self.event_args.get('global_action_id')
|
||||
)
|
||||
):
|
||||
return '<li><span class="event"><a href="%s">%s</a></span></li>' % (
|
||||
self.get_external_url(global_event),
|
||||
|
|
Loading…
Reference in New Issue