1
0
-1

Hello,

We are trying to migrate additional menu from 9.7 to Uniface 10 with no success. It seems we need to add 2 lines in our asn. At this step we have exported/imported our additional menu but there is no simple way to integrate them in Uniface 10.

In the documentation we didn't found a good step by step procedure with all explanations.

We understood we had to add 2 more lines in our asn :

[LOGICALS]

IDE_DEFINE_USERMENUS=OUR_MENU1

and in the section

[RESOURCES]

menuplugin.uar

But how ca we reuse our additional menu ??? Where can we find and we build the "Menu plug-ins" component ? This is not clear for us

Please we need help (smile)

    CommentAdd your comment...

    6 answers

    1.  
      2
      1
      0

      Hello,


      Uniface don't use the "Editors → Library → Menus" any longer for the additional menu.

      You have to create a new component (Service, Form) and add the following operations to it. (see Menu definition)

      For global functionality use the Utility Menu

      For component related functionality use the action menu.


      Define your menuitem and call your component. Each operation which is called this way need two params (see last code block)

      After compile add the component name to the logical.

      You can use also the resource output or deploy it as .uar

      Restart your IDE.

      [LOGICALS]

      IDE_DEFINE_USERMENUS=YOURCOMPONENTNAME,SECONDCOMPONENT


      Furthermore reading "Customizing the Uniface IDE".

      IDE Menu Plug-Ins or IDE Worksheet Plug-Ins


      Hope this will help you.


      Menu definition

      ; === ================================================================================
      ; === 
      ; === ================================================================================
      public operation getVersion 
      params
        string lp_api_version        : OUT
      endparams
        lp_api_version = 1
      end
      
      ; === ================================================================================
      ; === Uniface 10.3 Default Menu "Utility Menu"                           
      ; === ================================================================================
      public operation getGlobalMenuOptions
      params
        struct lp_menu               : OUT
      endparams
        ;lp_menu->$name = "menu"
        ;call en_add_option(lp_menu, "", "", "", 1)
      end
      
      ; === ================================================================================
      ; === Uniface 10.3 Default Menu "Action"                                 
      ; === ================================================================================
      public operation getEditorMenuOptions
      params
        string lp_object_url         : IN 
        struct lp_menu               : OUT
      endparams
      variables
        string  lv_type, lv_name
      endvariables
      
        lp_menu->$name = "menu"
        $result = $split(lp_object_url, 1, ":", lv_type, lv_name)
      
        ; === Depending on type different actions
        selectcase lv_type
      ;    case "aps"        ; === Application Shell
      ;    case "cpt"        ; === Component
      ;    case "dtd"        ; === DTD
      ;    case "ent"        ; === Entity
      ;    case "prj"        ; === Project
      ;    case "sig"        ; === Signature
      ;    case "libsnp"     ; === Library "Snippets"
      ;    case "libinc"     ; === Library "Include Proc"
      ;    case "libprc"     ; === Library "Global Proc"
      ;    case "libvar"     ; === Library "Global Variables"
      ;    case "libmsg"     ; === Library "Messages"
      ;    case "libgly"     ; === Library "Glyphs"
      ;    case "libpnl"     ; === Library "Panels"
      ;    case "libdnd"     ; === Library "Formats"
      ;    case "libmen"     ; === Library "Menus"
      ;    case "libdvc"     ; === Library "Device Tables"
      ;    case "libktt"     ; === Library "Keyboard Tables"
          elsecase
        endselectcase
      
      end
      
      ; === ================================================================================
      ; === Create Menu Item
      ; === ================================================================================
      entry en_add_option
      params
        struct  lp_menu              : INOUT
        string  lp_label             : IN
        string  lp_componentname     : IN
        string  lp_callback          : IN
        numeric lp_enabled           : IN
      endparams
      variables
        struct lv_item
      endvariables
      
        lv_item             = $newstruct
        lv_item->$name      = "option"
        lv_item->label      = lp_label
        lv_item->component  = lp_componentname
        lv_item->operation  = lp_callback
        lv_item->enabled    = lp_enabled
        lv_item->$parent    = lp_menu
      
      end

      Operation definition which are called from the menu item.

      operation youroperation
      params
        string  pRedirectionUrl    : OUT
        numeric pRefresh           : OUT
      endparams
        CommentAdd your comment...
      1.  
        1
        0
        -1

        Thank Tobias it worked we managed to add our own menu and activate our form.

        Bye


          CommentAdd your comment...
        1.  
          1
          0
          -1

          Hi Pascal,


          Try the exercise link:

                  Menu Exercise

          This should fully clarify things.


          Regards,


          Jason.


          1. Pascal MAUSS

            Hello Jason,

            Thanks for the example it will help us, we are going to try it !

            Bye

          CommentAdd your comment...
        2.  
          1
          0
          -1

          Hello Tobias,

          Thanks for your feedback that will surely help us we will try it today  !


            CommentAdd your comment...
          1.  
            1
            0
            -1

            Hello Pascal,


            we used a non modeled Form, with modality set to false and drop component from memory.


            → I don't know why we need to use a component. Just an idea is to allow Uniface calling operations.

            → Yes, Uniface always needs an entity inside the component, just use a dummy non-database.

            → I haven't seen a case when to use a form or service. 


            Redirects per [FILE] is no longer possible.

            Your compile form and signature must be in the $RESOURCE_OUTPUT or deployed as .uar 

            Inside your [RESOURCES] you need to refer the full path to $RESOURCE_OUTPUT.



            [RESOURCES]
            //fileserver/project/resources
            OR
            //filserver/project/path/to/ide-custom.uar
              CommentAdd your comment...
            1.  
              1
              0
              -1

              Hi Pascal,

              Take a look at:

              which describes and demonstrates the functionality. The Menu API starts at around 40:13

              Regards,

              Jason.





              1. Pascal MAUSS

                Thanks Jason, but we already have seen this video for few days and it didn't help us to migrate our additional menu from 9.7 to 10.3

                We need a full example of additional menu creation and we have some questions :

                → Why do we need to create a form or un service to create a menu ?

                → Adding the operations in script generate a compilation error because Uniface need an entity to be painted on component (1 entity must be painted at least on component)

                → In which case must be choose a service or un form form for adding additional menu in IDE

                → What kind of form property must we choose for addditional menu (Normal ? Non Modal , Modal ? it seems it is nowhere explained in UNIFACE documentation  or video.


                Have a nice day (smile)

              CommentAdd your comment...