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

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

serg1y

#1
Есть форма для заполнения сотрудников и поля - уникальный номер (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

D!m@n

#2
Да можно, почему ж нет :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 (максимальный среди имеющихся + единица).
 

LuMee

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#4
Зачем он вообще нужен? И зачем хранить его в основном документе?
 
D

D!m@n

#5
<!--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
 
S

serg1y

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

alb

Well-known member
13.07.2005
212
0
#7
<!--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]
по моему кроме как агентом никак
 
7
#8
Проблемы могут возникнуть, если понадобится поиск или вывод в представлении "computed-for-display" полей.
В качестве уникального кода вместо UNIDа можно использовать @Unique без параметров.
Для синхронизации данных с Oracle имеет смысл задуматься об использовании DECS.
 
Статус
Закрыто для дальнейших ответов.