Using button to set Property , in operators , menu , panels (B 290)

Hi all,
I am a little lost here,

I am using quite often my custom-operator , and i use multiple buttons to call it with different properties… as you can see in this screenshot. this works fine.

I would like to do the same with a menu,
the menu too have a property defined , and i would like to calll this menu for show different parts of menu.
I am in blender 290

Some good guy told me that its not possible,
That menu are not meant to hold property ,
So i made a property in the scene, to check and set.

here is the script to create a panel with 3 buttons operators.
They call the same menu, and set a variable in the scene.
So the menu will show different parts of it,
with 1, 2… or all of them with 0

Schermata 2021-02-19 alle 15.28.06


from bpy.types import (Panel,
                       Menu,
                       Operator,
                       PropertyGroup,
                       ) 
from bpy.props import (StringProperty) 
 



class ARCHIVE_PROP(PropertyGroup):            # SCENE PROPERTY               
    MENU_N :    StringProperty(default="NONE") 

bpy.utils.register_class(ARCHIVE_PROP)                                       
bpy.types.Scene.ARCHIVE_DATA = bpy.props.PointerProperty(type=ARCHIVE_PROP)  


class CALLER_PT_Panel(Panel):   #   Panel to calll the operator   0 all , or 1 ,2
    bl_label = " Archive caller"
    bl_idname = "ARCHIVE_PT_caller"
    bl_space_type = "VIEW_3D"   
    bl_region_type =  "TOOLS" 
    bl_options = {'DEFAULT_CLOSED'}
    def draw(self, context):                     
        layout = self.layout #-------------------------- 
        col = layout.column ( )
        op=col.operator("wm.qm_smart_op", text="CUSTOM_ARCHIVE "  )
        op.WORD = "0"
        row=col.row()
        op=row.operator("wm.qm_smart_op", text="MENU 1 "  )
        op.WORD = "1"
        op=row.operator("wm.qm_smart_op", text="menu 2"  )
        op.WORD = "2"

class QMENU_OP_SMART(bpy.types.Operator):     # OPERATOR 
    bl_idname = "wm.qm_smart_op"
    bl_label = "call smart op"
    WORD : bpy.props.StringProperty(default="NONE")
    def execute(self, context):  
        if self.WORD == "NONE":    
            print("None action selected")
        bpy.context.scene.ARCHIVE_DATA.MENU_N = self.WORD
        context.area.tag_redraw()
        bpy.ops.wm.call_panel(name="ARCHIVE_PT_custom_panel")
        return {'FINISHED'}    


class ARCHIVE_PT_Panel(Panel):   
    bl_label = "MyoperatorArchive"
    bl_idname = "ARCHIVE_PT_custom_panel"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'

    def draw(self, context):         
        layout = self.layout #--------------------------  
        row=layout.row() 
        col = row.column ( )
        MENU =bpy.context.scene.ARCHIVE_DATA.MENU_N 
        if MENU == "0":
            col.label(text="  SHOW ALL MENU  " )
        if MENU != "0":
            col.label(text="  SHOW MENU " + MENU  )
         
        if MENU == "1"  or MENU == "0"   :    #    1   MENU
            col.label(text="   operator 1  " )   
        if MENU == "2"  or MENU == "0"   :    #    2   MENU
            col.label(text="   operator  2  " )      
            col.label(text="   operator   3  " )  
classes = ( 
    ARCHIVE_PT_Panel,
    QMENU_OP_SMART,
    CALLER_PT_Panel
    )       
    
def register():
    for cls in classes:
        bpy.utils.register_class(cls)  
def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)

if __name__ == "__main__":
    register()