Как создать поле автоинкремента в лотосе домино? - PullRequest
2 голосов
/ 16 декабря 2011

У меня есть приложение в lotus domino с полем

UNIDID -номер (вычисляется) ...

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

У меня есть формула @dbcolumn, которая получит последнюю запись в поле UNIDID -

mFind: = @ DbColumn ("": "NoCache"; @DbName; "lkpEmpMasterbyOnlyUnidCode"; 1);

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

Ответы [ 4 ]

3 голосов
/ 16 декабря 2011

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

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

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

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

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

2 голосов
/ 16 декабря 2011

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

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

1 голос
/ 17 декабря 2011

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

T_List: = @ DbColumn ("": "NoCache"; ""; "RefNumView"; 1); @If (@IsNewDoc & @Elements (T_List) = 0; 1; @IsNewDoc &! @IsError (T_List); @ Subset (T_List; 1) + 1; RefNumber)

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

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

...