Lotus: @DBlookup для каждой видимой строки

помогите, пожалуйста, со следующей проблемой: у меня есть 2 формы: "EmpsAll" (все сотрудники) и EmpsDocs (сотрудники, которые, например, подписали документ в компании). И мне нужно создать представление, чтобы отображать имя сотрудника в первом столбце, а логическая информация (0 или 1) зависит от того, находится ли сотрудник в базе EmpsDocs (если сотрудник находится в EmpsDocs, то возвращает 1, если не возвращает 0). Возникает вопрос: можно ли ввести формулу @BDLookup во второй столбец для расчета значения (0 или 1) индивидуально для каждого сотрудника в представлении?


person td2003    schedule 21.08.2013    source источник
comment
Эти две формы находятся в одной базе данных? Это разные базы данных? Имя сотрудника указано в документе EmpsDocs? Вместо создания отдельной формы для записи того, что они подписали документ, почему бы просто не добавить значение в их документ EmpsAll, указывающее, что они подписали документ? Попытка обращаться с Notes как с реляционной базой данных может привести к очень плохим проектным решениям.   -  person David Navarre    schedule 21.08.2013
comment
Да, две формы находятся в одной базе данных, но EmpsDocs содержит важные данные о документах, подписанных сотрудником, поэтому одного поля в EmpsAll недостаточно. Я добавил новое поле в EmpAll (IsSigned) и написал агента, который для всех документов в EpmAll ищет EmpNo в EmpsDoc. Если найденный агент помещает значение 1 в поле IsSigned, если нет, значение равно 0. И представление показывает все данные из EmpsAll, где IsSigned=0. Спасибо!   -  person td2003    schedule 22.08.2013


Ответы (3)


Вы не можете использовать @DBLookup в формуле столбца представления. Хорошей альтернативой является написание запланированного агента, который перебирает все документы в одном представлении, выполняет @DBLookup и изменяет значение в документе.

Хорошей новостью является то, что ваше представление работает быстро, так как нет поиска, но плохо то, что ваше представление показывает моментальный снимок состояния всех документов во времени.

person Ken Pespisa    schedule 21.08.2013
comment
Кен прав. Ограничение на использование формул представления описано на странице справки для @DbLookup в файле справки Domino Designer. Это длинная и подробная страница справки, поэтому ее легко пропустить. Использование: Эта функция не работает в формулах столбца или выбора, а также в почтовых агентах. - person Richard Schwartz; 21.08.2013
comment
Спасибо, ваш ответ вдохновил меня сделать это агентом. Проблема решена. - person td2003; 22.08.2013

Вы можете сделать это внутри элемента управления повторением с помощью XPages, если это возможно.

person leyrer    schedule 21.08.2013
comment
Я новичок в программировании для Lotus, поэтому пока пишу приложение для клиента Lotus. Но спасибо за ответ, попробую позже. - person td2003; 22.08.2013

Я прочитал, что вы пытаетесь сделать. Вам нужно запустить агент (когда вы отправляете подписанные документы), чтобы просто открыть документ сотрудника и изменить логическое значение, чтобы оно отображалось соответствующим образом в представлении. Запланированный агент, конечно, не ответ.

Вам также следует заглянуть на http://www.codestore.net/ и посмотреть, есть ли что-нибудь похоже на то, что вы пытаетесь сделать уже в песочнице Джейка. Особенно в тех nsf, которые используют Json и агентов для взаимодействия с представлениями в DOM веб-приложения.

Пожалуйста, ознакомьтесь с http://www.codestore.net/apps/contacts.nsf/ его можно загрузить, и, вероятно, вам нужно будет добавить пару функций ajax в сотрудника (в примере клиент) при подписании этих документов. Таким образом, вы можете либо запускать агенты условно (если у сотрудника есть флаг для отправки этих документов, подписанных или нет, затем запускать или не запускать логический сеттер для документа сотрудника), либо запускать агент с помощью ajax.

person mogwaipr    schedule 24.08.2013