• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Embeddedobjects

  • Автор темы Автор темы LIGHT
  • Дата начала Дата начала
L

LIGHT

Господа, столкнулся с непонятной фигней.

Есть форма в ней два ричтекстовых поля для аттачментов.

В определенный момент нужно сделать проверку на расширение файла в одном из поле.
Повесил такую функцию:

Set rtitem = doc.GetFirstItem( "F1" )
If Not (Isempty(rtitem.EmbeddedObjects)) Then
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If Ucase(Right (o.Name,3)) = "PDF" Or Ucase(Right (o.Name,3)) = "TIF" Then
ObjFound = True
'Print o.Name & " - " & o.Type
Else
ObjFound = False
'Print o.Name & " - " & o.Type
'1454
Exit Forall
End If
End Forall
End If
End If


If ObjFound = False Then
textSub = textSub & {Прикрепите электронный образ строго в PDF или TIF формате }
End If

Все бы хорошо, проверочка работает как нужно!

Но, если происходит копирование вложения из поля F2 или еще какого либо в проверяемое поле ObjFound всегда = False
 
Может после копирования какой-нибудь uidoc.Refresh(True) сделать?
Или RTItem.Update?

Можно было бы отписать, как копируешь, кстати.
 
Копируют люди правой кнопкой - копировать/вставить. Следовательно получается два файла с одинаковыми именами, очевидно по этому и возникает ошибка. Если посмотреть свойства документа то поля $File имею различные
File Name:

File Name: Выписка из ЕГРЮЛ.tif
File Name: ATTXNSJ01 или нечто подобное

Очевидно, что лотус так разруливает конфликты имен вложений. Вложения имеют одинаковые имена.
 
Проверил, похоже на то.
Но если надо будет сделать это под страхом смертной казни, но имя таки можно вытащить, экспортнув док в DXL и проверив теги типа
Код:
<attachmentref name='ATT4FPUZ' displayname='номальное_имя.jpg'>
 
Omh если не сложно можно маленький пример :D
 
Ну где-то на QuerySave делаешь
Код:
uidoc.Refresh(True)
, что бы перенести RT изменения в background документ.
Потом экспортишь примерно так:
Код:
Dim DXLExp As NotesDXLExporter
Set DXLExp = sess.CreateDXLExporter
Call DXLExp.SetInput(doc)
Dim DXL As String
DXL = DXLExp.Export()
В данный момент в переменной DXL у тебя XML описывающий документ.
Парсишь как строку, либо, если есть желание/умение, парсишь через NotesDOMParser.
 
думаю, что в данном случае лучше NotesSAXParser, т.к. не надо ходить искать нужные элементы, они сами найдутся :)
 
Чёт я туплю, а NotesEmbeddedObject.Source это не то, что тебе надо?
Эта пропертя разве не имя файла возвращает (даже в нашем случае)?
Правда, я не уверен.
-------------------------------
Посмотрел хелп:
NotesEmbeddedObject.Name
For file attachments, this property returns the name of the file unless the attachment is a duplicate. If the attachment is a duplicate, this property returns an internal name. (The Source property returns the file name in all cases.)
-------------------------------
Вообщем, надо использовать EO.Source, а не EO.Name
 
Omh, скажу честно! из твоего поста не ясно возвращает ли NotesEmbeddedObject.Source действительное имя файла, или же внутренее имя, при ситуации по теме...
 
Подмандил пост :)
Надеюсь, стало понятнее.

Я там погорячился, что не указал, что этот кусок из хелпа к NotesEmbeddedObject.Name, который как раз использует LIGHT.
Поэтому у него и вылазят всякие "AF322GY"
 
теперь понятнее, спасибо :) возьми с полки пирожок ;)

зы: надо как-то взяться и написать класс для работы с вложениями через DXL :)
 
Спасибо за мысли, но

....
....

Dim object As NotesEmbeddedObject
Dim objectName As String
Dim rt As Variant

Set rt = doc.GetFirstItem( "F1" )
If ( rt.Type = RICHTEXT ) Then
Set object = rt.GetEmbeddedObject( "F1" )
Print object.Name
End If

Вылетает ошибка на Print object.Name - Variable not set :)


Поборол!!! Всем спасибо.

ObjFound = False
Set rtitem = doc.GetFirstItem( "F1" )
If Not (Isempty(rtitem.EmbeddedObjects)) Then
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
Set object = rtitem.GetEmbeddedObject( o.Name )
Print "NAME: " & o.Name & " | SOURCE: " & object.Source
If Ucase(Right (object.Source,3)) = "PDF" Or Ucase(Right (object.Source,3)) = "TIF" Then
ObjFound = True
Else
ObjFound = False
Exit Forall
End If
End Forall
End If
End If

If ObjFound = False Then
textSub = textSub & {Прикрепите электронный образ строго в PDF или TIF формате } & Chr(10)
End If
 
неа - не поборол, коды "они" засейвят так что вылетит из РТ, еще кружок пройти прийдется :(
правда - не помню в каких ситуевинах рассогласуются бэкэнд и фронтэнд (но с участием кода - точно может)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab