Редактирование аттачмента

  • Автор темы allex
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

allex

#1
Нужна срочная помощь.
При двойном нажатии на аттачмент, открывается диалог, там жмем кнопку "Редактировать", документ открвывается во временную папку, мы редактируем док, сохраняем. А почему не приатачивается новый отредактированный док обратно ?

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

Интересует вариант для выбора аттачмента из имеющихся объектов в поле с последующим его сохранением на диск и удалением из RT поля

Мистика, но думаю этому есть объяснение. код к сожалению забыл взять для демострации.
 
F

FEDAZzZ

#2
Например так:



Dim ws As New NotesUIWorkspace
Dim mWebBrowser As Variant , varAttachmentNames As Variant, vPrompt As Variant, handleV As Variant
Dim strTempPath As String
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim vFile As NotesEmbeddedObject

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set rtitem = doc.GetFirstItem( "MTC" )

'If Not (uidoc.IsNewDoc) Then Exit Sub
If rtitem Is Nothing Then Exit Sub
If Isempty( rtitem.EmbeddedObjects ) Then Exit Sub

varAttachmentNames = ""
Forall x In rtitem.EmbeddedObjects ' пробегаемся по атачментам в поле Боди
If Len( varAttachmentNames ) > 0 Then varAttachmentNames = varAttachmentNames +Chr(10)
varAttachmentNames = varAttachmentNames + x.Name
End Forall
If Len( varAttachmentNames ) = 0 Then Exit Sub
Let strTempPath = Environ$("TEMP") ' путь во временную папку

varAttachmentNames = Split( varAttachmentNames, Chr(10) ) ' список всех имен атачментов
vPrompt = ws.Prompt( 4, "Выбор", "Выберете доверенность", varAttachmentNames(0), varAttachmentNames ) ' выбираем кактой-то один
If Isempty(vPrompt) Then Exit Sub


Kill strTempPath + "\" + vPrompt 'удаляем файл на жестком диске
Set vFile = rtitem.GetEmbeddedObject(vPrompt)
Call vFile.ExtractFile(strTempPath + "\" + vPrompt) ' скидываем файл на диск

Call vFile.Remove 'удаляем аттачмент
Call rtitem.Update

Set WShell = CreateObject("WScript.Shell") 'открываем на редоктирование
ReturnCode = WShell.Run("""" +strTempPath + "\" + vPrompt+"""", 1, True)

Call rtitem.EmbedObject( EMBED_ATTACHMENT, "",strTempPath + "\" + vPrompt , "" ) ' добаляем файл обратно в аттач
Kill strTempPath + "\" + vPrompt ' удаляем на локале

Messagebox("Изменения внесены")


Exit Sub
 
K

kilcher

#3
Воспользовалась этим кодом,спасибо!
Только вот происходят непонятные вещи. Иногда,если вложений несколько(напрмер несколько файлов ворд),кнопка не работает :(
Жмешь на нее и никакой реакции. в итоге нашла ,что не находятся объекты . Т.е. Isempty (rtitem.EmbeddedObjects ) дает True. В чем причина? И как решить данную проблему?

Документ сохранен,вложения доступны на чтение и редакцию обычным способом.
 

hosm

* so what *
18.05.2009
2 442
6
#4
Код, раpмещенный выше, не проверяла.
Возможно, в вашем случае вложения просто не попали в рт-поле, а приаттачились к документу? Такое бывает при одинаковых именах вложений, например, или при работе c веб. Проверяли обычно doc.HasEmbedded и использовали код для доступа к EmbeddedObjects :
Код:
Set v2File = Doc.GetFirstItem ( "$File" )		
If Not v2File Is Nothing Then
If Isarray(v2File.Values) Then
Set o = Doc.GetAttachment ( v2File.Values(0) )
 
K

kilcher

#5
Я прошу прощения,может туплю. Но вот проверила есть ли они в поле $File. Допустип у меня три вложеня,соответственно три поля File. Как из всех этих полей выбрать для редакции нужный? В Promt выводит пустые строки
 

hosm

* so what *
18.05.2009
2 442
6
#6
В моем коде предполагалось, что поле одно и надо было брать 1-е вложение. Тебе надо фактически проверить наличие аттача в принципе (doc.HasEmbedded) и воспользоваться получением EmbeddedObject нужного аттача с помощью
GetAttachment:
Set notesEmbeddedObject = notesDocument.GetAttachment( fileName$ )
Parameters
fileName$
String. The name of the file attachment you want.
fileName можно получить с помощью @AttachmentNames через Evaluate (вместо получения N-го поля $File).
Понятно?
 

hosm

* so what *
18.05.2009
2 442
6
#7
Только заметьте, что @AttachmentNames возвращает имена всех аттачей документа и не подойдет, если часть аттачей не надо учитывать в своем коде. Я не знаю, подойдет ли это к вашей задаче... :(
 
Статус
Закрыто для дальнейших ответов.