Lotus - Анилиз документа во вложении

  • Автор темы Автор темы SOFTOBZOR.ru
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Юлия, наверно вопрос к вам!

Возможно ли избавиться вот от этого:
Код:
Set emo=doc.GetAttachment("lotus.doc")

И получить нечто переменное

Код:
Set emo=doc.GetAttachment("*.doc")

где * любой докумен .doc
 
Конечно, можно. В метод должен передаваться переменная типа String.
Заведи поле в котором будет задаваться имя и вызывай метод.
См. пример в хелпе на NotesEmbeddedObject. Вообще там хорошие примеры по этому классу. :)
Так можно получить все имена файлов, которые есть в поле attach.

Код:
Set rtitem = doc.GetFirstItem( "attach" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
Messagebox( o.Name )
End Forall
End If
 
Почему то не работет, попробовал получить колличество приатаченых файлов, выскакивает ошибка "Object Variable not Set" (Объектная Переменная не была Установлена). Как буквально понимать эту ошибку?

Пример моего кода:
Код:
Sub Click(Source As Button)

Dim doc As NotesDocument
Dim rtitem As Variant
Dim attachCount As Integer

Set rtitem = doc.GetFirstItem( "attach" )
attachCount = 0

If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
Select Case o.Type
Case EMBED_ATTACHMENT:
 attachCount = attachCount + 1
End Select
End Forall
End If
Print( attachCount & " attachments " & linkCount & _
" links " & objectCount & " objects " )
End Sub
 
Ошибка в том, что переменной не присвоено начение.
Опять же проблема с doc. Программа не знает к какому именно документу ты хочешь обратиться.
 
Вроде все описано:

Код:
Sub Click(Source As Button)

Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument 
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document

Dim rtitem As Variant
Dim attachCount As Integer

Set rtitem = doc.GetFirstItem( "attach" )
attachCount = 0
If ( rtitem.Type = RICHTEXT ) Then
 Forall o In rtitem.EmbeddedObjects
 	Select Case o.Type
 	Case EMBED_ATTACHMENT:
   attachCount = attachCount + 1
 	End Select
 End Forall
End If
Print( attachCount & " attachments " )
End Sub

А ошибка таже.
Если сюда вставить ваш пример:
Код:
Set rtitem = doc.GetFirstItem( "attach" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
Messagebox( o.Name )
End Forall
End If

Происходит тоже самое.

Юлия, если вам не сложно могли бы вы мне обьяснить эти опреции:
А то, у меня чисто абстрактное представление :), но как понимаю это основа основ! Имею общее представление, но охото понять "суть по русски", если конечно не сложно.

NotesUIWorkspace
NotesUIDocument
NotesDocument
CurrentDocument
Document
 
А на какой строчке возникает ошибка?

У тебя поле точно attach называется?
Set rtitem = doc.GetFirstItem( "attach" )

Инфа по классам. Взято из электронной справки неизвестного происхождения.

Встроенные классы Notes можно разделить на две группы:
1. Классы интерфейса пользователя – обеспечивают доступ к объектам пользовательского интерфейса: рабочее пространство (Workspace), окно вида (View Window), окно документа (Document Window), поле и форматируемое поле.
· NotesUIWorkSpace – представляет текущее рабочее пространство Notes.
· NotesUIDocument – представляет документ, который сейчас выбран в рабочем пространстве

2. Классы заднего планы – представляют такие объекты Notes, как базу данных, вид или папку, агент, документ, пункт в документе. Выполняемые пользователем действия происходят без явного отображения в пользовательском интерфейсе.
· NotesSession – представляет среду Notes, в которой выполняется данный скрипт . Он позволяет получать доступ к адресным книгам, информации о текущем пользователе, к переменным из файла Notes.ini, текущей платформе Notes.
· NotesDbDirectory – позволяет просмотреть список имеющихся баз и получить доступ к любой из них
· NotesDatabase – представляет конкретную базу Notes и обеспечивает доступ ко всем, содержащимся в ней объектам.
· NotesACL – представляет список управления доступом (ACL) базы.
· NotesACLEntry – представляет один элемент из набора элементов в ACL.
· NotesAgent – представляет конкретного агента.
· NotesView – представляет вид или папку в базе и обеспечивает доступ к содержащимся там документам.
· NotesViewColomn –представляет столбец вида или папки.
· NotesDocumentCollection - представляет коллекцию документов из базы, отобранную в соответствии с некоторым критерием.
· NotesDocument – представляет один документ в базе.
· NotesItem – представляет один пункт документа. Поле в форме (Field) и пункт в документе (Item) – это разные объекты, хотя часто и связанные между собой.
· NotesRichTextItem - является производным от класса NotesItem, т.е. он наследует все свойства и методы базового класса, но дополнительно имеет свои собственные специфические свойства и методы для работы с произвольным текстом.
Контейнерная иерархия стандартных классов довольно сложна, поэтому она не приводится целиком, а рассматривается на примере создания и использования объектов.

Рассмотрим следующий скрипт, в котором проявлена контейнерная иерархия классов:
Dim s As New NotesSession ‘( Метод New cоздает новый объект класса NotesSession и присваивает переменной s ссылку на него. Этот объект представляет текущий сеанс пользователя)
Dim db As NotesDatabase ‘(переменная класа NotesDatabase. Ей пока не присвоено значение и она не связана ни с какими объектами)
Dim view As NotesView ‘(переменная класа NotesView, аналогично)
Dim doc As NotesDocument ‘(аналогично)
Dim item As NotesItem ‘(представляет один пункт документа)
Set db = s.CurrentDatabase ‘переменной присваивается ссылка на объект класса NotesDataBase, возвращаемая свойством СurrentDatabase объекта s. Этот объект содержится в объекте класса NotesSession, он представляет текущую базу в сеансе пользователя.
Set view = db.GetView(“Cтуденты”) ‘переменной присваивается ссылка на объект класса NotesView, возвращаемая методом GetView объекта db. У объекта db (базы данных) может быть несколько видов и метод имеет параметр. Здесь метод GetView создает и возвращает ссылку на объект, представляющий вид с названием «Студенты».
Set doc = view.GetFirstDocument ‘ переменной doc присваивается ссылка на объект класса NotesDocument, представляющий первый документ в виде view.
Set Item = doc.GetFirstItem ‘переменной item класса NotesItem присваивается ссылка на объект класса NotesItem, представляющий первый пункт в документе doc.

Из рассмотренного примера становится очевидной следующая иерархия классов:
NotesSession -> NotesDatabase -> NotesView -> NotesDocument -> NotesItem
 
Да, поле точно называеться attach
Set rtitem = doc.GetFirstItem( "attach" )

На какой строчке? :) ... незнаю компилятор не ругаеться, происходит ошибка тогда, когда я прикрипил файл и Sub Click(Source As Button) сделал.


