result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}} try: record_id = params_kw.get('id', '') if not record_id: result['options'] = {'title': 'Error', 'message': 'ID is required', 'type': 'error'} else: dbname = get_module_dbname('dingdingflow') async with DBPools().sqlorContext(dbname) as sor: update_fields = [] update_ns = {'id': record_id} for field in ['biz_type', 'biz_type_title', 'process_code', 'agent_id', 'form_config', 'is_active']: val = params_kw.get(field) if val is not None: update_fields.append(f"{field}=${field}$") update_ns[field] = val # Always update updated_at now_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S') update_fields.append("updated_at=${updated_at}$") update_ns['updated_at'] = now_str if update_fields: set_clause = ", ".join(update_fields) await sor.sqlExe(f"UPDATE dd_approval_configs SET {set_clause} WHERE id=${id}$", update_ns) result = {'widgettype': 'Message', 'options': {'title': 'Success', 'message': '审批配置更新成功', 'type': 'success'}} except Exception as e: result['options'] = {'title': 'Error', 'message': f'更新失败: {str(e)}', 'type': 'error'} return result