fix: Defect of embedding application parameters as empty and reporting errors

--bug=1052184 --user=王孝刚 【github#2273】【应用】-有非必填接口传参的编排应用,作为节点加入新的编排应用后,接口传参为空时对话报错 https://www.tapd.cn/57709429/s/1654259
This commit is contained in:
wxg0103 2025-02-14 10:26:17 +08:00 committed by wxg
parent dd5db3eaa6
commit a8d79c5e60
2 changed files with 30 additions and 14 deletions

View File

@ -11,13 +11,16 @@ from django.utils.translation import gettext_lazy as _
class ApplicationNodeSerializer(serializers.Serializer): class ApplicationNodeSerializer(serializers.Serializer):
application_id = serializers.CharField(required=True, error_messages=ErrMessage.char(_("Application ID"))) application_id = serializers.CharField(required=True, error_messages=ErrMessage.char(_("Application ID")))
question_reference_address = serializers.ListField(required=True, error_messages=ErrMessage.list(_("User Questions"))) question_reference_address = serializers.ListField(required=True,
error_messages=ErrMessage.list(_("User Questions")))
api_input_field_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("API Input Fields"))) api_input_field_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("API Input Fields")))
user_input_field_list = serializers.ListField(required=False, error_messages=ErrMessage.uuid(_("User Input Fields"))) user_input_field_list = serializers.ListField(required=False,
error_messages=ErrMessage.uuid(_("User Input Fields")))
image_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("picture"))) image_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("picture")))
document_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("document"))) document_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("document")))
audio_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("Audio"))) audio_list = serializers.ListField(required=False, error_messages=ErrMessage.list(_("Audio")))
child_node = serializers.DictField(required=False, allow_null=True, error_messages=ErrMessage.dict(_("Child Nodes"))) child_node = serializers.DictField(required=False, allow_null=True,
error_messages=ErrMessage.dict(_("Child Nodes")))
node_data = serializers.DictField(required=False, allow_null=True, error_messages=ErrMessage.dict(_("Form Data"))) node_data = serializers.DictField(required=False, allow_null=True, error_messages=ErrMessage.dict(_("Form Data")))
@ -33,11 +36,16 @@ class IApplicationNode(INode):
self.node_params_serializer.data.get('question_reference_address')[1:]) self.node_params_serializer.data.get('question_reference_address')[1:])
kwargs = {} kwargs = {}
for api_input_field in self.node_params_serializer.data.get('api_input_field_list', []): for api_input_field in self.node_params_serializer.data.get('api_input_field_list', []):
kwargs[api_input_field['variable']] = self.workflow_manage.get_reference_field(api_input_field['value'][0], value = api_input_field.get('value', [''])[0] if api_input_field.get('value') else ''
api_input_field['value'][1:]) kwargs[api_input_field['variable']] = self.workflow_manage.get_reference_field(value,
api_input_field['value'][
1:]) if value != '' else ''
for user_input_field in self.node_params_serializer.data.get('user_input_field_list', []): for user_input_field in self.node_params_serializer.data.get('user_input_field_list', []):
kwargs[user_input_field['field']] = self.workflow_manage.get_reference_field(user_input_field['value'][0], value = user_input_field.get('value', [''])[0] if user_input_field.get('value') else ''
user_input_field['value'][1:]) kwargs[user_input_field['field']] = self.workflow_manage.get_reference_field(value,
user_input_field['value'][
1:]) if value != '' else ''
# 判断是否包含这个属性 # 判断是否包含这个属性
app_document_list = self.node_params_serializer.data.get('document_list', []) app_document_list = self.node_params_serializer.data.get('document_list', [])
if app_document_list and len(app_document_list) > 0: if app_document_list and len(app_document_list) > 0:
@ -46,7 +54,8 @@ class IApplicationNode(INode):
app_document_list[1:]) app_document_list[1:])
for document in app_document_list: for document in app_document_list:
if 'file_id' not in document: if 'file_id' not in document:
raise ValueError(_("Parameter value error: The uploaded document lacks file_id, and the document upload fails")) raise ValueError(
_("Parameter value error: The uploaded document lacks file_id, and the document upload fails"))
app_image_list = self.node_params_serializer.data.get('image_list', []) app_image_list = self.node_params_serializer.data.get('image_list', [])
if app_image_list and len(app_image_list) > 0: if app_image_list and len(app_image_list) > 0:
app_image_list = self.workflow_manage.get_reference_field( app_image_list = self.workflow_manage.get_reference_field(
@ -54,7 +63,8 @@ class IApplicationNode(INode):
app_image_list[1:]) app_image_list[1:])
for image in app_image_list: for image in app_image_list:
if 'file_id' not in image: if 'file_id' not in image:
raise ValueError(_("Parameter value error: The uploaded image lacks file_id, and the image upload fails")) raise ValueError(
_("Parameter value error: The uploaded image lacks file_id, and the image upload fails"))
app_audio_list = self.node_params_serializer.data.get('audio_list', []) app_audio_list = self.node_params_serializer.data.get('audio_list', [])
if app_audio_list and len(app_audio_list) > 0: if app_audio_list and len(app_audio_list) > 0:
@ -63,7 +73,8 @@ class IApplicationNode(INode):
app_audio_list[1:]) app_audio_list[1:])
for audio in app_audio_list: for audio in app_audio_list:
if 'file_id' not in audio: if 'file_id' not in audio:
raise ValueError(_("Parameter value error: The uploaded audio lacks file_id, and the audio upload fails.")) raise ValueError(
_("Parameter value error: The uploaded audio lacks file_id, and the audio upload fails."))
return self.execute(**self.node_params_serializer.data, **self.flow_params_serializer.data, return self.execute(**self.node_params_serializer.data, **self.flow_params_serializer.data,
app_document_list=app_document_list, app_image_list=app_image_list, app_document_list=app_document_list, app_image_list=app_image_list,
app_audio_list=app_audio_list, app_audio_list=app_audio_list,

View File

@ -220,20 +220,25 @@ class BaseApplicationNode(IApplicationNode):
def get_details(self, index: int, **kwargs): def get_details(self, index: int, **kwargs):
global_fields = [] global_fields = []
for api_input_field in self.node_params_serializer.data.get('api_input_field_list', []): for api_input_field in self.node_params_serializer.data.get('api_input_field_list', []):
value = api_input_field.get('value', [''])[0] if api_input_field.get('value') else ''
global_fields.append({ global_fields.append({
'label': api_input_field['variable'], 'label': api_input_field['variable'],
'key': api_input_field['variable'], 'key': api_input_field['variable'],
'value': self.workflow_manage.get_reference_field( 'value': self.workflow_manage.get_reference_field(
api_input_field['value'][0], value,
api_input_field['value'][1:]) api_input_field['value'][1:]
) if value != '' else ''
}) })
for user_input_field in self.node_params_serializer.data.get('user_input_field_list', []): for user_input_field in self.node_params_serializer.data.get('user_input_field_list', []):
value = user_input_field.get('value', [''])[0] if user_input_field.get('value') else ''
global_fields.append({ global_fields.append({
'label': user_input_field['label'], 'label': user_input_field['label'],
'key': user_input_field['field'], 'key': user_input_field['field'],
'value': self.workflow_manage.get_reference_field( 'value': self.workflow_manage.get_reference_field(
user_input_field['value'][0], value,
user_input_field['value'][1:]) user_input_field['value'][1:]
) if value != '' else ''
}) })
return { return {
'name': self.node.properties.get('stepName'), 'name': self.node.properties.get('stepName'),