Как запретить отправку договора на согласование, если не указана сумма
<< Click to Display Table of Contents >> Разработка > Примеры разработки > Документы Как запретить отправку договора на согласование, если не указана сумма |
Ситуация
Предположим, необходимо запретить отправлять договор на согласование по регламенту, если в карточке договора не заполнено поле Сумма (TotalAmount).
Решение
2.В контекстном меню решения последовательно выберите пункты Перекрыть, Документ.
3.В открывшемся окне в выпадающем списке выберите тип сущности «Договор» (Sungero.Contracts.Contract) из базового решения Directum RX.
4.Нажмите на кнопку ОК. Документ появится в дереве решений в разделе «Перекрытые элементы». Откроется его редактор.
5.Перейдите в редактор созданного решения и добавьте зависимость от модуля «Договоры» (Sungero.Contracts). Если зависимости не указаны, при публикации могут возникнуть ошибки.
6.Отправка документа на согласование по регламенту выполняется с помощью действия SendForApproval. Чтобы переопределить логику стандартного действия, в редакторе перекрываемого типа документа перейдите в узел «Действия». Затем выберите действие SendForApproval (Отправить на согласование), установите флажок рядом с событием Выполнение и перейдите по ссылке.
7.В открывшемся редакторе напишите код:
public override void SendForApproval(Sungero.Domain.Client.ExecuteActionArgs e)
{
// Проверить, заполнено ли поле "Сумма".
if (!_obj.TotalAmount.HasValue)
{
// Если поле не заполнено, вывести сообщение.
e.AddError(DEV.PerekrytieContract.Contracts.Resources.NeedTotalAmount);
// Прекратить выполнение действия SendForApproval.
return;
}
base.SendForApproval(e);
}
DEV.PerekrytieContract.Contracts.Resources.NeedTotalAmount – строка локализации, которую пользователь увидит в системе, если не заполнит поле Сумма и попытается отправить договор на согласование по регламенту. Как добавить строку локализации прямо при написании кода, см. в примере.
ВАЖНО. Метод e.AddError() используется при строгой валидации: после появления сообщения об ошибке не выполняются следующие операции. Правило не работает, если при перекрытии или наследовании после e.AddError() вызывается метод, действие или событие из родительского типа сущности. Например, в коде выше после e.AddError() вызывается действие SendForApproval() из типа документа Contract. Чтобы после сообщения об ошибке не выполнялось действие SendForApproval(), используйте оператор return для принудительного завершения действия.
8.Опубликуйте разработку.
© Компания Directum, 2024 |