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

Тема в разделе "Lotus - Программирование", создана пользователем allex, 31 мар 2009.

Статус темы:
Закрыта.
  1. allex

    allex Гость

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

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

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

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

    FEDAZzZ Гость

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



    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
     
  3. kilcher

    kilcher Гость

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

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Код, раpмещенный выше, не проверяла.
    Возможно, в вашем случае вложения просто не попали в рт-поле, а приаттачились к документу? Такое бывает при одинаковых именах вложений, например, или при работе c веб. Проверяли обычно doc.HasEmbedded и использовали код для доступа к EmbeddedObjects :
    Код (Text):
    Set v2File = Doc.GetFirstItem ( "$File" )      
    If Not v2File Is Nothing Then
    If Isarray(v2File.Values) Then
    Set o = Doc.GetAttachment ( v2File.Values(0) )
     
  5. kilcher

    kilcher Гость

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    В моем коде предполагалось, что поле одно и надо было брать 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).
    Понятно?
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Только заметьте, что @AttachmentNames возвращает имена всех аттачей документа и не подойдет, если часть аттачей не надо учитывать в своем коде. Я не знаю, подойдет ли это к вашей задаче... :(
     
Загрузка...
Статус темы:
Закрыта.

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