1

Тема: Редактирование вложений

В связи с тем, что лотус иногда не сохраняет изменения во вложениях, которые хранятся в
C:\Users\фио\AppData\Local\Temp 
например, если это ворд файл, то сделана кнопка "Редактировать вложение"
выгружает все файлы в папочку.

Sub Click(Source As Button)
    On Error Goto er
    Dim ws As New NotesUIWorkspace
    Dim varAttachmentNames As Variant, vPrompt As Variant, handleV As Variant
    Dim strTempPath As String, fname As String, mes As String
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim rtitem As NotesRichTextItem
    Dim vFile As NotesEmbeddedObject
    Print "RED"
    Set uidoc = ws.CurrentDocument
    uidoc.EditMode = True
    Call uidoc.Refresh(True)
    
    Set doc = uidoc.Document
    Set rtitem = doc.GetFirstItem( "attach" )  '  поле Вложения
    If rtitem Is Nothing Then Exit Sub
    If Isempty( rtitem.EmbeddedObjects ) Then Exit Sub
    Print "Поле Вложения attach  Есть"
    y=0
    varAttachmentNames = "" 
    Forall x In rtitem.EmbeddedObjects ' пробегаемся по атачментам в поле attach
        If Len( varAttachmentNames ) > 0 Then varAttachmentNames = varAttachmentNames +Chr(10) 
        varAttachmentNames = varAttachmentNames + x.Name
        y=y+1    
    End Forall
    If Len( varAttachmentNames ) = 0 Then Exit Sub
    
    Let strTempPath = Environ$("TEMP") ' путь во временную папку
    Let strTempPath = "C:\LotusDoc"
    
    varAttachmentNames = Split( varAttachmentNames, Chr(10) ) ' список всех имен атачментов
    
    vPrompt =  varAttachmentNames(0) '  первый аттач (он на винте)
    ' надо, если много аттачей - то выбрать
    If y>1 Then
        vPrompt = ws.Prompt( 4, "Выберите вложение", "Прикрепленные документы:", varAttachmentNames(0), varAttachmentNames ) 
    End If
    If Isempty(vPrompt) Then Exit Sub
    Print " Вложение" Cstr(vPrompt) 
    
    fname = Cstr(vPrompt) 
    sdate = Evaluate("@Now( [ServerTime])")
    mes = sdate(0)
    mes=Replace(mes, ":","-" )
    mes = mes+" "+fname  '  имя файла на винте
    
    Set vFile = rtitem.GetEmbeddedObject(vPrompt)
    Call vFile.ExtractFile(strTempPath + "\" + vPrompt) ' скидываем файл на диск  - заменяет если файл с таким именем уже есть в папке
    
    Call vFile.ExtractFile(strTempPath + "\" + mes) ' скидываем изначальный файл на диск
    Print "mes1_strTempPath:" strTempPath + "\"  & mes
    Call vFile.Remove 'удаляем аттачмент с лотус дока
    Call rtitem.Update
    
    Set WShell = CreateObject("WScript.Shell") 
'    ReturnCode = WShell.run("""" +strTempPath + "\" + vPrompt+"""", 1, True) ' проблема, если запущен word, то ошибка (On Error Goto er)
    WShell.run("""" +strTempPath + "\" + vPrompt+"""") 
    Messagebox "Перед продолжением обязательно закройте открытые файлы в Word!", ok,   "Внимание!"
           
    
    Call rtitem.EmbedObject( EMBED_ATTACHMENT, "",strTempPath + "\" + vPrompt , "" ) ' добаляем файл обратно в аттач
    Kill strTempPath + "\" + vPrompt ' удаляем на локале измененный файл
    Call rtitem.Update
    
' копируем на винт еще и измененный файл 
    sdate = Evaluate("@Now( [ServerTime])")
    mes = sdate(0)
    mes=Replace(mes, ":","-" )
    mes = mes+" "+fname
    Print "mes2_strTempPath:" strTempPath + "\"  & mes
    Set vFile = rtitem.GetEmbeddedObject(vPrompt)   ' аттач
    Call vFile.ExtractFile(strTempPath + "\" + mes) 
    
    Call doc.Save(True,False)
    Call uidoc.Save
    Exit Sub
    
er: 
    Messagebox "Ошибка, изменения не сохранены в файле "+vPrompt, ok,   "Внимание!"
    Resume Next
    mes=Err
    
End Sub

Поделиться