• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фазинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

Проблема Замена вложения в RichText поле

seoman2

Lotus team
17.02.2010
475
1
#1
Есть такая проблемка.
Хочу в текущем доке в RichText поле заменить вложение Файл1.docx на Файл2.docx с винта.

1. Как правильно в UI удалить с рич поля вложение?
Set rtitem = doc.GetFirstItem("text" )
Forall obj In rtitemA.EmbeddedObjects
....
Call obj.remove()
или в бэкэнде:
Call Doc.ReplaceItemValue("text","") ?
или фронт:
Call UIDoc.GotoField("text")
Call uidoc.SelectAll
Call UIDoc.Clear

2. Делаю как тут советуют, создаю временный документ, в него аттачу с винта Файл2.docx, копирую с временного дока с рич поля вложение, вставляю в текущий...
Для просмотра контента необходимо: Войти или зарегистрироваться

но при этом исчезает иконка вложения.
[doublepost=1512722067,1512658019][/doublepost]Вот код с примера:
Код:
Set DummyDoc = db.CreateDocument
    DummyDoc.Form = "test"
    DummyDoc.SaveOptions = "0"
    Dim DummyRT As NotesRichTextItem
    Set DummyRT = New NotesRichTextItem (DummyDoc,"Body")
    Call DummyRT.EmbedObject(1454,"",docpatch$ + oname$)
    Call DummyRT.Update
        Set DummyUIDoc =  workspace.EditDocument(True,DummyDoc)
В новом доке слетает иконочка файла вложения (((((
 
Последнее редактирование:

seoman2

Lotus team
17.02.2010
475
1
#3
В рабочем документе есть в ричтекст поле Файл1.docx, я его сохраняю на винт как Файл2.docx, делаю в нем правки программно и хочу заменить в доке старый Файл1.docx на новый Файл2.docx.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 693
307
#4
В рабочем документе есть в ричтекст поле Файл1.docx, я его сохраняю на винт как Файл2.docx, делаю в нем правки программно и хочу заменить в доке старый Файл1.docx на новый Файл2.docx.
спрошу еще раз, по другому...
что мешает сделать в бэкэнде?
т.е.:
-отцепляем ворду из дока
-закрываем док (если открыт в UI), сохраняем изменения, если были
-вносим правки в вордятину
-удаляем аттач в бэкэнде
-загружаем измененный ворд
-открываем док в UI, если надо
да.. ворд прибивать обязательно! виндятский код здесь выкладывал
 

seoman2

Lotus team
17.02.2010
475
1
#5
Set rtitemA = doc.GetFirstItem("text" ) - в нем Файл1.docx
rtitemA.EmbeddedObjects ....
после выхода с ворда и изменения аттача в Файл2.docx на винте:
Call doc.Save(True,False)
Call uidoc.Close

Call obj.remove
rtitemA.Update

Call rtitemA.EmbedObject ( EMBED_ATTACHMENT, "", docpatch$ + oname$)
rtitemA.Update

Call uiworkspace.EditDocument(True, doc)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 693
307
#6
Код:
Set rtitemA = doc.GetFirstItem("text" )'  -  в нем Файл1.docx
rtitemA.EmbeddedObjects ....
'после выхода с ворда и изменения аттача в Файл2.docx на винте:
Call doc.Save(True,False)
'*****************
Dim db As NotesDatabase, unid As String
Set db=session.CurrentDataBase 'т.к. удалим объект БД надо получить извне
unid=doc.UniversalID
*****************
Call uidoc.Close

'Call obj.remove не понял - кого удаляем, аттачи надо удалять в новом инстансе, полученным перед вставкой
'rtitemA.Update это не нужно, особливо после закрытия UI
'******************
'закрываем фронт!         
 Delete uidoc ' здесь прибъется и объект doc
'теперь убиваем инстанс ворда! иначе залочит файл и в памяти повиснет (и такое бывает)
'код для этого был
.....
'все по-новой получаем
Set doc=db.GetDocumentByUNID(UNID)
'далее хачим аттачи, функцию здесь выложил
Set rtitemA = RemoveAttachments(doc,{text})
 Call rtitemA.EmbedObject ( EMBED_ATTACHMENT, "", docpatch$ + oname$)
 'rtitemA.Update напуркуа это в бэкэнде
                     
Set uidoc=uiworkspace.EditDocument(True, doc) ' если фронт нужно передать куда-то
End Sub
'фильтр по имени аттача приделать на свой вкус, ф-ция хачит все аттачи
Function RemoveAttachments(objdoc As NotesDocument, fld As String) As NotesRichTextItem
    Dim rtItem As NotesRichTextItem
    Dim docItem As NotesItem
   
    On Error GoTo errorhandler
    Set docItem=objdoc.GetFirstItem(fld)
    If Not docItem Is Nothing Then
        DbgMsg("RichText:" & CStr(docItem.Type = RICHTEXT))
        If docItem.Type=RICHTEXT Then
            Set rtItem=docItem
        End If
    End If
    If objdoc.Hasembedded Then  
        If ( Not rtItem Is Nothing ) Then
            If (Not IsEmpty(rtitem.EmbeddedObjects))Then
                ForAll o In rtitem.EmbeddedObjects
                    Call o.Remove
                    DbgMsg("RT field: remove attachments")
                End ForAll
            End If
            'rtItem.Issigned=False
            'rtItem.Issummary=False
            'rtItem.Isencrypted=False
        Else
            If ( Not IsEmpty(objdoc.EmbeddedObjects)) Then
                ForAll o In objdoc.EmbeddedObjects
                    Call o.Remove
                    DbgMsg("remove attachments")
                End ForAll
            End If
        End If
    End If
   
    Do While Not objdoc.GetFirstItem("$FILE") Is Nothing
        objdoc.RemoveItem("$FILE")
        DbgMsg("remove fields: $FILE")
    Loop
'test remove rtItem
'Delete rtItem
'Print {rtItem Is Nothing:} rtItem Is Nothing
    If (rtItem Is Nothing) Then
        Do While Not objdoc.GetFirstItem(fld) Is Nothing
            objdoc.RemoveItem(fld)
            DbgMsg("Remove non RT fields:" & fld)
        Loop
        Set rtItem=objdoc.CreateRichTextItem(fld)
        Call objdoc.Save(True,False)
    End If
    Set RemoveAttachments=rtItem
ExitFunction:
    Exit Function
errorhandler:
    Call RaiseError()
    Resume ExitFunction
End Function
код обертывайте в теги..
каменты оставил в коде
[doublepost=1512746272,1512746025][/doublepost]@WebWare Team куда-то пропала подсветка кода (различных языков) и я не могу править чужие сообщения (опять)
 
Вверх Снизу