Вложенные операторы If для нескольких условий

Мне нужно что-то похожее на следующий скрипт (в идеале это должно войти в поле события LiveCycle «вычислить»):

if(Subform.TextField1.rawValue !== null && Subform.TextField2.rawValue !== null && Subform.TextField3.rawValue !== null &&

Subform.TextField4.rawValue !== null &&

((TableSubform.Table.Row1.TextField5.rawValue == null && (TableSubform.Table.Row1.TextField6.rawValue == null && (TableSubform.Table.Row1.TextField7.rawValue == null) ||

(TableSubform.Table.Row1.TextField5.rawValue !== null && (TableSubform.Table.Row1.TextField6.rawValue ==  "Yes" && (TableSubform.Table.Row1.TextField7.rawValue == null) ||

(TableSubform.Table.Row1.TextField5.rawValue !== null && (TableSubform.Table.Row1.TextField6.rawValue ==  "No" && (TableSubform.Table.Row1.TextField7.rawValue !== null)) &&

((TableSubform.Table.Row2.TextField5.rawValue == null && (TableSubform.Table.Row2.TextField6.rawValue == null && (TableSubform.Table.Row2.TextField7.rawValue == null) ||

(TableSubform.Table.Row2.TextField5.rawValue !== null && (TableSubform.Table.Row2.TextField6.rawValue ==  "Yes" && (TableSubform.Table.Row2.TextField7.rawValue == null) ||

(TableSubform.Table.Row2.TextField5.rawValue !== null && (TableSubform.Table.Row2.TextField6.rawValue ==  "No" && (TableSubform.Table.Row2.TextField7.rawValue !== null))

)

{

this.rawValue="Complete";

} else {

this.rawValue="Not complete"

По сути, у меня есть форма с четырьмя полями сверху, которые необходимо заполнить. Затем у меня есть таблица из трех столбцов (первая строка является заголовком) с двумя строками заполняемых текстовых полей со следующими правилами, чтобы форма считалась завершенной:

Если TextField5 пуст, то TextField6 и Textfield7 заполнять не нужно.

Если TextField5 не пуст, то TextField6 необходимо заполнить «Да» или «Нет».

Если для TextField6 установлено значение «Да», то TextField7 заполнять не нужно.

Если для Textfield6 указано «Нет», то TextField7 необходимо заполнить.

Пожалуйста, дайте мне знать, где мой скрипт пошёл не так! Спасибо!


person hy9fesh    schedule 25.05.2015    source источник


Ответы (2)


Во-первых, из того, что я вижу, это не вложенный оператор IF, это целая команда и/или. Конечно, такой код не предпочтителен, поэтому сначала попробуйте разделить свои условия на что-то вроде этого:

if(Subform.TextField1.rawValue !== null && Subform.TextField2.rawValue !== null)

  {
   if(another condition)
  }
      if(another condition).....etc

Видите ли, выполнение вложенных операторов IF означает, что для каждой команды есть другие варианты.

Для условий, если это язык JAVA, вам нужно использовать ActionListener

Чтобы записать свои команды, это означает, что когда, например, ваш TextField6 имеет значение «нет», то с помощью ActionListener вы напишете код команды, который необходимо заполнить TextField7.

person AMH9    schedule 25.05.2015
comment
Если я сделаю вложенные операторы IF (согласно приведенному выше примеру), создаст ли это эффект и? Например, если (это) И если (это) верно, тогда для this.rawValue будет установлено значение «Завершено». Например, я хочу, чтобы эти два оператора if были или: code if(TableSubform.Table.Row1.TextField5.rawValue == null && TableSubform.Table.Row1.TextField6.rawValue == null && TableSubform.Table.Row1.TextField7. rawValue == null) } if(TableSubform.Table.Row1.TextField5.rawValue !== null && TableSubform.Table.Row1.TextField6.rawValue == Yes && TableSubform.Table.Row1.TextField7.rawValue == null) - person hy9fesh; 25.05.2015
comment
@hy9fesh Вы можете сделать вложенные операторы if для своих операторов AND, но для OR вы должны сделать это в одной строке, как вы написали. - person AMH9; 26.05.2015
comment
Спасибо за ваш ответ! Так что я бы сделал что-то вроде этого: if((TableSubform.Table.Row1.TextField5.rawValue == null && TableSubform.Table.Row1.TextField6.rawValue == null && TableSubform.Table.Row1.TextField7.rawValue == null) || (TableSubform.Table.Row1.TextField5.rawValue !== null && TableSubform.Table.Row1.TextField6.rawValue == "Yes" && TableSubform.Table.Row1.TextField7.rawValue == null)) - person hy9fesh; 27.05.2015

Если TextField5 пуст, то TextField6 и Textfield7 не нужно заполнять. Если TextField5 не является пустым, тогда TextField6 необходимо заполнить «Да» или «Нет». Если TextField6 имеет значение «Да», тогда TextField7 не необходимо заполнить. Если Textfield6 имеет значение «Нет», то TextField7 необходимо заполнить.

Основываясь на вашем описании, я бы сделал набор утверждений, которые выглядят следующим образом.

if (TextField5.isNull) this.rawValue = "Complete";
else {
  if (TextField6.rawValue == "Yes") this.rawValue = "Complete";
  else {
    if (!TextField7.isNull) this.rawValue = "Complete";
    else this.rawValue = "Not Complete";
  }
}

Но на самом деле есть только одно условие, при котором у вас может быть неполная форма (кажется): TextField5 заполнен, TextField6 - «Нет», а TextField7 пуст. Таким образом, вы можете сжать это в одно утверждение и пометить все остальное как завершенное.

if (!TextField5.isNull && TextField6.rawValue == "No" && TextField7.isNull) this.rawValue = "Not Complete";
else this.rawValue = "Complete";
person jasotastic    schedule 26.05.2015
comment
У меня также может быть неполная форма, если TextField5 заполнен, а TextField6 не заполнен. Тем не менее, смогу ли я сделать if ((!TextField5.isNull && TextField6.rawValue == "No" && TextField7.isNull) || (!TextField5.isNull && TextField6.isNull)) this.rawValue = "Not Complete"; else this.rawValue = "Complete"; - person hy9fesh; 27.05.2015
comment
Да, это будет включать ту часть, которую я пропустил, и должно дать вам рабочий код. - person jasotastic; 27.05.2015
comment
Большое спасибо за ваш ответ! Итак, если бы у меня было две строки, это было бы: if ((!Row1.TextField5.isNull && Row1.TextField6.rawValue == "No" && Row1.TextField7.isNull) || (!Row1.TextField5.isNull && Row1.TextField6.isNull)) {if ((!Row2.TextField5.isNull && Row2.TextField6.rawValue == "No" && Row2.TextField7.isNull) || (!Row2.TextField5.isNull && Row2.TextField6.isNull)) this.rawValue = "Not Complete"; else this.rawValue = "Complete"; - person hy9fesh; 27.05.2015
comment
Поскольку внутри вашего оператора есть только одна строка исполняемого кода, вы можете опустить фигурную скобку {. О строках: мы говорим о LiveCycle. Эти строки создаются динамически в таблице? (Они будут называться «Row1[0]» и «Row1[1]».) Или эти две строки уже созданы и называются «Row1» и «Row2»? - person jasotastic; 27.05.2015
comment
Все, этот вопрос решен. Для тех, кому интересно, вот что я сделал: if ((!Row1.TextField5.isNull && Row1.TextField6.rawValue == "No" && Row1.TextField7.isNull) || (!Row1.TextField5.isNull && Row1.TextField6.isNull)) {if ((!Row2.TextField5.isNull && Row2.TextField6.rawValue == "No" && Row2.TextField7.isNull) || (!Row2.TextField5.isNull && Row2.TextField6.isNull)) this.rawValue = "Not Complete"; else this.rawValue = "Complete"; в дополнение к другим полям, которые я хотел в своем первом посте, разделенные ИЛИ вместо И. Кажется, это работает для меня! - person hy9fesh; 28.05.2015