Skip to content

Commit c0c15d8

Browse files
authored
fix: When there is a form node in the loop node, the loop data is lost (#4214)
1 parent 62873d8 commit c0c15d8

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

apps/application/flow/step_node/loop_node/impl/base_loop_node.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,9 @@ def handler(self, workflow):
225225
class BaseLoopNode(ILoopNode):
226226
def save_context(self, details, workflow_manage):
227227
self.context['result'] = details.get('result')
228+
for key, value in details['context'].items():
229+
if key not in self.context:
230+
self.context[key] = value
228231
self.answer_text = str(details.get('result'))
229232

230233
def get_answer_list(self) -> List[Answer] | None:
@@ -262,7 +265,13 @@ def workflow_manage_new_instance(loop_data, global_data, start_node_id=None,
262265
_write_context=get_write_context(loop_type, array, number, loop_body, stream),
263266
_is_interrupt=_is_interrupt_exec)
264267

268+
def get_loop_context_data(self):
269+
fields = self.node.properties.get('config', []).get('fields', []) or []
270+
return {f.get('value'): self.context.get(f.get('value')) for f in fields if
271+
self.context.get(f.get('value')) is not None}
272+
265273
def get_details(self, index: int, **kwargs):
274+
266275
return {
267276
'name': self.node.properties.get('stepName'),
268277
"index": index,
@@ -276,6 +285,7 @@ def get_details(self, index: int, **kwargs):
276285
"current_item": self.context.get("item"),
277286
'loop_type': self.node_params_serializer.data.get('loop_type'),
278287
'status': self.status,
288+
'loop_context_data': self.get_loop_context_data(),
279289
'loop_node_data': self.context.get("loop_node_data"),
280290
'loop_answer_data': self.context.get("loop_answer_data"),
281291
'err_message': self.err_message

apps/application/flow/workflow_manage.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,9 @@ def get_node_params(n):
202202
{**self.start_node.node_params, 'form_data': start_node_data}, self.start_node.workflow_params)
203203
if self.start_node.type == 'loop-node':
204204
loop_node_data = node_details.get('loop_node_data', {})
205+
for k, v in node_details.get('loop_context_data').items():
206+
if v is not None:
207+
self.start_node.context[k] = v
205208
self.start_node.context['loop_node_data'] = loop_node_data
206209
self.start_node.context['current_index'] = node_details.get('current_index')
207210
self.start_node.context['current_item'] = node_details.get('current_item')

0 commit comments

Comments
 (0)