• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

serg1y

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

Есть 2 поля
1 скрытое peopleid_dest, которое хранит уникальный номер
2. computed for display поле - отображает ФИО, код:
Код:
@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]

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

Но можно ли так делать? не будет ли потом проблем? Кто нибудь такое использовал? Как правильно присвоить уникальный номер?
 
Да можно, почему ж нет :D

Как присвоить уникальный номер:
Код:
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 (максимальный среди имеющихся + единица).
 
Для: D!m@n
ИМХО, такая штука может серьезно сбоить при одновременной работе нескольких пользователей. Еще хуже, если они с локальными репликами работать начнут.
Для: serg1y
Мне в свое время понравилась идея использования в качестве уникального кода UNID'а документа. Т.е. делаешь на форме computed when composed поле с формулой:
Код:
@Text(@DocumentUniqueId)
 
Зачем он вообще нужен? И зачем хранить его в основном документе?
 
<!--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
 
Учет персонала хранится в oracle, lotus должен брать данные оттуда. Если сотрудник перешел в другой оттдел или изменилось штатное расписание нужно чтобы эти изменения отобразились в документах lotus где фигурируют эти данные. Я так понимаю lotus сделан так что нужно хранить непосредственно данные, а хочется хранить ссылку на другие данные. А так нужно отслеживать какие данные изменились, запускать агент который будет вносить эти изменения в документы где фигурируют эти данные - не очень удобно.
 
<!--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]
по моему кроме как агентом никак
 
Проблемы могут возникнуть, если понадобится поиск или вывод в представлении "computed-for-display" полей.
В качестве уникального кода вместо UNIDа можно использовать @Unique без параметров.
Для синхронизации данных с Oracle имеет смысл задуматься об использовании DECS.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Курс AD