Hi Angelspire and sorry for the delay over the holidays,
First of all, good to see that you are moving towards a data-driven form for your values. This is definitely the paradigm to follow for surveys. We have done numerous surveys in this fashion and even have a couple recent blog posts on two starter techniques for this:
Look at the schema in the starter template attached to the first link above. You will see a Modules group node with a Module repeating group inside of it and a Question repeating group inside that. This Question group is similar to what you want for your sample form. It has QuestionText and AnswerText in it. Corresponds to your NewFieldText and NewFieldSelected.
You can look at how we set the values but in your case, you have multiple possible answers and those answers are changing between versions. You need to make sure that the AnswerText, i.e. the value, is an ID that corresponds to the text. Don't use hard-coded text since that text could change (for example, if you publish the form in a different language). So your values will be 1, 2, 3, etc. and you will look up the Display Text to display it based on the ID. That's the first change you need to make. When you decide to add new values, you will add new IDs for them. You can also this technique to update the text for old values.
In your case, you have the added complexity of Multi-select control. I don't think the multi-select control is a good choice here because of how InfoPath interacts with it to set the values. I recommend changing the control and using default data (see first lab above) to automatically fill in all values. Then, you can add a button next to it that looks like a checkbox. If they click the button, it sets NewFieldSelected to true (default is false) and changes the button into a checkbox. You can do this by wrapping each button in a separate section and hide-showing them based on the state. This is an approach that may work for you since you won't be maligned by the default selection logic of the multi-select control. In other words, you'll control when the values change and how they are mapped. Existing old forms will work fine because the value is displayed in a text field and the button will just show checked or not depend on the false/true value.
However, the false-true approach that you are using (on account of the multi-select control) is not a best practice for two reasons:
-
Doesn't use value IDs - I explained why this is bad above
-
Requires filtering to extract true data
You should change it to use IDs and to only include the values that are set (not the non-set false values). That way, the data will not require filtering when you have to use it downstream.
This may seem like a lot of stuff to think about. Please consider hiring one of our MVPs for a couple hours of one-on-one training. We can help you create the form that you need and figure out how to migrate your existing data and you'll learn how to do it (and why) so that your next form is easier. Go to Qdabra.com's Support page for more info on how to hire us for some quick help.
Yours truly,