Hello everyone... I'm trying to do something with forms and sub-forms that I think *should* be possible, but I'm struggling with the implementation. I'll try and describe what I'm trying to achieve in 2 ways - a high level "what I'm trying to show" and then "how I'm trying to get there". Whilst obviously I'm primarily interested in a bit of help with "how I'm trying to get there", I concede that there may [likely are] more elegant, simpler ways. So I'd be incredibly grateful for any thoughts on how I might go about this...
Thanks in advance.
What I'm trying to do is build a "visual library" based on a set of international technology control standards. I'm starting with ISACA COBIT, NIST SP800-53, ISO 27001/2 and something called the "Information Security Forum Standard of Good Practice". My hope is to have a way of producing a simple-to-navigate visual tool that makes it trivially easy to navigate across these sources by showing how the different entities "map" to eachother.
Each of these industry standards, whilst offered in book form, actually has a mature, standardised structure. COBIT, for instance, has 5 top-level Domains; each Domain has multiple Objectives; each Objective has multiple Processes; each Process consists of multiple Activities. It's been really easy to represent this in a relational model and to write some basic queries to allow retrieval of the data in the ways I need.
Now I'm looking at representing this visually on-screen. Please take a look at the [very crude] prototype layout, attached. Walking you round that form:-
- The grey horizontal bar and second box are for labels and will be filled in when this is working...
- The lighter blue buttons show the 5 Domains of the data model...
- The darker blue/purple buttons show that the first of the 5 Domains has 5 children [the reason there is space from the 5 children to the tables lower down is that some functions have many more children...].
- Lastly, we have what are currently, on this prototype, a pair of list boxes.
When an operator click a "Domain" button, the screen is populated with the child Objectives associated with that Domain. Click on an Objective, and the left-most list-box is populated with the child Objectives. Click on an Objective, and the larger list-box on the right becomes visible and is populated with discrete activity steps associated with the Objective. So far, so simples, right?
Now to the problems...
What I'd like to be able to do is have the same sort of click-on-a-line-item functionality for this second, right-hand list box. Except when you click on one of these items, I want the list box on the right to disappear and be replaced by a detailed break-down of the element, showing you information about that specific line item, for example, where it maps across to other Industry Standards or, more importantly, to a bespoke set of technology controls that I'm writing.
Now, I've got experience of building a form with a single "sub-form" design slot, but be able to "swap in" two or more different sub-forms in to the same space on the parent form. Armed with that knowledge, I decided to replace the second, right-hand list-box with a sub-form. So now, when I click on a list item on the left, instead of the right-hand *list box* becoming visible, I load a sub-form. Perfect - just what I want.
Just not quite everything... What I'd like to do is pass context to this sub-form. I can determine which element in the list in the left list-box was clicked... and I can use that information to populate a second list-box - when it's on the same form. What I would like to do here, however, is pass that data to a sub-form. That's Problem No. 1...
Problem No. 2 is, imagine that I've solved Problem No. 1. The screen is rendered pretty much as you see it now [with the right-hand list being in a sub-Form. Now I want to click on one of the elements on the sub-form, and I want that sub-form to vanish, be replaced by a second sub-Form, which will lay out a bunch of contextual information. On that second sub-form, I want a "Back" button which will restore my first sub-form, in the relevant context [i.e. populated with the same data].
Where I've got to - and I'm just exploring how to make this work - is to use a combination of Global Variables and "On Load" events. When a user clicks on a List item in the left-hand list, I can trigger a Method... that would enable me to identify and harvest details of which item in the list was clicked. I could then load that value in to a Global Variable and in the same List Event Method I could trigger steps to load the "List Box Form" on the right. That Form could have an "On Load" Event which retrieves the Global variable and uses that to populate it's data set...
I could then employ the same logic in the right-hand form such that when a user clicks an item in this second list, the "On Click" event will hide the current sub-Form, make my second Sub-Form Visible and with that pass another global variable to my second sub-Form that will help it to load and display the relevant details.
If you've managed to make it all the way to here, then apart from "thank you!" I suspect you might be thinking, "hang on, why are you trying to do all this by hand when you could use things like nested Continuous Sub-Forms" (or other solutions). Well, I did experiment with continuous sub-forms, but I found a list box to be *much* more compact and un-cluttered; there's no waste screen real estate, which will be relevant. Also, in part, I'm trying to keep this neat, elegant and clutter free.
So anyway... very interested in absorbing some collective wisdom; tips on things to look at; danger points to avoid; that sort of thing. Suggestions would be most gratefully received.
Thank you.
Thanks in advance.
What I'm trying to do is build a "visual library" based on a set of international technology control standards. I'm starting with ISACA COBIT, NIST SP800-53, ISO 27001/2 and something called the "Information Security Forum Standard of Good Practice". My hope is to have a way of producing a simple-to-navigate visual tool that makes it trivially easy to navigate across these sources by showing how the different entities "map" to eachother.
Each of these industry standards, whilst offered in book form, actually has a mature, standardised structure. COBIT, for instance, has 5 top-level Domains; each Domain has multiple Objectives; each Objective has multiple Processes; each Process consists of multiple Activities. It's been really easy to represent this in a relational model and to write some basic queries to allow retrieval of the data in the ways I need.
Now I'm looking at representing this visually on-screen. Please take a look at the [very crude] prototype layout, attached. Walking you round that form:-
- The grey horizontal bar and second box are for labels and will be filled in when this is working...
- The lighter blue buttons show the 5 Domains of the data model...
- The darker blue/purple buttons show that the first of the 5 Domains has 5 children [the reason there is space from the 5 children to the tables lower down is that some functions have many more children...].
- Lastly, we have what are currently, on this prototype, a pair of list boxes.
When an operator click a "Domain" button, the screen is populated with the child Objectives associated with that Domain. Click on an Objective, and the left-most list-box is populated with the child Objectives. Click on an Objective, and the larger list-box on the right becomes visible and is populated with discrete activity steps associated with the Objective. So far, so simples, right?
Now to the problems...
What I'd like to be able to do is have the same sort of click-on-a-line-item functionality for this second, right-hand list box. Except when you click on one of these items, I want the list box on the right to disappear and be replaced by a detailed break-down of the element, showing you information about that specific line item, for example, where it maps across to other Industry Standards or, more importantly, to a bespoke set of technology controls that I'm writing.
Now, I've got experience of building a form with a single "sub-form" design slot, but be able to "swap in" two or more different sub-forms in to the same space on the parent form. Armed with that knowledge, I decided to replace the second, right-hand list-box with a sub-form. So now, when I click on a list item on the left, instead of the right-hand *list box* becoming visible, I load a sub-form. Perfect - just what I want.
Just not quite everything... What I'd like to do is pass context to this sub-form. I can determine which element in the list in the left list-box was clicked... and I can use that information to populate a second list-box - when it's on the same form. What I would like to do here, however, is pass that data to a sub-form. That's Problem No. 1...
Problem No. 2 is, imagine that I've solved Problem No. 1. The screen is rendered pretty much as you see it now [with the right-hand list being in a sub-Form. Now I want to click on one of the elements on the sub-form, and I want that sub-form to vanish, be replaced by a second sub-Form, which will lay out a bunch of contextual information. On that second sub-form, I want a "Back" button which will restore my first sub-form, in the relevant context [i.e. populated with the same data].
Where I've got to - and I'm just exploring how to make this work - is to use a combination of Global Variables and "On Load" events. When a user clicks on a List item in the left-hand list, I can trigger a Method... that would enable me to identify and harvest details of which item in the list was clicked. I could then load that value in to a Global Variable and in the same List Event Method I could trigger steps to load the "List Box Form" on the right. That Form could have an "On Load" Event which retrieves the Global variable and uses that to populate it's data set...
I could then employ the same logic in the right-hand form such that when a user clicks an item in this second list, the "On Click" event will hide the current sub-Form, make my second Sub-Form Visible and with that pass another global variable to my second sub-Form that will help it to load and display the relevant details.
If you've managed to make it all the way to here, then apart from "thank you!" I suspect you might be thinking, "hang on, why are you trying to do all this by hand when you could use things like nested Continuous Sub-Forms" (or other solutions). Well, I did experiment with continuous sub-forms, but I found a list box to be *much* more compact and un-cluttered; there's no waste screen real estate, which will be relevant. Also, in part, I'm trying to keep this neat, elegant and clutter free.
So anyway... very interested in absorbing some collective wisdom; tips on things to look at; danger points to avoid; that sort of thing. Suggestions would be most gratefully received.
Thank you.