fix: When there is a form node in the loop node, the loop data is lost (#4214)
parent
62873d882f
commit
c0c15d8983
|
|
@ -225,6 +225,9 @@ class LoopWorkFlowPostHandler(WorkFlowPostHandler):
|
||||||
class BaseLoopNode(ILoopNode):
|
class BaseLoopNode(ILoopNode):
|
||||||
def save_context(self, details, workflow_manage):
|
def save_context(self, details, workflow_manage):
|
||||||
self.context['result'] = details.get('result')
|
self.context['result'] = details.get('result')
|
||||||
|
for key, value in details['context'].items():
|
||||||
|
if key not in self.context:
|
||||||
|
self.context[key] = value
|
||||||
self.answer_text = str(details.get('result'))
|
self.answer_text = str(details.get('result'))
|
||||||
|
|
||||||
def get_answer_list(self) -> List[Answer] | None:
|
def get_answer_list(self) -> List[Answer] | None:
|
||||||
|
|
@ -262,7 +265,13 @@ class BaseLoopNode(ILoopNode):
|
||||||
_write_context=get_write_context(loop_type, array, number, loop_body, stream),
|
_write_context=get_write_context(loop_type, array, number, loop_body, stream),
|
||||||
_is_interrupt=_is_interrupt_exec)
|
_is_interrupt=_is_interrupt_exec)
|
||||||
|
|
||||||
|
def get_loop_context_data(self):
|
||||||
|
fields = self.node.properties.get('config', []).get('fields', []) or []
|
||||||
|
return {f.get('value'): self.context.get(f.get('value')) for f in fields if
|
||||||
|
self.context.get(f.get('value')) is not None}
|
||||||
|
|
||||||
def get_details(self, index: int, **kwargs):
|
def get_details(self, index: int, **kwargs):
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'name': self.node.properties.get('stepName'),
|
'name': self.node.properties.get('stepName'),
|
||||||
"index": index,
|
"index": index,
|
||||||
|
|
@ -276,6 +285,7 @@ class BaseLoopNode(ILoopNode):
|
||||||
"current_item": self.context.get("item"),
|
"current_item": self.context.get("item"),
|
||||||
'loop_type': self.node_params_serializer.data.get('loop_type'),
|
'loop_type': self.node_params_serializer.data.get('loop_type'),
|
||||||
'status': self.status,
|
'status': self.status,
|
||||||
|
'loop_context_data': self.get_loop_context_data(),
|
||||||
'loop_node_data': self.context.get("loop_node_data"),
|
'loop_node_data': self.context.get("loop_node_data"),
|
||||||
'loop_answer_data': self.context.get("loop_answer_data"),
|
'loop_answer_data': self.context.get("loop_answer_data"),
|
||||||
'err_message': self.err_message
|
'err_message': self.err_message
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,9 @@ class WorkflowManage:
|
||||||
{**self.start_node.node_params, 'form_data': start_node_data}, self.start_node.workflow_params)
|
{**self.start_node.node_params, 'form_data': start_node_data}, self.start_node.workflow_params)
|
||||||
if self.start_node.type == 'loop-node':
|
if self.start_node.type == 'loop-node':
|
||||||
loop_node_data = node_details.get('loop_node_data', {})
|
loop_node_data = node_details.get('loop_node_data', {})
|
||||||
|
for k, v in node_details.get('loop_context_data').items():
|
||||||
|
if v is not None:
|
||||||
|
self.start_node.context[k] = v
|
||||||
self.start_node.context['loop_node_data'] = loop_node_data
|
self.start_node.context['loop_node_data'] = loop_node_data
|
||||||
self.start_node.context['current_index'] = node_details.get('current_index')
|
self.start_node.context['current_index'] = node_details.get('current_index')
|
||||||
self.start_node.context['current_item'] = node_details.get('current_item')
|
self.start_node.context['current_item'] = node_details.get('current_item')
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue