2011-12-16 1 views
2

У меня есть приложение в Lotus Domino с полемКак создать автоматически увеличивающееся поле в лотосе domino?

UNIDID -количество (расчетному) ...

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

у меня есть формула @DbColumn которая получит мне последнюю запись в UNIDID полевой

mFind: = @ DbColumn («»: «NoCache "; @DbNa меня ; "LkpEmpMasterbyOnlyUnidCode"; 1);

Как увеличиваем mFind и представить его в виде 'UNIDXXXX'?

+2

Является ли эта база данных реплицирована на другие серверы или в систему локальных пользователей? Распределенный характер Lotus может сделать это очень сложным. –

+0

его для системы локальных пользователей .. – Bebo

+0

Взгляните сюда сначала: http://www-10.lotus.com/ldd/46dom.nsf/Search?SearchView&Query=sequential&SearchOrder=0&Start=1&Count=100 –

ответ

2
+0

Речь идет о единственный способ убедиться, что номер уникален, но даже тогда, когда нужно назначить номер, при создании документа и риск того, что документ никогда не будет сохранен или после сохранения документа и запутать пользователя :-) –

3

Чтобы ответить на ваш конкретный вопрос:

lastEntry: = @Subset (mFind; -1); "UNID" + lastEntry;

Но вот несколько вещей, которые вы должны думать о том:

  1. «UNID» это термин, который имеет очень специфическое значение в Notes и Domino. Он относится к универсальному идентификатору, который автоматически присваивается каждому документу в каждой базе данных. Если вы используете этот термин в своей заявке для другой цели, вы, вероятно, столкнетесь с какой-то проблемой, когда какой-либо другой эксперт Notes будет смотреть ваше приложение.

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

2

Прочитано comprehensive treatment of sequential numbering in Notes/Domino, написанный IBMer Andre Guirard. Он считает использование @DBColumn для последовательной нумерации значительного риска производительности и предоставляет алгоритмы и код для альтернативных подходов.

Я рекомендую подход под заголовком «Поколение номера по требованию» с использованием кода в листинге 2. Блокировка документов является излишним - просто определить, был ли изменен документ нумерации с момента его считывания и реагирования соответственно.

1

Эта формула из базы данных технических заметок генерирует последовательно увеличивающееся число с использованием вычисленного в сгенерированном поле формы, чтобы пользователь мог видеть номер, но он сохраняется только при сохранении документа.

T_List: = @ DbColumn ("": "NoCache"; ""; "RefNumView"; 1); @If (@IsNewDoc & @Elements (T_List) = 0; 1; @IsNewDoc &![email protected] (T_List); @ Подмножество (T_List; 1) + 1; RefNumber)

Вам нужен первый столбец вида, отсортированный в порядке убывания с полем, в котором хранится ваш номер, если в представлении нет записей, код которого начинается нумерация по адресу: 1

База данных была разработана в Примечаниях 4.5, но я все еще использую ее сейчас с клиентом 8.5 нот клиента & и никогда не нуждался в изменении формулы, действительно, ее многократно использовали за многие годы во всех последующих версии. Он не будет работать, если документы создаются на нескольких серверах, поскольку запланированный агент - единственный способ получить поистине уникальную последовательную нумерацию.

Смежные вопросы