• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Вложения

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

Вопрос следующий можно ли используя язык формул определить, вложен ли файл в конкретное rtf поле документа ?
 
G

Guest

Смысл всей этой канетели в следующем, нужно отобразить виды с разной выборкой. Критерием отбора является наличие прикрепленного файла в одном из нескольких полей.

Нашел @Attachments - можно узнать общее количество прикрепленных файлов к документу, но как определить в каких именно полях прикреплены документы ???
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Для: Влад99
В момент сохранения документа проверять на вложения и ставить пометку в специальное поле.
 
A

allex

А вот по такому примеру ...

Код:
Dim doc As NotesDocument
Dim rtitem As Variant
Dim fileCount As Integer
Const MAX = 100000
fileCount = 0	
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) _
And ( o.FileSize > MAX ) Then
fileCount = fileCount + 1
Call o.ExtractFile _
( "c:\reports\newfile" & Cstr(fileCount) )
Call o.Remove
Call doc.Save( True, True )
End If
End Forall
End If

fileCount = fileCount + 1 - таким вот образом пересчитать вложения
 
G

Guest

ОК, тогда вопрос другой, нужна так сказать "защита от дурака".
Сделать кнопку и обработчик для вложения в каждой конкретное поле не вопрос.

А если юзверь использует функцию вложить через панель самой Lotus Notes, как это можно перехватить или встроить выполнение своего кода при этом? Есть такие возможности?
 
G

Guest

<!--QuoteBegin-Medevic+11:07:2007, 10:43 -->
<span class="vbquote">(Medevic @ 11:07:2007, 10:43 )</span><!--QuoteEBegin-->зачем?
В QuerySave проверяй.
[snapback]71995" rel="nofollow" target="_blank[/snapback]​
[/quote]

написал такое
Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As Variant
Dim things As Variant

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

Set rtitem= doc.GetFirstItem("PPasport")
Forall things In rtitem.EmbeddedObjects
' If things.type = EMBED_ATTACHMENT Then
' doc.SPOrders(0)="2"
' Elseif things.type = EMBED_OBJECT Then
' doc.SPOrders(0)="2"
' Else
' doc.SPOrders(0)="3"
' End If
' Call doc.Save(True,True)
'Messagebox message
End Forall

На строчку Forall ругается Object variable not set
 
G

Guest

И так и эдак, кто нить подскажите где я туплю....
 
L

LuMee

Для: Влад99
Документ новый в момент выполнения этого кода? Если да, то RT-поле еще не создано (добро пожаловать в мир удивительных особенностей Lotus :(). Надо сначала сохранить док, потом уже проверять его RT-поля.
 
30.06.2006
141
5
BIT
0
Кроме того, ты ws не инициализировал.

<!--QuoteBegin-Влад99+11:07:2007, 12:51 -->
<span class="vbquote">(Влад99 @ 11:07:2007, 12:51 )</span><!--QuoteEBegin-->написал такое
Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As Variant
Dim things As Variant

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
[snapback]71998" rel="nofollow" target="_blank[/snapback]​
[/quote]

Либо сразу инициализируй:
Dim ws As New NotesUIWorkspace

либо потом
Dim ws As NotesUIWorkspace
...
Set ws = New NotesUIWorkspace
 
G

Guest

Кроме того, ты ws не инициализировал.
Либо сразу инициализируй:
либо потом


Привет =)

не катит и с инициализацией.

Выдает ошибку как при создании нового документа, так и при редактировании старого.

Если при создании документа поле RT не редактируется оно создается или нет в документе?
 
F

fvoice

имхо в PostSave нужно писать, а то он не увидет содержимое поля...

код немного подправил:

Код:
Sub Postsave(Source As Notesuidocument)
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem

Set doc = source.Document

Set rtitem= doc.GetFirstItem("PPasport")
Forall things In rtitem.EmbeddedObjects
If things.type = EMBED_ATTACHMENT Then
doc.SPOrders="2"
Elseif things.type = EMBED_OBJECT Then
doc.SPOrders="2"
Else
doc.SPOrders="3"
End If
Call doc.Save(True,True)
End Forall
End Sub
 
