создание много-много взаимосвязей между документами в разных базах данных Lotus Notes - PullRequest
1 голос
/ 08 февраля 2012

Я занимаюсь «традиционным» программированием лотосных нот (то же самое, что и в R5), и мне нужно реализовать связывание между двумя типами документов (формами), находящимися в разных базах данных.

Документ типа (A) в базе данных (A) может ссылаться на несколько документов типа (B) в базе данных (B).И документ (B) должен также отображать его отношения с документом (A), поскольку документ (B) может быть связан с различными документами (A).У нас есть отношение «многие ко многим».

На данный момент оно реализовано только с одной стороны (один ко многим): форма документа (A) содержит встроенное представление специальных «ссылочных» документов, находящихся в базе данных A.Связные документы создаются lotusScript, когда пользователь выбирает документы из базы данных (B).Когда пользователь щелкает элемент в этом встроенном представлении, он открывает документ (B).

Клиент хочет иметь возможность редактировать это отношение с любой стороны, поэтому, если он редактирует его в форме (A), форма(B) обновляется.Предполагается, что форма (B) имеет такое же встроенное представление или список связанных документов типа (A)

Каков наилучший способ ее реализации?

Инфраструктура клиента - LotusDomino 8.5.2 + Lotus Notes 8.5.2, поэтому теоретически можно использовать подход составных приложений.

Причина, по которой я задаю этот вопрос, заключается в том, что, насколько я понимаю, в Notes нет хорошего способавставлять вид из другой базы данных.Требование заключается в том, что база данных должна присутствовать в рабочей области для отображения в каком-то хитром списке.Было бы здорово иметь возможность указать целевую базу данных для встроенного представления по серверу и replicaID, но вместо этого у нас есть странный список случайных баз данных рабочего пространства.

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Основная проблема заключается в том, что Notes не был предназначен для обработки подобных отношений между базами данных (и ничего кроме родительских дочерних отношений в этом отношении). Так что решение должно быть креативным.

На ум приходит пара (вне стен, потенциально ужасных) идей. Одним из них является сохранение ссылок в самих документах и ​​их обновление при каждом сохранении документа. Все это может быть сделано в LotusScript и потребует поиска в документах другой базы данных для обновления их ссылок.

Недостатком является то, что производительность при чтении документов будет отличной. При чтении базы данных A не возникнет проблем, если база данных B будет недоступна. Хранит данные локально для каждой базы данных. Недостатки включают вероятность конфликтов сохранения и опасность того, что ссылки могут быть не синхронизированы, если документы не «сохраняются», а обновляются через агентов и т. Д.

Еще одна мысль - использовать агентов для управления ссылками по расписанию. Если вам не нужны актуальные ссылки в реальном времени, вы можете запустить агент, который сканирует базу данных B и обновляет ссылки в базе данных A. С помощью этого метода вы можете выбрать либо обновить сами документы базы данных A, либо - Похоже, что вы уже сделали, создайте набор документов ссылок, которые отображаются во встроенном представлении. Последнее устраняет проблему конфликта сохранения.

Еще одна идея заключается в том, чтобы скрыть любые ссылки при открытии документа в базе данных A, но при этом предоставить кнопку для «показа» или «обновления» ссылок. Когда вы нажимаете эту кнопку, он запускает LotusScript для поиска в базе данных B и создания списка на лету. Это, вероятно, быстро сработает с менее чем 10 000 документов. Эта функция может обновлять документы ссылок, которые вы храните в той же базе данных, что и встроенное представление.

Надеюсь, это поможет!

1 голос
/ 09 февраля 2012

Как вы уже слышали, в Lotus Notes нет встроенных ограничений ссылочной целостности, вы должны сделать это сами.

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

1 / Создайте поле «ID» в каждом документе.Вы можете заполнить его, используя @ Unique в вычисляемом поле для создания идентификатора и сохранить его в документах в обеих базах данных.Вы можете создать агента для этого в lotusScript (LS) или формуле.(Рассмотрите возможность использования оператора оценивать при выполнении в LS)

2 / Создайте в каждой базе данных представление поиска, в котором перечислены документы с новым идентификатором (нене забудьте установить «порядок сортировки» столбца ID.

3 / Используя кнопку действия, которую можно настроить для обеих баз данных, вы можете создать функцию LS, которая откроетпротивоположные базы данных просматривают и возвращают поле идентификатора. ( NotesUIWorkspace.pickliststrings будет самым простым способом выбора документов, в противном случае можно создать диалоговое окно . Сохранить список результатов в поленазывается «IDID »в качестве списка с несколькими значениями.

4 / Может быть больше информации, которую вы хотите сохранить, например, название документа или автора, поэтому вам нужно будет получить дескрипторк этим документам, используя getdocumentbykey , а затем опрашивая поля, которые вам понадобятся для отображения информации на экране.

5 / Затем можно также добавить новое поле в полецелевой документЕсли вы ссылаетесь, назовите его «referrerID», который представляет собой список документов, которые ссылаются на текущий документ.Это сохранит двустороннюю связь.

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

В этом подходе используется статический ключ, поэтому вы можете копировать базы данных без потери отношений между документами, которые пользователь потратил на создание времени.Вы можете (и, вероятно, потеряете) эти отношения, если будете полагаться на универсальные идентификаторы документа (хорошо описанные в документации @ documentUniqueID ), если вы вырезаете и вставляете документ или копируете базу данных в другое место, где они становятся новымидокументам, несмотря на копирование тех же полей, и им будет назначен новый универсальный идентификатор, любые ссылки на документы для старого документа будут недействительными.

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

Если пользователь намеревается отменить связь или изменить отношения между документами, тогда выВам нужно будет добавить функции, которые будут проходить по ключевым полям и поддерживать списки в соответствии с тем, что делает пользователь.Итак, как я уже сказал, для плоской структуры данных Lotus Notes необходимо самостоятельно управлять всеми ограничениями целостности.

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

1 голос
/ 08 февраля 2012

Как лучше всего это реализовать?

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

например.

[Окно A] --- триггер ---> [Окно B]

Если вы не знакомы с этой системой, я сделал урок, который объясняет основы.

http://www -10.lotus.com / LDD / compappwiki.nsf / дх / IBM-мой-первый провод

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

Лично я бы сделал это через XPages. Лично я считаю, что это гораздо проще реализовать через классические приложения для заметок в стиле / приложения. Это также позволит вам отображать элементы дизайна в той же области экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...