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

Тема в разделе "Lotus - Программирование", создана пользователем Erick, 26 фев 2006.

Статус темы:
Закрыта.
  1. Erick

    Erick Гость

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Представление создай. В первой сортированной колонке помести связку ФИО + e-mail. Проверку делаешь через @DbLookup.
     
  3. Erick

    Erick Гость

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: Erick
    Например, в QuerySave документа. Можешь еще в OnChange поля.
     
  5. Erick

    Erick Гость

    Äëÿ: Medevic Извини, но я всё-равно не догнал. Я новичёк в Lotus, 3 день изучаю. Не мог бы ты мне "на пальцах" объяснить.
    Куда именно поместить?
    Можно примерчик, в хелпе не очень понятно.
    В OnChange наверное не получится, там код можно писать только на LotusScript и JavaScript.

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Делаешь новое (лучше скрытое) представление. Например, View. Делаешь первую колонку отсортированной.
    В ее значении пишешь, например так: FIO + "|" + EMail. Где FIO и EMail соответсвующие поля в твоем документе.
    В QuerySave пишешь.
    Код (Text):
    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);
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    В Input Translation полей FIO и EMail пропиши @Trim(@ThisValue). А то есть "любители" ставить пробелы перед или после значения. Ээто будут уже другие значения.
     
  8. Erick

    Erick Гость

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

    Erick Гость

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--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]
    Да. Там ошибка. :)
    Должно быть так:
    Код (Text):
    If unid(0) <> "" then Continue = False
     
  11. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--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).
     
  12. Erick

    Erick Гость

    Для: Medevic Спасибо!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей