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

Тема в разделе "Lotus - Программирование", создана пользователем nadezdaMP, 14 авг 2009.

  1. nadezdaMP

    nadezdaMP Гость

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

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

    Klido Гость

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

    nadezdaMP Гость

    а подробнее можно??? open.ntf - это где искать?? =)
     
  4. Klido

    Klido Гость

    openntf.org
     
  5. nadezdaMP

    nadezdaMP Гость

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
  7. nadezdaMP

    nadezdaMP Гость

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

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

    nadezdaMP Гость

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

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

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

    divankin Senjor developer

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

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

    nadezdaMP Гость

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

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    В данном случае для каждого документа doc из папки выполнить
    formulaResult = Evaluate(formula, doc)
    If cstr(formulaResult(0)) = "1" Then
    ' для данного документа условие выполнено
    ' всякий код
    End If

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

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    nadezdaMP
    Та же формула, только без select и засунутая в db.Search:
    Код (Text):
    Dim Dc As NotesDocumentCollection
    Set Dc = Db.Search(<YOUR_FORMULA>, Nothing, 0)
     
  13. nadezdaMP

    nadezdaMP Гость

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

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

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

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    1. Это правило нужно, чтобы не отрабатывали правила ниже в списке. Поскольку вы хотите сделать выполнение только по одного правила, то в этом случае не нужно делать ничего. А такая команда в лотус скрипте есть ;)

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

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

    nadezdaMP Гость

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

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

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Я думаю, что лучше применять одно, которое выберет пользователь.
     
  17. nadezdaMP

    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, подскажите кто что знает пожалуйста!)
     
Загрузка...
Похожие Темы - применить почтовое правило
  1. aaaa
    Ответов:
    3
    Просмотров:
    1.384

Поделиться этой страницей