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

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

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

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

применить почтовое правило к папке

  • Автор темы nadezdaMP
  • Дата начала
N

nadezdaMP

в оутлуке есть опция, которая позволяет применть созданное в данный момент почтовое правило ко всем, например, ранее пришедшим документам (письмам) в папке входящие (отсортировать по уведомлениям например).
В лотусе созданное в данный момент почтовое правило применяется только ко всем новым документам (новым письмам)
Можно ли сделать так, чтобы почтовое правило в лотусе применилось ко всем документам в почте?

ПРИМЕР - в почте уже 1000 писем - уведомлений, писем, и прочего - только что создано правило о сортировке - но действует только к новым письмам, которые будут приходить, как применить его к уже находящимся в почте пользолвателя?
как сделать это в лотусе? подскажите есть ли програамное решение и какое?
 
K

Klido

написать агента... или проще найти - на open.ntf наеврняка есть.. вроде видел в тамошнем модифицированном почтовом шаблоне...
 
N

nadezdaMP

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
 
N

nadezdaMP

хорошая ссылка но в этой базе того что нужно ну не нашла я, именно такого агента.

может лучше подскажете с чего писать своего агента??? =)
пока знаю что правила хранятся в профайле CalendarProfile, а дальше куда не понятно
 
N

nadezdaMP

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

второе - правила хранятся в профайле calendarprofile в полях $FilterFormula + номер правила на языке формул. можно попробовать вытащить эти условия оттуда,
но проблема - как это условие на языке формул применить ко всей почте в папке???

подскажите как быть пожалуйста
 
D

divankin

Немножко теории:
Почти все правила создаются и редактируются в папке Правила в почтовой базе. Кроме самой формулы документы правил содержат и все параметры правил. Также в почтовой базе есть скрипт с открытым кодом, который создает формулу правила. Воспользоваться самой формулой может и не получится, причем трудности могут быть не только сдекомпиляцией формулы, но и со специфичными собаками типа @MailFilterAddToFolder.

Как бы я это делал:
1. Разобраться в скрипте библиотеки Rules
2. Разобравшись в коде функции ProcessConditions(), написать код получения формулы условия по значению поля tokConditionList. Там почти ничего делать не придется.
3. Написать код выполнения действий из поля tokActionList по аналогии с функциями ProcessActions и ActionParser. При этом использовать везде где можно Evaluate. А где нельзя делать аналог на скрипте.
4. Написать код, который в указанной папке делает поиск по формуле, полученной в пункте 2.
5. Написать код, который выполняет функцию из пункта 3 с каждым найденным документом.
 
N

nadezdaMP

Немножко теории:
Почти все правила создаются и редактируются в папке Правила в почтовой базе. Кроме самой формулы документы правил содержат и все параметры правил. Также в почтовой базе есть скрипт с открытым кодом, который создает формулу правила. Воспользоваться самой формулой может и не получится, причем трудности могут быть не только сдекомпиляцией формулы, но и со специфичными собаками типа @MailFilterAddToFolder.

Как бы я это делал:
1. Разобраться в скрипте библиотеки Rules
2. Разобравшись в коде функции ProcessConditions(), написать код получения формулы условия по значению поля tokConditionList. Там почти ничего делать не придется.
3. Написать код выполнения действий из поля tokActionList по аналогии с функциями ProcessActions и ActionParser. При этом использовать везде где можно Evaluate. А где нельзя делать аналог на скрипте.
4. Написать код, который в указанной папке делает поиск по формуле, полученной в пункте 2.
5. Написать код, который выполняет функцию из пункта 3 с каждым найденным документом.

Divankin, вопрос может глупый, но как по полученной формуле поиска - которая на языке формул, сделать на лотус скрипте поиск по документам?? как это возможно, что то не понимаю, обьясните пожалуйста если можете
 
D

divankin

В данном случае для каждого документа doc из папки выполнить
formulaResult = Evaluate(formula, doc)
If cstr(formulaResult(0)) = "1" Then
' для данного документа условие выполнено
' всякий код
End If

Предполагается, что formula возвращает либо @true, либо @false, которые соответственно равны 1 и 0.

P.S. Вообще есть метод NotesDatabase.Search, который позволяет найти все документы удовлетворяющие формуле, но в нашей задаче он не подходит, потому что вам нужно применить правило не ко всем документам в базе, а лишь к документам в определенной папке.
 
O

Omh

nadezdaMP
Та же формула, только без select и засунутая в db.Search:
Код:
Dim Dc As NotesDocumentCollection
Set Dc = Db.Search(<YOUR_FORMULA>, Nothing, 0)
 
N

nadezdaMP

