Проблемы с AppendDocLink

Тема в разделе "Lotus - Программирование", создана пользователем KLif, 7 апр 2007.

  1. KLif

    KLif Гость

    Call rtitem.AppendDocLink(temp_doc,"ссылка") - на этой строчке вылазиет ошибка "couldn't get default View id for database (Helpdesk.nsf)". Из-за чего такое может появляться?

    doc: Set doc = Source.Document
    rtitem: Set rtitem = New NotesRichTextItem(doc, "tt")
    temp_doc: Set temp_doc = collection.GetFirstDocument
     
  2. KLif

    KLif Гость

    Ответ нашёл.
     
  3. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    У меня сейчас вылезла такая хрень.

    По идее ошибка возникает при вставке ссылки в RT-поле, если в БД, в которой находится документ, на который формируется ссылка нет вида "по умолчанию" (у меня он есть).

    Начал искать дальше, в зарубежных интернетах пишут, что нужен ещё какой-то доступ по умолчанию для базы... у меня там стоит Editor...

    Итого: пока отказался от формирования ссылки в RT-поле (благо это не критично). Но хотелось бы всё-таки разобраться.
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    У меня такая ошибка вылетала, когда представление по умолчанию в БД было, но у пользователя не было к нему доступа (ограничен по $Readers).
     
  5. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Не тот случай. У меня представление "по умолчанию" общее (наследуется из самого верхнего шаблона во все другие шаблоны).

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

    Добавлено:
    Разобрался. Думал, что с серверной БД работаю, оказалось с локальной, а когда сервера нет, то он ссылку, видимо, не может создать.
     
  6. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Можно тоже кое-что спросить? Есть 2 базы, база А и база Б. В одной документ А обрабатывается, потом в другой базе на основе данных из первого документа создается документ Б. В документе А создается ссылка на документ Б.
    Все так

    'Проставляем ссылку на созданный документ Б в документе А

    Dim rtitemRE As NotesRichTextItem
    Set rtitemRE = docA.GetFirstItem ("LinkToB")
    If rtitemRE Is Nothing Then Set rtitemRE = docRe.Createrichtextitem("LinkToB")

    rtitemRE.AppendStyle rtiStyle
    rtitemRE.AppendDocLink docA, "Док Б от документа " & nomer_doc_A, "Док Б от документа " & nomer_doc_A
    rtitemRE.AddNewline 1

    docRe.Save True , True

    Все работает. Но в некоторых документах такая особенность возникает. Когда в документе А щелкаем ссылку на документ Б, вместо документа Б открывается локальная база names.nsf.
    В обеих базах есть форма и вьюха по умолчанию.
    Думал, что дело в том, что в этих документах с глючными ссылками у РТ-поля LinkToB нет флага SIGN SEAL. Поставил признаки. Все равно документ Б не открывает.
    База А и база Б лежат на разных серверах, локальных реплик нет, документы только на серверах создаются.
    Если кто поделится опытом, буду очень благодарен )
     
  7. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Возникала такая вещь, причина вот в чем:
    Это основное свойство rich-text поля - все изменения туда вносятся ПОСЛЕ СОХРАНЕНИЯ.

    Что же получается у вас: вы работаете с рич текст полем в ОТКРЫТОМ доке- вносите туда изменения, и сохраняете так скажем БЭКЭНДНЫЙ док - просто doc.Save(true,true), но ФРОНТЭНДНЫЙ док у вас остался на экране, и если вы его сохраните через UISave (неважно как - просто ручками через ctrl+s или программно через UIDoc.Save) то у вас БЭКЭНДНОЕ рич текст поле перетрется ФРОНТЭНДНЫМ и ссылка потеряется - т.е. будет вести в никуда, поэтому собственно и открывается локальная names.nsf.

    Вся эта ситуация - так называемая рассинхронизация фронтэндного и бэкэндного документов ... где то тут уже на форуме читал про это.

    После сохранения ссылки в рич-текст поле - переоткрывайте документ, куда сохраняете ссылку, откроется "свежий док", который можно уже будет сейвить как угодно.
     
  8. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Прошу прощение, при описании забыл. Документ А не открыт, его обрабатывает агент (выполняется по расписанию), на основе данных из дока А создает документ Б. В документ А пихает ссылку на документ Б. Никакого UI. Все так в агенте

    ' Документ Б создался как новый в базе Б
    docB.Save True, True

    ' Создаем поле ссылки в доке А и суем в него ссылку на документ Б
    Dim rtitemRE As NotesRichTextItem
    Set rtitemRE = docA.GetFirstItem ("LinkToDocB")

    rtitemRE.AppendDocLink docB, "Ссылка на документ Б", "Ссылка на документ Б"
    docA.Save True , True
     
  9. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    попробовать в DXL выгрузить "глючный" док. посмотреть что за ссылка: там по-идее будет ReplicaID базы, UNID вьюхи и дока.
    вьюхи по-умолчанию не менялись? дизайн не заменялся?
    это я к тому, что в ссылках скорее всего прописывается UNID вьюхи, и если заменить ее как элемент дизайна, то UNID ее поменяется.
    как бы бред, но все же.
     
  10. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    А что с конфликтами?
    Не может быть такого что в момент когда шедульный агент обрабатывает доки, эти же доки открыты на редактирование?
     
  11. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Выгрузил в DXL.
    В документе с нормальной ссылкой и реплика, UNID и вьюхи, и документа, и сервер
    В документе с глючной ссылкой только атрибут server, атрибутов database, document, view с UNID-ми нет.
    Вьюхи по ум. и дизайн не менялись, с даты последнего их изменения создавались документы с нормальными ссылками
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    docB как находится агентом?
     
  13. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    docB как находится агентом?

    Все так. Документ А обработали, на нем признак проставляется, и его кидает во вьюху. Агент бежит по этой вьюхе. Документ Б не ищется, он просто создается в коде агента как новый документ
    ' Агент обрабатывает документ А

    Dim docB As New NotesDocument (dbB)
    ' поля его заполняем
    docB.Save True, True

    И документ Б искать не надо, он определен, на него создаем ссылку в документе А с помощью AppendDocLink
     
  14. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    1. меняем сейв на этот:
    Код (LotusScript):
    docB.Save True, docB.IsResponse
    Не понятно зачем докБ делать все время ответным, достаточно проверять на необходимость.
    Для докА тоже самое.
    2. в представлении отключаем галку "show response documents in hierarchy"
    Если там отбор только по признаку - ничего не изменится, но документов может стать гораздо больше.
    И опять же из-за сейва, без родителя ответный не отобразится
    3. по мимо ссылки пропишите в докА поле: DocBItem = docB.UniversalID
    Это поможет найти док, на который не создалась ссылка.
    4. Ошибки в агенте не возникает? Может что в логи пишет?
     
  15. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Не понятно зачем докБ делать все время ответным, достаточно проверять на необходимость.

    Да нет, документ Б ответным не делается, документ А в одной базе, документ Б - в другой. Их просто ссылка связывает.

    В доке А поле с UNID дока Б есть )
    Лог, к сожалению, чистится, еще половлю, посмотрю
     
  16. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Напишите потом в чем проблема была.


    P.S.
    А если уж совсем не получится, то я бы переделал на документы-ссылки (третий док - по клику на который открывается нужный док) + эмбедед вью в доках А и В, где эти документы-ссылки отображаются
     
  17. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Ради связи "один к одному" не стоит делать такую систему... Только если на будущее, как общий механизм.
    У самого сейчас такая задумка есть, даже набросок базы.

    Для связки строго двух документов можно использовать HotSpot или кнопку.
    Поле с UNID'ом документа, поле с базой где этот документ, лучше реплику.
    В коде получать базу по реплике или пути, затем искать в ней документ по UNID.
    Лучше для поиска использовать вьюху, где все документы отображаются по UNID и иерархия не отображается.
    Если документ не найден, то либо его снесли, либо доступа к нему нет.
    Обрабатываем это как сообщение "Документ не найден или Вы не имеете к нему доступа."
    Но это только при условии, что связь "один к одному", если связь "один ко многим" или "многие ко многим", то да, надо делать ссылочную систему.
     
  18. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    лучше использовать другую функцию а не эту, там где передаётся не док а репликаИД и унид
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    ToxaRat
    По моему она недокументированная, не?
    Подскажи название, пож-та.
     
  20. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
Загрузка...
Похожие Темы - Проблемы AppendDocLink
  1. aliaksandr89
    Ответов:
    3
    Просмотров:
    152
  2. Amfion
    Ответов:
    5
    Просмотров:
    147
  3. wowa
    Ответов:
    7
    Просмотров:
    403
  4. John_Tavarez
    Ответов:
    0
    Просмотров:
    343
  5. Валентин Амбер
    Ответов:
    11
    Просмотров:
    372

Поделиться этой страницей