G

Guest

Сделал немного по другому:
в Postsave:

Dim s As NotesSession
Dim db As NotesDatabase
Dim agent As NotesAgent
Set s = New NotesSession
Set db = s.CurrentDatabase
Set agent = db.GetAgent("SetFlags")
Call agent.Run

в агенте проверяются все рт-поля на предметвложений и установка полей флагов при наличии хоть одного вложенного файла:
Dim s As NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim item As NotesItem
Dim rtitem As Variant
Dim k As Integer
Set s = New NotesSession
Set db = s.CurrentDatabase
Set view = db.GetView("AllProject")
k=0
Set doc = view.GetFirstDocument()
While Not(doc Is Nothing)
Set rtitem = doc.GetFirstItem( "PPassport" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
k=k+1
End If
End Forall
If k>0 Then
Call doc.ReplaceItemValue("SPPassport", "1")
Call doc.Save(True,True)
Else
Call doc.ReplaceItemValue("SPPassport", "0")
Call doc.Save(True,True)
End If
End If
Set doc = view.GetNextDocument(doc)
Wend

k=0
Set doc = view.GetFirstDocument()
While Not(doc Is Nothing)
Set rtitem = doc.GetFirstItem( "PConcept" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
k=k+1
End If
End Forall
If k>0 Then
Call doc.ReplaceItemValue("SPConcept", "1")
Call doc.Save(True,True)
Else
Call doc.ReplaceItemValue("SPConcept", "0")
Call doc.Save(True,True)
End If
End If
Set doc = view.GetNextDocument(doc)
Wend

но чевонто во первых при удалении файла из рт-поля флаг в ноль не сбрасывается
и при запуске агента самостоятельно выдает ошибку во втором блоке на строке
Forall o In rtitem.EmbeddedObjects
Подскажите где грабли?

ЗЫ ошипка в строке вываливается если в поле нет прикрепленного файло, хм собственно енто и пытаюсь проверить нето условие?!?!???
 
G

Guest

Так победил проверкой условия rtiitem.EmbeddedObjects = Null
так как если файл не присоединен в поле то и массив ссылок на встроенные объекты нулевый.
 
G

Guest

Не прокатило то что выше, в агенте определил критерий поднятия флагов по размеру рт-поля.
но терь выдает ошипку при сохранении документа типа одновременное сохранение, возникает конфликт, как нить мона это решить?
вроде все в quaresave прописал правильно, сохранил документ и вызвал агента после, почемуже конфликт??

Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim s As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim agent As NotesAgent
Set doc = Source.Document
Call doc.Save (True,True)
Set s = New NotesSession
Set db = s.CurrentDatabase
Set agent = db.GetAgent("SetFlags")
Call agent.Run
End Sub
 
G

Guest

Прописал этот же код только в процедуре Postsave. Сохранятся стало нормально.
Уважаемые гуру прошу совета корректно ли я решил проблему или все таки возможны конфликты???
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Можно всё проверить в QuerySave без всяких агентов.
Просто использовать Source.Refresh(True)
Пример для поля Body:
Код:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim rtitem As NotesRichTextItem

Call Source.Refresh(True)
Set rtitem = Source.Document.GetFirstItem("Body")

If Isempty(rtitem.EmbeddedObjects) Then 'нет объектов
End Sub
 
S

sam58

написал такое
Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As Variant
Dim things As Variant

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

Set rtitem= doc.GetFirstItem("PPasport")
Forall things In rtitem.EmbeddedObjects
' If things.type = EMBED_ATTACHMENT Then
' doc.SPOrders(0)="2"
' Elseif things.type = EMBED_OBJECT Then
' doc.SPOrders(0)="2"
' Else
' doc.SPOrders(0)="3"
' End If
' Call doc.Save(True,True)
'Messagebox message
End Forall

На строчку Forall ругается Object variable not set
между Set doc = uidoc.Document и Set rtitem= doc.GetFirstItem("PPasport") поставте для счастья строчку call uidoc.refresh(TRUE) и должно быть счастье.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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