Solved

Form: Show/Hide Panels in Survey


Hi All!

I have a form which should look like a survey where I have several questions with YES and NO answers. And depending of the previous answer it should show the next question.

I have been using show and hide panels: != "Yes" or != "No".  

I want this to happen:

Question 1: if YES go to 2A, if NO stop
Question 2A: if YES go to 3A, if NO to 2B
Question 2B: if YES go to 3A, if NO stop
Question 3A: if YES stop, if NO go to 3B
Question 3B: if YES stop, if NO go to define

 

The problem arises when you get to question 3A, you can get here in 2 ways:

- first: option: YES, YES

- second option: YES, NO, YES

 

Via the first option the form works as it should. But via the 2nd option it doesnt show any panels.

 

Hopefully someone can help me, thanks in advance!

M.

icon

Best answer by Garrett 20 June 2022, 21:28

View original

19 replies

Userlevel 6
Badge +16

Hi @Ildsborg, could you provide additional details?


 


Which type of Form are you using, Classic Form or a Responsive Form?


Can the user backtrack? When they reach 3A, can the user change Question 1 to NO?


Can you share the rules for 3A? Screenshot, please

Thanks a lot  for getting back to me faster!

>> Which type of Form are you using, Classic Form or a Responsive Form?<<


I am using Classic Form in SharePoint 2019.


>> Can the user backtrack? When they reach 3A, can the user change Question 1 to NO? <<
Yes, they can backtrack to Question 1 to "NO" when they reach to Question 3A. But the question 3A is visible which should not be.


 



 


>> Can you share the rules for 3A? Screenshot, please <<


Question 2A: if YES go to 3A, if NO to 2B
Condition: Question2A!= "Yes" 


I tried to add another condition for the Question 3A in the same rule, but it didn't work.


Question 2B: if YES go to 3A, if NO stop


Condition: Question2B!= "Yes"


I also create an identical 3A question and added the condition: Question2B!= "Yes", but it didn't work either. I tried other several things without the result that I want. How can I apply two conditions for Question 3A in a single rule? Or how can we solve this?


 



 


Besides, the questions of the tab of "Option 2" are being shown in the other tabs. I have 4 tabs with its own questions. How can I show the related questions in each of its own tab?



Thanks in advance!


Cheers.


M.


 


 


@Garrett

Userlevel 6
Badge +16

Hi @Ildsborg 


 


Is this correct?



 


Panel 1
- Arrival: Do nothing
- Question 1: if YES go to 2A, if NO stop
Panel 2A
- Arrival: when (C1 == YES)
- Hide NOT(C1 == YES)
- Show (C1 == YES)
- Question 2A: if YES go to 3A, if NO to 2B


Panel 2B
- Arrival: when (C1 == YES, C2A = NO)
- Hide NOT(C1 == YES && C2A == NO)
- Show (C1 == YES && C2A == NO)
- Question 2B: if YES go to 3A, if NO stop


Panel 3A
- Arrival1 when (C1 == YES, C2A == YES)
- Arrival2 when (C1 == YES, C2A == NO, C2B ==YES)
- Hide NOT((C1 == YES && C2A = YES) || (C1 == YES && C2A = NO && C2B ==YES))
- Show (C1 == YES && C2A = YES) || (C1 == YES && C2A = NO && C2B ==YES)
- Question 3A: if YES stop, if NO go to 3B


Panel 3B
- Arrival1 when (C1 == YES, C2A = YES, C3A == NO)
- Arrival2 when (C1 == YES, C2A = NO, C2B ==YES, C3A == NO)
- Hide NOT((C1 == YES && C2A == YES && C3A == NO) || (C1 == YES && C2A = NO && C2B == YES && C3A == NO))
- Show (C1 == YES && C2A == YES && C3A == NO) || (C1 == YES && C2A = NO && C2B == YES && C3A == NO)


 


TIP: I just do the Show Rule first. Then duplicate the Rule, Rename it to HideRule and add the NOT function.


 


hopes this helps

Userlevel 6
Badge +16

Using Code Sample to display monospace fonts for better clarity


 


Panel 1
- Arrival: Do nothing
- Question 1: if YES go to 2A, if NO stop

Panel 2A
- Arrival: when (C1 == YES)
- Hide NOT(C1 == YES)
- Show (C1 == YES)
- Question 2A: if YES go to 3A, if NO to 2B

Panel 2B
- Arrival: when (C1 == YES, C2A = NO)
- Hide NOT(C1 == YES && C2A == NO)
- Show (C1 == YES && C2A == NO)
- Question 2B: if YES go to 3A, if NO stop

