Title: No way to create seperate-valued Combobox in a table column? Post by: Ben R. on May 09, 2014, 11:55:21 pm I have a table I would like to use a dropdown in. The idea is for the dropdown to be populated from the database with appropriate contextual choices based on other values selected in the row. For example, when describing attributes of a product, the table could look like this:
[What is the width? (prompt)] [Entry field] [Dropdown Values] [Inches ] [Feet ] [Meters ] [What is the diameter? ]Entry Field] [Dropdown Values] [Millimeter ] [Centimeter ] [Inches ] Now, when I'm using a single combobox it works fine. Here's the code I'm using to populate the combobox: The call: Quote let form_field = "sp_hlptrk.htk_description" let form_query = "select hgp_description ", "from sp_hlpgrp where hgp_level = 1 and hgp_id < 98 ", "order by hgp_description" CALL fill_combobox(form_field, form_query); The function: Quote ###################################################################### function fill_combobox(form_field, form_query) ###################################################################### # This function's job is to take a field and fill it using the results # of a provided query. The query will return two values for each # combobox entry; the actual value and the description value. The # actual value is the value of that combobox selection and is what # will be saved to the database if an item is selected. # # For example: # "select slm_slmno, slm_name from slmmas" will display the name of # the salesperson. If a record is added and that salesperson is # selected from the combobox, the slm_slmno value is what will be # saved to the record. # # In cases where a unique ID is not available to use for the value, # the rowid field should be used instead to uniquely identify the row. # # The form_field string should be the actual table.field string, not the # field label for the screen or data array. define form_field varchar(100), form_query varchar(300), cb ui.Combobox, itemValue char(50), itemDescription char(50) let cb = ui.ComboBox.forName(form_field) if cb is null then let form_field = "Form field ", form_field, " not found in current form." call errorlog(form_field) exit program end if prepare combo_results from form_query declare combo_cursor cursor for combo_results call cb.clear() foreach combo_cursor into itemValue, itemDescription CALL cb.addItem(itemValue clipped,itemDescription clipped) end foreach close combo_cursor end function The above call and code works perfectly when I'm attempting to have a single combobox. As far as I can tell, however, there is not a way to use distinct instances of the combobox because even if you display the dropdown multiple places on the form, it's always the same dropdown with the same values. You can't populate specific values based on the row the combobox populates. Is there any way around this problem, or another approach I can take than the above, that will let me use this functionality? It seems like an obvious usage pattern, so I'm having trouble believing there's not a way to do this. Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Reuben B. on May 10, 2014, 04:53:55 am Quote As far as I can tell, however, there is not a way to use distinct instances of the combobox because even if you display the dropdown multiple places on the form, it's always the same dropdown with the same values. You can't populate specific values based on the row the combobox populates. Correct Quote Is there any way around this problem, or another approach I can take than the above, that will let me use this functionality? Use a BUTTONEDIT + LABEL in combination with a zoom window Quote It seems like an obvious usage pattern, so I'm having trouble believing there's not a way to do this. You aren't the first person to ask. I raised the same issue as a customer when I did my first Genero migration in 2003. Same example too, different units of measure for different types of products. To get an understanding of difficulties involved, with the GDC in Debug mode,press Control+RIght Click and note the location of the ItemList for the ComboBox. It is attached to the FormField node and their is one instance of the list. For what you want, you would need many ItemLists in the AUI tree, and someway for each row to reference the appropriate ItemList. Thinking about it, the existence of PHANTOM columns may make a suitable solution more feasible than it was previously... Reuben Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Ben R. on May 12, 2014, 05:06:08 pm I take it there's no way to create dynamic form elements to have each row create a new combobox on the fly, correct? Or perhaps change the screen element type, meaning have the .per file specify the field as a normal edit box, then programmatically change it into a combobox on the back end?
I've looked for these things and didn't see anything along those lines, but just want to verify. Dynamically creating elements is a pretty standard language feature elsewhere at this point, so it's frustrating that (as far as I can tell) it doesn't exist here. Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Anderson P. on May 15, 2014, 01:10:57 pm The problem is that when you populate the combobox of the next row with different values the values of the previous row got missing, you can still store the user's choice but it will not show in the screen.
But i was able to manage this to work out in a GWC AJAX application! In the GWC application, when you populate the combobox of a row, the others rows doesn't refresh so the value continue to show up despite it's not there anymore, all you have to do is to repopulate the combobox in the before row block... All of this considering you are making a GWC only application. Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Snorri B. on May 20, 2014, 01:33:32 pm This issue was discussed in this thread:
https://4js.com/fjs_forum/index.php?topic=242.0 Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Anderson P. on May 20, 2014, 02:36:43 pm Hello Snorri,
Had read the topic you posted, the option of hiding some items in the combobox list is indeed interesting, considering the difficulties of different combobox contents in a input array based on the Genero BDL architecture. Is this feature already implemented? Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Snorri B. on May 20, 2014, 02:44:58 pm No, it's not implemented. It seems they have decided not to, at least issue #12086 has resolusion WONTFIX :(
Maybe they should reconsider.... -S Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Reuben B. on May 21, 2014, 01:30:29 am If it was "easy", this would probably have been done a long time ago. (IMHO it would require modification to the AUI tree to define a Combobox value list at interface or form level, and have the combobox on each row reference a Combobox list defined at this higher level via a Phantom column)
The BUTTONEDIT + zoom window is the best way to implement this at the moment. When this alternative has been raised before, one of the arguments against has been that this method doesn't allow you to restrict manual editing of the value in the BUTTONEDIT field. In Genero 2.50 the NOTEDITABLE argument was introduced https://4js.com/online_documentation/fjs-fgl-manual-html/#c_fgl_FSFAttributes_NOTEDITABLE.html which allows you to prevent entry in the field but still allow the button to be selected. If you get creative with presentation styles and zoom window, you can make your list look less like a window and more like a combobox list too. From here https://4js.com/online_documentation/fjs-fgl-manual-html/#r_fgl_presentation_styles_window_style_attributes.html consider ... actionPanelPosition=none menuPanelPosition=none border=none/frame position=field sizable=no statusBarType=none Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Michael L. on July 02, 2014, 07:22:00 am Having a zoom popup using window presentation styles looks alright, but is it possible to close the zoom window if the user takes focus away? At the moment, the only way to close the zoom window is to either double click a row "triggers ACCEPT" or to build in a button.
Ideally if I click back into the main window I want it to close the zoom window. Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Reuben B. on July 03, 2014, 05:42:56 am You probably won't be able to control the click outside zoom window behaviour so that it closes the window as that is entering the realm of the front-end OS behaviour
Looking at your screenshot, have a look at the windowOptionClose presentation style. That controls the appearance of a little X in the top-right corner of the window that will trigger the close action, which you can use to exit the dialog without selecting a value Reuben Title: Re: No way to create seperate-valued Combobox in a table column? Post by: Michael L. on July 03, 2014, 06:12:27 am Yeah. Look at the attached image to see it with the following styles. This is probably the best solution so far: Code
|