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

  • Автор темы proteam
  • Дата начала
P

proteam

Всем привет.

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

Есть такой вот код:
Код:
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
7 985
611
BIT
471
ограничение на репликацию не установлено случаем (по размеру аттача)?
 
P

proteam

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

savl

Lotus Team
28.10.2011
2 624
314
BIT
541
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.
link removed

Добавлено: И еще одно
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
471
savl это не отвечает на вопрос - почему оно аттач считает битым
у мя такое было когда на БД установлены настройки репликации - частично
правда не с аттачем
 

savl

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

proteam

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

savl

Lotus Team
28.10.2011
2 624
314
BIT
541
DamirUrazov
настройки сервера попробуй поставить (LZ1 Notes и LZ1 Mime) из моего поста и перезагрузить сервер.
Потом посмотреть результаты прикрепления.
 

Мыш

Lotus Team
12.02.2008
1 228
30
BIT
137
Вопрос - скопированный шаблон ГДЕ находится? Если в папке Data, то, вообще говоря, Лотус его может/должен юзать в момент прикрепления - отсюда и ошибки. Вариант решения - dbcache flush + копирование файла шаблона во временную папку + прикрепление файла уже из нее.
 
P

proteam

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

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

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

proteam

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

savl

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

Мыш

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

proteam

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

savl

Lotus Team
28.10.2011
2 624
314
BIT
541
Про права интересно... Темповая директория всегда доступна.
Код:
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
1 156
126
BIT
45
В общем путем тестирования выявилось следующее, действительно при выгрузке шаблона Домино с ним как то еще работает, и когда заливаю как вложение происходит ошибка. Пытался подменить расширение, все равно не помогло. хотя по началу была какая то надежда, так как выгрузив шаблон с расширением .doc на сервер и залив его во вложение, оно было не поврежденным, но когда скачал его локально и сменил расширение на ntf и открыл, лотус ругнулся что оно повреждено. Вне папки дата выгрузить не могу. Права не всегда есть на то, чтобы выгрузить куда то еще (тестировал на AIX). Теперь вот такой вопрос, может кто знает, сколько по времени сервер работает с этой копией базы данных?

если выгрузить в папку data - то тут же накинуться всякие amgr,update и т.д - сколько сервер будет колбасить эту базу - неизвестно.
Есть вариант выгрузки вне дата через API, там есть явное закрытие хендла или экспорт элементов дизайна в DXL.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
471
Права не всегда есть на то, чтобы выгрузить куда то еще
нотусевый темп д.б. доступен ему по записи
хотя выше директорий берётся для линуха, есть такойже АПИ и для АИХ
вопрос наверное больше в том - как потом планируется использовать эту копию, т.е. - зачем она в виде аттача?
может просто делать ДХЛ как и предложил rinsk
если это - способ реплицировать (копировать) шаблон на др. сервер - следовало бы присмотреться к стандартным механизмам
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
471
Мыш drop All еще надо перед сбросом кэша
 
P

proteam

Попробовал как вы сказали, выгрузить в темповую папку

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

На виндовой машине все сработало ок.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!