Panel 3A
- Arrival1 when (C1 == YES, C2A == YES)
- Arrival2 when (C1 == YES, C2A == NO, C2B ==YES)
- Hide NOT((C1 == YES && C2A = YES) || (C1 == YES && C2A = NO && C2B ==YES))
- Show (C1 == YES && C2A = YES) || (C1 == YES && C2A = NO && C2B ==YES)
- Question 3A: if YES stop, if NO go to 3B

Panel 3B
- Arrival1 when (C1 == YES, C2A = YES, C3A == NO)
- Arrival2 when (C1 == YES, C2A = NO, C2B ==YES, C3A == NO)
- Hide NOT((C1 == YES && C2A == YES && C3A == NO) || (C1 == YES && C2A = NO && C2B == YES && C3A == NO))
- Show (C1 == YES && C2A == YES && C3A == NO) || (C1 == YES && C2A = NO && C2B == YES && C3A == NO)

I just do the Show Rule first. Then duplicate the Rule, Rename it to HideRule and add the NOT

 

Thanks!
I was wondering if the rule type should be a Formatting type or Validation type. Besides, I am creating two rules for the Question 2A panel:
ShowRule (C1 == YES) ----> what is C?
and
HideRule NOT(C1 == YES)

But It does not show Question 3A panel as expected. Nothing happens. Perhaps, I am doing something wrong? In addition the user should get a panel with a message when they click the No button. How can I implement that?

Thanks in advance.
Userlevel 6
Badge +16

Hi @Ildsborg 


 


I should have explain that... You have the various section/panel


Q1Panel (which contains)


  C1 (Choice Yes/No)


  Hide means HidePanel 


  Show means ShowPanel 


 




HidePanel 3A
NOT((C1 == YES && C2A == YES) || (C1 == YES && C2A == NO && C2B ==YES))

 




ShowPanel 3A
(C1 == YES && C2A == YES) || (C1 == YES && C2A == NO && C2B ==YES)

 


Hopes this helps

Userlevel 6
Badge +16

Question 2A panel: (This are the rules for Panel 2A)
ShowRule ShowPanel (C1 == YES) ----> what is C? The Choice made in Q1
and
HideRule HidePanel NOT(C1 == YES)


 



Panel3A is shown when C1==Yes AND C2A==Yes


 



Panel3A is shown when C1==Yes AND C2A==No AND C2B==Yes


 


Panel 3A
- Arrival1 when (C1 == YES, C2A == YES)
- Arrival2 when (C1 == YES, C2A == NO, C2B ==YES)
- HidePANEL3a: NOT((C1 == YES && C2A == YES) || (C1 == YES && C2A == NO && C2B ==YES))
- ShowPANEL3A: (C1 == YES && C2A == YES) || (C1 == YES && C2A == NO && C2B ==YES)
- Question 3A: if YES stop, if NO go to 3B

 


There is 2 set of Rules for each Panel. One to HIDE the panel and another one to SHOW the panel.


 


Hope this clarifies the rules for you.

Thank you, @Garrett ! You rock!!


It works pretty well, but still I have new challenges.
Let me explain:
Question 1: if YES go to 2A, if NO get a message -- > When the user click NO they should go to a panel where there is a Rich Text control with a message.
Question 2A: if YES go to 3A, if NO to 2B
Question 2B: if YES go to 3A, if NO get a message-- > When the user click NO they should go to a panel where there is a Rich Text control with a message.
Question 3A: if YES get a message, if NO go to 3B -- > When the user click YES they should go to a panel where there is a Rich Text control with a message.
Question 3B: if YES get a message, if NO get a message -- > When the user click YES they should go to a panel where there is a Rich Text control with a message.
And when they click to NO, they should get a message or go to Option 3 (TAB).


I added panels with a Rich Text control and rules to:
Question 1: Question1!= "No" and Hide.
Question 2B: Question2B!= "No" and Hide
Question 3A: Question3A!= "Yes" and Hide
Question 3B: Question3B!= "Yes" and Hide,  Question3B!= "No" Hide.


It works more or less with imperfections. If the user click around the survey and go back to the first question, for instance, the panels with the messages stays. Please see what I mean in the image below. Thanks a lot for you time and dedication!



 



 


 

Userlevel 6
Badge +16

Hey @Ildsborg 


You're welcome!


Great to hear that you manage to resolve your initial challenge.


You have a better grasp of the logic however it can get pretty complicated if you add panel 9A and 9B.


 


Reading and trying to understand your new requirements...


 


 


 

Userlevel 6
Badge +16

@Ildsborg 


 


Try to rephrase these logic to avoid using the != (not equals). 



FROM => Question 1: Question1!= "No" and Hide.


