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

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

Erick

#1
Документ состоит из 3-х полей: ФИО, должность, e-mail. Нужно сделать проверку на уникальность, т.е. не должно быть сотрудников с одинаковыми ФИО и e-mail. Как это можно реализовать?
Заранее благодарен.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
Представление создай. В первой сортированной колонке помести связку ФИО + e-mail. Проверку делаешь через @DbLookup.
 
E

Erick

#3
Для: Medevic А можно подробнее где что писать? Представление у меня уже есть.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#4
Для: Erick
Например, в QuerySave документа. Можешь еще в OnChange поля.
 
E

Erick

#5
Äëÿ: Medevic Извини, но я всё-равно не догнал. Я новичёк в Lotus, 3 день изучаю. Не мог бы ты мне "на пальцах" объяснить.
В первой сортированной колонке помести связку ФИО + e-mail.
Куда именно поместить?
Проверку делаешь через @DbLookup.
Можно примерчик, в хелпе не очень понятно.
Например, в QuerySave документа. Можешь еще в OnChange поля.
В OnChange наверное не получится, там код можно писать только на LotusScript и JavaScript.

Заранее благодарен.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#6
Делаешь новое (лучше скрытое) представление. Например, View. Делаешь первую колонку отсортированной.
В ее значении пишешь, например так: FIO + "|" + EMail. Где FIO и EMail соответсвующие поля в твоем документе.
В QuerySave пишешь.
Код:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim unid As Variant
unid = Evaluate({@DbLookup("" : ""; ""; "View"; FIO + "|" + EMail; 1; [FAILSILENT] : [RETURNDOCUMENTUNIQUEID])}, Source.Document)
If unid(0) = "" then Continue = False
End Sub
В unid записывается unid'ы найденных документов (хотя, если все правильно, не должно быть больше одного документа). Зная его можно будет открыть документ, если надо. Если ничего не найдено (unid(0) = ""), то QuerySave прерывается.
Также можно запихнуть в OnChange.

Еще можно в InputValidation одного из полей (FIO или EMail) запихнуть формулу
@If(@IsDocBeingSaved & !@IsNull(@DbLookup("" : "NoCache"; ""; "View"; FIO + "|" + EMail; 1; [FAILSILENT])); @Failure("Уже есть такое значение"); @Success);
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#7
В Input Translation полей FIO и EMail пропиши @Trim(@ThisValue). А то есть "любители" ставить пробелы перед или после значения. Ээто будут уже другие значения.
 
E

Erick

#8
Äëÿ: Medevic Сделал как ты написал, но сейчас он вообще ничего не добавляет. Если ввести такого же сотредника, то выносится предупреждение и естественно он не добавляется. Но если ввести совершенно другого сотрудника то также не будет добавлятся. :(
 
E

Erick

#9
Вообщем я просто убрал твой код из QuerySave и всё нормално заработало. Спасибо за помощь!
Еще один вопросик, как сделать скрытое представление?
Я на последней закладке свойств представления указал, что исползовать его могу только я. Остальным пользователям оно будет видно?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#10
<!--QuoteBegin-Erick+27:02:2006, 18:45 -->
<span class="vbquote">(Erick @ 27:02:2006, 18:45 )</span><!--QuoteEBegin-->Äëÿ: Medevic Сделал как ты написал, но сейчас он вообще ничего не добавляет. Если ввести такого же сотредника, то выносится предупреждение и естественно он не добавляется. Но если ввести совершенно другого сотрудника то также не будет добавлятся. unsure.gif
[snapback]31186" rel="nofollow" target="_blank[/snapback]​
[/quote]
Да. Там ошибка. :)
Должно быть так:
Код:
If unid(0) <> "" then Continue = False
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#11
<!--QuoteBegin-Erick+27:02:2006, 19:00 -->
<span class="vbquote">(Erick @ 27:02:2006, 19:00 )</span><!--QuoteEBegin-->Еще один вопросик, как сделать скрытое представление?
[snapback]31187" rel="nofollow" target="_blank[/snapback]​
[/quote]
Если имя представления взять в скобки. Например, так (View).
 
Статус
Закрыто для дальнейших ответов.