Спасибо!!)) появился вопрос:
1) в действиях есть команда - остановить обработку,
на которую EZ ставит @MailFilterStopProcessing. вот интересно, возможно ли и как эту команду реализовать на лотус скрипте =)

2)как лучше реализовать,
дать возможность пользователям при редактировании или создании правил - на форме (RulesDlg) ставить галочку - применить правило ко всей старой почте,
при закрытии формы проверить, если поставлена, то в отсортировать все письма в почте;
но если они это правило захотят применить и к старой и к новой поступающей почте - то как быть,
я так понимаю при закрытии формы сработает сортировка старой почты, но само правило будет действовать и ко вновь приходящей почте тоже, так?? =))

3) если в почте у пользователя, скажем так, 5 000 - 8 000 писем (бывают такие пользователи),
у него при отработке такого правила (сортировка старой почты) комп не повиснет (лотус не повесится)??
 
D

divankin

1. Это правило нужно, чтобы не отрабатывали правила ниже в списке. Поскольку вы хотите сделать выполнение только по одного правила, то в этом случае не нужно делать ничего. А такая команда в лотус скрипте есть ;)

2. Я бы сделал кнопку в папке Rules "Применить к старым письмам".
Правило можно просто выключить и оно не будет действовать на новую почту.

3. Комп и Лотус переживут. Пользователю придется подождать.
Вы можете сделать эту операцию с помощью запуска агента на сервере
Call agent.RunOnServer(Cstr(ruleDoc.NoteID))
 
N

nadezdaMP

2. Я бы сделал кнопку в папке Rules "Применить к старым письмам".
Правило можно просто выключить и оно не будет действовать на новую почту.

хорошо, то есть вы предлагаете все правила, которые есть у пользователя, сразу применить к старой почте?
или по одному, которое выберет пользователь?

ps спасибо за ответы, вы мне очень помогли))
 
D

divankin

Я думаю, что лучше применять одно, которое выберет пользователь.
 
N

nadezdaMP

Доброго времени суток всем!!!
С почтой все хорошо, но в одном месте застряла!!! помогите пожалуйста!!!
есть одна загвоздка : когда обрабатываю действие - отправить копию (только заголовки или всю)-
в библиотеке Rules_ru-RU в процедуре ActionParser выполняется
...
'//Forward to
Case "B"
Let str_tmpAppendString = |"COPYTO| + ACT_sBehavior + STR_DELIMETERSEP + Replace(ACT_sString,|:|,|,|) + |")|
s_MAINFORMULA = s_MAINFORMULA + "@SetField(""$FilterActions"";" + "@Trim($FilterActions:" + str_tmpAppendString + ");@SetField(""DisplayCopyTo_Icon"";""1"")"
...
на лотус скрипте переписала следующим образом

(беру указанное имя, проверяю - если есть в локальной адресной книге - заменяю на e-mail, если нет, оставляю таким же,в конце в цикле отсылаю все пиьсмо по указанным адресам)

str0 = ACT_sString
Dim session As New NotesSession
Set db = session.GetDatabase("", "names.nsf", False)
Set view = db.GetView("My Contacts")
sStr = Split(str1, |,|)
Forall fio In sStr
arr = Split ( fio, " ")
resim = arr (Lbound(arr))
If Ubound(arr) = 1 Then
resfam = arr (1)
Elseif Ubound(arr) = 2 Then
resfam = arr (2)
End If
If (resim <> "") And (resfam <> "") Then
res = resfam + "," + " " + resim
Elseif (resim <> "") And (resfam = "") Then
res = resim
Set docview = view.GetDocumentByKey (res, True )
If docview Is Nothing Then
result = result + fio + ","
Else
value = docview.GetItemValue ("MailAddress")(0)
result = result + value + ","
End If
End Forall
result = Left(result, Len(result)-1)

result = Split(result,",")
Forall r In result
Call indoc.Send(True, r)
End Forall

в итоге у меня отсылается по куче копий ( по три(?) копии) каждого письма - не ясно почему?? и при попытке письмо отправить выходит сообщение - вопрос
"You have requested to sign this internet message, but your current ID does not contain or does not specify an Internet sertificate for signing. Select OK to send the message anyway". жму ОК и только тогда письмо отправляется.
и как сделать рассылку только заголовков письма??

там же, в этой процедуре указаны варианты
....
'// Journal Message
Case "5"
....
'// move to database
Case "6"
....
'// don't deliver message
Case "8"
....
'// Change routing state
Case "9"
они, если смотреть через EZ , в tokactionlist не указываются, для чего они вообще тогда нужны??

SOS, подскажите кто что знает пожалуйста!)
 
Мы в соцсетях:

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