Вложить Аттачмент В Notesrichtext На Сервере

Тема в разделе "Lotus - Программирование", создана пользователем proteam, 28 май 2013.

  1. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Всем привет.

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

    Есть такой вот код:
    Код (Text):
    If copyPath = "" Then Error 1, "Не указан путь выгрузки"

    copyPath = copyPath + doc.Universalid +"old.ntf"

    If Dir$(copyPath, 0) = "" Then
    Set tempDB = db.Createcopy("", copyPath)
    Else
    Error 1, "Невозможно снять старый шаблон так как по пути "+copyPath+" уже существует файл"
    End If

    Set rtitem = New NotesRichTextItem( doc , FIELD_OLDTEMPLATE )
    Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", copyPath)
    call doc.Save(true, false)
    Суть данного куска кода - Снять шаблон с БД db и вложить в поле NotesRichText.
    Запускаю локально - ОК
    Запускаю на сервере - документ сохраняется, вложение есть. НО. Открывает это самое вложение и тут бах ошибка.

    То:

    ---------------------------
    IBM Lotus Notes
    ---------------------------
    The attachment may be corrupted. Would you like to continue with the available data?
    ---------------------------
    Да Нет
    ---------------------------


    То:
    ---------------------------
    IBM Lotus Notes
    ---------------------------
    File truncated - file may have been damaged
    ---------------------------
    ОК
    ---------------------------


    Заметил такую штуку. В документах, в которых вложения открываются нормально в свойствах вложеного файла написано так:

    codeBy1.PNG

    в которых не открывается так

    codeBy2.PNG

    Может кто знает как это исправить
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    ограничение на репликацию не установлено случаем (по размеру аттача)?
     
  3. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Тестовый сервер, однозначно отвечать что нет не буду, но скорее всего ограничений нет. Проблема именно в процессе вложения аттачмента в поле. Нарушается compression type (на скринах видно)
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    DamirUrazov
    Это с 6-той версии так, на клиенте LZ1, на сервере Хафман:
    Источник
    Есть интересные серверные переменные, должно помочь:
    LZ1 Notes
    LZ1 Mime
    Лечение текущей ситуации, смотрите описание двух ссылок:
    Раз
    Два

    Добавлено: И еще одно http://www-01.ibm.com/support/docview.wss?...uid=swg21256241
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    savl это не отвечает на вопрос - почему оно аттач считает битым
    у мя такое было когда на БД установлены настройки репликации - частично
    правда не с аттачем
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    lmike
    Это верно.
    Я не силен в механизмах "сжатия", но есть подозрение что клиент пытается прочитать хафмана, как lz1.
    Выяснилось что LZ1 работает на клиенте в версии 8+ через
    Код (LotusScript):
    Call rtitem.EmbedObject ( EMBED_ATTACHMENT, "", copyPath)
    Всегда, даже если в базе отключено "Use LZ1 compression...", а на сервере надо включать принудительно.
     
  7. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Как я понял, все решения лишь исправляют то, что уже повреждено. А мне надо чтобы новые вложения ложились нормально и затем открывались как надо.
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    DamirUrazov
    настройки сервера попробуй поставить (LZ1 Notes и LZ1 Mime) из моего поста и перезагрузить сервер.
    Потом посмотреть результаты прикрепления.
     
  9. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Вопрос - скопированный шаблон ГДЕ находится? Если в папке Data, то, вообще говоря, Лотус его может/должен юзать в момент прикрепления - отсюда и ошибки. Вариант решения - dbcache flush + копирование файла шаблона во временную папку + прикрепление файла уже из нее.
     
  10. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Ну можно сказать что и в папке Data, правда в одной из ее дочерних папок, путь типо такого Data/Attachments/

    А будет ли права на создание(перемещение) шаблона в какую то временную папку на сервере?

    Насчет прописывания параметров, пока не проверил, но думаю до конца рабочего дня проверю и отпишусь.
     
  11. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Проверил вчера, добавил эти две переменные в нотес ини, перезагрузился. Такая же ерунда. Снова хафман. Снова вложение повреждено
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Тогда надо попробовать сделать копию в другую папку, как предложил Мыш
    Возможно, что после создания базы она(копия) подхватывается задачей, которая обновляет каталог.
    Во временную директорию ОС или Notes доступ есть всегда, главное его получить или прописать жестко.
     
  13. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Вот-вот, сие не есть гут. Более того - даже если, скажем, реплицировать базу с сервера локально в папку вне DATA (скажем, в системный TEMP), то Лотус все равно эту базу "держит" (было где-то обсуждение этой темы). Попробуйте пересмотреть саму задачу.
    ЗЫ. Аттачи (т.е., простые файлы, лежащие на дисках) на серверах Domino прикрепляются нормально - вот ни разу не сталкивался с проблемами. Поэтому и грешу на Ваш механизм. Попробуйте простой файл прикрепить. Так же надо элиминировать влияние злобных антивирусов :) И прочих систем защиты.
     
  14. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    В общем путем тестирования выявилось следующее, действительно при выгрузке шаблона Домино с ним как то еще работает, и когда заливаю как вложение происходит ошибка. Пытался подменить расширение, все равно не помогло. хотя по началу была какая то надежда, так как выгрузив шаблон с расширением .doc на сервер и залив его во вложение, оно было не поврежденным, но когда скачал его локально и сменил расширение на ntf и открыл, лотус ругнулся что оно повреждено. Вне папки дата выгрузить не могу. Права не всегда есть на то, чтобы выгрузить куда то еще (тестировал на AIX). Теперь вот такой вопрос, может кто знает, сколько по времени сервер работает с этой копией базы данных?
     
  15. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Про права интересно... Темповая директория всегда доступна.
    Код (LotusScript):
    Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
    Function GetNotesTemp() As String
    Dim tmppth As string
    Dim d As String*256
    Dim s As Integer

    s = linux_OSGetSystemTempDirectory(d)
    tmppth = Left(d,s) & {/}
    End Function
    Еще можно попробовать прервать сессию, создать новую и переполучить выгруженную базу.

    А вариант на Java не рассматривается?
     
  16. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    797
    Симпатии:
    78
    если выгрузить в папку data - то тут же накинуться всякие amgr,update и т.д - сколько сервер будет колбасить эту базу - неизвестно.
    Есть вариант выгрузки вне дата через API, там есть явное закрытие хендла или экспорт элементов дизайна в DXL.
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    нотусевый темп д.б. доступен ему по записи
    хотя выше директорий берётся для линуха, есть такойже АПИ и для АИХ
    вопрос наверное больше в том - как потом планируется использовать эту копию, т.е. - зачем она в виде аттача?
    может просто делать ДХЛ как и предложил rinsk
    если это - способ реплицировать (копировать) шаблон на др. сервер - следовало бы присмотреться к стандартным механизмам
     
  18. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    dbcache flush, вроде, помогал...
     
  19. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    Мыш drop All еще надо перед сбросом кэша
     
  20. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Попробовал как вы сказали, выгрузить в темповую папку

    Код (Text):
    Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
    Declare Function AIX_OSGetSystemTempDirectory Lib "libnotes_r.a" Alias "OSGetSystemTempDirectory" (ByVal S As String) As Integer
    Declare Function w32_OSGetSystemTempDirectory Lib "nnotes.dll" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
    Вызов функции в таком виде (чтобы проверить на аиксе)

    Код (Text):
        If session.Platform = "AIX/64" Then
    s = aix_OSGetSystemTempDirectory(d)
    Print CStr(s)
    Else
    s = w32_OSGetSystemTempDirectory(d)
    End If
    tmppth = Left(d,s) & {/}
    На AIX значение s было равно 0 и темповая директория не определилась

    На виндовой машине все сработало ок.
     
Загрузка...

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