Have an idea?

Visit Sawtooth Software Feedback to share your ideas on how we can improve our products.

Put this code in Loop

Hi Everyone,

We have below code for custom validation of two questions and this is working fine, however, is there any way we can make this code shorter by using Loops?

var vari101=[% GetValue(B21_1) %];
var vari102=[% GetValue(B21_2) %];
var vari103=[% GetValue(B21_3) %];
var vari104=[% GetValue(B21_4) %];
var vari105=[% GetValue(B21_5) %];
var vari106=[% GetValue(B21_6) %];
var vari107=[% GetValue(B21_7) %];
var vari108=[% GetValue(B21_8) %];
var vari109=[% GetValue(B21_9) %];
var vari110=[% GetValue(B21_10) %];
var vari111=[% GetValue(B21_11) %];
var vari112=[% GetValue(B21_12) %];
var vari113=[% GetValue(B21_13) %];
var vari114=[% GetValue(B21_14) %];
var vari115=[% GetValue(B21_15) %];
var vari116=[% GetValue(B21_30) %];
var vari117=[% GetValue(B21_31) %];
var vari118=[% GetValue(B21_32) %];
var vari119=[% GetValue(B21_16) %];
var vari120=[% GetValue(B21_34) %];
var vari121=[% GetValue(B21_35) %];
var vari122=[% GetValue(B21_36) %];
var vari123=[% GetValue(B21_37) %];
var vari124=[% GetValue(B21_38) %];
var vari125=[% GetValue(B21_39) %];
var vari126=[% GetValue(B21_40) %];
var vari127=[% GetValue(B21_41) %];
var vari128=[% GetValue(B21_42) %];
var vari129=[% GetValue(B21_43) %];
var vari130=[% GetValue(B21_44) %];
var vari132=[% GetValue(B21_46) %];
var vari133=[% GetValue(B21_47) %];
var vari134=[% GetValue(B21_48) %];
var vari135=[% GetValue(B21_49) %];
 
 
 
var vari1=SSI_GetValue("B22_r1_c1");
var vari2=SSI_GetValue("B22_r2_c1");
var vari3=SSI_GetValue("B22_r3_c1");
var vari4=SSI_GetValue("B22_r4_c1");
var vari5=SSI_GetValue("B22_r5_c1");
var vari6=SSI_GetValue("B22_r6_c1");
var vari7=SSI_GetValue("B22_r7_c1");
var vari8=SSI_GetValue("B22_r8_c1");
var vari9=SSI_GetValue("B22_r9_c1");
var vari10=SSI_GetValue("B22_r10_c1");
var vari11=SSI_GetValue("B22_r11_c1");
var vari12=SSI_GetValue("B22_r12_c1");
var vari13=SSI_GetValue("B22_r13_c1");
var vari14=SSI_GetValue("B22_r14_c1");
var vari15=SSI_GetValue("B22_r15_c1");
var vari16=SSI_GetValue("B22_r30_c1");
var vari17=SSI_GetValue("B22_r31_c1");
var vari18=SSI_GetValue("B22_r32_c1");
var vari19=SSI_GetValue("B22_r16_c1");
var vari20=SSI_GetValue("B22_r34_c1");
var vari21=SSI_GetValue("B22_r35_c1");
var vari22=SSI_GetValue("B22_r36_c1");
var vari23=SSI_GetValue("B22_r37_c1");
var vari24=SSI_GetValue("B22_r38_c1");
var vari25=SSI_GetValue("B22_r39_c1");
var vari26=SSI_GetValue("B22_r40_c1");
var vari27=SSI_GetValue("B22_r41_c1");
var vari28=SSI_GetValue("B22_r42_c1");
var vari29=SSI_GetValue("B22_r43_c1");
var vari30=SSI_GetValue("B22_r44_c1");
var vari32=SSI_GetValue("B22_r46_c1");
var vari33=SSI_GetValue("B22_r47_c1");
var vari34=SSI_GetValue("B22_r48_c1");
var vari35=SSI_GetValue("B22_r49_c1");
 
 
if(!($("#B22Dnt_1").is(":checked")))
{
if((vari101)==1 && (vari1)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari102)==1 && (vari2)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari103)==1 && (vari3)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari104)==1 && (vari4)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari105)==1 && (vari5)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari106)==1 && (vari6)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }      
if((vari107)==1 && (vari7)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari108)==1 && (vari8)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari109)==1 && (vari9)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari110)==1 && (vari10)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari111)==1 && (vari11)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari112)==1 && (vari12)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari113)==1 && (vari13)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari114)==1 && (vari14)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari115)==1 && (vari15)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari116)==1 && (vari16)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari117)==1 && (vari17)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari118)==1 && (vari18)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }      
if((vari119)==1 && (vari19)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari120)==1 && (vari20)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari121)==1 && (vari21)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari122)==1 && (vari22)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari123)==1 && (vari23)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari124)==1 && (vari24)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }             
if((vari125)==1 && (vari25)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }      
if((vari126)==1 && (vari26)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari127)==1 && (vari27)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari128)==1 && (vari28)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari129)==1 && (vari29)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari130)==1 && (vari30)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari132)==1 && (vari32)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari133)==1 && (vari33)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari134)==1 && (vari34)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }
if((vari135)==1 && (vari35)<1)
       {
       strErrorMessage= "Lütfen geçerli bir yanıt girin.";
       }      
}
asked Mar 13 by Vinay Agrawal Bronze (680 points)
I noticed that you have item 16 positioned where I would expect item 33.  Figured I'd make sure you were aware in case this was a mistake.

1 Answer

+1 vote
We can perhaps clean this up a little bit, but it unfortunately can't be done in one simple loop for two reasons:

First, because Sawtooth Script is ran before JavaScript, there's no way to pass information from JS to Sawtooth Script.  For example, scripts like this aren't possible:

for (var i = 0; i < 10; i++) {
    [% GetValue(i) %]
}


Second, because we're working with an odd collection of values.  Either we have to hard-code an array of values to show / not show (e.g., "my @items = (1, 2, 3, 30, 31, 32);") or we have to run multiple loops to generate the items we want to select.

Applying this, we remove all repeated code, but we do end up with four loops and some JS-writing Perl:

var b21Responses = [% Begin Unverified Perl
    # Items to iterate
    my @items = ();
    for (my $i = 1; $i <= 16; $i++) {
        push(@items, $i);
    }
    for (my $i = 30; $i <= 49; $i++) {
        if ($i == 33) {
            next;
        }
        push(@items, $i);
    }

    # Iterate
    my $out = '{';
    my $sep = '';
    foreach my $item (@items) {
        $out .= $sep;
        $sep = ',';
        $out .= $item . ':' . GETVALUE('B21_' . $item);
    }
    $out .= '}';
    return $out;
End Unverified %];

if (!$('#B22Dnt_1').is(':checked')) {
    Object.keys(b21Responses).forEach(function(key){
        if (b21Responses[key] == 1 && SSI_GetValue('B22_r' + key + '_c1') < 1) {
            strErrorMessage = "Lütfen geçerli bir yanıt girin.";
        }
    });
}
answered Mar 13 by Zachary Platinum Sawtooth Software, Inc. (114,850 points)
...