TO => Question 1: Question1== "Yes" and Hide


OR => Question 1: Question1== "Yes" || Question1== ""  and Hide


Refer to my big list of Rules

@Garrett is it all right to continue in this thread? Or?


 


I rephrased the logic from (!=) to (==) but still I have some challenges. 


Question1== "Yes" || Question1== ""  and Hide


Question2B == "Yes" || Question2B == "" -- > Empty? But how does it work? and Hide


Question3A I tried to do more or less the same logic by trying different combinations without result.


Question3B (Yes answer = message)


Question3B (No answer = message)


 


I hope you can enlighten me, thanks!


 

Userlevel 6
Badge +16

Hey @Ildsborg. Sure continue here. 


 


State your requirements again - Perhaps your requirements have shifted.


State what you have done in the logic - what works and what is not working.


 


I need to review and design the logic.

Hi @Garrett. Sure, we do that, thanks!



I have a Classic Nintex Form with 4 TABS which should look like a Survey where I have several questions with YES and NO answers. And depending of the previous answer it should show the next question, or it should show a message.



I want this to happen:


Question 1: if YES go to 2A, if NO get a message -- > When the user click NO they should go to a panel where there is a Rich Text control with a message.
Question 2A: if YES go to 3A, if NO to 2B
Question 2B: if YES go to 3A, if NO get a message-- > When the user click NO they should go to a panel where there is a Rich Text control with a message.
Question 3A: if YES get a message, if NO go to 3B -- > When the user click YES they should go to a panel where there is a Rich Text control with a message.
Question 3B: if YES get a message, if NO get a message -- > When the user click YES they should go to a panel where there is a Rich Text control with a message. And when they click to NO, they should get a message.

At the moment the below logic is working perfectly splendid:

Question 1: if YES go to 2A, if NO stop
Question 2A: if YES go to 3A, if NO to 2B
Question 2B: if YES go to 3A, if NO stop
Question 3A: if YES stop, if NO go to 3B
Question 3B: if YES stop, if NO stop

But, I want the user to get a message instead of only stop.
Therefore I have added 5 panels with Rich Text control and rules in the Form and not in the SharePoint list. The problem arises when the user go back to the previous questions. An example can be seen below in Panel Question 2B.

Panel Question1 (Message):
Question1== "Yes" || Question1== "" --- > Empty? But how does it work? and Hide.
This rule works!

Panel Question2B (Message):
Question2B == "Yes" || Question1 == "No" || Question2B == "" and Hide.
This rule works partly. When the user clicks NO in Question2B, the user gets a message as intended, but if the user go back to Question2A and clicks YES, the Panel Question2B stays which should not happen. And the same happens if the user clicks NO in the Questions2A. I noticed also that when the user clicks NO in Question2A, it is already selected in Question2B. This behavior should not happen. Last but not least the user can go back to Question1 and click No and get a message, this rule works well.


When the user clicks YES in Question2A


 


When the user click NO in Question2A




Panel Question3A (Message):
Question3A == "No" || Question2B == "No" || Question1 == "No" || Question3A == "" and Hide.


This rule works partly. But not when the user clicks back. Same behavior as Panel Question2B.

Panel Question3B (Message)
Question3B == "Yes" || Question1 == "No" || Question3B == "" and Hide


This rule works partly. But not when the user clicks back. Same behavior as Panel Question2B.

Panel Question3B (Message)
Question3B == "No" || Question1 == "No" || Question3B == "" and Hide


This rule works partly. But not when the user clicks back. Same behavior as Panel Question2B.


 

Userlevel 6
Badge +16

Question:


Why do you need 5 Message Panels? Seems you only need just 1 panel with different messages. This can be done by using variables to display in the panel


Do you display more than one Message Panels at a time? Seems only 1 panel is displayed at a time 


 


I'm trying to cut down on the Question Panel (5x) and the Message Panel (5x) equals 10 objects. This will make the Logic way too complex.  Question Panel (5x) and the Message Panel (1x) equals 6 objects.


 

It seems to be the right approach - Question Panel (5x) and the Message Panel (1x) equals 6 objects - as the requirement is to have different answers according to the questions, and if 1 Message panel do the trick then it is the right way to approach. As it is now we need to have only to different answers. 


 


Question 1: if YES go to 2A, if NO same message
Question 2A: if YES go to 3A, if NO to 2B
Question 2B: if YES go to 3A, if NO same message
Question 3A: if YES same message, if NO go to 3B
Question 3B: if YES same message, if NO different message


 


 

Userlevel 6
Badge +16

Hi @Ildsborg


 


If you appreciate my efforts, could you give me a Kudos. Thanks


