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

proteam

Well-known member
02.03.2012
144
1
#1
Всем привет.

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

Есть такой вот код:
Код:
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

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

Вложения

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#2
ограничение на репликацию не установлено случаем (по размеру аттача)?
 

proteam

Well-known member
02.03.2012
144
1
#3
ограничение на репликацию не установлено случаем (по размеру аттача)?
Тестовый сервер, однозначно отвечать что нет не буду, но скорее всего ограничений нет. Проблема именно в процессе вложения аттачмента в поле. Нарушается compression type (на скринах видно)
 

savl

Lotus team
28.10.2011
2 136
105
#4
DamirUrazov
Это с 6-той версии так, на клиенте LZ1, на сервере Хафман:
If the LZ1 compression option is set on a Domino 6 database, a Notes 5 client will be unable to read the compression. The Lotus Domino 6 server converts LZ1 to Huffman compression for the Notes 5 client. This affects server performance. Implement LZ1 compression in an exclusively Lotus Notes/Domino 6 environment.
Источник
Есть интересные серверные переменные, должно помочь:
LZ1 Notes
LZ1 Mime
Лечение текущей ситуации, смотрите описание двух ссылок:
Раз
Два

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#5
savl это не отвечает на вопрос - почему оно аттач считает битым
у мя такое было когда на БД установлены настройки репликации - частично
правда не с аттачем
 

savl

Lotus team
28.10.2011
2 136
105
#6
lmike
Это верно.
Я не силен в механизмах "сжатия", но есть подозрение что клиент пытается прочитать хафмана, как lz1.
Выяснилось что LZ1 работает на клиенте в версии 8+ через
Код:
Call rtitem.EmbedObject ( EMBED_ATTACHMENT, "", copyPath)
Всегда, даже если в базе отключено "Use LZ1 compression...", а на сервере надо включать принудительно.
 

proteam

Well-known member
02.03.2012
144
1
#7
Как я понял, все решения лишь исправляют то, что уже повреждено. А мне надо чтобы новые вложения ложились нормально и затем открывались как надо.
 

savl

Lotus team
28.10.2011
2 136
105
#8
DamirUrazov
настройки сервера попробуй поставить (LZ1 Notes и LZ1 Mime) из моего поста и перезагрузить сервер.
Потом посмотреть результаты прикрепления.
 

Мыш

Премиум
12.02.2008
1 097
10
#9
Вопрос - скопированный шаблон ГДЕ находится? Если в папке Data, то, вообще говоря, Лотус его может/должен юзать в момент прикрепления - отсюда и ошибки. Вариант решения - dbcache flush + копирование файла шаблона во временную папку + прикрепление файла уже из нее.
 

proteam

Well-known member
02.03.2012
144
1
#10
Вопрос - скопированный шаблон ГДЕ находится? Если в папке Data, то, вообще говоря, Лотус его может/должен юзать в момент прикрепления - отсюда и ошибки. Вариант решения - dbcache flush + копирование файла шаблона во временную папку + прикрепление файла уже из нее.
Ну можно сказать что и в папке Data, правда в одной из ее дочерних папок, путь типо такого Data/Attachments/

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

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

proteam

Well-known member
02.03.2012
144
1
#11
Проверил вчера, добавил эти две переменные в нотес ини, перезагрузился. Такая же ерунда. Снова хафман. Снова вложение повреждено
 

savl

Lotus team
28.10.2011
2 136
105
#12
Тогда надо попробовать сделать копию в другую папку, как предложил Мыш
Возможно, что после создания базы она(копия) подхватывается задачей, которая обновляет каталог.
А будет ли права на создание(перемещение) шаблона в какую то временную папку на сервере?
Во временную директорию ОС или Notes доступ есть всегда, главное его получить или прописать жестко.
 

Мыш