PS - Спасибо за справочку!
Очень полезно и исчерпывающе, а вам не было бы сложно поделиться этим файлом (Взято из электронной справки неизвестного происхождения) v_vasilev#softobzor.ru
Я бы его выложил на свой сервер, было бы полезно для многих.
 
Попробуй сохранить документ с вложением, а потом уже открыть или обновить и нажать на кнопку.
Я твой код проверила у меня нормально работает.

Справку кину :)
 
Да работет!
За справочку спасибо, будем читать - пробовать.

А как в LotusScript происхоить создание перенной, для работы во всем документе, а не только в этом коде.
Допустим я получил колличество приатаченых файлов [attachCount] .

Я хочу создать "глобальную" переменную в которой содержится это число (attach) что бы подставить его в поле на форме.
 
Объяви эту переменную в области

(Globals)
(Declaration)

документа или библиотеки скриптов.

Вообще пользуйся лучше классами.
 
Код:
Sub Click(Source As Button)

Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument 
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document

Dim rtitem As Variant
Dim attachCount As Integer

Set rtitem = doc.GetFirstItem( "attach" )
attachCount = 0
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
Select Case o.Type
Case EMBED_ATTACHMENT:
 attachCount = attachCount + 1
End Select
End Forall
End If

В Declaration прописал

