0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
1

Embeddedobjects

21.04.2009, 11:49. Показов 17168. Ответов 12
Метки нет (Все метки)

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

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

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



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
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2009, 11:49
Ответы с готовыми решениями:

Глючит Rtitem.embeddedobjects
Есть стандартная процедура по выдергиванию имен файлов из RT поля Dim abody As Variant Set...

Не понятный глюк Embeddedobjects
Всем привет! Вот столкнулся с каким приколом. Есть документ с приатаченным файлом. файл...

Isempty (rtitem.embeddedobjects) врет
не знаю почему но IsEmpty (rtitem.EmbeddedObjects) врет всегда возращает TRUE хотя rtitem...

Передача Embeddedobjects Из Дока В Док
Всем Доброго дня, встала такая задачка, есть письмо надо сделать операцию, которая бы брала все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
21.04.2009, 12:04 2
Может после копирования какой-нибудь uidoc.Refresh(True) сделать?
Или RTItem.Update?

Можно было бы отписать, как копируешь, кстати.
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
21.04.2009, 12:18 3
Копируют люди правой кнопкой - копировать/вставить. Следовательно получается два файла с одинаковыми именами, очевидно по этому и возникает ошибка. Если посмотреть свойства документа то поля $File имею различные
File Name:

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

Очевидно, что лотус так разруливает конфликты имен вложений. Вложения имеют одинаковые имена.
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
21.04.2009, 12:29 4
Проверил, похоже на то.
Но если надо будет сделать это под страхом смертной казни, но имя таки можно вытащить, экспортнув док в DXL и проверив теги типа

Код
<attachmentref name=ATT4FPUZ displayname=номальное_имя.jpg>
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
21.04.2009, 12:34 5
Omh если не сложно можно маленький пример :D
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
21.04.2009, 12:50 6
Ну где-то на 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.
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
21.04.2009, 12:54 7
думаю, что в данном случае лучше NotesSAXParser, т.к. не надо ходить искать нужные элементы, они сами найдутся
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
21.04.2009, 12:55 8
Чёт я туплю, а NotesEmbeddedObject.Source это не то, что тебе надо?
Эта пропертя разве не имя файла возвращает (даже в нашем случае)?
Правда, я не уверен.
-------------------------------
Посмотрел хелп:
NotesEmbeddedObject.Name
For file attachments, thys property returns the name of the file unless the attachment is a duplicate. If the attachment is a duplicate, thys property returns an internal name. (The Source property returns the file name in all cases.)
-------------------------------
Вообщем, надо использовать EO.Source, а не EO.Name
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
21.04.2009, 13:17 9
Omh, скажу честно! из твоего поста не ясно возвращает ли NotesEmbeddedObject.Source действительное имя файла, или же внутренее имя, при ситуации по теме...
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
21.04.2009, 13:27 10
Подмандил пост
Надеюсь, стало понятнее.

Я там погорячился, что не указал, что этот кусок из хелпа к NotesEmbeddedObject.Name, который как раз использует LIGHT.
Поэтому у него и вылазят всякие "AF322GY"
0
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
21.04.2009, 14:11 11
теперь понятнее, спасибо возьми с полки пирожок ;)

зы: надо как-то взяться и написать класс для работы с вложениями через DXL
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
21.04.2009, 15:01 12
Спасибо за мысли, но



....
....

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
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
21.04.2009, 16:49 13
неа - не поборол, коды "они" засейвят так что вылетит из РТ, еще кружок пройти прийдется :(
правда - не помню в каких ситуевинах рассогласуются бэкэнд и фронтэнд (но с участием кода - точно может)
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.