7 Replies Latest reply: Apr 2, 2013 12:54 PM by Stephen Kappel RSS

    Setting OneAndOnlyOne Dynamically

      For one tab in our dashboard, it is a requirement to have the Product Name field's OneAndOnlyOne property set to true. Therefore, I've written a macro that fires on the sheet's OnActivateSheet trigger. The macro looks like this:

       

      SUB AlwaysOneSelected()
          SET fld = ActiveDocument.GetField("Product Name")
          SET selections = fld.GetSelectedValues
          IF (selections.Count = 0) THEN
           selectionText = "Product X"
          ELSE
           selectionText = selections.Item(0).text
          END IF
          fld.Select selectionText
          
          SET fprop = fld.GetProperties
          fprop.OneAndOnlyOne = True
          fld.SetProperties fprop
      END SUB
      

       

      This works just as intended in my developer copy of the dashboard. The OneAndOnlyOne property is set when I enter the tab, so I must always have exactly one selection in the Product Name field. If I switch to WebView in my development environment, it still works as expected.

       

      Unfortunately, when the QVW is posted to our server, this functionality breaks, regardless of whether we use the IE plugin or the standard webview in other browsers. I know that the macro is successfully triggered because if I enter the tab with no selection in the Product Name field, Product X gets selected. Yet, the OneAndOnlyOne property is not set; I can clear the field or select multiple product names.

       

      Any ideas? Could this be a bug?

        • Re: Setting OneAndOnlyOne Dynamically
          Michael Solomovich

          I'd expect it to work in IE plugin but not in webview or other browsers.

           

          Regards,

          Michael

            • Re: Setting OneAndOnlyOne Dynamically

              Hi Michael,

               

              Why wouldn't you expect this to work in all browsers?

               

              Thanks,

              Stephen

                • Re: Setting OneAndOnlyOne Dynamically
                  Kaushik Solanki

                  Dear Stephen,

                   

                       Here is what QlikTech says about macro in the reference manual.

                   

                   

                  82.2 Macro functionality limitations

                  Functionality that will normally work well in macros in the QlikView Server environment with any type of

                  client is:

                  l Logical operations such as clearing or selecting in fields

                  l Operations related to variables

                  The following types of functionality are not to be used in the QlikView Server environment , as they may

                  cause unexpected results:

                  l Layout operations acting on the properties of sheets and sheet objects via SetProperties

                  l Operations changing document or user settings

                  l All operations related to the script, including Reload

                  l Data reduction operations, e.g. ReduceData

                  l Operations such as Save and Open document

                   

                   

                  And thus your macro will not work over browser.

                   

                  Regards,

                  Kaushik Solanki

                  • Re: Setting OneAndOnlyOne Dynamically
                    Michael Solomovich

                    This macro is changing object properties.  Not something that I expect to work in AJAX.  The only relaible macros for AJAX are those that make selections and modify variables.

                     

                    Regards,

                    Michael

                      • Re: Setting OneAndOnlyOne Dynamically

                        Thanks, Kaushik & Michael. Without using a macro, is there any way to change object properties at runtime? Any other way to get the desired behavior?

                          • Re: Setting OneAndOnlyOne Dynamically
                            Michael Solomovich

                            Stephen,

                             

                            If you set up this property initially in the QV application and save it, it should keep this property, unless there is a chance that after reload the filed in question may end up empty.  Or if you remove all data.  So, in "normal" situation you don't need to set it up dynamically.

                            I can only add that this macro should work in IE Plugin.  Frankly I'm trying to avoid using macros altogether because of AJAX.

                             

                            Regards,

                            Michael

                              • Re: Setting OneAndOnlyOne Dynamically

                                For my dashboard, I need to force unique values on some tabs and not on others. So, I've devised a work-around as follows:

                                 

                                1. I added a variabled (vForceOne) that is set to true/false when the tab requiring one and only one field selection is entered/exited.
                                2. I modified my macro to be the following:
                                SUB AlwaysOneProductSelected()
                                 IF (ActiveDocument.Variables("vForceOneProduct").GetContent.string = "True") THEN
                                     SET fld = ActiveDocument.GetField("Product Name")
                                
                                     SET selections = fld.GetSelectedValues
                                     IF (selections.Count = 0) THEN
                                      selectionText = "Product X"
                                     ELSE
                                      selectionText = selections.Item(0).text
                                     END IF
                                     fld.Select selectionText
                                  END IF   
                                END SUB
                                

                                3.   I added a trigger to the product field to fire the macro whenever the selection is changed.

                                 

                                In essense, my macro is now providing the functionality that would usually be provided by the OneAndOnlyOne field property. The only problem is that the macro doesn't fire when shift+click selection is used. (See http://community.qlik.com/message/329011.)