Click the Kudos button (orange hand icon)



 


 

Userlevel 6
Badge +16

Hi @Ildsborg 


 


Try this. Test out and let me know if there is any rules that fails


Panel 1
- Arrival: Do nothing
- Question 1: if YES go to 2A, if NO go to MsgPanel 1.

Panel 2A
- Arrival: when (C1 == YES)
- HidePanel2A NOT(C1 == YES)
- ShowPanel2A (C1 == YES)
- Question 2A: if YES go to 3A, if NO to 2B

Panel 2B
- Arrival: when (C1 == YES, C2A = NO)
- HidePanel2B NOT(C1 == YES && C2A == NO)
- ShowPanel2B (C1 == YES && C2A == NO)
- Question 2B: if YES go to 3A, if go to MsgPanel 2B.

Panel 3A
- Arrival1 when (C1 == YES, C2A == YES)
- Arrival2 when (C1 == YES, C2A == NO, C2B ==YES)
- HidePanel3A NOT((C1 == YES && C2A = YES) || (C1 == YES && C2A = NO && C2B ==YES))
- ShowPanel3A (C1 == YES && C2A = YES) || (C1 == YES && C2A = NO && C2B ==YES)
- Question 3A: if YES go to MsgPanel 3A, if NO go to 3B

Panel 3B
- Arrival1 when (C1 == YES, C2A = YES, C3A == NO)
- Arrival2 when (C1 == YES, C2A = NO, C2B ==YES, C3A == NO)
- HidePanel3B NOT((C1 == YES && C2A == YES && C3A == NO) || (C1 == YES && C2A = NO && C2B == YES && C3A == NO))
- ShowPanel3B (C1 == YES && C2A == YES && C3A == NO) || (C1 == YES && C2A = NO && C2B == YES && C3A == NO)

MsgPanel 1
- Arrival: when (C1 == NO)
- HideMsg1 NOT(C1 == NO)
- ShowMsg1 (C1 == NO)

MsgPanel 2A (Not Used)
- Arrival: -n/a-

MsgPanel 2B
- Arrival: when (C1 == YES, C2A == NO, C2B == NO)
- HideMsg2B NOT(C1 == YES, C2A == NO, C2B == NO)
- ShowMsg2B (C1 == YES, C2A == NO, C2B == NO)

MsgPanel 3A
- Arrival: when (C1 == YES, C2A = Yes, C3A == YES)
- HideMsg3A NOT(C1 == YES, C2A = Yes, C3A == YES)
- ShowMsg3A (C1 == YES, C2A = Yes, C3A == YES)

MsgPanel 3B-YES
- Arrival: when (C1 == YES, C2A = Yes, C3A == NO, C3B == YES)
- HideMsg3BYes NOT(C1 == YES, C2A = Yes, C3A == NO, C3B == YES)
- ShowMsg3BYes (C1 == YES, C2A = Yes, C3A == NO, C3B == YES)

MsgPanel 3B-NO
- Arrival: when (C1 == YES, C2A = Yes, C3A == NO, C3B == NO)
- HideMsg3BNo NOT(C1 == YES, C2A = Yes, C3A == NO, C3B == NO)
- ShowMsg3BNo (C1 == YES, C2A = Yes, C3A == NO, C3B == NO)

 


Panel is the Question. 


MsgPanel is the Stop Message. (Using 5x MsgPanel)


C is the choice

Hi @Garrett .


We tested and we adapted the rules more. For instance, we adapted this rule:


MsgPanel 3A


ShowMsg3A (C1 == YES, C2A = Yes, C3A == YES)


To this:


MsgPanel 3A


ShowMsg3A: Question1 == "Yes" && Question2A == "Yes" && Question3A == "Yes" || Question1 == "Yes" && Question2A == "No" && Question2B == "Yes" && Question3A == "Yes"



We will make more tests, but I will say thank you for your time and great dedication.


I learned a lot with you. And I would like to continue learning. Do you know where I can find good training, courses about Formatting, Validations rules for Nintex Form that you would like to recommend me? Thanks.


 


 

Userlevel 6
Badge +16

hi @Ildsborg 


You're welcome!


Great to hear that you have adapted my suggestion and modified it further to fit into your requirement!


 


For Nintex Learning Resources - Try Nintex University https://learn.nintex.com/  


 


For If - Else Logic -  Try the IF-ELSE exercise of a programming language (JavaScript, Python, C, C#, Java etc). If you don't have a preferred one, try JavaScript.


Example for C Language https://aticleworld.com/if-else-in-c-questions/ 
Once you have the basic of a programming language, its easy to pickup another language.


 


Again great job for modifying the suggestion into your own solution. Well done!

Reply