• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Можно ли в 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

D!m@n

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

LuMee

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

Medevic

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

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
 
S

serg1y

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

alb

<!--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

7hi

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!