How to create a field that is required. (Description in Russian)

Good afternoon.
I see a lot of Russian names on the forum. So I will write in Russian. So it will be more convenient to everything.


Задача следующая.
Что-бы при создании проекта, Поле исполнитель было бы обязательным.

Как делал я.
Создал правило в Workflow. Для эксперимента воспользовался примером (пример брал отсюда http://confluence.jetbrains.com/display/YTD5/Custom+Workflow+Repository как указанно он был для даты)


rule no data

when !issue.isReported() {
 Due date.required("Please set the Due Date!")
;
}


Подключил созданное правило к интересующему меня проекту (TaskManagementSystem).
Далее выходит самое интересное.

1.создаю задачу (рис.1)

2. Выбираю проект (к которому прикрепил правило) (рис.2)

3. после чего появляется окно с ошибкой. (рис.3)
4. Проект так и не изменяется. (рис.3)
5. Дата подчёркивается (рис.3)

6. Делаю следующее, сначала вписываю дату. И только после этого выбираю проект. (рис.4)
7. В итоге тоже что и в пунктах 3, 4 и 5. (рис.4)


Что бы я хотел видеть:
Чтобы проверка на запылённость поля (в данном случае дата, а вообще исполнитель) производилась только после того как я нажму «Создать задачу». А до этого, позволяла мне менять проект, писать описание и прочее.


рис.1.png

рис.2.png

рис.3.png

рис.4.png
9 comments
Comment actions Permalink
Здравствуйте Павел,

этого легко добиться заменив условие !isReported() на becomesReported().
0
Comment actions Permalink
Здравствуй Дмитрий.

Буквально за 15 минут до твоего сообщения, методом научного тыка у меня получилось сделать задачу, по-другому.
Вот так:

rule no assignee

 when issue.isReported()
{
  Assignee.required("Введите Исполнителя");
}


Пока тестировал, разницы не заметил. Оба варианта работают. Разве что ошибки разные вылезают, при не заполненном поле.
«Причина ошибки утверждения: Введите исполнителя»
«Assignee is required, details: Введите Исполнителя»

Дмитрий, можешь пояснить в чём разница?
0
Comment actions Permalink
Правило, в котором указано условие isReported() будет выполняться при любом изменении уже созданной ишью, например, не позволит сбросить Assignee на null.

А если указано becomesReported(), то правило сработает только в момент создания ишью.

А вот то, что сообщение не локализовано - это бага - JT-22091.
0
Comment actions Permalink
О! Вот но как. Это многое объясняет.
Благодарю Дмитрий!
0
Comment actions Permalink
Если быть точнее, по поводу JT-22091
То не локализованное сообщение возникает при правиле:

 when issue.isReported()
{
  Assignee.required("Введите Исполнителя");
}


При правиле%
rule assert1

when becomesReported() {
  Assignee.required("Введите Исполнителя");
}

Сообщение об ошибке на русском.
0
Comment actions Permalink
Сама ошибка, показывающаяся при field.required("message"), не локализована вне зависимости от условия правила isReported() или becomesReported().
0
Comment actions Permalink
Добрый день. Продолжу тему.
Сейчас у нас активно правило:

rule Обязательное поле исполнитель

 when issue.becomesReported()
{
  assert !(Assignee == null): "Введите Исполнителя.";
}

Для того чтобы невозможно было создать задачу без исполнителя.
Но возник другой вопрос. Пользователи создают задачу с исполнителем, а уже после создания, меняют исполнителя на «Нет исполнителя» =)))
В общем, ищу варианты как создать такое правило.

Попробовал следующее вравило:

rule Запрет смены исполнителя на "нет исполнителя"

when !issue.isReported() {
  Assignee.required(l10n ( Укажите исполнителя! ));
}

Но оно собственно не помогает, так как проверяет заполненность поля исполнитель при каждом обновлении полей, в том числе и ещё до нажатия «Создать задачу». Что собственно мешает создать задачу (даже проект не выбрать).

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

Ещё раз опишу требования к правилу:
1. Не возможно было создать задачу без исполнителя.
2. Невозможно было сменить исполнителя на «Нет исполнителя» у уже созданной задачи.
0
Comment actions Permalink
Проще всего использовать 'require':
rule requirement for assignee 
 
when isReported() || becomesReported() { 
  Assignee.required("Please"); 
}
prettyPrint();
Это правило не позволить создать новую задачу без Исполнителя, а также обнулить Исполнителя в уже созданной задаче.

Аналогично можно решить это проблему при помощи assert:
rule requirement for assignee 
 
when isReported() || becomesReported() { 
  assert Assignee != null: "Please set assignee"; 
}
prettyPrint();
0
Comment actions Permalink
Благодарю.
Использовал

rule requirement for assignee

when isReported() || becomesReported() {
  Assignee.required("Please");
}

Всё получилось.

П.С.
Кстати, когда тестировал заметил. В случае не заполненного поля при создании задачи появляется ошибка на английском. А при обновлении в уже существующей задаче, на русском.

3.JPG

4.JPG
0

Please sign in to leave a comment.