Можно ли в Lotus таким образом использовать таблицы-справочники?

Тема в разделе "Lotus - Программирование", создана пользователем serg1y, 10 сен 2007.

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

    serg1y Гость

    Есть форма для заполнения сотрудников и поля - уникальный номер (peopleid), ФИО, должность и т.д. Есть представление peopleview отображающее всех сотрудников. 1колонка peopleid, 2-я - ФИО, 3-я должность.
    В основном документе нужно выбирать сотрудника, но желательно не напрямую вписать ФИО и должность, а хранить только уникальный номер сотрудника и отображать остальные данные из представления сотрудников с соответствующим уникальном номером (как в реляционной БД).
    Сделано так:
    На основной форме есть кнопка с кодом, которая дает возможность выбрать одного из сотрудников и записавает его уникальный номер в поле peopleid_dest
    Код (Text):
    @SetField("peopleid_dest";@PickList( [Custom] : [Single];@DbName;"PeopleVieW";"Выберите";"Сотрудники";1));
    @Command( [ViewRefreshFields] )
    Есть 2 поля
    1 скрытое peopleid_dest, которое хранит уникальный номер
    2. computed for display поле - отображает ФИО, код:
    Код (Text):
    @If(@GetField("peopleid_dest")="";"";@DbLookup("":"noCache";@DbName;"PeopleView";@GetField("peopleid_dest");2))
    3. computed for display поле - отображает должность, код:

    code]@If(@GetField("peopleid_dest")="";"";@DbLookup("":"noCache";@DbName;"PeopleView";@GetField("peopleid_dest");3))[/code]

    Вроде, работает как нужно, если исправляю данные о сотруднике в справочнике - изменяются данные в основном документе.

    Но можно ли так делать? не будет ли потом проблем? Кто нибудь такое использовал? Как правильно присвоить уникальный номер?
     
  2. D!m@n

    D!m@n Гость

    Да можно, почему ж нет :D

    Как присвоить уникальный номер:
    Код (Text):
    Function GetUniquePeopleId() As Integer

    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim maxid As Integer

    Set db=s.CurrentDatabase
    Set view=db.GetView("<Имя вашей вьюшки с сотрудниками>")

    Set doc=view.GetFirstDocument

    maxid=0

    Do Until doc Is Nothing

    If Val(doc.peopleid(0))>maxid Then maxid=Val(doc.peopleid(0))

    Set doc=view.GetNextDocument(doc)
    Loop

    GetUniquePeopleId=maxid+1

    End Function
    Функция возвращает уникальный peopleid (максимальный среди имеющихся + единица).
     
  3. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Для: D!m@n
    ИМХО, такая штука может серьезно сбоить при одновременной работе нескольких пользователей. Еще хуже, если они с локальными репликами работать начнут.
    Для: serg1y
    Мне в свое время понравилась идея использования в качестве уникального кода UNID'а документа. Т.е. делаешь на форме computed when composed поле с формулой:
    Код (Text):
    @Text(@DocumentUniqueId)
     
  4. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Зачем он вообще нужен? И зачем хранить его в основном документе?
     
  5. D!m@n

    D!m@n Гость

    <!--QuoteBegin-LuMee+11:09:2007, 08:38 -->
    <span class="vbquote">(LuMee @ 11:09:2007, 08:38 )</span><!--QuoteEBegin-->ИМХО, такая штука может серьезно сбоить при одновременной работе нескольких пользователей. Еще хуже, если они с локальными репликами работать начнут.
    [snapback]77751" rel="nofollow" target="_blank[/snapback]​
    [/quote]Созданием и редактированием таких документов (см. исходный пост) в организациях, как правило, занимается 1-3 сотрудника кадрового отдела :D
     
  6. serg1y

    serg1y Гость

    Учет персонала хранится в oracle, lotus должен брать данные оттуда. Если сотрудник перешел в другой оттдел или изменилось штатное расписание нужно чтобы эти изменения отобразились в документах lotus где фигурируют эти данные. Я так понимаю lotus сделан так что нужно хранить непосредственно данные, а хочется хранить ссылку на другие данные. А так нужно отслеживать какие данные изменились, запускать агент который будет вносить эти изменения в документы где фигурируют эти данные - не очень удобно.
     
  7. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    <!--QuoteBegin-serg1y+11:09:2007, 12:43 -->
    <span class="vbquote">(serg1y @ 11:09:2007, 12:43 )</span><!--QuoteEBegin-->А так нужно отслеживать какие данные изменились, запускать агент который будет вносить эти изменения в документы где фигурируют эти данные - не очень удобно.
    [snapback]77769" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    по моему кроме как агентом никак
     
  8. 7hi

    7hi Гость

    Проблемы могут возникнуть, если понадобится поиск или вывод в представлении "computed-for-display" полей.
    В качестве уникального кода вместо UNIDа можно использовать @Unique без параметров.
    Для синхронизации данных с Oracle имеет смысл задуматься об использовании DECS.
     
Загрузка...
Статус темы:
Закрыта.

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