Код:
Dim attachCount As Integer

На форме создал вычисляемое поле по формуле
Код:
@if(attachCount="";"0";attachCount)

Но почему то не что не возвращаеться, что я делаю не так?
 
Господа подскажите пожалуйста, как обьявить ГЛОБАЛЬНО переменную
В глобал Декларация пишу
Код:
Dim attachCount As Integer

От куда получеться attachCount описано выше, но ни как не могу эту переменную всунуть в вычисляемое поле.
 
Нельзя так, насколько я знаю.
Если глобальная переменная определена в LS, то из формул к ней сложно обратиться.
Лучше запиши глобальную переменную в notes.ini, а потом ее доставай @Environment
 
<!--QuoteBegin-Юлия+28:03:2006, 09:32 -->
<span class="vbquote">(Юлия @ 28:03:2006, 09:32 )</span><!--QuoteEBegin-->Лучше запиши глобальную переменную в notes.ini[/quote]

:)
ого, это уже хирургическое вмешательство, нехотелось бы...
тем более учитывая то, что таких переменных в итоге будет с десяток.
например a1, a2, a3, a4, ...., an

Суть то вот вот в чем: к примеру есть фирма в городе "X" она присылает по Email докумен Word заполненый по определенной форме, вот мне интересно, осуществить перенос данных из Word документа в лотус документ, что бы проверить ошибки (например что-то не заполнено). Ну а дальше уже делать представления и тому подобные штуки.

Вот что-то голову сломал уже. :(
 
Можно сделать обработку одной функцией в кнопке.
Типа нажимает пользователь на кнопку "Импортировать" и данные выгружаются из документа, проверяются и передаются полям формы.
Если данных не хватает, то можем вывести сообщение об ошибке или загрузить неполные данные.
Для каждого дока можно создавать отдельную новую форму.
 
<!--QuoteBegin-Юлия+28:03:2006, 09:50 -->
<span class="vbquote">(Юлия @ 28:03:2006, 09:50 )</span><!--QuoteEBegin-->и данные выгружаются из документа, проверяются и передаются полям формы
[snapback]32599" rel="nofollow" target="_blank[/snapback]​
[/quote]
Вот тут то и сложность, что бы передать дынные полям.
Это можно сделать средствами LotusScript?

А то я может зря заморачиваюсь?
Если есть способ - то ура!
 
Например так:

Код:
Dim doc As NotesDocument
Dim item As NotesItem
.....
strText = wdApp.ActiveDocument.Tables(1).Rows(1).Cells(1).Range.Text
Set item = doc.ReplaceItemValue( "ПолеКудаЗапоминаем", strText )
Call doc.Save( True, True )
 
:) здорово! дело сразу сдвинулось с мертвой точки.
И как всегда ответ порождает новый вопрос :(
Как можно средствами LScript осуществить @Trim(") функцию.
А то ворд всегда в конце вернувшегося значения дописывает кватрат
 
см в хелпе @Trim.
Там внизу есть синонимы для LS и/или JS. :)
 
Например так:

Код
Dim doc As NotesDocument
Dim item As NotesItem
.....
strText = wdApp.ActiveDocument.Tables(1).Rows(1).Cells(1).Range.Text
Set item = doc.ReplaceItemValue( "ПолеКудаЗапоминаем", strText )
Call doc.Save( True, True )
а что если в теле документа есть другие объекты кроме текста их тоже надо по разным ртф поля надо вставлять. иногда отдельно иногда вместе с текстом.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!