Премиум
12.02.2008
1 097
10
#13
Вот-вот, сие не есть гут. Более того - даже если, скажем, реплицировать базу с сервера локально в папку вне DATA (скажем, в системный TEMP), то Лотус все равно эту базу "держит" (было где-то обсуждение этой темы). Попробуйте пересмотреть саму задачу.
ЗЫ. Аттачи (т.е., простые файлы, лежащие на дисках) на серверах Domino прикрепляются нормально - вот ни разу не сталкивался с проблемами. Поэтому и грешу на Ваш механизм. Попробуйте простой файл прикрепить. Так же надо элиминировать влияние злобных антивирусов :) И прочих систем защиты.
 

proteam

Well-known member
02.03.2012
144
1
#14
Вот-вот, сие не есть гут. Более того - даже если, скажем, реплицировать базу с сервера локально в папку вне DATA (скажем, в системный TEMP), то Лотус все равно эту базу "держит" (было где-то обсуждение этой темы). Попробуйте пересмотреть саму задачу.
ЗЫ. Аттачи (т.е., простые файлы, лежащие на дисках) на серверах Domino прикрепляются нормально - вот ни разу не сталкивался с проблемами. Поэтому и грешу на Ваш механизм. Попробуйте простой файл прикрепить. Так же надо элиминировать влияние злобных антивирусов :) И прочих систем защиты.
В общем путем тестирования выявилось следующее, действительно при выгрузке шаблона Домино с ним как то еще работает, и когда заливаю как вложение происходит ошибка. Пытался подменить расширение, все равно не помогло. хотя по началу была какая то надежда, так как выгрузив шаблон с расширением .doc на сервер и залив его во вложение, оно было не поврежденным, но когда скачал его локально и сменил расширение на ntf и открыл, лотус ругнулся что оно повреждено. Вне папки дата выгрузить не могу. Права не всегда есть на то, чтобы выгрузить куда то еще (тестировал на AIX). Теперь вот такой вопрос, может кто знает, сколько по времени сервер работает с этой копией базы данных?
 

savl

Lotus team
28.10.2011
2 136
105
#15
Про права интересно... Темповая директория всегда доступна.
Код:
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 не рассматривается?
 

rinsk

Lotus team
12.11.2009
900
44
#16
В общем путем тестирования выявилось следующее, действительно при выгрузке шаблона Домино с ним как то еще работает, и когда заливаю как вложение происходит ошибка. Пытался подменить расширение, все равно не помогло. хотя по началу была какая то надежда, так как выгрузив шаблон с расширением .doc на сервер и залив его во вложение, оно было не поврежденным, но когда скачал его локально и сменил расширение на ntf и открыл, лотус ругнулся что оно повреждено. Вне папки дата выгрузить не могу. Права не всегда есть на то, чтобы выгрузить куда то еще (тестировал на AIX). Теперь вот такой вопрос, может кто знает, сколько по времени сервер работает с этой копией базы данных?
если выгрузить в папку data - то тут же накинуться всякие amgr,update и т.д - сколько сервер будет колбасить эту базу - неизвестно.
Есть вариант выгрузки вне дата через API, там есть явное закрытие хендла или экспорт элементов дизайна в DXL.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#17
Права не всегда есть на то, чтобы выгрузить куда то еще
нотусевый темп д.б. доступен ему по записи
хотя выше директорий берётся для линуха, есть такойже АПИ и для АИХ
вопрос наверное больше в том - как потом планируется использовать эту копию, т.е. - зачем она в виде аттача?
может просто делать ДХЛ как и предложил rinsk
если это - способ реплицировать (копировать) шаблон на др. сервер - следовало бы присмотреться к стандартным механизмам
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#19
Мыш drop All еще надо перед сбросом кэша
 

proteam

Well-known member
02.03.2012
144
1
#20
Попробовал как вы сказали, выгрузить в темповую папку

Код:
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
Вызов функции в таком виде (чтобы проверить на аиксе)

Код:
	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 и темповая директория не определилась

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