• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Прверка на уникальность

  • Автор темы Ogion7
  • Дата начала
Статус
Закрыто для дальнейших ответов.
O

Ogion7

Усем привет. Такая проблемка: в поле Name висит формула валидации
Код:
x:= @DbLookup("Notes":"Nocache";@DbName;"groups"; Name;1;[FailSilent]);

@If(
@ThisValue="";@Failure("Название - обязательное поле");

(@IsNewDoc & @Elements(x)>=1);@Failure("Обнаружен дубликат группы");

@Elements(x)>1;@Failure("Обнаружен дубликат группы");

@Success
)

при создании дока все нормально. Открываю уже существующий, и меняю поле Name на неуникальное(т.е есть документ с таким значением в поле Name). Жму кнтрл+с -- молчание, жму второй раз -- сообщение об дубликации названия поля.
Заковыка по моему в строке перед @Success -- в представлении еще нет данных о новом значении(одно есть), полсе первого сохранения вьюха обновилась и их уже два. Если поставить >= то будет плеваться при сохранении. Есть идея сделать поле в котором хранить старое имя, и если оно не совпадает с новым, а элементов нашло 1 -- то ошибка. Но может можно как то проще?
 
O

Ogion7

Решил с помощью представления (Duplicate_groups) из двух столбцов: первый категория по Name, второй--унид документа. В валидации след-й код:
List:=@If(@IsError(@DbLookup("":"NoCache";"":"";"(Duplicate_groups) ";@Text(Name);2));"";@DbLookup("":"NoCache";"":"";"(Duplicate_groups) ";@Text(Name);2));
IsDubl:=@If(@IsMember(@Text(@DocumentUniqueID);List) & @Elements(List)>1;@False;@IsNewDoc & List!="";@False;@IsNotMember(@Text(@DocumentUniqueID);List) & @Elements(List)>=1 & List!="";@False;@True);

@If(Name="" & @IsDocBeingSaved;@Failure("Название - обязательное поле");! IsDubl & @IsDocBeingSaved;@Failure("Обнаружен дубликат группы");@Success)
:)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!